Цель подписки на команду в расширении vscode?

Почему в руководстве по расширению VSCode рекомендуется подписывать зарегистрированную команду на context.subscriptions?

Насколько я могу судить, это не кажется необходимым или полезным.

Вот фрагмент кода из расширение VSCode официальное руководство:

let disposable = vscode.commands.registerCommand('extension.helloWorld', () => {
    // The code you place here will be executed every time your command is executed

    // Display a message box to the user
    vscode.window.showInformationMessage('Hello World!');
});

context.subscriptions.push(disposable);

но это само по себе работает нормально:

vscode.commands.registerCommand('extension.helloWorld', () => {
    vscode.window.showInformationMessage('Hello World!');
});

Кроме того, я попытался отключить расширения, которые добавляют и не добавляют свои зарегистрированные команды в context.subscriptions - команды были недоступны после отключения в обоих случаях.

Справочник по API кода VS определяет subscriptions как:

подписки: {dispose} []

Массив, в который можно добавить одноразовые предметы. Когда это расширение деактивировано, одноразовые предметы будут утилизированы.

Означает ли это, что если зарегистрированные команды НЕ удаляются, их слушатели каким-то образом остаются даже после закрытия расширения?

TDLR - Стоит ли подписывать свои команды или нет и почему?

Приветствуются любые объяснения или идеи!


person stuart    schedule 06.04.2019    source источник


Ответы (1)


Да, вам следует добавить свою команду в subscriptions. Подписка гарантирует, что ваша команда будет должным образом отменена, когда ваше расширение выгружается.

vscode.commands.registerCommand возвращает одноразовый объект. Удаление возвращенного объекта отменяет регистрацию команды, позволяя VS Code очистить любое внутреннее состояние / дескрипторы, которые он может иметь для него.

Короче говоря, все одноразовые объекты, которые создает ваше расширение, должны каким-то образом входить в subscriptions, чтобы их можно было должным образом очистить, когда ваше расширение выгружается. Отсутствие регистрации одноразового устройства может не вызывать очевидных проблем для пользователей в 99% случаев, но может вызывать проблемы в случаях, например, когда пользователи включают и отключают ваше расширение без перезапуска vscode.

person Matt Bierner    schedule 08.04.2019