diff options
author | Heschi Kreinick <heschi@google.com> | 2018-09-27 18:21:00 -0400 |
---|---|---|
committer | Heschi Kreinick <heschi@google.com> | 2018-10-16 20:20:09 +0000 |
commit | 63d31665e311d0da81db6a27060589b038fad816 (patch) | |
tree | 9b86224975d2c30df8498514745e420a7a190d9c /imports | |
parent | bf9c22dffd8ac62d291a71530049601b128dca8e (diff) | |
download | golang-x-tools-63d31665e311d0da81db6a27060589b038fad816.tar.gz |
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 <heschi@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Diffstat (limited to 'imports')
-rw-r--r-- | imports/fix.go | 6 |
1 files changed, 3 insertions, 3 deletions
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 } |