Fix handling of line comments in multi-line statements.

This commit is contained in:
Florian Forster 2018-03-27 17:23:41 +02:00
parent ddff2bcdd7
commit c2326d41d7
5 changed files with 22 additions and 1 deletions

View File

@ -205,6 +205,12 @@ func (p *Parser) objectItem() (*ast.ObjectItem, error) {
}
}
// key=#comment
// val
if p.lineComment != nil {
o.LineComment, p.lineComment = p.lineComment, nil
}
// do a look-ahead for line comment
p.scan()
if len(keys) > 0 && o.Val.Pos().Line == keys[0].Pos().Line && p.lineComment != nil {

View File

@ -252,6 +252,14 @@ func (p *printer) objectItem(o *ast.ObjectItem) []byte {
}
}
// If key and val are on different lines, treat line comments like lead comments.
if o.LineComment != nil && o.Val.Pos().Line != o.Keys[0].Pos().Line {
for _, comment := range o.LineComment.List {
buf.WriteString(comment.Text)
buf.WriteByte(newline)
}
}
for i, k := range o.Keys {
buf.WriteString(k.Token.Text)
buf.WriteByte(blank)
@ -265,7 +273,7 @@ func (p *printer) objectItem(o *ast.ObjectItem) []byte {
buf.Write(p.output(o.Val))
if o.Val.Pos().Line == o.Keys[0].Pos().Line && o.LineComment != nil {
if o.LineComment != nil && o.Val.Pos().Line == o.Keys[0].Pos().Line {
buf.WriteByte(blank)
for _, comment := range o.LineComment.List {
buf.WriteString(comment.Text)

View File

@ -34,3 +34,6 @@ variable = {
foo {
bar = "fatih" // line comment 2
} // line comment 3
// comment
multiline = "assignment"

View File

@ -35,3 +35,5 @@ foo {
bar = "fatih" // line comment 2
} // line comment 3
multiline = // comment
"assignment"

View File

@ -35,3 +35,5 @@ foo {
bar = "fatih" // line comment 2
} // line comment 3
multiline = // comment
"assignment"