Mps logo

MPS

Language workbench to create Domain-Specific Languages

MPS 2020.3 现已发布!

Read this post in other languages:

在过去的几个月里,我们在努力使 MPS 变得更加实用,在修复用户报告的问题。在本文中我们将介绍新版本的一些功能,欢迎您下载 MPS 2020.3 并试一试,或者使用 Toolbox App 安装。


下载 MPS 2020.3

新的生成器宏

有一个名为 $CALL-SITE$ 的新宏,它有助于将具有 SWITCH/CALL 宏特性的节点插入到所调用模板中的指定位置。 更改之前,通常会忽略附带 SWITCH/CALL 宏的模板节点。 现在,如果调用的模板 /switch 尝试使用“调用点节点”,则会将该节点作为常规模板进行处理,并将结果作为可插入到所需位置的隐式参数提供给调用的模板 /switch。

以下可以看到 reduce_Comment 模板的调用是用作 reduce_MethodDeclaration 模板的 ‘调用点’:

如果我们查看一下模板的细节,提供一个在方法体中有一个 $CALL-SITE$ 语句的调用点节点。

现在也有一个 reduce_Expressions 开关的调用,参数化的模板节点(跟踪方法调用),带有一个属性宏和引用宏(使方法调用指向其他地方的方法声明)。 在开关内部,$CALL-SITE$ 用作为 "调用点节点" 而来的方法调用代替了一个占位符方法调用。

模板和 Switch 声明有一个标志,它是通过意图来切换的,表示要使用调用点节点。 如果在一个模板/switch 里面使用 $CALL-SITE$ 宏,而这个模板/switch 不需要标志得到 $CALL-SITE$,那就是一个错误。 不需要在 CALL/SWITCH 中指定一个显式参数,MPS 生成器可以判断被调用的模板/switch 是否需要调用点,并在处理之前进一步评估 CALL/SWITCH 的模板,包括宏。

这个功能在一些场景中很方便,比如IF needCast (Type) expression ELSE expression,或者当有多个表达式源可作为输入时的转换,比如 switch { case Double : Double.valueOf(expression); case Integer : Integer.valueOf(expression, 16); …},因此为每个情况都有一个专门的switch/模板是不切实际的。

编辑器中的动态用法高亮显示

期待已久的动态高亮显示功能终于来了。 此功能与现有的 Highlight Usages 操作 (Ctrl/Cmd+Shift+F7) 非常相似。 不同之处在于,动态高亮显示会在您输入或浏览代码时自动工作。 光标下节点的引用几乎会立即在编辑的文档中高亮显示。 当您离开当前选择的节点时,仍然可以使用原始的 Highlight Usages 操作“固定”该节点的用法。 完成后,动态高亮显示将继续高亮显示光标下的节点。

可以在 MPS 编辑器设置中使用 Highlight selected node 复选框打开或关闭此功能。

改进了 BaseLanguage 中的 switch 语句

除了对编辑器进行了一些改进外,switch 概念现在还支持将用多个 case 用于同一条语句。

项目窗格上的错误栏

我们正在引入一种在 Project 窗格中显示错误、警告和消息的新方法。 错误栏有助于组织 Project 窗格上的消息。 您可以通过 Logical View 设置按钮将其禁用。

模块分面处理方式的更改

MPS 不再强制您将任何特定的模块分面(Facet)与给定的模块一起使用。 与模块关联的分面记录在模块描述符文件中,此文件现在是信息的最终来源。 在历史版本中,我们已经使 Tests 分面完全可选,现在不再强制执行最后一个 Java。 但是请注意,取消选中语言模块属性中的 Java 模块分面会将语言从类加载机制中排除,从而呈现出完全不同的体验。 我们实施了此更改,以方便地对 Java 以外的目标语言提供渐进式支持。

VCS 中改进的根注释

旧的根注释算法使用从模型文本文件获得的注释结果。 它仅适用于文本持久化模型,并且在大多数情况下并不总是正确的。 使用新方法,通过比较不同修订版的模型来构建注释。

现在,编辑器中的每个单元格都可以使用 Annotate cells 弹出窗口选项进行注释:

因此,你可以在单元格工具提示对话框中看到每个编辑单元格的最新更改:

也可以在 Annotation 栏中高亮显示所有对所选修订版进行过修改的单元格。

在 Diff 对话框窗口中跟踪移动的节点

用于计算两个模型之间变化的原有算法无法检测到某些类型的变化。 节点移动被检测为两个独立的更改:插入和删除。 现在可以将节点移动显示为一次移动。 此外,还可以检测移动片段内的内部变化:

你可以在 Diff 对话框窗口中选择是否跟踪移动的节点:

有时,同级节点的顺序并不重要。 你可以使用新的 "Hide Unordered Moves" 选项来隐藏这种同级节点的不重要的排列组合。

新的欢迎屏幕

我们更新了欢迎屏幕的外观。 现在,它不仅包括项目选择,还包括各种对话框,可帮助您根据需要自定义 IDE。 首先,Projects 页面上有更多空间,可以容纳额外的项目。 从搜索字段中搜索所需的项目也更加容易。 Customization 页面将引导您完成主要界面设置,例如颜色主题、IDE 字体、导入操作和共享偏好设置。

其他改进

VCS 菜单重新排列

将根据您当前使用的版本控制系统重命名 VCS 菜单。 例如,如果您的项目仅使用 Git,则 VCS 菜单现在如下所示:

通过保留对项目进行版本控制最有用的操作,我们使菜单变得更加简洁、更易于发现。 现在,您可以轻松访问不再隐藏在子菜单中的关键 Git 功能。

Commit and Push 按钮

现在,两个最热门的按钮 – Commit 和 Commit and Push… – 在 Commit 屏幕上明确显示。 您可以在提交后立即将更改推送到远程存储库,而不必再滚动下拉列表来找到 Commit and Push 按钮。

改进了分支

此版本为分支提供了多个功能增强。 IDE 现在可以自动更正新分支名称中未被接受的符号,您现在可以看到与当前分支相关的所有操作。

通过拖放选项卡拆分编辑器

在开发大型项目时,打开多个选项卡始终会带来方便。 使用 MPS 2020.3,可以通过将选项卡拖放到所需位置来水平或垂直拆分主编辑器屏幕。 拖动选项卡时,编辑器将高亮显示可以将其放置的位置。 IDE 在选项卡栏的开头显示固定的选项卡。


我们调查了一系列的 Bug。欢迎与我们分享您的看法,并通过问题追踪器提交您的反馈。下载 MPS 2020.3试一试,或者通过我们的 Toolbox App直接安装。


多多保重,祝您开发愉快!

您的 JetBrains MPS 团队

The Drive to Develop

blog_footer_bw@2x

image description