Я разрабатываю расширение VSCode, которое должно улучшить JSON редактирование с дополнительным дополнением кода. Поэтому я добавил четыре фиктивных предложения (foo
, foo1
, foo2
, foo3
), чтобы начать тестирование. При вводе двоеточия после клавиши JSON она работает должным образом:
Также, когда я запускаю завершение в пустом объекте, он работает так, как я хочу это (включая предложения из других расширений):
Однако, когда я запускаю завершение в двойных кавычках (независимо от того, содержат ли они текст или нет), мои предложения отсутствуют:
Когда я устанавливаю точку останова в моих CompletionItemProvider
паузах выполнения, как и ожидалось в обоих случаях , Так что он называется правильно, и он точно возвращает мои предложения. Я посмотрел в существующих JSON расширениях редактора (даже VSCodes по умолчанию), чтобы получить совет, как правильно его реализовать и посмотреть, может ли расширение JSON по умолчанию перезаписать все предложения в двойных кавычках (даже если это нарушит всю идею расширяемости). по моему мнению) но ничего не смог найти.
Для воспроизведения достаточно создать пустое расширение, как описано здесь .
Вот мой 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() { }