VSCode: Как программно установить обработчик для события изменения языка редактора в моем расширении? - PullRequest
0 голосов
/ 21 октября 2019

Я делаю расширение для VS Code. Моя задача - добавить элемент в строку состояния при работе с конкретным языком, например, SQL. Для других языков элемент отображать не нужно. Я создал команду:

    envStatusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 80);
    envStatusBarItem.command = aseChangeEnvironmentCommand;
    context.subscriptions.push(envStatusBarItem);

и установил слушателя:

context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(updateEnvStatusBarItemFn));

Кроме того, в package.json добавлено условие "onLanguage: sql" в activationEvents.

Я показываю и скрываю элемент строки состояния следующим образом:

    const updateEnvStatusBarItemFn = () => {
        const editor = vscode.window.activeTextEditor;
        if (editor) {
            if (editor.document.languageId === 'sql') {
                let aseCurrentServer = context.globalState.get('aseCurrentServer', '');
                envStatusBarItem.text = `ASE[${aseCurrentServer}]`;
                envStatusBarItem.show();
            }
            else {
                envStatusBarItem.hide();
            }
        }
        else {
            envStatusBarItem.hide();
        }
    };

Проблема в том, что расширение активируется, когда вы меняете язык в редакторе на SQL или открываете файл * .sql (каксогласно условию в package.json). Элемент строки состояния отображается, но тогда расширение считается активным, а функция отображения / скрытия элемента строки состояния работает только на программном обработчике onDidChangeActiveTextEditor при переключении вкладок. Я не мог найти слушателя, связанного с изменением языка, на котором я мог бы повесить мой обработчик. Есть ли такой способ, или я должен написать функцию-запрос?

1 Ответ

0 голосов
/ 23 октября 2019

Я получил ответ от команды VSCode на github:

Когда язык документа изменяется, запускаются события onDidCloseTextDocument и onDidOpenTextDocument:

github comment

Описание в исходном коде VSCode.

...