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.