You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jetbrains MPS中为自定义DSL添加右键Run调用CLI工具?

在JetBrains MPS中为自定义DSL添加右键「Run」操作

完全可行,无需依赖JAR构建场景,以下是具体实现方案:

核心逻辑

借助MPS的Action系统实现右键菜单注册,结合TextGen API触发配置文件生成,可按需添加后续执行逻辑。

具体步骤

1. 编写右键动作类

创建继承自BaseAction的Java类,在execute方法中实现核心逻辑:

public class RunDslAction extends BaseAction {
  @Override
  protected void doExecute(@NotNull DataContext context, @NotNull AnActionEvent event) {
    // 获取选中的DSL根节点
    SNode dslNode = context.getData(CommonDataKeys.NODE);
    if (dslNode == null) return;

    // 指定配置文件输出目录(示例:项目下的output文件夹)
    File outputDir = new File(ProjectPaths.getProjectPath(event.getProject()), "output");
    if (!outputDir.exists()) outputDir.mkdirs();

    // 调用TextGen生成配置文件
    TextGenFacade.getInstance().generate(dslNode, outputDir);

    // 可选:启动外部应用加载生成的配置
    try {
      Runtime.getRuntime().exec("path/to/your/app " + new File(outputDir, "config.txt").getAbsolutePath());
    } catch (IOException e) {
      Messages.showErrorDialog("启动应用失败: " + e.getMessage(), "Error");
    }
  }
}

2. 注册右键菜单

在插件模块的plugin.xml中配置Action,将其添加到节点右键菜单:

<action id="com.your.dsl.run" class="com.your.dsl.RunDslAction" text="Run">
  <!-- 加入节点右键菜单,放在Generate动作之后 -->
  <add-to-group group-id="jetbrains.mps.ide.actions.NodePopupMenu" anchor="after" relative-to-action="jetbrains.mps.ide.actions.GenerateAction"/>
  <!-- 限制仅对DSL根节点显示 -->
  <constraints>
    <canPerform condition="com.your.dsl.RunActionCondition"/>
  </constraints>
</action>

3. 配置显示条件(可选)

创建RunActionCondition类,确保只有你的DSL节点才会显示该右键选项:

public class RunActionCondition implements ActionConstraint {
  @Override
  public boolean isApplicable(@NotNull DataContext context) {
    SNode node = context.getData(CommonDataKeys.NODE);
    // 替换为你的DSL根概念
    return node != null && node.getConcept().isSubConceptOf(YourDslRootConcepts.INSTANCE.getYourRootConcept());
  }
}

4. 关联TextGen模板

确保你的DSL已配置好对应的textgen模板,保证调用TextGenFacade.generate()时能正确生成目标配置文件。

注意事项

  • 该方案完全独立于JAR构建流程,无需参考Kajak示例的打包逻辑
  • 输出目录可自定义,比如让用户通过MPS设置面板配置,或固定为项目内路径
  • 启动外部应用时需处理路径兼容性,避免硬编码绝对路径

内容的提问来源于stack exchange,提问作者Matthew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:43:13