mirror of
https://github.com/golang/go
synced 2024-11-18 14:54:40 -07:00
b28839e4bd
Features: More robust: silently ignore type errors in modes that don't need SSA form: describe, referrers, implements, freevars, description. This makes the tool much more robust for everyday queries. Less configuration: don't require a scope argument for all queries. Only queries that do pointer analysis need it. For the rest, the initial position is enough for importQueryPackage to deduce the scope. It now works for queries in GoFiles, TestGoFiles, or XTestGoFiles. (It no longer works for ad-hoc main packages like $GOROOT/src/net/http/triv.go) More complete: "referrers" computes the scope automatically by scanning the import graph of the entire workspace, using gorename's refactor/importgraph package. This requires two passes at loading. Faster: simplified start-up logic avoids unnecessary package loading and SSA construction (a consequence of bad abstraction) in many cases. "callgraph": remove it. Unlike all the other commands it isn't related to the current selection, and we have golang.org/x/tools/cmdcallgraph now. Internals: Drop support for long-running clients (i.e., Pythia), since godoc -analysis supports all the same features except "pointsto", and precomputes all the results so latency is much lower. Get rid of various unhelpful abstractions introduced to support long-running clients. Expand out the set-up logic for each subcommand. This is simpler, easier to read, and gives us more control, at a small cost in duplication---the familiar story of abstractions. Discard PTA warnings. We weren't showing them (nor should we). Split tests into separate directories (so that importgraph works). Change-Id: I55d46b3ab33cdf7ac22436fcc2148fe04c901237 Reviewed-on: https://go-review.googlesource.com/8243 Reviewed-by: David Crawshaw <crawshaw@golang.org>
84 lines
2.1 KiB
Plaintext
84 lines
2.1 KiB
Plaintext
|
|
|
|
ORACLE TODO
|
|
===========
|
|
|
|
General
|
|
=======
|
|
|
|
Save unsaved editor buffers into an archive and provide that to the
|
|
tools, which should act as if they were saved.
|
|
|
|
Include complete pos/end information Serial output.
|
|
But beware that sometimes a single token (e.g. +) is more helpful
|
|
than the pos/end of the containing expression (e.g. x \n + \n y).
|
|
|
|
Specific queries
|
|
================
|
|
|
|
callers, callees
|
|
|
|
Use a type-based (e.g. RTA) callgraph when a callers/callees query is
|
|
outside the analysis scope.
|
|
|
|
implements
|
|
|
|
Make it require that the selection is a type, and show only the
|
|
implements relation as it applies to that type.
|
|
|
|
definition, referrers
|
|
|
|
definition: Make it work with qualified identifiers (SelectorExpr) too.
|
|
|
|
references: Make it work on things that are implicit idents, like
|
|
import specs, perhaps?
|
|
|
|
what
|
|
|
|
Report def/ref info if available.
|
|
Editors could use it to highlight all idents of the same local var.
|
|
|
|
More tests.
|
|
|
|
pointsto
|
|
|
|
When invoked on a function Ident, we get an error.
|
|
|
|
When invoked on a named return parameter, we get an error.
|
|
|
|
describe
|
|
|
|
When invoked on a var, we want to see the type and its methods.
|
|
|
|
Split "show type" and "describe syntax" into separate commands?
|
|
|
|
peers
|
|
|
|
Permit querying from a makechan, for...range, or reflective op.
|
|
|
|
Report aliasing reflect.{Send,Recv,Close} and close() operations.
|
|
|
|
New queries
|
|
|
|
"updaters": show all statements that may update the selected lvalue
|
|
(local, global, field, etc).
|
|
|
|
"creators": show all places where an object of type T is created
|
|
(&T{}, var t T, new(T), new(struct{array [3]T}), etc.
|
|
(Useful for datatypes whose zero value is not safe)
|
|
|
|
|
|
Editor-specific
|
|
===============
|
|
|
|
Add support for "what" to .el; clean up.
|
|
|
|
Emacs: use JSON to get the raw information from the oracle. Don't
|
|
open an editor buffer for simpler queries, just jump to the result
|
|
and/or display it in the modeline.
|
|
|
|
Emacs: go-root-and-paths depends on the current buffer, so be sure to
|
|
call it from within the source file, not the *go-oracle* buffer:
|
|
the user may have switched workspaces and the oracle should run in
|
|
the new one.
|