Overview of current feature base

Documentation lookup

Task: Show the documentation for a given symbol. The symbol might resolve
to either a var or a class. For a class the javadoc should be shown.

Input: a symbol to resolve and a namespace in which the resolution has
to happen

Namespace browsing

Task: Provide information about active namespaces for front-end navigation.

Refactoring

Everything and anything we can do to automate code changes.

Show source code

Task: A relaxed version of the above. Shows the source code for a Var.
Instead of jumping to the location. This also works if the source code is
only available in a jar file.

Input: a symbol to resolve and a namespace in which the resolution has
to happen

Implemented by: vimclojure

Code evaluation

Task: Evaluate a provided form in the REPL server.

Input: A form to expand and a namespace in which the expansion has to happen

Macro expansion

Task: Expand a provided form via macroexpand/macroexpand-1.

Input: A form to expand and a namespace in which the expansion has to happen

Implemented by: swank-clojure, vimclojure

Omni completion

Task: Complete a given symbol. Various optimisations may be done to
suggest only useful completions depending on context.

Input: the namespace edited, a partial symbol to be completed

Dynamic indenting

Task: Support indentation of def or with- style macros dynamically based
on some heuristic. eg. "[]" in the argument vector.

Input: A namespace to scan for information

Implemented by: swank-clojure

Dynamic highlighting

Task: Support highlighting of required namespaces dynamically.

Input: A namespaces to scan for information

Paredit

Task: Allow structure aware editing.

A lot of work already done by Laurent (~ 80% of paredit.el commands)