我想延期
我想向用户推荐“CompletionList”。 用户可以运行“editor.action.triggerSuggest”
我的扩展流程如下
但是我遇到了一些问题。 当已经输入特定字符时,无论我创建多少 CompletionItems,除非该特定字符包含在建议中,否则它们都不会出现。例如,如果光标位于单词“for”中的字母“r”之后,则不会出现建议列表,但如果光标位于“r”之后一个空格,则建议列表会按预期显示
当光标位于文本后面时
有空间的时候
有没有办法解决这个问题?
编辑
当我使用“NT”执行类似的任务时,代码完成项在代码完成中出现并带有字符“NT”。因此,我怀疑在 vscode Intellisense 中,根据光标位置,它可能正在寻找与“NT”特别相关的补全,因为光标位于“NT”中“T”之后。综上所述,vscode内部提供triggerSuggest时,似乎受到前面字符的影响,只提供与其相关的triggerSuggest项。有办法解决这个问题吗?
当光标位于文本后面时
有空间的时候
编辑
const completionTest = vscode.commands.registerCommand("sb.subhotkey", () => {
// Remove existing completions
const disposable = vscode.Disposable.from(CompletionProvider);
disposable.dispose();
// Sort candidates based on their values in descending order
candidates.sort((a, b) => b.value - a.value);
// Register new completion provider
CompletionProvider = vscode.languages.registerCompletionItemProvider(
"smallbasic",
{
provideCompletionItems(): vscode.ProviderResult<
vscode.CompletionItem[] | vscode.CompletionList
> {
const CompletionItems: vscode.CompletionItem[] = [];
for (const { key, value } of candidates) {
const completion = new vscode.CompletionItem(key);
const completionDocs = new vscode.MarkdownString(value.toString());
completion.documentation = completionDocs;
CompletionItems.push(completion);
}
return CompletionItems;
},
},
"."
);
// Triggest Suggest command
vscode.commands.executeCommand("editor.action.triggerSuggest");
});
候选人的结构如下:
0:{key: '[T, ID]', value: 1444}
1:{key: '[T, (, NT, Expr, T, )]', value: 982}
2:{key: '[T, STR]', value: 697}
3:{key: '[T, NUM]', value: 227}
4:{key: '[T, ID, NT, Idxs]', value: 152}
这是 VSC 对所有显示的列表(如命令面板)执行的模糊搜索。
您输入要搜索的部分文本,字符不需要彼此相邻,Camel 大小写的类名称、函数名称。
如果您想要会员建议,您的完成提供程序将由
.
字符触发,然后模糊搜索将使用光标之前的所有单词字符,如果在 .
之前没有字符,您会看到整个列表,则在您键入时会对其进行过滤。
您需要设置完成项的
filterText
属性。
filterText
为单词字符 + key
filterText
设置为
key