MPS 2018.3:生成计划,组装和包装语言以及编辑器语言的改进,更新的界面

哈Ha! 我们最近发布了MPS 2018.3 。 在此版本中,有许多新功能使项目上的工作变得更加有效。 我们改进了生成计划和编辑器描述语言,在组装和包装语言中添加了新的构造,更新了界面元素,以方便在继承层次结构中进行导航,并对生产性工作进行了许多其他更改。


图片

基本语言


用于导航过度定义/已实现概念的图标


重新定义/实现的概念的图标已出现在概念和界面概念的字段中,从而简化了对子概念的导航。


图片

BaseLanguage类的自定义包


在MPS的早期版本中,所生成类的Java包由源元素所在的模型的名称唯一地确定。 BaseLanguage分类器的新版本添加了packageName属性,该属性使您可以重新定义最终Java包的名称。 packageName属性仅对顶级BL分类器有意义,就像Java分类器一样。


图片

BaseLanguage扩展的新生成器功能


对于BaseLanguage,通常会创建扩展名。 但是,对于某些扩展,可能很难编写合适的生成器。 我们在BaseLanguage中添加了几个新概念,以简化编写扩展生成器的过程。


生成左值表达式


左值表达式是可以在其中读取或写入值的变量。 在某些情况下,生成Lvalue表达式很困难,因为它可能取决于使用它的上下文。 一个新的辅助概念,即generic lvalue-expression将简化生成器并使之与上下文无关。


图片

将左值表达式转换为链接


一些表达式包括其他Lvalue表达式,用于使用变量进行更复杂的操作(例如,加上赋值或递增和获取表达式)。 引入具有这种语义的构造是困难的,因为它们编写正确的生成器并不容易。


在新版本中,您可以使用@byRef包装任何@byRef表达式。 BaseLanguage生成器将包装的表达式转换为Reference<T>类型的表达式,该类型为包装的变量提供get和set方法。


图片

本文中阅读有关新概念的更多信息。


支持默认方法


在新版本的MPS中,您可以在BaseLanguage接口中创建默认方法。 default关键字由DefaultModifier概念实现,它是Modifier概念的扩展。 DefaultModifier包含在jetbrains.mps.baseLanguage.jdk8语言中,因此要在界面中创建默认方法,请导入jdk8语言。


图片

发电机组


生成器语言(模型转换语言)


我们删除了宏$ INCLUDE $,将其使用替换为$ CALL $。 适当的迁移将有助于更新您的项目。 宏$ INCLUDE $不支持带有参数的模板,并且两个相似的功能宏的存在使该语言复杂化。


Macro $ WEAVE $和编织规则现在已经学会了使用参数调用模式。 此外,我们修复了使用编译和解释的模板时出现的令人不愉快的缺陷,尽管该缺陷不是很明显。 从解释的代码中对外部模板的“引入”(编织)总是会导致解释,但是现在编译的模板将起作用(当然,前提是生成器属性中包括对编译模板的使用)。 同样,从已编译的模板中对解释的外部模板进行“编织”。


QueriesGenerated是一组带有模板的模型的已编译模型查询,始终依赖于命名约定和Java反射引擎来执行代码。 当生成器的模型查询出现问题时,您会在堆栈跟踪中看到这一点。 我们终于摆脱了这种机制。


UI / UX元素


MacBook Touchbar支持


带有触摸栏的Macbook的所有者现在可以使用它在MPS中工作:例如,调用操作以从触摸栏启动,构建和调试应用程序,以及快速选择运行/调试配置或创建新的配置。 可以在“设置/首选项” |“配置”中配置触摸栏控件。 外观与行为| 菜单和工具栏。


当然,可以扩展触摸栏的功能! 只需将所需的操作添加到相应的InterfaceGroup


图片

高对比度主题


像IntelliJ平台一样,MPS具有新的高对比度主题。 可以在设置/首选项->外观和行为中启用它。


图片

查找不推荐使用的代码的工具


在迁移| 已弃用的代码操作用于查找已弃用的代码并使用其用法。 通过删除的预期版本查找不赞成使用的组的搜索结果,这有助于确定严重性并选择应首先删除的用途。


图片

用于导航已覆盖/已实现的行为方法的图标


