JetBrains MPS 2018.3:生成器计划、改进的构建语言、UI/UX 改进和更强大的编辑器
2018年的第三个也是最后一个主要版本已经发布!MPS 2018.3 提供了一系列功能,可帮助您更高效地开发项目。推出生成器计划,构建语言采用全新结构,和迄今为止最强大的编辑器。以上功能再加上最新改进的用户界面和用户体验,定会让您的工作更加轻松。
BaseLanguage
概念重写/实现的图标
MPS 使用重写/实现的图标来标记概念,帮助您轻松导航到当前概念的超概念或子概念。
BaseLanguage 类的自定义包
很长一段时间以来,管理生成类的 Java 包的唯一方法是通过包含模型的名称。不过,使用新的分类器属性 “packageName”,您可以管理生成类的 Java 包。此属性也可用于根分类器。
BaseLanguage 扩展的新一代工具
BaseLanguage 始终需要通过大量扩展进行自定义。不过,对于某些扩展,实现适当的生成器可能非常棘手。现在,BaseLanguage 提供了几个新的生成时概念,从而帮助您更轻松地编写扩展的生成器。
生成左值表达式(Lvalue-expressions)
左值表达式计算为可以使用值读取或写入的变量。对于某些情况,生成左值表达式十分困难,因为它可能取决于使用表达式的上下文类型。现在,全新的通用左值表达式
生成时概念可以用来简化生成器,而且不需要上下文。
将左值转换为 Reference
某些表达式会聚合其他左值表达式以使用从聚合表达式(例如,plus assignment或increment and get表达式)生成的变量进行复合运算。引入具有此类语义的新表达式并不可行,因为很难为这类结构编写适当的生成器。
幸运的是,在新版本中,您可以使用@byRef
表达式打包任意左值表达式,以便baseLanguage生成器随后将打包的表达式转换为Reference<T>
类型的表达式,后一种表达式将为您提供对打包变量的get和set运算。
这两个新引入的生成时概念在原文中有更详细的介绍。
BaseLanguage 中的默认方法支持
在此新版本中,MPS 可以在 BaseLanguage 接口中创建“default”方法。“default”关键字由 DefaultModifier 概念实现,此概念扩展了BaseLanguage 中的 Modifier 概念。
DefaultModifier 位于 jetbrains.mps.baseLanguage.jdk8 语言中。这意味着,要在接口中创建“default”方法,您需要导入 jdk8 语言。
生成器
生成器语言
$INCLUDE$ 宏已被弃用,有一个将其实例替换为 $CALL$ 的迁移。前者不支持带参数的模板,而我们没有必要同时保持这两种机制来调用模板。$WEAVE$ 宏和编织规则现在可以调用带参数的模板。
当解释的模板从“编译的”生成器编织外部模板时,将不再对它进行解释,但仍然会执行编译的模板代码。“编译的”模板现在可以编织解释的模板。Java 反射不用于从模板模型访问查询集合,模板模型也称为QueriesGenerated。
UI/UX 元素
MacBook TouchBar
默认上下文包括用于运行、构建和调试应用程序的控件,能够快速选择或创建新的运行/调试配置。现在,Preferences | Appearance & Behavior | Menus and Toolbars 下有一个新的 Touch Bar 页面可以自定义操作。
是的,它可以扩展!只需将任何所需操作添加到特殊的 MPS InterfaceGroup
中。
高对比度 UI 主题
我们添加了对新的高对比度主题的支持,可以使用 Preferences -> Appearance & Behavior 下主题选项中的下拉列表访问。
查找已弃用代码的新操作
操作Find Usages of Deprecated可以找到已弃用元素的所有用法。现在,已发现用法的报告按预期的代码移除版本对条目进行分组,因此可以更轻松地识别其严重性并优先考虑先消除哪些代码。
重写或实现的行为方法的新图标
行为方法已采用新图标。以下屏幕截图显示了重写或实现所选方法的 getPresentation() 方法列表,并允许您从那里导航到这些方法。
重写/实现图标的进一步增强
具有重写/实现的概念/类/方法的弹出窗口已变为异步状态,这意味着在后台,MPS 将使用搜索结果填充弹出窗口。此外,您现在还可以使用搜索对象的名称进行筛选。
查找器更改
MPS 分发的查找器已经更新和优化。要异步执行查找器,您需要使用特殊的OnEachNodeFoundByExpression,它表示一个简单的查找器调用,其中包含为每个找到的节点执行的回调。这样一来,概念的查找用法选项已更改。这些选项已使用派生概念和概念上级进行了扩展,它们分别产生子概念和超概念列表。
此外,行为方法的查找用法选项已使用“Overridden Methods”和“Overriding Methods”进行了扩展。
禁止特定错误
错误抑制曾经是一个粗略的工具,用于防止 MPS 显示由 typesystem 检查器不当发现的错误。如果使用意图“Suppress error for node”并通过属性“SuppressErrorAnnotation”对节点进行了注释,则不会显示该节点或其任何子节点的错误消息。
现在,可以仅禁止特定的错误消息。将禁止该节点及其所有子节点的错误消息,但任何其他消息仍将保持存在。有关详细信息,请参阅文档。
构建语言
提示和技巧
现在,您可以自定义MPS的默认提示和技巧。自定义操作可以在构建脚本中通过新的提示和技巧概念完成。提示可以从常规MPS分发中重用,也可以从目录或解决方案中导入。
提示和技巧语言
要从解决方案导入提示和技巧,请使用模型创建解决方案,然后添加语言jetbrains.mps.build.tips和jetbrains.mps.core.xml,对使用的语言进行建模。随后,您可以创建 MPSTipsAndTricks 概念的实例,在其中可以创建多个提示。每个提示都是HTML格式的文本,最多可包含一张图像。
构建打包选项
BuildMps_IdeaPlugin 中的自定义打包选项已被弃用,从现在开始不应再使用。现在,可以在布局 BuildMpsLayout_Plugin 构造中直接选择打包。借助自动打包,所有提供的语言和解决方案都会放在插件根目录下的“languages”文件夹中,而手动打包意味着开发人员必须自己提供整个插件布局。
构建语言中的新构造
构建语言中的测试模块配置已进行扩展,会指定在执行 MPS ant 测试时必须加载的其他 IntelliJ IDEA 插件。在某些情况下,测试需要在其环境中使用特定插件,而 MPS 构建语言引擎无法从包含测试的模块中推断出该插件。
现在,您可以确保在执行 MPS Ant 测试期间存在所需的插件。
编辑器
可重复使用的单元操作映射
通过导入,可以将来自现有操作映射的单元操作映射项在新的操作映射中重复使用。
其他
完全编译的数据类型
在实现完全编译语言的道路上,我们已经完全生成数据类型。现在,可以从 SModel API 获得有关数据类型的所有生成信息。
将迁移数据保存为注释
现在,MPS 支持一种传输迁移数据的全新机制,强烈建议将这种机制用于新创建的迁移。包含数据的生成节点现在应附加到足够接近数据相关位置的任何节点。生成包含数据的节点的迁移脚本应声明此类节点的概念,并使用putData()构造将每个此类注释插入到模型中:
更完善的冲突解决方案
之前,无法同时从本地和远程端应用更改,因为从一端应用更改会直接拒绝另一端的更改。对于具有多种角色的子项,如果同时应用这两种更改,有些不切实际。这就是为什么现在,在您从冲突的一端应用更改后,其他存在冲突的更改将在更改组的末尾转换为附加项。必须单独应用或忽略这些更改。应用冲突的左侧版本后,您仍然可以应用或忽略右侧的行:
我们希望您喜欢这个版本,如果不喜欢,别着急 – 您的反馈可以帮助我们做得更好!
您可以在此处查看已修复错误的完整列表,并在我们的Issue Tracker上报告任何问题。
祝您生活愉快!
您的JetBrains MPS团队
The Drive to Develop
原文发表于 12月4日, 2018 年,作者