Commit 7d7e839a authored by David Tolpin's avatar David Tolpin Committed by Robert Griesemer

go/printer: print parenthesized declarations if len(d.Specs) > 1

Parenthesized declaration must be printed if len(d.Specs) > 1 even if d.Lparen==token.NoPos. This happens if the node tree is created programmatically. Otherwise, all but the first specifications just silently disappear from the output.

Change-Id: I17ab24bb1cd56fe1e611199698535ca60a97f5ea
GitHub-Last-Rev: 2f168dc7ad4a29149685efc70f180987523271e4
GitHub-Pull-Request: golang/go#28533
Reviewed-on: https://go-review.googlesource.com/c/146657
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
parent 0b79dde1
......@@ -1537,7 +1537,7 @@ func (p *printer) genDecl(d *ast.GenDecl) {
p.setComment(d.Doc)
p.print(d.Pos(), d.Tok, blank)
if d.Lparen.IsValid() {
if d.Lparen.IsValid() || len(d.Specs) > 1 {
// group of parenthesized declarations
p.print(d.Lparen, token.LPAREN)
if n := len(d.Specs); n > 0 {
......
......@@ -736,3 +736,35 @@ func TestIssue11151(t *testing.T) {
t.Errorf("%v\norig: %q\ngot : %q", err, src, got)
}
}
// If a declaration has multiple specifications, a parenthesized
// declaration must be printed even if Lparen is token.NoPos.
func TestParenthesizedDecl(t *testing.T) {
// a package with multiple specs in a single declaration
const src = "package p; var ( a float64; b int )"
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "", src, 0)
// print the original package
var buf bytes.Buffer
err = Fprint(&buf, fset, f)
if err != nil {
t.Fatal(err)
}
original := buf.String()
// now remove parentheses from the declaration
for i := 0; i != len(f.Decls); i++ {
f.Decls[i].(*ast.GenDecl).Lparen = token.NoPos
}
buf.Reset()
err = Fprint(&buf, fset, f)
if err != nil {
t.Fatal(err)
}
noparen := buf.String()
if noparen != original {
t.Errorf("got %q, want %q", noparen, original)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment