Commit 829cc349 authored by Robert Griesemer's avatar Robert Griesemer

go/format: handle whitespace-only input correctly

Applied identical change to cmd/gofmt/internal.go.

Fixes #11275.

Change-Id: Icb4bf0460c94c9e2830dd0d62c69376774cbda30
Reviewed-on: https://go-review.googlesource.com/15154Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
parent a4fc3512
...@@ -149,7 +149,17 @@ func format( ...@@ -149,7 +149,17 @@ func format(
if err != nil { if err != nil {
return nil, err return nil, err
} }
res = append(res, sourceAdj(buf.Bytes(), cfg.Indent)...) out := sourceAdj(buf.Bytes(), cfg.Indent)
// If the adjusted output is empty, the source
// was empty but (possibly) for white space.
// The result is the incoming source.
if len(out) == 0 {
return src, nil
}
// Otherwise, append output to leading space.
res = append(res, out...)
// Determine and append trailing space. // Determine and append trailing space.
i = len(src) i = len(src)
......
...@@ -72,6 +72,7 @@ func TestSource(t *testing.T) { ...@@ -72,6 +72,7 @@ func TestSource(t *testing.T) {
} }
// Test cases that are expected to fail are marked by the prefix "ERROR". // Test cases that are expected to fail are marked by the prefix "ERROR".
// The formatted result must look the same as the input for successful tests.
var tests = []string{ var tests = []string{
// declaration lists // declaration lists
`import "go/format"`, `import "go/format"`,
...@@ -91,11 +92,23 @@ var tests = []string{ ...@@ -91,11 +92,23 @@ var tests = []string{
"\n\t\t\n\n\t\t\tx := 0\n\t\t\tconst s = `\n\t\tfoo\n`\n\n\n", // no indentation removed inside raw strings "\n\t\t\n\n\t\t\tx := 0\n\t\t\tconst s = `\n\t\tfoo\n`\n\n\n", // no indentation removed inside raw strings
// comments // comments
"i := 5 /* Comment */", // Issue 5551. "/* Comment */",
"\ta()\n//line :1", // Issue 11276. "\t/* Comment */ ",
"\t//xxx\n\ta()\n//line :2", // Issue 11276. "\n/* Comment */ ",
"\ta() //line :1\n\tb()\n", // Issue 11276. "i := 5 /* Comment */", // issue #5551
"x := 0\n//line :1\n//line :2", // Issue 11276. "\ta()\n//line :1", // issue #11276
"\t//xxx\n\ta()\n//line :2", // issue #11276
"\ta() //line :1\n\tb()\n", // issue #11276
"x := 0\n//line :1\n//line :2", // issue #11276
// whitespace
"", // issue #11275
" ", // issue #11275
"\t", // issue #11275
"\t\t", // issue #11275
"\n", // issue #11275
"\n\n", // issue #11275
"\t\n", // issue #11275
// erroneous programs // erroneous programs
"ERROR1 + 2 +", "ERROR1 + 2 +",
......
...@@ -149,7 +149,17 @@ func format( ...@@ -149,7 +149,17 @@ func format(
if err != nil { if err != nil {
return nil, err return nil, err
} }
res = append(res, sourceAdj(buf.Bytes(), cfg.Indent)...) out := sourceAdj(buf.Bytes(), cfg.Indent)
// If the adjusted output is empty, the source
// was empty but (possibly) for white space.
// The result is the incoming source.
if len(out) == 0 {
return src, nil
}
// Otherwise, append output to leading space.
res = append(res, out...)
// Determine and append trailing space. // Determine and append trailing space.
i = len(src) i = len(src)
......
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