tools/cmd
Josh Bleecher Snyder 1e1ec013b9 cmd/guru: optimize global pkglevel referrer queries
Global, package-level queries can be done without typechecking.
This makes it significantly cheaper.

Instead of typechecking, consider all packages that directly
import the query package. In each of those packages, filter out:

* files that don't contain the query name
* files that don't import the query package

Fully parse the remaining files and look for selector expressions
matching the query package and name.

There are a few twists (dot imports, the query package, xtests).
They are described, along with how they are handled,
in the large comment at the beginning of globalReferrersPkgLevel.

On my machine and GOPATH, this reduces typical time
needed to find referrers to encoding/json.MarshalIndent
from (roughly)

real	0m39.946s
user	2m27.844s
sys	0m54.774s

to (roughly)

real	0m5.687s
user	0m15.793s
sys	0m16.001s

The processing of packages could be parallelized;
that is left for a future change, to ease reviewing.

Benefits from that will be limited;
building the reverse import graph accounts for 73%
of the runtime, and that is dominated by syscalls.

Optimization idea from Alan Donovan.

This work supported by Sourcegraph.

Change-Id: Ib19e25fcdcb27673fb03d7300dba2a53198901ad
Reviewed-on: https://go-review.googlesource.com/97800
Reviewed-by: Alan Donovan <adonovan@google.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-05-01 18:10:48 +00:00
..
benchcmp benchmark/parser, cmd/benchcmp: improve names of exported identifiers 2015-01-15 01:28:17 +00:00
bundle cmd/bundle: include non-associated comments 2017-07-07 17:27:36 +00:00
callgraph cmd/callgraph: fix "import path of the enclosing package" example in usage 2017-08-08 14:46:45 +00:00
compilebench cmd/compilebench: use go command in goroot, not environment 2017-05-09 19:43:46 +00:00
cover cmd/cover: check os.Create error im html output 2017-01-08 00:00:17 +00:00
digraph tools: add import comments. 2014-12-09 22:42:16 +00:00
eg cmd/eg: Gofmt eg's dry-run output. 2017-07-13 04:09:46 +00:00
fiximports cmd/godoc, cmd/fiximports: fix or skip failing tests at tip 2016-10-12 15:24:30 +00:00
getgo godoc,cmd/getgo: update download links to dl.google.com 2018-01-25 02:56:30 +00:00
go-contrib-init cmd/go-contrib-init: exit with an error if package install fails 2017-07-17 03:20:55 +00:00
godex cmd/godex: handle printing of type aliases 2017-01-11 21:17:45 +00:00
godoc blog: serve relative links when run locally 2018-04-13 18:10:15 +00:00
goimports cmd/goimports: support multiple comma-separated imports in -local flag 2018-03-05 19:26:41 +00:00
gomvpkg go/buildutil: TagsFlag provides a flag.Value for setting build.Context.BuildTags from -tags flag. 2015-04-23 14:10:21 +00:00
gorename cmd/gorename: fix test failure formatting. 2017-11-06 14:18:16 +00:00
gotype gotype: fix default importer for Go 1.8. 2017-04-10 16:28:46 +00:00
goyacc cmd/goyacc: fix an off-by-one error in lineno tracking 2018-05-01 01:19:15 +00:00
guru cmd/guru: optimize global pkglevel referrer queries 2018-05-01 18:10:48 +00:00
heapview cmd/heapview: look for tools repository in all GOPATH entries 2017-04-10 18:12:01 +00:00
html2article x/tools/cmd/html2article: remove unused functions 2017-03-01 14:53:04 +00:00
present cmd/present: display slide numbers 2018-04-13 16:54:21 +00:00
ssadump go/ssa/interp: drop interpretation of "testing" package 2017-11-28 21:57:06 +00:00
stress cmd/stress: flush out Usage doc 2017-06-12 21:12:06 +00:00
stringer cmd/stringer: add flag to use line comment as str 2017-12-19 23:05:15 +00:00
tip cmd/tip: update talks hash to pull in e00c182 2018-02-20 22:33:34 +00:00
toolstash cmd/toolstash: don't try comparing "asm -V=full" output. 2017-11-02 22:54:56 +00:00