VSCode扩展开发:provideInlineCompletionItems无法使用求助
问题排查与修复
你的代码存在两处关键问题,导致内联补全无法生效:
1. Range范围参数顺序错误
vscode.Range的构造规则是起始位置在前,结束位置在后,你当前写的new vscode.Range(position.translate(0, txt.length), position)把「当前位置后移txt长度的位置」设为起始点,当前位置设为结束点,生成了反向的无效范围(起始位置大于结束位置),VSCode会直接忽略这类补全项。
如果只是需要在当前光标位置插入hi,不需要替换已有内容,可以直接省略range属性;若要替换光标后的内容,再调整range的位置顺序。
2. 补全项结构不规范
虽然VSCode兼容普通对象模拟InlineCompletionItem,但更稳妥的方式是直接实例化官方提供的vscode.InlineCompletionItem类。同时text属性已被废弃,建议使用insertText(实际插入的文本),若显示文本与插入文本一致,可直接传入文本内容作为构造参数。
修复后的代码
const vscode = require('vscode'); function activate(context) { const provider = { provideInlineCompletionItems: async (document, position, context, token) => { const txt = 'hi'; // 实例化标准InlineCompletionItem,省略range则在当前位置插入补全内容 return [new vscode.InlineCompletionItem(txt)]; } }; vscode.languages.registerInlineCompletionItemProvider({ pattern: "**" }, provider); } function deactivate() {} module.exports = { activate, deactivate };
额外验证步骤
- 确认扩展已激活:按
F1输入Extensions: Show Active Extensions,检查你的扩展是否在列表中。 - 触发补全逻辑:在空白文件中输入任意字符,内联补全默认会在用户输入时自动触发。
内容的提问来源于stack exchange,提问作者Alex Mortez
相关产品推荐
相关产品推荐

