diff --git a/caddyconfig/caddyfile/formatter.go b/caddyconfig/caddyfile/formatter.go index bf70d117..2c97f3b0 100644 --- a/caddyconfig/caddyfile/formatter.go +++ b/caddyconfig/caddyfile/formatter.go @@ -39,6 +39,7 @@ func Format(input []byte) []byte { openBrace bool // whether current word/token is or started with open curly brace openBraceWritten bool // if openBrace, whether that brace was written or not + openBraceSpace bool // whether there was a non-newline space before open brace newLines int // count of newlines consumed @@ -145,10 +146,11 @@ func Format(input []byte) []byte { openBrace = false if beginningOfLine { indent() - } else { + } else if !openBraceSpace { write(' ') } write('{') + openBraceWritten = true nextLine() newLines = 0 nesting++ @@ -158,6 +160,10 @@ func Format(input []byte) []byte { case ch == '{': openBrace = true openBraceWritten = false + openBraceSpace = spacePrior && !beginningOfLine + if openBraceSpace { + write(' ') + } continue case ch == '}' && (spacePrior || !openBrace): @@ -183,7 +189,7 @@ func Format(input []byte) []byte { if beginningOfLine { indent() } - if nesting == 0 && last == '}' { + if nesting == 0 && last == '}' && beginningOfLine { nextLine() nextLine() } @@ -193,9 +199,6 @@ func Format(input []byte) []byte { } if openBrace && !openBraceWritten { - if !beginningOfLine { - write(' ') - } write('{') openBraceWritten = true } diff --git a/caddyconfig/caddyfile/formatter_test.go b/caddyconfig/caddyfile/formatter_test.go index 8f2a0126..25bd7fa8 100644 --- a/caddyconfig/caddyfile/formatter_test.go +++ b/caddyconfig/caddyfile/formatter_test.go @@ -287,10 +287,24 @@ bar "{\"key\":34}"`, expect: `foo \"literal\"`, }, { - description: "simple placeholders", + description: "simple placeholders as standalone tokens", input: `foo {bar}`, expect: `foo {bar}`, }, + { + description: "simple placeholders within tokens", + input: `foo{bar} foo{bar}baz`, + expect: `foo{bar} foo{bar}baz`, + }, + { + description: "placeholders and malformed braces", + input: `foo{bar} foo{ bar}baz`, + expect: `foo{bar} foo { + bar +} + +baz`, + }, } { // the formatter should output a trailing newline, // even if the tests aren't written to expect that