From 850ba653f716f096ad4faa40cf6d0cc20c4dbcb9 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 14 Apr 2015 03:53:55 +0000 Subject: [PATCH] Revert "cmd/vet: switch to go/types from std repo" This reverts commit 5b72e8e9bb5dc77f14e0a58f15c95b64b231e87d. Change-Id: I75270045022d69444b7812f290cdd5861af13feb Reviewed-on: https://go-review.googlesource.com/8915 Reviewed-by: Robert Griesemer --- cmd/vet/copylock.go | 3 ++- cmd/vet/main.go | 4 +++- cmd/vet/nilfunc.go | 3 ++- cmd/vet/print.go | 5 +++-- cmd/vet/shadow.go | 3 ++- cmd/vet/shift.go | 5 +++-- cmd/vet/types.go | 18 +++++++++--------- cmd/vet/unsafeptr.go | 3 ++- cmd/vet/unused.go | 8 +++++--- 9 files changed, 31 insertions(+), 21 deletions(-) diff --git a/cmd/vet/copylock.go b/cmd/vet/copylock.go index 95cecc79..e8a6820f 100644 --- a/cmd/vet/copylock.go +++ b/cmd/vet/copylock.go @@ -11,7 +11,8 @@ import ( "fmt" "go/ast" "go/token" - "go/types" + + "golang.org/x/tools/go/types" ) func init() { diff --git a/cmd/vet/main.go b/cmd/vet/main.go index abc39fcf..16b8842c 100644 --- a/cmd/vet/main.go +++ b/cmd/vet/main.go @@ -15,12 +15,14 @@ import ( "go/parser" "go/printer" "go/token" - "go/types" "io/ioutil" "os" "path/filepath" "strconv" "strings" + + _ "golang.org/x/tools/go/gcimporter" + "golang.org/x/tools/go/types" ) // TODO: Need a flag to set build tags when parsing the package. diff --git a/cmd/vet/nilfunc.go b/cmd/vet/nilfunc.go index bfe05e33..fa1bac7e 100644 --- a/cmd/vet/nilfunc.go +++ b/cmd/vet/nilfunc.go @@ -12,7 +12,8 @@ package main import ( "go/ast" "go/token" - "go/types" + + "golang.org/x/tools/go/types" ) func init() { diff --git a/cmd/vet/print.go b/cmd/vet/print.go index 58b4fae6..b20d935e 100644 --- a/cmd/vet/print.go +++ b/cmd/vet/print.go @@ -10,12 +10,13 @@ import ( "bytes" "flag" "go/ast" - "go/exact" "go/token" - "go/types" "strconv" "strings" "unicode/utf8" + + "golang.org/x/tools/go/exact" + "golang.org/x/tools/go/types" ) var printfuncs = flag.String("printfuncs", "", "comma-separated list of print function names to check") diff --git a/cmd/vet/shadow.go b/cmd/vet/shadow.go index b3f362a0..34e5db90 100644 --- a/cmd/vet/shadow.go +++ b/cmd/vet/shadow.go @@ -34,7 +34,8 @@ import ( "flag" "go/ast" "go/token" - "go/types" + + "golang.org/x/tools/go/types" ) var strictShadowing = flag.Bool("shadowstrict", false, "whether to be strict about shadowing; can be noisy") diff --git a/cmd/vet/shift.go b/cmd/vet/shift.go index 7898d281..2385c23f 100644 --- a/cmd/vet/shift.go +++ b/cmd/vet/shift.go @@ -10,9 +10,10 @@ package main import ( "go/ast" - "go/exact" "go/token" - "go/types" + + "golang.org/x/tools/go/exact" + "golang.org/x/tools/go/types" ) func init() { diff --git a/cmd/vet/types.go b/cmd/vet/types.go index 57d1b5fd..89e9989d 100644 --- a/cmd/vet/types.go +++ b/cmd/vet/types.go @@ -8,14 +8,14 @@ package main import ( "go/ast" - "go/importer" "go/token" - "go/types" + + "golang.org/x/tools/go/types" ) -// The stdImporter implements importing from package files created by -// the compiler that built this binary. -var stdImporter = importer.Default() +// imports is the canonical map of imported packages we need for typechecking. +// It is created during initialization. +var imports = make(map[string]*types.Package) var ( stringerMethodType = types.New("func() string") @@ -35,7 +35,7 @@ func init() { // path.name, and adds the respective package to the imports map // as a side effect. func importType(path, name string) types.Type { - pkg, err := stdImporter.Import(path) + pkg, err := types.DefaultImport(imports, path) if err != nil { // This can happen if fmt hasn't been compiled yet. // Since nothing uses formatterType anyway, don't complain. @@ -56,12 +56,12 @@ func (pkg *Package) check(fs *token.FileSet, astFiles []*ast.File) error { pkg.spans = make(map[types.Object]Span) pkg.types = make(map[ast.Expr]types.TypeAndValue) config := types.Config{ + // We provide the same packages map for all imports to ensure + // that everybody sees identical packages for the given paths. + Packages: imports, // By providing a Config with our own error function, it will continue // past the first error. There is no need for that function to do anything. Error: func(error) {}, - // We use the same importer for all imports to ensure - // that everybody sees identical packages for the given paths. - Importer: stdImporter, } info := &types.Info{ Selections: pkg.selectors, diff --git a/cmd/vet/unsafeptr.go b/cmd/vet/unsafeptr.go index 9ca27dce..ca15f725 100644 --- a/cmd/vet/unsafeptr.go +++ b/cmd/vet/unsafeptr.go @@ -9,7 +9,8 @@ package main import ( "go/ast" "go/token" - "go/types" + + "golang.org/x/tools/go/types" ) func init() { diff --git a/cmd/vet/unused.go b/cmd/vet/unused.go index 42876385..cbec9bb8 100644 --- a/cmd/vet/unused.go +++ b/cmd/vet/unused.go @@ -11,8 +11,10 @@ import ( "flag" "go/ast" "go/token" - "go/types" "strings" + + "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/go/types" ) var unusedFuncsFlag = flag.String("unusedfuncs", @@ -54,11 +56,11 @@ func initUnusedFlags() { } func checkUnusedResult(f *File, n ast.Node) { - call, ok := unparen(n.(*ast.ExprStmt).X).(*ast.CallExpr) + call, ok := astutil.Unparen(n.(*ast.ExprStmt).X).(*ast.CallExpr) if !ok { return // not a call statement } - fun := unparen(call.Fun) + fun := astutil.Unparen(call.Fun) if f.pkg.types[fun].IsType() { return // a conversion, not a call