在行为类的字段中,我们添加了图标来导航已覆盖/已实现的行为方法。 以下是重写或实现所选方法的getPresentation()方法的列表。 从列表中,您可以轻松地转到这些方法中的任何一个。


图片

弹出式导航的增强功能


覆盖/实现的概念/类/方法的弹出窗口已变为异步。 这意味着MPS会将搜索结果添加到后台的弹出窗口中。 此外,您现在可以按对象名称过滤搜索结果。


图片

发现者的变化


在此版本中,我们更新和优化了查找器。 对于finder的异步执行,请使用特殊表达式OnEachNodeFoundByExpression,它是对finder的简单调用,并为每个检测到的节点提供了回调函数。


概念的“查找用法”设置也已更改。 我们添加了搜索选项“概念祖先”和“派生概念”,分别显示了父概念和子概念的列表。 此外,通过“覆盖方法”和“覆盖方法”选项增强了行为方法的搜索功能。


图片

忽略错误


在MPS中,您可以忽略节点上的错误。 在编辑器中显示错误但在特定上下文中没有意义的情况下(例如,在生成器模板中),这很方便。 以前,抑制这种错误的可能性是不灵活的。 如果使用“ SuppressErrorAnnotation”属性对节点进行注释,则将在其上调用“抑制节点...的错误”效果。 使用此意图可抑制此节点及其所有后代上的各种错误-这样可以忽略实际错误。


现在可以仅忽略某些类型的错误。 该节点及其所有后代的所选错误将被忽略,但所有其他消息将显示。 在文档中阅读有关新错误管理功能的更多信息


图片

组装和包装语言


提示与技巧


RCP(Rich Client Platform)应用程序默认用于从MPS添加提示和技巧。 现在,可以使用构建脚本中的新提示和技巧设计来重新定义应用程序的提示和技巧。 和以前一样,您可以使用MPS发行版中的技巧,也可以在目录或解决方案模块中自行定义并导入。


图片

提示与技巧描述语言


要将提示和技巧从解决方案模块导入到构建脚本中,请创建解决方案并导入jetbrains.mps.build.tips和jetbrains.mps.core.xml语言。 然后创建MPSTipsAndTricks概念的实例,并在其中描述您的技巧。 每个提示都是HTML文本,最多只能包含一个图像。


图片

包装方式


我们在BuildMps_IdeaPlugin中将自定义包装标记为已弃用。 而是在BuildMpsLayout_Plugin构造中使用打包方法。


自动打包组装方法将语言和解决方案类型的所有模块放入插件根目录的“ languages”文件夹中,而“手动打包”选项允许开发人员自行设置插件结构。


图片

组装和包装语言的新设计


我们已经在组装和包装语言中扩展了测试配置的功能。 现在可以指定必须加载的其他IntelliJ IDEA插件,才能从Ant运行MPS测试。


在某些情况下,要运行测试,需要特定的插件,而包含该测试的模块无法使用汇编语言来计算该插件。 现在,您可以在测试配置设计中指定运行测试所需的插件。


图片

编辑


重用单元格动作图


现有动作图中的单元动作图元素可以使用导入重复使用。


图片

其他改进


完全编译的数据类型


转向完全编译的语言,我们创建了完全生成的数据类型。 所有生成的数据类型信息都可以通过SModel API获得。


将迁移数据保存在注释中


我们已经实现了一种在迁移期间保存数据的新方法,建议以后使用。 现在,包含数据的派生节点应该连接到足够靠近数据所属位置的任何节点。


在使用数据创建节点的迁移脚本中,您需要声明此类节点的概念,并使用putData()构造将每个此类注释插入模型:


图片

检索包含数据的节点与以前相同:


图片

更改冲突解决方案对话框


以前,在冲突中,更改只能在一侧应用。 但是有时候重要的是不要丢失其他更改。


这适用于处于相同复数角色的相邻节点中的更改。 现在,在冲突的一侧应用更改后,另一分支的更改将显示为附加项。 为了完成冲突的解决,必须应用或拒绝此添加。


在冲突左侧应用更改后,您可以应用或忽略右侧的行:


图片

您可以在此处下载新版本,希望它会令您满意。 无论如何,我们将等待您的反馈此页面上提供完整的修复程序列表。 请在跟踪器中向我们报告任何问题。


您的JetBrains MPS团队
发展动力

Source: https://habr.com/ru/post/zh-CN436652/


All Articles