VSCode扩展:CompletionItemProvider输入|时无补全结果问题
问题解决:VSCode扩展CompletionItemProvider无补全内容显示
你的问题出在VSCode的补全过滤机制上:当输入|触发补全后,VSCode会默认用补全项的label和当前输入的前缀(也就是|)做匹配,而你定义的Sample1、Sample2和|完全不匹配,所以被过滤掉了,最终显示“No suggestions”。另外代码里的变量未声明,属于不良编码习惯,也需要修正。
修改后的代码如下:
context.subscriptions.push(vscode.languages.registerCompletionItemProvider( '*', { provideCompletionItems(document, position, token) { // 声明局部变量,避免全局污染 const item1 = new vscode.CompletionItem("Sample1"); const item2 = new vscode.CompletionItem("Sample2"); // 设置filterText为空字符串,跳过VSCode的默认前缀匹配过滤 item1.filterText = ''; item2.filterText = ''; // 可选:显式设置插入内容(默认会使用label,此处可省略,但显式设置更清晰) item1.insertText = "Sample1"; item2.insertText = "Sample2"; // 可选:设置补全项的类型图标,提升视觉体验 item1.kind = vscode.CompletionItemKind.Text; item2.kind = vscode.CompletionItemKind.Text; return [item1, item2]; } }, '|' // 触发字符 ));
关键修改说明:
filterText = '':强制VSCode不对补全项做前缀匹配,确保输入|后所有定义的补全项都能显示出来。- 变量声明:用
const声明局部变量,避免全局变量泄漏的风险。 kind设置:给补全项添加对应类型的图标,让用户能快速识别补全项的类型(可选,但推荐)。
现在重新加载扩展,输入|后就能看到Sample1和Sample2的补全选项了。
内容的提问来源于stack exchange,提问作者Kattyan
相关产品推荐
相关产品推荐

