fmt: Add support for block nesting. (#3105)

Previously the formatter did not include support for
blocks inside other blocks. Hence the formatter could
not indent some files properly. This fixes it.

Fixes #3104

Signed-off-by: Vaibhav <vrongmeal@gmail.com>
This commit is contained in:
Vaibhav 2020-03-01 01:53:08 +05:30 committed by GitHub
parent 5fe69ac4ab
commit 71e81d262b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 6 deletions

View file

@ -29,12 +29,13 @@ func Format(body []byte) []byte {
commented,
quoted,
escaped,
block,
environ,
lineBegin bool
firstIteration = true
indentation = 0
prev,
curr,
next rune
@ -93,13 +94,13 @@ func Format(body []byte) []byte {
if curr == '}' {
if environ {
environ = false
} else if block {
block = false
} else if indentation > 0 {
indentation--
}
}
if curr == '{' {
if unicode.IsSpace(next) {
block = true
indentation++
if !unicode.IsSpace(prev) {
result.WriteRune(' ')
@ -113,8 +114,10 @@ func Format(body []byte) []byte {
continue
} else {
lineBegin = false
if block {
result.WriteRune('\t')
if indentation > 0 {
for tabs := indentation; tabs > 0; tabs-- {
result.WriteRune('\t')
}
}
}
} else {

View file

@ -29,6 +29,22 @@ b
e { f
}
g {
h {
i
}
}
j { k {
l
}
}
m {
n { o
}
}
`)
expected := []byte(`
a
@ -41,6 +57,24 @@ c {
e {
f
}
g {
h {
i
}
}
j {
k {
l
}
}
m {
n {
o
}
}
`)
testFormat(t, input, expected)
}