【发布时间】:2022-08-15 08:50:31
【问题描述】:
我正在尝试将 Completion sn-ps 添加到我正在编写的基于完成示例(https://github.com/microsoft/vscode-extension-samples/tree/main/completions-sample)的扩展中。我想让它分支完成。在我的扩展中,放是一个关键字,然后有可能的参数。然后每个参数都有更多参数。
前任:设置 FOO|BAR|BAS在哪里设置富可开|关,设置栏是1|2|3, 和设置基础是红色|蓝色.
我试过用
const SetCompletion = new vscode.CompletionItem(\'SET\');
SetCompletion.insertText = new vscode.SnippetString(\'SET ${1|FOO,BAR,BAS|};\');
然后继续
const SetFooCompletion = new vscode.CompletionItem(\'FOO\');
SetFooCompletion.insertText = new vscode.SnippetString(\'FOO ${1|ON,OFF|};\');
const SetBarCompletion = new vscode.CompletionItem(\'BAR\');
SetBarCompletion.insertText = new vscode.SnippetString(\'BAR ${1|1,2,3|};\');
const SetBasCompletion = new vscode.CompletionItem(\'BAS\');
SetBasCompletion.insertText = new vscode.SnippetString(\'BAS ${1|RED,BLUE|};\');
如果我在插入第一个项目后重新触发完成,这种工作方式。我认为可能有更好的方法。在我的真实世界代码中,我可以调用大约 15 个 SET 东西,每个都有不同类型的参数。有些是 ON|OFF,有些是数字,有些是字符串。在上面的 sn-ps 中,SET BAR ON 是无效的,因为 BAR 是一个整数并且只有 FOO 是 ON|OFF 所以我不想为所有 SET 语句提供所有可能的参数。它们应该特定于在第一次完成中解析的 SET 命令。
这可能吗?
编辑:修正了示例代码中的错别字
-
在您的 CompletionItemProvider 中,首先只为 SET 的第一个参数提供一个 sn-p,然后当用户键入空格时,您会为用户选择的情况找到正确的选项 sn-p:
SET FOO或SET BAR,请注意测试字符串末尾的空格
标签: visual-studio-code vscode-extensions vscode-snippets