点击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
相关产品推荐
相关产品推荐

