【问题标题】:VSC writing own extension, autocompleting with variable and prefix &x_VariableOneVSCODE 编写自己的扩展,使用变量和前缀 &x_VariableOne 自动完成
【发布时间】:2020-07-16 16:32:00
【问题描述】:

如何让我的扩展程序首先查找&s_? 一种解决方案是将所有变量重命名为大写前缀S_,但这不是我的方案中的选项。

我正在为 Visual Studio Code(VSC) 开发 extension。变量定义如下:

  &i_ Var_Six`
  &s_ SampelTwo
  &...

VSC 中的实现是通过“直接实现”来完成的:

let provider1 = vscode.languages.registerCompletionItemProvider({ language: 'test' }, {

    provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext) {
        vscode.languages.registerCompletionItemProvider
        var completions = new Array();
        for (let knownElement of TestVar) {
            completions.push(new vscode.CompletionItem(knownElement));
        }
        return completions;
    }
});
context.subscriptions.push(provider1);

现在我遇到的问题是,自动完成首先查找大写字母,但也将& 识别为变量的一部分。

我想要的是我可以开始输入“s_”,它会建议所有以“&s_”开头的已知变量。

VSC 实际上建议输入“s_”是“i_Var_Six”。这是因为它查找大写字母“S”(驼峰式)和字符“_”它无法识别字符“&”,因为它被定义为“单词分隔符”。

【问题讨论】:

  • 能否请您显示您传递给vscode.languages.registerCompletionItemProvider 函数的参数,如果我理解问题可能与triggerCharacters 有关。

标签: visual-studio-code autocomplete vscode-extensions


【解决方案1】:

我不确定为什么& 不起作用,这是我所知道的最接近的实现方式。

(阅读 cmets)

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  const TestVar: string[] = ['&_awd', '&_Awd', '&_213', '$_34', '$_23'];
  let provider1 = vscode.languages.registerCompletionItemProvider(
    { language: 'plaintext' },
    {
      provideCompletionItems(
        document: vscode.TextDocument,
        position: vscode.Position,
        token: vscode.CancellationToken,
        context: vscode.CompletionContext
      ) {
        var completions = [];
        for (let knownElement of TestVar) {
          const item = new vscode.CompletionItem(knownElement);
          // i added this so that the first & sign gets removed, 
          // you might want to add a check so that this edit only gets added when the user typed a & sign. 
          item.additionalTextEdits = [
            { newText: '', range: new vscode.Range(new vscode.Position(position.line, position.character - 1), position), },
          ];
          completions.push(item);
        }
        return completions;
      },
    },
    '.',
    '&' // add this so that the completions get triggered when the user types the & sign.
  );
  context.subscriptions.push(provider1);
}

【讨论】:

  • 感谢您的回答和“清理”,它适用于$。但是我仍然有问题,因为我实际上使用& 而不是$,很抱歉我碰巧了,因为$ 更常用。那么为什么它适用于$ 但不适用于& ,我该如何改变呢?
  • @RaLo 我更新了我的答案,我不知道你能不能做你想做的事。
  • @Sylver 再次感谢您,我真的很感激!但这仍然不是我想要的。如果我这样做,它将正确找到&_ 之后的项目,但我真正想要的是它只给我以例如开头的变量。输入&s_&s_awd&s_Awd,但不是&f_...我认为解决方案可能是“Word Pattern”,我只是尝试过,但没有成功...link
猜你喜欢
  • 1970-01-01
  • 2021-12-11
  • 2018-03-20
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 2022-12-03
相关资源
最近更新 更多