]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: show package name in 'imported and not used' error
authorRuss Cox <rsc@golang.org>
Mon, 9 Sep 2013 16:21:09 +0000 (12:21 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 9 Sep 2013 16:21:09 +0000 (12:21 -0400)
Fixes #5957.

R=ken2
CC=golang-dev
https://golang.org/cl/13250046

src/cmd/gc/lex.c
test/fixedbugs/issue5957.dir/a.go [new file with mode: 0644]
test/fixedbugs/issue5957.dir/b.go [new file with mode: 0644]
test/fixedbugs/issue5957.dir/c.go [new file with mode: 0644]
test/fixedbugs/issue5957.go [new file with mode: 0644]

index 21708aae2c05d8df192961cee8d00e8a8ce24ba9..f4a6e0503e578e299e4741e9118b2473500c5113 100644 (file)
@@ -2279,6 +2279,28 @@ yytinit(void)
        }               
 }
 
+static void
+pkgnotused(int lineno, Strlit *path, char *name)
+{
+       char *elem;
+       
+       // If the package was imported with a name other than the final
+       // import path element, show it explicitly in the error message.
+       // Note that this handles both renamed imports and imports of
+       // packages containing unconventional package declarations.
+       // Note that this uses / always, even on Windows, because Go import
+       // paths always use forward slashes.
+       elem = strrchr(path->s, '/');
+       if(elem != nil)
+               elem++;
+       else
+               elem = path->s;
+       if(strcmp(elem, name) == 0)
+               yyerrorl(lineno, "imported and not used: \"%Z\"", path);
+       else
+               yyerrorl(lineno, "imported and not used: \"%Z\" as %s", path, name);
+}
+
 void
 mkpackage(char* pkgname)
 {
@@ -2304,7 +2326,7 @@ mkpackage(char* pkgname)
                                        // errors if a conflicting top-level name is
                                        // introduced by a different file.
                                        if(!s->def->used && !nsyntaxerrors)
-                                               yyerrorl(s->def->lineno, "imported and not used: \"%Z\"", s->def->pkg->path);
+                                               pkgnotused(s->def->lineno, s->def->pkg->path, s->name);
                                        s->def = N;
                                        continue;
                                }
@@ -2312,7 +2334,7 @@ mkpackage(char* pkgname)
                                        // throw away top-level name left over
                                        // from previous import . "x"
                                        if(s->def->pack != N && !s->def->pack->used && !nsyntaxerrors) {
-                                               yyerrorl(s->def->pack->lineno, "imported and not used: \"%Z\"", s->def->pack->pkg->path);
+                                               pkgnotused(s->def->pack->lineno, s->def->pack->pkg->path, s->name);
                                                s->def->pack->used = 1;
                                        }
                                        s->def = N;
diff --git a/test/fixedbugs/issue5957.dir/a.go b/test/fixedbugs/issue5957.dir/a.go
new file mode 100644 (file)
index 0000000..7411d5f
--- /dev/null
@@ -0,0 +1,3 @@
+package surprise
+
+var X int
diff --git a/test/fixedbugs/issue5957.dir/b.go b/test/fixedbugs/issue5957.dir/b.go
new file mode 100644 (file)
index 0000000..9bc561b
--- /dev/null
@@ -0,0 +1,2 @@
+package surprise2
+
diff --git a/test/fixedbugs/issue5957.dir/c.go b/test/fixedbugs/issue5957.dir/c.go
new file mode 100644 (file)
index 0000000..42c8817
--- /dev/null
@@ -0,0 +1,12 @@
+package p
+
+import (
+       "./a" // ERROR "imported and not used: \x22a\x22 as surprise"
+       "./b" // ERROR "imported and not used: \x22b\x22 as surprise2"
+       b "./b" // ERROR "imported and not used: \x22b\x22$"
+       foo "math" // ERROR "imported and not used: \x22math\x22 as foo"
+       "fmt" // actually used
+       "strings" // ERROR "imported and not used: \x22strings\x22"
+)
+
+var _ = fmt.Printf
diff --git a/test/fixedbugs/issue5957.go b/test/fixedbugs/issue5957.go
new file mode 100644 (file)
index 0000000..891d8e6
--- /dev/null
@@ -0,0 +1,7 @@
+// errorcheckdir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ignored