9.3 其他方面的工具支持
如前所述,DSL工作台是首要的DSL设计工具。那么,当我们不使用工作台候,还能指望从开发环境得到什么支持呢?
我们搜寻的目光首先落在IDE上,显然这里最有可能找到适用于DSL编写的先进功能。通用语言的编程活动可以从IDE那里获得一个功能完善的编辑器,具备语法高亮、代码补全等诸多编辑功能。DSL编程也完全应该获得类似的帮助。例如,如果我们用Groovy编写金融中介系统的内部DSL,会希望IDE能高亮显示用户输入的货币代码,也会希望把自动代码补全功能应用在系统支持的金融制度上。
很多IDE虽然还不具备一套完善的DSL工作台,但已经开始提供语法高亮和自动补全这个层面的工具。现在的IDE都准备了插件架构,而且都是可扩展的。我们可以自行插入代码去实现语法高亮、代码补全等功能(见9.6节文献[8]和文献[9])。
Contraptions for programming博客上有篇文章(见9.6节文献[8])描述了一种在Groovy-Eclipse平台上开发DSL的插件,开发者可以自己定制实现语法高亮的功能。Groovy-Eclipse系列组件以接口形式提供一个扩展点,我们可以通过实现该接口来定制实现语法高亮的关键字。IntelliJ IDEA也包含类似可定制的Groovy DSL支持功能,其插件可实现对方法和属性的自动补全(见第9.6节文献[9])。图9-5粗略说明了如何在IDE的插件架构下为定制的DSL实现语法高亮功能。
图9-5 在IDE核心之外,我们可以实现自己的插件。我们为DSL设计的语法高亮插件和别的插件一起成为IDE的一部分
一直以来,我们都围绕着DSL的开发展开讨论,而在当前的DSL环境下,DSL版本的有序演变是另一个不可忽略的重要议题。因此下一节我们将粗略探讨一下应该怎样合理规划DSL的成长轨迹,使得DSL的多个版本可以共存。