Согласно документации 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
не переменная контекста.