Porting Ceylon IDE to IntelliJ
We’ve had many questions about developing Ceylon in IntelliJ IDEA, so I thought it would be worth a quick status update.
TL;DR: The screenshots are below.
As you might know, Ceylon already has the most feature rich IDE of any modern language for the JVM, with some features that even the Java IDE for Eclipse doesn’t have. But IntelliJ users don’t like having to switch to Eclipse when they code Ceylon, so a few months ago we got serious about porting Ceylon IDE to IntelliJ. Bastien Jansen is working on this fulltime, together with David Festal from SERLI.
The approach they’re taking is to refactor reusable functionality of Ceylon IDE out into a separate project ceylon-ide-common. Simultaneously they’re rewriting the common code in Ceylon (which David reports is really helping simplify and improve the code). Then this “abstracted” code is reused in the ceylon-ide-intellij project—which is also being written in Ceylon—and in ceylon-ide-eclipse. Thus,
ceylon-ide-common gives us a common foundation for both IDEs, and enables us to get some really sophisticated functionality into the IntelliJ IDE very quickly.
Even better, once
ceylon-ide-common is stabilized, we can reuse it elsewhere, for example, in the Web IDE, or in the new (experimental) plugin for NetBeans. Bastien was able to add autocompletion to the experimental Netbeans plugin in about 2-3 hours.
This also all demonstrates just how well Ceylon’s Java interop works in practice. Here we have Java calling Ceylon and Ceylon calling back to Java all over the place!
The IntelliJ plugin isn’t really usable just yet, since David is still working on abstraction of the Ceylon IDE incremental builder, but we expect to have a first release in a handful of months.
Ceylon IDE for IntelliJ already features completion:
Including linked mode argument completion:
Outline view and hover:
Live error reporting:
Much more functionality is coming soon!
|Reference:||Porting Ceylon IDE to IntelliJ from our JCG partner Gavin King at the Ceylon Team blog blog.|