是否有官方API可向VS Code编辑器gutter上下文菜单添加自定义菜单项?
VS Code扩展gutter断点菜单的实现方案
1. 注册gutter上下文菜单贡献点
VS Code官方提供了原生的菜单扩展能力,你可以直接在扩展的package.json中声明editor/lineNumber/context菜单贡献,就能在gutter右键菜单中添加自定义入口:
{ "contributes": { "commands": [ { "command": "your-ext.addCustomLogPoint", "title": "添加自定义日志点" } ], "menus": { "editor/lineNumber/context": [ { "command": "your-ext.addCustomLogPoint", "when": "debuggersAvailable", "group": "debug@3" } ] } } }
其中when字段可以控制菜单显示的触发条件,group字段可以控制菜单项在菜单中的排序位置,debug@3表示放在调试相关分组的第三位,和原生断点、日志点菜单项排列在一起。
2. 绑定菜单点击处理逻辑
在扩展激活函数中注册对应命令的处理逻辑,可以直接拿到点击的行号、当前文档路径等参数:
export function activate(context: vscode.ExtensionContext) { context.subscriptions.push( vscode.commands.registerCommand('your-ext.addCustomLogPoint', async (uri:vscode.Uri, line:number) => { // 这里写入你的自定义日志点添加逻辑 // 可以调用vscode.debug.addBreakpoints API插入带自定义属性的日志点 }) ) }
如果你需要监听自定义日志点的增删改状态,可以注册vscode.debug.onDidChangeBreakpoints事件回调,同步你的业务逻辑。
3. 自定义日志点的视觉展示
你可以继续使用DecorationRenderOptions的gutterIconPath属性配置自定义图标,不需要用到FileDecorationProvider:你只需要给你添加的自定义日志点加上专属标识,遍历编辑器可见行之后,给有自定义日志点的行应用装饰即可,和原生断点的展示逻辑完全对齐。
4. 可选:支持左键点击gutter快速添加
如果需要实现和原生断点一致的左键点击gutter添加逻辑,可以监听编辑器的mousedown事件,判断点击位置是否属于gutter区域,拿到对应行号后触发你的添加逻辑即可,可以配合修饰键判断(比如按住Alt点击添加自定义日志点)避免和原生断点逻辑冲突。
内容的提问来源于stack exchange,提问作者manu
相关产品推荐
相关产品推荐

