Вклад условного просмотра с расширением vscode api - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь показать свой вклад только в том случае, если в редакторе есть файл HTML. Согласно этой проблеме на GitHub , я могу использовать предложение when. Я нашел в документации пример условия, основанного на типе файла. Он используется в команде, а не в представлении представления, хотя.

Я пытаюсь использовать приведенную ниже конфигурацию, вклад представления скрыт, но не отображается при открытии файла HTML. Если я удаляю предложение when, вклад представления показывает хорошо, но, конечно, все время.

"activationEvents": [
    "onLanguage:html"
],
"contributes": {
    "views": {
    "explorer": [
        {
          "id": "documentOutline",
          "name": "Document Outline",
          "when": "editorLangId == html"
        }
      ]
    }
}

1 Ответ

1 голос
/ 02 мая 2020

Согласно документации contribates.views , when зависит от значений context .

И в соответствии с расширением npm он также может содержать параметры конфигурации.

    "views": {
      "explorer": [{
        "id": "npm",
        "name": "%view.name%",
        "when": "npm:showScriptExplorer || config.npm.enableScriptExplorer"
      }]
    },

Расширение npm устанавливает значение контекста в функции активации

    if (await hasPackageJson()) {
        vscode.commands.executeCommand('setContext', 'npm:showScriptExplorer', true);
    }

Вы можете попробовать следующее:

В вашем расширении определите обработчик событий, который будет вызываться при изменении редактора (onDidChangeActiveTextEditor).

В обработчике событий установите значение контекста на основе Язык документа.

Редактировать

Работает со следующим кодом

  const setContext = () => {
      vscode.commands.executeCommand('setContext', 'documentOutline:fileIsHTML',
          vscode.window.activeTextEditor.document.languageId == 'html'); };
  vscode.window.onDidChangeActiveTextEditor(setContext, null, context.subscriptions);
  setContext();

И в package.json

"activationEvents": [
    "onLanguage:html"
],
"contributes": {
    "views": {
    "explorer": [
        {
          "id": "documentOutline",
          "name": "Document Outline",
          "when": "documentOutline:fileIsHTML"
        }
      ]
    }
}

Или, глядя на эту проблему условная видимость для пользовательских представлений это может быть еще проще. См. Пример Weinands: добавьте кавычки в == сравните.

"activationEvents": [
    "onLanguage:html"
],
"contributes": {
    "views": {
    "explorer": [
        {
          "id": "documentOutline",
          "name": "Document Outline",
          "when": "editorLangId == 'html'"
        }
      ]
    }
}

Edit

Попробовал это, и это не работает, возможно, editorLangId не переменная контекста.

...