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.