MPS 2022.2 最新变化

MPS 2022.2 包含检查器中的注解、改进的 Kotlin 支持、增强的 SModel API 等等。

Inspector(检查器)中的注解

Inspector(检查器)中的注解

注解现在可以从 Inspector(检查器)窗口访问,并且注解过程将为整个根启动。 此操作可以通过右键点击 Inspector(检查器)窗口的左边框访问。 Annotation(注解)将在 Inspector(检查器)编辑器和主编辑器中打开。

了解详情

MPS Kotlin 中改进的支持

MPS Kotlin 中改进的支持

许多编辑问题得到修正,带来更好的输入体验,例如:

  • 范围已被重构,支持更多用例(例如自定义接收器类型)并改进筛选(更少重复,访问隐藏函数)。
  • 支持按类型系统析构运算符。
  • 数字文字:更易插入浮点数和长整数,支持无符号数和有符号数之间的转换。
  • 字符串文字:在字符串文字中按 Enter 可将所有字符串从单行切换到多行;部分插入问题已得到修正。
  • Kotlin 存根支持加载注解和具有接收器的函数类型(例如,T.() -> R 被错误地加载为 (T) -> R)。
  • Lambda 文字:
    • 对隐式 it 形参的支持。
    • 类型具有接收器(例如 Receiver.() -> Unit)的 Lambda 将正确使用该接收器类型作为 lambda 主体内的隐式 this

了解详情

MPS Kotlin 的 SModel 语言

MPS Kotlin 的 SModel 语言

SModel 支持已在 MPS Kotlin 中由新的 jetbrains.mps.kotlin.smodel 语言提供。 除了增强的编译支持外,它还允许在语言模块中使用 Kotlin 代码(例如作为辅助类)。

在常规类型(节点、概念、链接和引用)之外,它还利用更灵活的 MPS Kotlin 引入概念类型形参。 函数、变量和类现在可以声明和使用此类形参,并在内部类型中将其重用,实现更轻松地输入并利用 Kotlin 的智能转换。

Kotlin 编译更新

Kotlin 编译更新

Kotlin 编译支持在改进后更为持久。 因此,在 MPS 重启后,Kotlin 类不再被擦除。

构建脚本中新增了一个选项,可标记要使用 Kotlin 编译器编译的模块。 此标志需要手动插入,目前没有自动检查可将其设为 true。 如果包含 Kotlin 文件的模块将被编译到 JVM 中,则应添加该标志。

BaseLanguage 注释中的可用文本样式

BaseLanguage 注释中的可用文本样式

向 BaseLanguage 添加注释时,现在可以使用文本样式进一步自定义。 注释支持粗体 (Ctrl + B)、非斜体 (Ctrl + I)、下划线 (Ctrl + U) 和粗体非斜体 (Ctrl + B -> Ctrl + I) 样式。

修正后转换

修正后转换

在 BaseLanguage 中,现在可以进行修正后转换,将一些文本附加到表达式来转换代码。 这为开发者节省了时间,让其不必将文本光标移动到表达式前或选择表达式来应用转换。

SModel 延迟模型发现

MPS 用于在模型注册到仓库的那一刻发现模型。 在常规项目模块中发现模型意味着遍历文件系统查找文件及其类型,并至少读取有关模型的标题信息。

现在,除非请求模型,否则模块不会参与模型发现。 新增的 SModule API (SModule.forEachRegisteredModel()) 可以访问仅对某个模块已知的模型,无需触发模型发现或加载。 新的 API 适合 SModel API 客户端使用者,特别是 SRepositoryContentAdapter 子类。

关联链接(也称为 SReference)的改进

MPS 现在带有用于创建引用的一致 API,以及更新的内部表示。 这些更改旨在改进模型引用/持久性系统,该系统计划在后续版本中发布。 不过,这一更改已经可以将模型的内存存储减少约 5%。

Java 存根

MPS 现在会考虑版本化的 jar 条目,并将公开具有与实际 Java 运行时匹配的版本的 Java 类。

Log4j 到 Java Util Logging (JUL) 的迁移

