MPS 2021.1 正式发布!
今年的第一个版本现已发布! 在过去的几个月,我们完善了产品中的不同子系统以提高用户体验。 阅读更多关于上述新功能的信息,或者如果您更喜欢直观可视化的内容,您还可以观看我们的屏幕截图。
编辑器
放大和缩小
按住 Ctrl 并滚动鼠标滚轮可以在打开的编辑器窗口中快速调整字体大小。 字体大小更改不不是永久的,因此当您重新打开文件时,文字大小将重置为默认值。 您可以在 Preferences | Editor | General 部分中启用/禁用此功能:Change font size with Ctrl/Cmd+Mouse Wheel。
改进了缩进布局性能
在某些核心情况下,缩进布局的实现已变成增量式,这将缩短以主要使用缩进布局的语言(例如 BaseLanguage)编写的大型模型的渲染时间。 可以使用 VM 选项 mps.indent_layout.disable_incremental 禁用此功能。
字体粗细选项
在长时间的编码工作中,选择一个舒适的编辑器字体非常重要。 最近增加的版式设置让这个选择变得更加简单和个性化。 在 v2021.1 中,您可以在 Preferences | Editor | Fonts 中调整主字体和粗体字体的粗细。
版本控制系统
根注解改进
版本控制系统支持改进了根注解。 现在,为根注解使用一种通过移动跟踪计算修订版本变更的新算法。 注解行/单元的颜色仅使用根发生变化的修订版本确定。 当注解列打开时,注解单元现在具有特殊的上下文菜单组。 您可以对每个注解单元应用 Copy Revision Number、Show Diff 和其他操作。
合并提交的差异对话框
在 Git 日志中为合并提交启用了差异对话框。 该查看器可以显示三个面板 – 用于合并模型的中央面板,以及用于两个合并分支的左右面板。
在差异编辑器中同步滚动
现在,可以在差异对话框中使用一个按钮关闭编辑器滚动同步。
用于根注解和根/节点历史记录的修订版本图
根注解和根/节点历史记录算法之前基于文件修订版本的有序列表,计算根在两个相邻修订版本之间的变更。 不过,这些修订版本有可能来自两个不同的分支,在这种情况下,获得的变更没有意义。 合并修订版本也不会得到正确处理。 来自旧修订回合的变更可能被错误地显示为来自新合并修订的变更。 现在,在生成变更历史记录时,算法会考虑修订版本图。
保存到 Shelf
您可以使用新的 Save to Shelf 操作将变更保留在本地并复制到 Shelf。 您可以通过在 macOS 上按⇧⌘A(在 Windows 或 Linux 上按Ctrl+Shift+A)并输入 Save to Shelf 来访问这个操作。
生成器
改进的 $LOOP$ 宏变量访问
现在,可以使用 LOOP.inputNode 表达式引用 LOOP 宏的输入节点,无需使用 VAR 宏。 使用 LOOP.index 并替换之前的用户自定义上下文变量,也可以在同一个命名空间下访问 LOOP 的索引。
更新了 GenPlan 声明中的 Transform 语句
为了提升生成计划的可扩展性,采用一种新的机制来包含计划设计师未知的语言或生成器。 现在,借助 transform 语句,语言设计师可以包含针对或扩展给定语言的语言。 当我们说语言 B“目标是”语言 A 时,我们是指语言 B 的生成器生成语言 A 的结构。
编译模板增强
IDE 中的 Generator Preferences 包含一个名为 Warn when child cannot be placed into role 的选项,它检查生成的节点模板是否符合父节点的适当角色。 这个选项也可以通过构建项目设置来使用。 生成器可能会发出警告,这通常表明模板中有一些不一致的地方,例如放置位置不正确的模板片段或 COPY-SRC 注解。
然而,编译模板并没有进行这种检查。 在 MPS 2021.1 中,如果该选项激活,编译模板现在会进一步检查子节点在父节点中的位置是否正确。
综合
适用于包含 Java facet 的 MPS 模块的 Java 编译器
MPS 模块的 Java 编译方式发生了很大变化。 这解决了我们一个票数最高的问题,即注解处理支持。 我们切换了 MPS Java 编译器基础架构来利用 API 的 javax.tools.JavaCompiler 集,因此,MPS 现在可以使用实现此标准 API 的任何编译器。 自 v2021.1 开始,MPS 将使用为此 API 配置的默认编译器运行,其中包括一个使用 Eclipse Compiler for Java (ECJ) 的选项(如果存在)。 当 ECJ 库在类路径中时,您可以用 mps.compiler.java=ecj 作为系统属性将 MPS 切换到使用 ECJ(例如,通过编辑 mps.vmpoptions)。 请注意,如果您在使用新的编译器架构时遇到无法恢复的问题,也可以通过改变 mps.compiler.java=ecjlegacy 作为系统属性的配置,切换回直接 ECJ API 的旧版机制。
此外,我们现在用 -release 选项来运行编译器,其版本在项目偏好设置(Preferences -> Java Compiler)中指定。 这个选项比 MPS 在以前版本中所依赖的 -source/-target 选项的组合更为严格,因为它控制了某些版本中可用的库 API 的用法。 如果您遇到由于使用某些版本中不可用的 API 而导致的编译问题,您可能需要更新您项目中的 Java 版本。
项目迁移的基线 MPS 版本
创建新项目时,现在将保存“基线”MPS 版本。 从早于项目基线版本的 MPS 版本的项目迁移将不适用。 这让作者可以灵活地为项目迁移提供指定的所需“基线”版本,他们可以使用新的 ‘getBaselineVersion():int’ 方法在项目迁移接口中修改该版本。
如果该项目没有版本,则默认版本为 2018.1,迁移将根据该版本进行。 您仍然可以在任何项目中通过从迁移菜单手动运行任何项目迁移。
方法签名重构改进
Method Signature 重构对话框现在包括一种为新参数或类型发生变化的参数指定默认值的方式。 如果某个参数已被移除,但仍在方法中使用,将引入一个新的局部变量来确保引用不会丢失。 此外,现在还可以处理 vararg 类型参数。
如果方法调用与其签名不匹配,则可以根据调用来意图操作更改方法签名。 这个意图操作已经被改进。 它现在更智能地映射现有参数,因此可以重用最大数量的现有参数并保留其引用。
BaseLanguage 注释的新选项
lang.text 语言添加了多个新功能,增强了 BaseLanguage 中的单行和多行注释。
- 现在,在上下位置选择时,文本选区让您可以仅高亮显示行的一部分。
- bold、italicize 和 underline 等操作适用于选区。
- 已实现纯文本复制/粘贴。
- 现在支持项目符号列表或编号列表。
改进了 lang.smodel 中的表达式
表达式 model.roots(), model.rootsIncludingImported() 和 model.nodesIncludingImported() 现在支持 #expression 来指定概念,就像 model.nodes()。
控制使用您的插件分发的模块的可见性
长期以来,MPS 假设所有来自语言插件的模块对终端用户是可见的。 随着语言数量的增加,以及插件的复杂性,有些情况下,语言设计者希望隐藏某些模块,以避免最终用户被大量不相关的语言或解决方案所迷惑或淹没。 插件通过 com.intellij.mps.LanguageLibrary 扩展点告知 MPS 它们要贡献的模块。 扩展点现在可能会提供可选的 hide=”true” 特性,这使插件的模块可以通过使用 com.intellij.mps.VisibleModuleMask 指定的模式进行筛选。 大多数的 MPS 插件现在都有这个标志,如果 Language Designer 需要隐藏 MPS 自己的语言,可以方便地筛选它们。 MPS 作为 jetbrains.mps.ide.devkit 插件的一部分为自己的模块提供掩码。自定义 IDE 的作者一般不把这个插件包含在发行版中,并可以完全控制自己产品中的可见模块。
其他改进
内置 HTML 预览
新的内置浏览器预览可以让您快速预览 HTML 文件。 要打开预览,请点击编辑器右上角微件中的 MPS 徽标。 您如果在 HTML 中进行了更改,或者改变了链接的 CSS 和 JavaScript 文件,则预览将即时更新。
Apple Silicon 支持
您现在可以在搭载 M1 芯片的 Mac 上使用 MPS。 首先,请从我们的网站下载适用于 Apple Silicon 的 JetBrains MPS 的安装程序,或者从 Toolbox App 获取。
自动导入设置
在 MPS 2021.1 中,每次安装新版本的 MPS 时出现的 Import Settings 对话框仅在您没有合适的设置和配置时显示。
改进了辅助功能
在这个版本中,我们为欢迎屏幕、Project Structure 视图和 VCS 日志中的 UI 元素添加了更多标签。 现在,启用屏幕阅读器后可以正确地朗读这些元素以及间距图标。 我们也在努力改善对 macOS 用户的辅助功能支持。
其他小变化
我们还修复了一些 Bug。 您的反馈对我们很重要,请在下面的评论区让我们知道您对新功能的看法。 请记住,在我们的问题跟踪器中,您可以创建功能请求,并对当前的请求进行投票,这有助于我们为未来新版本定义新的功能。
祝您愉快!
您的 JetBrains MPS 团队
The Drive to Develop