Counterclockwise roadmap
Planned features and functionality for Counterclockwise fall into several areas.
Editing
A good editor is often nice to have. I believe with LISP variants, its a must-have. The parenthesis have to all but disappear to the developer. Since Clojure lives in the world of Java and IncredibilyRidiculousLongClassAndMethodNames, JDT features are also must-haves. In short, I've got to make an editor with the power of Emacs that hooks into the JDT! Easy, right? Top priority features:
- Basic syntax highlighting
- Basic "problems" (syntax error) highlighting
- Paren-awareness
- Auto-balancing
- Navigation, selection, evaluation shortcuts
- Goto Matching Bracket (M1+M2+P aka Ctrl+Shift+P in win32). Works with (), {},
- Goto Start of current or Previous toplevel list (M1+M2+E aka Ctrl+Shift+E)
- Goto End of current or Next toplevel list (M1+M2+A aka Ctrl+Shift+A)
- keys for emacs 'mode' (e.g. replace Shift with Alt(Meta)
- Formatting
- Java-awareness
- Auto-complete (Shift-space) context awareness of java members.
- Jump to declaration (F3)
- Outline (Ctrl-O) and type hierarchy (Ctrl-T)
- Fix import action (Ctrl-Shift-O)
- Bonus points
- Refactoring?
- Check java names against classpath
Launchers
Right now, the launcher only runs a single clojure file into the same JVM that is running the Eclipse IDE. This needs more work, we really need several launchers:
- Add a launch shortcut to run in standalone REPL.
- Run configuration for Clojure w/configurable main entry point, uses JDT .classpath and some of the launch configuration tab sets.
- What would it take to integrate Eclipse debug support?
Builders
Several scenarios which need to be addressed.
Basic Execution
Set up a classpath on a Clojure project in Eclipse, add some jars, add some Clojure files and run.
Basic (Standalone) Deployment
Export a working Clojure project to a directory or JAR that can run standlone.
OSGi
(Absolutely required for self-hosting Counterclockwise). Export a Clojure project to a JAR, with the following rules:
- Use PDE manifest/plugin editor, or reuse as much as possible.
- Classes defined with gen-class could be compiled into class files and added to the bundle's classpath.
- All clj code gets bundled as resources.
- A bundle activator could evaluate bundled clj code on startup. Perhaps it could even dynamically add generated classes to the classpath?
I need to learn more about how compiled Clojure works before this becomes clear.
Self-hosting
I would like Clojure to be self-hosting at some point -- write the plugin itself in Clojure. I am not going to attempt this until I have a decent (though maybe not complete) editing environment and rock-solid Clojure builder support. My reasons for this are several:
- Right now, I believe development of an Eclipse plugin for Clojure will be faster in Java because I need to integrate heavily with the Eclipse platform. Of course, by developing this plugin, I hope to tip the balance in favor of Clojure.
- I've never done JDT integration before or added a new language to Eclipse, and I'm thinking it'll be easier to get help on Eclipse newsgroups when I post Java code.
- Once an initial Java version is working well enough, opportunities to leverage Clojure will present themselves. Looking at the Scala plugin, I see a similar pattern of development.