diff --git a/cmd/fiximports/main.go b/cmd/fiximports/main.go index 520cbb7e3c1..b87a7d5ad81 100644 --- a/cmd/fiximports/main.go +++ b/cmd/fiximports/main.go @@ -205,7 +205,7 @@ func fiximports(packages ...string) bool { strings.Contains(msg, "expects import") { // don't show the very errors we're trying to fix } else { - fmt.Fprintln(stderr, msg) + fmt.Fprintln(stderr, p.Error) } } @@ -467,6 +467,13 @@ type packageError struct { Err string // the error itself } +func (e packageError) Error() string { + if e.Pos != "" { + return e.Pos + ": " + e.Err + } + return e.Err +} + // list runs 'go list' with the specified arguments and returns the // metadata for matching packages. func list(args ...string) ([]*listPackage, error) { diff --git a/cmd/fiximports/main_test.go b/cmd/fiximports/main_test.go index 3ec55115d3a..2e011d3ab27 100644 --- a/cmd/fiximports/main_test.go +++ b/cmd/fiximports/main_test.go @@ -212,6 +212,7 @@ import ( test.wantStderr = strings.Replace(test.wantStderr, `testdata/src/old.com/bad/bad.go`, `testdata\src\old.com\bad\bad.go`, -1) test.wantStderr = strings.Replace(test.wantStderr, `testdata/src/fruit.io/banana/banana.go`, `testdata\src\fruit.io\banana\banana.go`, -1) } + test.wantStderr = strings.TrimSpace(test.wantStderr) // Check status code. if fiximports(test.packages...) != test.wantOK { @@ -219,12 +220,12 @@ import ( } // Compare stderr output. - if got := stderr.(*bytes.Buffer).String(); got != test.wantStderr { + if got := strings.TrimSpace(stderr.(*bytes.Buffer).String()); got != test.wantStderr { if strings.Contains(got, "vendor/golang_org/x/text/unicode/norm") { t.Skip("skipping known-broken test; see golang.org/issue/17417") } - t.Errorf("#%d. stderr: got <<%s>>, want <<%s>>", - i, stderr, test.wantStderr) + t.Errorf("#%d. stderr: got <<\n%s\n>>, want <<\n%s\n>>", + i, got, test.wantStderr) } // Compare rewrites.