VS Code新开发扩展无补全提示问题求助
VS Code补全扩展不显示建议的排查与解决
你开发的VS Code输入自动补全扩展,调试时控制台能输出正确的转写结果,但激活扩展时补全提示tooltip不显示建议,需求是将转写结果显示在补全建议中,选中后替换原输入词汇。结合你提供的代码,以下是几个关键排查点和解决方法:
关键问题分析与修复
1. 补全项未设置替换范围(range)
你的CompletionItem缺少range属性,VS Code需要明确知道补全项要替换文档中的哪一段文本。默认的单词匹配逻辑可能无法正确识别你要替换的searchText范围,导致补全提示不显示。
修改代码,添加范围计算:
/** * Input auto-completion provider */ class InputAutoCompletionProvider { // eslint-disable-next-line class-methods-use-this provideCompletionItems(document, position) { const lineAt = document.lineAt(position); const lineText = document.getText(lineAt.range); const searchText = getSearchText(lineText, position); // 计算要替换的文本范围 const startPos = new vscode.Position(position.line, position.character - searchText.length); const replaceRange = new vscode.Range(startPos, position); const items = []; const item = new vscode.CompletionItem(kh2dev(searchText)); item.sortText = String(0); // 设置替换范围 item.range = replaceRange; // 可选:设置补全项类型,提升显示效果 item.kind = vscode.CompletionItemKind.Text; console.log(item); items.push(item); return items; } } module.exports = InputAutoCompletionProvider;
2. 验证getSearchText函数的准确性
确保getSearchText能正确提取光标位置前需要转写的文本片段。如果该函数返回空字符串或错误的文本范围,补全项会因为没有可替换的目标而无法显示。可以在控制台打印searchText和对应的位置参数,确认提取逻辑符合预期。
3. 检查Provider的注册逻辑
确认扩展激活时正确注册了补全Provider,并且指定了正确的文档选择器(documentSelector),确保Provider能在目标文件类型中被触发:
// 示例注册代码(需在扩展激活函数中添加) function activate(context) { const provider = new InputAutoCompletionProvider(); const disposable = vscode.languages.registerCompletionItemProvider( { scheme: 'file', language: '*' }, // 替换为你需要支持的语言,比如'plaintext' provider // 可选:添加触发字符,比如[' ', '-'],当输入这些字符时触发补全 ); context.subscriptions.push(disposable); }
4. 补充补全项的增强属性(可选)
设置detail或documentation属性可以让补全提示更清晰,帮助用户理解转写结果:
item.detail = '京都-哈佛转写'; item.documentation = new vscode.MarkdownString(`转写结果:**${kh2dev(searchText)}**`);
内容的提问来源于stack exchange,提问作者Echchama Nayak
相关产品推荐
相关产品推荐

