From 63d31665e311d0da81db6a27060589b038fad816 Mon Sep 17 00:00:00 2001 From: Heschi Kreinick Date: Thu, 27 Sep 2018 18:21:00 -0400 Subject: go/packages: add name= query Add an implementation of name= for go list. It will be used to implement goimports and godoc-like lookups by package name. Imported a copy of the semver package from the stdlib to do version comparison, and tweaked the gopathwalk API to include a hint about what kind of source directory is being traversed. Note that the tests, despite my best efforts, are not hermetic: go list insists on doing version lookups in situations where it seems to me like it shouldn't need to. I think this implementation is ready for serious use. The one thing I'm nervous about is that it currently does a substring match when looking for a package name, so if you look up a package named "a" you will get a huge number of results. This matches goimports' behavior but I don't know if it's suitable for general use. Change-Id: I2b7f823b74571fe30d3bd9c7dfafb4e6a40df5d3 Reviewed-on: https://go-review.googlesource.com/c/138878 Run-TryBot: Heschi Kreinick Reviewed-by: Michael Matloob --- imports/fix.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'imports') diff --git a/imports/fix.go b/imports/fix.go index 75d37f894..1e3bd0958 100644 --- a/imports/fix.go +++ b/imports/fix.go @@ -526,21 +526,21 @@ func scanGoDirs() map[string]*pkg { result := make(map[string]*pkg) var mu sync.Mutex - add := func(srcDir, dir string) { + add := func(root gopathwalk.Root, dir string) { mu.Lock() defer mu.Unlock() if _, dup := result[dir]; dup { return } - importpath := filepath.ToSlash(dir[len(srcDir)+len("/"):]) + importpath := filepath.ToSlash(dir[len(root.Path)+len("/"):]) result[dir] = &pkg{ importPath: importpath, importPathShort: VendorlessPath(importpath), dir: dir, } } - gopathwalk.Walk(add, gopathwalk.Options{Debug: Debug, ModulesEnabled: false}) + gopathwalk.Walk(gopathwalk.SrcDirsRoots(), add, gopathwalk.Options{Debug: Debug, ModulesEnabled: false}) return result } -- cgit v1.2.3