VSCode не показывает пользовательское предложение завершения, если курсор расположен на определенном символе - PullRequest
0 голосов
/ 15 апреля 2019

Я делаю расширение vscode, чтобы обеспечить подсветку синтаксиса и предложения для пользовательского языка, расширяющего язык HTML. Я использую API CompletionItemProvider.

На этом языке мы получили команды, обернутые в $% - $ как $% 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

Может кто-нибудь объяснить, что я делаю не так?

...