虽然 MPS 和 IntelliJ 平台使用精简版的 Log4j 库而没有遇到已知安全问题,但它们都已将日志记录切换到标准 java.util.logging 软件包。 实现了一个兼容层(基于 SLF4J)以将请求从 Log4j API 重定向到 Java Util Logging (JUL) 实现。

Debug Log Settings(调试日志设置)操作可以配置类别的 DEBUG 和 TRACE 级别。 此外,现在还有一个使用常用 JUL 配置格式的 bin/log.properties 配置文件。 与以前版本中的 log.xml 不同,默认情况下不读取此配置文件,但用户可以使用 idea.log.config.properties.file 系统属性请求访问此(或其他外部)配置。

命令行 Make

MPS 从 lang.build 声明生成的 Ant 构建脚本使用单独的任务生成和编译源代码(MPS 自己的 <generate> 和常规 Ant <javac>)。 新增了一个 <mps.make> 任务,对应于从 IDE 启动的 Make 流程。 它负责将模型完全转换为已编译代码。 任务将代码生成和编译相结合,从而节省了时间,因为 MPS 需要已编译的类来进行模块类加载(因为 <javac> 任务通常会重复在 <generate> 期间已经完成的编译工作)。 它还使 Ant 命令行构建和从 IDE 启动的 Make 流程更加相似,从而使构建过程更加可靠。

了解详情

生成器测试

允许忽略节点排序的匹配选项使生成器测试得到改进。 重新排序模型根的新操作有助于将引用测试模型带到所需状态。

了解详情

TextGen 的超时设置

MPS 限制了模型到文本 (M2T) 转换部分中花费的时间,以解决 TextGen 方面的潜在错误。 限制此前为硬编码。 不过,最近一些大模型已经达到限制,导致超时异常。 所以,您现在可以定义 IDE 设置来控制超时。 命令行构建预计将在未来版本中得到支持。

改进了 Make 流程的 Java BaseLanguage 依赖关系管理

MPS 用于在 `dependencies` 文件中记录生成的 BaseLanguage 类之间的依赖关系。 Java 编译器由此来确定依赖的编译类是否需要刷新。 但是,当 `dependencies` 在 2021.2 中改为保存更高级别的依赖关系后,不再需要收集和存储每个根的类名。 这帮助 MPS 改进了 BaseLanguage 代码(因为它不再需要收集单独的依赖关系)和 Java 编译流程(因为它不再需要分析各个文件依赖项,将文件依赖项归因到模块和类路径,以及传播 ‘dirty’ 状态)的 TextGen 时间。

保持模块依赖关系的新文件

新增的 deps.cp 文件现在将存储各个模块的依赖关系,以便让 MPS 推导出模块编译图。 文件保留转换的状态,使其“密封”和个性化(不列出未在转换中使用的依赖项);这不同于运行时收集的依赖图,后者基于实际模块依赖项。

UI 变化

MPS 不再创建嵌套在语言模块下的运行时/沙盒解决方案。 默认情况下,这些模块将是语言模块的同级。 重命名 ‘main’ 语言模块仍会将这些模块识别为“相关”并将其与 ‘main’ 模块共同重命名。

了解详情

标签映射的组合键

MPS 已支持在检查点模型中保留组合键,增强了先前版本中引入的组合标签键功能。

平台功能

Cloning repository(正在克隆仓库)进度条

Cloning repository(正在克隆仓库)进度条

Cloning repository(正在克隆仓库)进度条现在位于欢迎屏幕上,并直接显示在 Projects(项目)列表中,更清晰、更易用。

新目录操作

新目录操作

现在,在 Markdown 文件中可以根据文档标题轻松生成目录。

GPG 签名

GPG 签名

现在可以在提交中创建 GPG 签名。 签名将出现在 Git 工具窗口的 Commit Details(提交详细信息)部分中。

从 Markdown 文件运行命令

从 Markdown 文件运行命令

如果 Markdown 文件包含需要执行的命令的指令,您可以使用装订区域中的运行图标直接从文件运行这些命令。

迁移指南

对于每一个主要版本,我们都会准备从旧版本 MPS 进行迁移的说明,以确保一切顺利。 请仔细查阅。