如果光标位于特定字符上,VSCode不会显示自定义完成建议

时间:2019-04-15 16:31:44

标签: javascript typescript visual-studio-code intellisense vscode-extensions

我正在进行vscode扩展,以提供语法突出显示和针对扩展HTML lang的自定义语言的建议。我正在使用CompletionItemProvider API。

在这种语言中,我们得到了用$%-$包裹的命令,例如 $%FOR(...)$ $%IF(...)$ ,所以我想在输入$%时显示可用命令的建议。

但是由于某些原因,当光标位于%字符上时,该功能不起作用。

这是代码的简化版本。我基本上基于完成示例(https://github.com/Microsoft/vscode-extension-samples/blob/master/completions-sample/src/extension.ts):

    const completionProvider = vscode.languages.registerCompletionItemProvider(
        '*',
        {
            provideCompletionItems(document: vscode.TextDocument, position: vscode.Position) {

                let linePrefix = document.lineAt(position).text.substr(0, position.character);

                if (!linePrefix.endsWith("$%")) {
                    return undefined;
                }
                console.log("should show suggestions");

                return [
                    new vscode.CompletionItem('IF', vscode.CompletionItemKind.Method),
                    new vscode.CompletionItem('FOR', vscode.CompletionItemKind.Method)
                ];
            }
        }
    );

context.subscriptions.push(completionProvider);

该功能接收在编辑器上键入的文本,并检查用户是否刚刚输入了$%,如果是,则显示建议列表

结果是弹出窗口,显示“无建议”消息: Imgur

但是,如果我检查另一个以'%'以外的字符结尾的触发器字符串,则更改行

if (!linePrefix.endsWith("$%")) {

对此

if (!linePrefix.endsWith("$%$")) {

或这个

if (!linePrefix.endsWith("$%.")) {

有效!

Imgur Imgur

有人可以解释我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我重置了 VS 代码的设置,现在它可以工作了。 警告:所有已安装的扩展程序都将被删除。