【发布时间】:2020-05-16 23:52:29
【问题描述】:
我正在开发一个 VSCode 扩展,它应该通过额外的代码完成来增强 JSON 编辑。因此我添加了四个虚拟建议(foo、foo1、foo2、foo3)开始测试。在 JSON 键后键入冒号时,它按预期工作:
此外,当我在一个空对象中触发完成时,它会按我的意愿工作(包括来自其他扩展的建议):
但是,当我在双引号内触发完成时(无论它们是否包含文本),我的建议都丢失了:
当我在CompletionItemProvider 中设置断点时,在这两种情况下,执行都会按预期暂停。所以它被正确调用,它肯定会返回我的建议。我查看了现有的 JSON 编辑器扩展(甚至是 VSCodes 的默认扩展)以获取如何正确实现它的建议,并查看默认的 JSON 扩展是否可能会覆盖双引号内的所有建议(即使在我看来这会破坏整个可扩展性的想法)但找不到任何东西。
如here 所述,复制一个空扩展就足够了。
这是我的 extension.ts:
// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
import * as vscode from 'vscode';
class OpenApiCompletionItemProvider implements vscode.CompletionItemProvider {
public provideCompletionItems(
document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken):
Thenable<vscode.CompletionItem[]> {
return Promise.resolve([
new vscode.CompletionItem('foo', vscode.CompletionItemKind.Class),
new vscode.CompletionItem('foo1', vscode.CompletionItemKind.Property),
new vscode.CompletionItem('foo2', vscode.CompletionItemKind.Interface),
new vscode.CompletionItem('foo3', vscode.CompletionItemKind.Class),
]);
}
}
export function activate(ctx: vscode.ExtensionContext): void {
ctx.subscriptions.push(
vscode.languages.registerCompletionItemProvider(
{ pattern: '**/*.openapi.json' },
new OpenApiCompletionItemProvider(),
':',
'"'
)
);
}
// this method is called when your extension is deactivated
export function deactivate() { }
【问题讨论】:
标签: typescript visual-studio-code vscode-extensions