import * as vscode from 'vscode'; const typeScriptExtensionId = 'vscode.typescript-language-features'; const pluginId = 'typescript-lit-html-plugin'; const configurationSection = 'lit-html'; export async function activate(context) { const extension = vscode.extensions.getExtension(typeScriptExtensionId); if (!extension) { return; } await extension.activate(); if (!extension.exports || !extension.exports.getAPI) { return; } const api = extension.exports.getAPI(0); if (!api) { return; } vscode.workspace.onDidChangeConfiguration(e => { if (e.affectsConfiguration(configurationSection)) { synchronizeConfiguration(api); } }, undefined, context.subscriptions); synchronizeConfiguration(api); } function synchronizeConfiguration(api) { api.configurePlugin(pluginId, getConfiguration()); } function getConfiguration() { const config = vscode.workspace.getConfiguration(configurationSection); const outConfig = { format: {} }; withConfigValue(config, 'tags', tags => { outConfig.tags = tags; }); withConfigValue(config, 'format.enabled', enabled => { outConfig.format.enabled = enabled; }); return outConfig; } function withConfigValue(config, key, withValue) { const configSetting = config.inspect(key); if (!configSetting) { return; } // Make sure the user has actually set the value. // VS Code will return the default values instead of `undefined`, even if user has not don't set anything. if (typeof configSetting.globalValue === 'undefined' && typeof configSetting.workspaceFolderValue === 'undefined' && typeof configSetting.workspaceValue === 'undefined') { return; } const value = config.get(key, undefined); if (typeof value !== 'undefined') { withValue(value); } }