diff options
author | Dhananjay Nakrani <dhananjaynakrani@gmail.com> | 2016-11-26 11:21:01 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2016-11-29 18:16:06 +0000 |
commit | 3825656e285155d40f286ff9e1e5deb60cf99094 (patch) | |
tree | 3d98acf39468a717cbb6bf8f08514517369970ca | |
parent | b079869dadbb607aecbe9e2d38fbd13b89a5cc91 (diff) | |
download | go-3825656e285155d40f286ff9e1e5deb60cf99094.tar.gz go-3825656e285155d40f286ff9e1e5deb60cf99094.zip |
cmd/go: report position info in package errors
Also refactor common position filling code into a function.
Fixes #18011
Change-Id: I76528626da67a7309193fa92af1e361c8e2fcf84
Reviewed-on: https://go-review.googlesource.com/33631
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
-rw-r--r-- | src/cmd/go/go_test.go | 6 | ||||
-rw-r--r-- | src/cmd/go/pkg.go | 33 |
2 files changed, 18 insertions, 21 deletions
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 0eef6eef04..5731066fd6 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -1063,14 +1063,14 @@ func TestInternalPackagesInGOROOTAreRespected(t *testing.T) { tg := testgo(t) defer tg.cleanup() tg.runFail("build", "-v", "./testdata/testinternal") - tg.grepBoth("use of internal package not allowed", "wrong error message for testdata/testinternal") + tg.grepBoth(`testinternal(\/|\\)p\.go\:3\:8\: use of internal package not allowed`, "wrong error message for testdata/testinternal") } func TestInternalPackagesOutsideGOROOTAreRespected(t *testing.T) { tg := testgo(t) defer tg.cleanup() tg.runFail("build", "-v", "./testdata/testinternal2") - tg.grepBoth("use of internal package not allowed", "wrote error message for testdata/testinternal2") + tg.grepBoth(`testinternal2(\/|\\)p\.go\:3\:8\: use of internal package not allowed`, "wrote error message for testdata/testinternal2") } func TestRunInternal(t *testing.T) { @@ -1080,7 +1080,7 @@ func TestRunInternal(t *testing.T) { tg.setenv("GOPATH", dir) tg.run("run", filepath.Join(dir, "src/run/good.go")) tg.runFail("run", filepath.Join(dir, "src/run/bad.go")) - tg.grepStderr("use of internal package not allowed", "unexpected error for run/bad.go") + tg.grepStderr(`testdata(\/|\\)src(\/|\\)run(\/|\\)bad\.go\:3\:8\: use of internal package not allowed`, "unexpected error for run/bad.go") } func testMove(t *testing.T, vcs, url, base, config string) { diff --git a/src/cmd/go/pkg.go b/src/cmd/go/pkg.go index 8b31d2f64d..852a1a0db9 100644 --- a/src/cmd/go/pkg.go +++ b/src/cmd/go/pkg.go @@ -371,10 +371,8 @@ func loadImport(path, srcDir string, parent *Package, stk *importStack, importPo err = fmt.Errorf("code in directory %s expects import %q", bp.Dir, bp.ImportComment) } p.load(stk, bp, err) - if p.Error != nil && p.Error.Pos == "" && len(importPos) > 0 { - pos := importPos[0] - pos.Filename = shortPath(pos.Filename) - p.Error.Pos = pos.String() + if p.Error != nil && p.Error.Pos == "" { + p = setErrorPos(p, importPos) } if origPath != cleanImport(origPath) { @@ -388,11 +386,11 @@ func loadImport(path, srcDir string, parent *Package, stk *importStack, importPo // Checked on every import because the rules depend on the code doing the importing. if perr := disallowInternal(srcDir, p, stk); perr != p { - return perr + return setErrorPos(perr, importPos) } if mode&useVendor != 0 { if perr := disallowVendor(srcDir, origPath, p, stk); perr != p { - return perr + return setErrorPos(perr, importPos) } } @@ -402,12 +400,7 @@ func loadImport(path, srcDir string, parent *Package, stk *importStack, importPo ImportStack: stk.copy(), Err: fmt.Sprintf("import %q is a program, not an importable package", path), } - if len(importPos) > 0 { - pos := importPos[0] - pos.Filename = shortPath(pos.Filename) - perr.Error.Pos = pos.String() - } - return &perr + return setErrorPos(&perr, importPos) } if p.local && parent != nil && !parent.local { @@ -416,17 +409,21 @@ func loadImport(path, srcDir string, parent *Package, stk *importStack, importPo ImportStack: stk.copy(), Err: fmt.Sprintf("local import %q in non-local package", path), } - if len(importPos) > 0 { - pos := importPos[0] - pos.Filename = shortPath(pos.Filename) - perr.Error.Pos = pos.String() - } - return &perr + return setErrorPos(&perr, importPos) } return p } +func setErrorPos(p *Package, importPos []token.Position) *Package { + if len(importPos) > 0 { + pos := importPos[0] + pos.Filename = shortPath(pos.Filename) + p.Error.Pos = pos.String() + } + return p +} + func cleanImport(path string) string { orig := path path = pathpkg.Clean(path) |