caddyfile: Minor fixes to the formatter

This commit is contained in:
Matthew Holt 2020-03-29 13:53:00 -06:00
parent 178ba024fe
commit deba26d225
No known key found for this signature in database
GPG key ID: 2A349DD577D586A5
2 changed files with 23 additions and 6 deletions

View file

@ -39,6 +39,7 @@ func Format(input []byte) []byte {
openBrace bool // whether current word/token is or started with open curly brace openBrace bool // whether current word/token is or started with open curly brace
openBraceWritten bool // if openBrace, whether that brace was written or not 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 newLines int // count of newlines consumed
@ -145,10 +146,11 @@ func Format(input []byte) []byte {
openBrace = false openBrace = false
if beginningOfLine { if beginningOfLine {
indent() indent()
} else { } else if !openBraceSpace {
write(' ') write(' ')
} }
write('{') write('{')
openBraceWritten = true
nextLine() nextLine()
newLines = 0 newLines = 0
nesting++ nesting++
@ -158,6 +160,10 @@ func Format(input []byte) []byte {
case ch == '{': case ch == '{':
openBrace = true openBrace = true
openBraceWritten = false openBraceWritten = false
openBraceSpace = spacePrior && !beginningOfLine
if openBraceSpace {
write(' ')
}
continue continue
case ch == '}' && (spacePrior || !openBrace): case ch == '}' && (spacePrior || !openBrace):
@ -183,7 +189,7 @@ func Format(input []byte) []byte {
if beginningOfLine { if beginningOfLine {
indent() indent()
} }
if nesting == 0 && last == '}' { if nesting == 0 && last == '}' && beginningOfLine {
nextLine() nextLine()
nextLine() nextLine()
} }
@ -193,9 +199,6 @@ func Format(input []byte) []byte {
} }
if openBrace && !openBraceWritten { if openBrace && !openBraceWritten {
if !beginningOfLine {
write(' ')
}
write('{') write('{')
openBraceWritten = true openBraceWritten = true
} }

View file

@ -287,10 +287,24 @@ bar "{\"key\":34}"`,
expect: `foo \"literal\"`, expect: `foo \"literal\"`,
}, },
{ {
description: "simple placeholders", description: "simple placeholders as standalone tokens",
input: `foo {bar}`, input: `foo {bar}`,
expect: `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, // the formatter should output a trailing newline,
// even if the tests aren't written to expect that // even if the tests aren't written to expect that