]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: report position info in package errors
authorDhananjay Nakrani <dhananjaynakrani@gmail.com>
Sat, 26 Nov 2016 19:21:01 +0000 (11:21 -0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 29 Nov 2016 18:16:06 +0000 (18:16 +0000)
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>
src/cmd/go/go_test.go
src/cmd/go/pkg.go

index 0eef6eef0400053cc491a8a9e80962800980539f..5731066fd6adfa6d8c8d14ecd7bdba6cea4efe58 100644 (file)
@@ -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) {
index 8b31d2f64d3308d35017c5291c86cff85d577143..852a1a0db9b68ae5505b7cd982e4e0dad1820f52 100644 (file)
@@ -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)