cmd/gc: show package name in 'imported and not used' error

Fixes #5957.

R=ken2
CC=golang-dev
https://golang.org/cl/13250046
This commit is contained in:
Russ Cox 2013-09-09 12:21:09 -04:00
parent a7d8b35aac
commit 8d530f2472
5 changed files with 48 additions and 2 deletions

View 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;

View file

@ -0,0 +1,3 @@
package surprise
var X int

View file

@ -0,0 +1,2 @@
package surprise2

View file

@ -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

View file

@ -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