A Proper IDE for the new Lucee scripting language

Today on the Lucee mailing list I read a post that JetBrains would likely be removing CFML from its list of supported languages in their IntelliJ IDE. The OP ( Dave Merill ) also brought up the idea that someone in the community pick up support for the CFML plugin in IntelliJ, which prompted the expected questions of who would pay to support the work. The discussion got me thinking about what it would take to support a commercial IDE for CFML/Lucee, given the long list of free editors in the market that support CFML in some form.

Several years ago, I paid Adobe for CFBuilder ( and FlexBuilder for that matter ), as I had paid Macromedia for CF Studio, and Homesite back in the days when we had to explain to people what the Internet was. Since then I have largely stuck to the CFEclipse plugin for Eclipse ( thanks to this fine bunch of people for contributing to CFEclipse over the years ) and been happy with the results.

Granted, the trend in programming seems to be going back to the roots with interpreted languages. Lots of people seem to be using Sublime, Brackets, Atom, or some other lightweight text editor. I still prefer the extra features that a proper IDE brings, so what would it take for me to buy a license for a new text editor in the market?


Lucee FTW

It should support Lucee, which means it will support the Lucee CFML dialect and the new Lucee 5 dialect. It should support ACF as well, but Adobe has its own IDE ( CFBuilder ) to support their product. If there is anything the last twenty years of software development have taught me, it is that open source languages/servers have staying power. There has been plenty of discussion about how long Adobe will support ACF ( indefinitely, I hope, as it is a mature product that lots and lots of people rely on ). Even if Adobe drops ACF, Lucee will still be around, ( as will Railo, though in what form? ).

 

IDE = Integrated Development Environment

A proper IDE shoud allow a programmer to build, debug, and run an application entirely within the IDE. That is the entire point of the name, and yet CFML has never had a really proper IDE because the server is not integrated into the IDE. Yes, it is already possible to embed  a CFML server into Eclipse, but a commercial IDE would have very slick integration built-in. I

 

Bring Forth the Box

Integrating CommandBox seems like a good way to get as integrated server. CommandBox is running on Railo right now but should be upgraded soon to Lucee. Integrating the server isn't by itself enough, though. I want more features.


Administrator Integration

Pull administrator features into native areas of the IDE. Defining datasources, turning on/off caching, viewing logs, changing debugging settings, and lots of other things should be inside the IDE. Yes, it's just right there in a web page behind a login, but really, why shouldn't I have a panel in my IDE that allows me to view and configure datasources, or one that lets me add plugins to the Lucee core?  A button bar to change common configuration settings like turning on/off debugging.


Debugging

A proper debugger with breakpoints and call stacks. Old hat for compiled languages, and CFStudio already has this feature ( though I have only met a handful of people that ever got it to work, or cared enough to bother with it ). A real debugger, far easier to configure than CFStudio and slick enough to integrate current browsers so I could do server and client-side debugging together. I will probably pop the browser debugger into a separate window, but being able to debug them both is essential in a world of mobile and RIAs.


Live Deploy

The IDE should provide a way to bundle a CFML app for deployment. Another standard feature in the IDE world. A deployment wizard that allows me to tweak a few settings and produce exactly the kind of deployment I need, be it a WAR, EAR, or an entire Lucee server with the app bundled inside it.


REPL

CommandBox already has a REPL, so integrating should be a cinch. Right? :-) Why use a REPL? Because it makes testing small bits of code quite easy. Even better, if the REPL were running in a specific project context, it would solve the issue of not being able to easily instantiate components in the REPL because its internal path differs from the project path. I have no idea how many test pages I've written just so I could instantiate a CFC or Java class, pass it a few parameters and get some bit of code sorted out. I've written wrappers for many Java classes/APIs, and they almost invariably take some tweaking of the code to get right. Here are a few:

  • OpenLDAP
  • Crypto libraries
  • MongoDB
  • Email services
  • Payment gateways

A context-aware REPL would be a tremendous boon for situations like these.


Package Management

CommandBox even has a package manager. It is young and doesn't yet include a lot of stuff from the community ( integration with cflib.org ? ), but it is there and it works.


Application Scaffolding

OK, I don't build a new site every week, so this isn't the most important feature for me, but CommandBox can generate scaffolding for lots of things.


Framework Integration

Not that all CFML developers use frameworks, but for those that do, having syntax support and integrated help for ColdBox, FW/1, and other frameworks would be great. Add switches for things like reloading cached framework code in ColdBox and I could be more productive with my framework of choice.

 

General IDE Goodies

IDEs are supposed to give you lots of goodies, but in the CFML space they mostly fall short. In some part I understand that parsing CFML is more difficult than something like Java which has strong typing and does not mix code with display. In this area, I am hoping that the new Lucee 5 dialect improves things to the point where standard kinds of IDE features work.


Code Outline and Method View

The Code Outline and Method View tabs in CFEclipse do not work for me. That's not a knock on the developers, as I noted just above it is a very tricky problem to solve. Having a pane where you can click on a method and move to it in the code is a very nice feature. I live without it, but I miss it.


Re-Factoring

More IDE standard features. This one may not be possible because of the nature of CFML, but it is worth inclusion on the list because it would be very useful if it worked properly.


Wizards, Wizards, and More Wizards

I use the new CFC wizard in CFEclipse. Put that on steriods and give it some siblings that handle configuration of common integration points like Twitter and LinkedIn.


You and What Army?

It might cost a small fortune to build all the features that I want in a commercial IDE for CFML/Lucee. I don't know how much it would cost, or how much I would be willing to pay for a license ( presumably at least the same as CFBuilder ). Someone else can figure out the funding and viability of such a project. This list just represents what I would find useful from day one in a CFML/Lucee IDE.


UPDATE

In response to Andrew Dixon's comment about Fusion Debug:

I tried Fusion Debug a little while ago. It didn't work after the initial install and I had no desire to fiddle with it. I'm sure Fusion Debug is a good product, they are just facing the same issue everyone else is in this space. The server, the REPL, and everything else needs to be integrated into the IDE and bundled for distribution. I don't know their specific technology, but given that they have the debugger already built, they might be in a decent position to build a full IDE. Whether they want to take on such a project is another story.

I like the subscription model, but $199/year should probably be $19/month. At $199, price resistance will limit the number of developers who sign up for it, but at $19/month there is hardly any price resistance. That's why Adobe has a monthly subscription price for Creative Cloud.

The trouble I had with the Fusion Debug install goes to the heart of what I would like to see in a commercial IDE. It should just work - without fiddling with the install, without having to hunt for answers to obscure configuration questions.