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

点击Monaco Editor CodeLens时如何获取其关联范围信息

解决Monaco Editor点击CodeLens获取关联范围的问题

我明白你现在的需求:在点击自己注册的CodeLens链接时,想要拿到它对应的range范围信息对吧?其实只要在CodeLens和命令之间传递自定义参数就能搞定,我帮你修改下代码示例:

第一步:调整命令注册,支持接收参数

原来的命令没有接收参数的逻辑,我们改成可以接收编辑器实例和自定义参数的形式:

// 注册命令时,添加参数接收
const commandId = editor.addCommand(0, function(editorInstance, args) {
  // args里就包含了我们传递的range信息
  console.log('当前点击的CodeLens对应的范围:', args.range);
  alert('我的命令执行了!范围信息已打印到控制台');
}, '');

第二步:给CodeLens绑定命令并传递range参数

在provideCodeLenses方法里,给每个CodeLens对象添加command属性,把命令ID和range作为参数传递进去:

monaco.languages.registerCodeLensProvider('json', {
  provideCodeLenses: function(model, token) {
    // 定义当前CodeLens对应的范围
    const codeLensRange = { 
      startLineNumber: 1, 
      startColumn: 1, 
      endLineNumber: 2, 
      endColumn: 1 
    };

    return [
      {
        range: codeLensRange,
        // 关键:给CodeLens绑定命令,并传递参数
        command: {
          id: commandId,
          title: "First Line...", // 这是CodeLens显示在编辑器里的文本
          arguments: [editor, { range: codeLensRange }] // 传递编辑器实例和range信息
        }
      }
    ];
  }
});

核心逻辑说明

  • 原来的代码只是单独注册了命令,但没有把CodeLens和命令关联起来,也没传递范围参数。现在通过command属性把两者绑定,并且把range作为自定义参数放进arguments数组里。
  • 当点击CodeLens时,命令函数会触发,第二个参数args就是我们传递的对象,里面的range就是当前CodeLens对应的范围信息,你可以直接用它做后续处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:24:42