This is an experimental fork of LightTable which is going to diverge into a separate project.
I'm going to build semantic ClojureScript IDE with first-class structural editor written in ClojureScript.
Building a decent code editor is a huge task. Building something which is far better than what we have today is a moon shot.
Instead of starting from scratch I decided to fork LightTable, start with its design, dramatically limit its scope, clean it up and incrementally rewrite its components while adding my own pieces.
LightTable design is great and Chris made a lot of good decisions:
- use web technologies (Atom's Electron)
- use a lisp which compiles down to JavaScript (ClojureScript)
- the idea of IDE as a value implemented as BOT design pattern
IMO, the problem with LightTable is that it had too big ambitions. It tried to become a general IDE and serve different groups of developers on its crusade to take over the world. Being endlessly extensible for various language plugins is a great sell but it adds tons of complexity and support burden. Also later GitHub announced the Atom editor and it took wind out of LightTable's sails because it declared similar mission and cared for similar groups of developers.
That is my explanation why Chris and his team pivoted and switched their efforts beyond LightTable. As expected, LightTable development dwindled since then.
-
limit the scope:
- ClojureScript only (even no Clojure support)
- Mac only
- no plugins (fork instead!)
-
reimplement:
- BOT pattern shall be incrementally replaced with re-frame pattern
- HTML UI shall be rendered with reagent + react
- Electron APIs/state shall be driven by react-native-like library
- IDE as a value, with no compromises => keep all state in one true source of truth: app-db
- extract all interaction with outer world into an onion layer (io.js interop, incoming electron events, incoming DOM events)
-
implement ClojureScript IDE:
- edit trees, not text
- flense-style structural editor at the heart, leverage rewrite-cljs
- animated code editing/transformations
- Crockford's context coloring
- experiment with (pseudo) 3D view to visualize more context info
- imagine Firefox's 3d view or reveal tool for your code forms
- (future) imagine developing using Oculus when VR resolution allows
- auto-separate comments and code
- our displays are too wide these days, present a single source file as multiple columns (and keep two-way mapping while editing)
- smalltalk-style namespace browser
- basically it will generate something like this on the fly from namespaces participating in your project
- github/clojars integration
- birds-eye overview of all your project dependencies and their evolution over time (by polling github for new commits)
- edit trees, not text
- Support for other platforms
- Support Clojure
Until recently I used to develop hack popular Mac apps TotalFinder and TotalTerminal.
Unfortunately due to introduction of System Integrity Protection, those apps will be no longer viable under OS X 10.11 (El Capitan).
The good news is that now I have free hands to start something new.
I have been always interested in building web apps and tools around them. Recently I got attracted by ClojureScript development. Clojure and ClojureScript communities are great, but still pretty small. One contributing reason is that the tooling is rough and needs improvements. My goal is to help with that.
Recently I have published cljs-devtools which was desperately needed for my workflow while I was developing experimental mid-sized Faceboard project (Om-based ClojureScript SPA).
It is all history now, but back in times I have developed and maintained several popular Firebug plugins FireQuery, FireLogger, FireRainbow and XRefresh.
Also back in 2009, I have applied to join Mozilla and their Bespin team. Didn't join them back then, but this could be a proof that I was an early believer. The world needed a new hackable web development editor built using web technologies. Yes, it was too early and many early attempts had to fail maybe to pave the way for the Atom editor.
I believe - that in the long term - ClojureScript developers will need their own editor built using ClojureScript technologies and with Lisp nature in mind. Let's build that foundation today.
This is an experimental project. I can decide to scrap it anytime.
Also please note that I understand that you have opinions, needs and pressing issues, but this is not a commercial product. No support is provided whatsoever.
All files in this project are under the LICENSE.md license unless otherwise stated in the file or by a dependency's license file.
Very cool project!
Have you considered how bootstrapped ClojureScript could be leveraged? Especially I am thinking about how it could be used to improve dev workflow à la figwheel.