如何控制 Visual Studio Code Extension Intellisense?

问题描述 投票:0回答:1

我想延期

我想向用户推荐“CompletionList”。 用户可以运行“editor.action.triggerSuggest”

我的扩展流程如下

  1. 用户写一些文字
  2. 如果他按下“完成命令”,
  3. vscode 扩展提供补全功能
  4. 和executeCommand(“editor.action.triggerSuggest”)

但是我遇到了一些问题。 当已经输入特定字符时,无论我创建多少 CompletionItems,除非该特定字符包含在建议中,否则它们都不会出现。例如,如果光标位于单词“for”中的字母“r”之后,则不会出现建议列表,但如果光标位于“r”之后一个空格,则建议列表会按预期显示

当光标位于文本后面时

img

有空间的时候

img

有没有办法解决这个问题?


编辑

当我使用“NT”执行类似的任务时,代码完成项在代码完成中出现并带有字符“NT”。因此,我怀疑在 vscode Intellisense 中,根据光标位置,它可能正在寻找与“NT”特别相关的补全,因为光标位于“NT”中“T”之后。综上所述,vscode内部提供triggerSuggest时,似乎受到前面字符的影响,只提供与其相关的triggerSuggest项。有办法解决这个问题吗?

当光标位于文本后面时

img

有空间的时候

img


编辑

  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}
javascript typescript visual-studio-code vscode-extensions
1个回答
0
投票

这是 VSC 对所有显示的列表(如命令面板)执行的模糊搜索。

您输入要搜索的部分文本,字符不需要彼此相邻,Camel 大小写的类名称、函数名称。

如果您想要会员建议,您的完成提供程序将由

.
字符触发,然后模糊搜索将使用光标之前的所有单词字符,如果在
.
之前没有字符,您会看到整个列表,则在您键入时会对其进行过滤。

您需要设置完成项的

filterText
属性。

  • 光标前是否有单词字符:设置
    filterText
    为单词字符 +
    key
  • 光标前是否有
  • NO 个单词字符:将 filterText
     设置为 
    key
    
    
© www.soinside.com 2019 - 2024. All rights reserved.