Growing a Language Environment with Editor Libraries

July 05, 2011

At last year’s GPCE conference in Eindhoven I met Klaus Ostermann and Sebastian Erdweg who turned out to be working with Stratego/XT on the exciting SugarJ project. SugarJ turns MetaBorg into a homogeneous language extension mechanism, enabling the definition of language extensions in libraries that are invoked on import.

The meeting led to a demo, more talk on the walk to the banquet, a visit by Sebastian to TU Delft, collaboration with Lennart Kats on the integration of SugarJ and Spoofax to provide editor support for language extensions, and now a paper at GPCE 2011:

Sebastian Erdweg, Lennart C. L. Kats, Tillmann Rendel, Christian Kastner,  Klaus Ostermann, Eelco Visser. Growing a Language Environment with Editor Libraries. In Ewen Denney, Ulrik Pagh Schultz, editors, Generative Programming and Component Engineering, 7th International Conference, GPCE 2011, Portland, OR, USA, October 22-23, 2011, Proceedings. ACM, 2011.

Abstract Large software projects consist of code written in a multitude of different (possibly domain-specific) languages, which are often deeply interspersed even in single files. While many proposals exist on how to integrate languages semantically and syntactically, the question of how to support this scenario in integrated development environments (IDEs) remains open: How can standard IDE services, such as syntax highlighting, outlining, or reference resolving, be provided in an extensible and compositional way, such that an open mix of languages is supported in a single file? Based on our library-based syntactic extension language for Java, SugarJ, we propose to make IDEs extensible by organizing editor services in editor libraries. Editor libraries are libraries written in the object language, SugarJ, and hence activated and composed through regular import statements on a file-by-file basis. We have implemented an IDE for editor libraries on top of SugarJ and the Eclipse-based Spoofax language workbench. We have validated editor libraries by evolving this IDE into a fully-fledged and schema-aware XML editor as well as an extensible LATEX editor, which we used for writing this paper.