diff --git a/extensions/emmet/src/extension.ts b/extensions/emmet/src/extension.ts index de66c9eeb870b1adbb4053d45c72aaff6ed30a26..9078581e80634f0daf1d6f45a500970979ff9ed5 100644 --- a/extensions/emmet/src/extension.ts +++ b/extensions/emmet/src/extension.ts @@ -22,16 +22,7 @@ import { updateExtensionsPath } from 'vscode-emmet-helper'; import * as path from 'path'; export function activate(context: vscode.ExtensionContext) { - let completionProvider = new DefaultCompletionItemProvider(); - Object.keys(LANGUAGE_MODES).forEach(language => { - const provider = vscode.languages.registerCompletionItemProvider(language, completionProvider, ...LANGUAGE_MODES[language]); - context.subscriptions.push(provider); - }); - let includedLanguages = getMappingForIncludedLanguages(); - Object.keys(includedLanguages).forEach(language => { - const provider = vscode.languages.registerCompletionItemProvider(language, completionProvider, ...LANGUAGE_MODES[includedLanguages[language]]); - context.subscriptions.push(provider); - }); + registerCompletionProviders(context, true); context.subscriptions.push(vscode.commands.registerCommand('emmet.wrapWithAbbreviation', (args) => { wrapWithAbbreviation(args); @@ -137,9 +128,36 @@ export function activate(context: vscode.ExtensionContext) { resolveUpdateExtensionsPath(); context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(() => { + registerCompletionProviders(context, false); resolveUpdateExtensionsPath(); })); } +/** + * Holds any registered completion providers by their language strings + */ +const registeredCompletionProviders: string[] = []; + +function registerCompletionProviders(context: vscode.ExtensionContext, isFirstStart: boolean) { + let completionProvider = new DefaultCompletionItemProvider(); + + if (isFirstStart) { + Object.keys(LANGUAGE_MODES).forEach(language => { + const provider = vscode.languages.registerCompletionItemProvider(language, completionProvider, ...LANGUAGE_MODES[language]); + context.subscriptions.push(provider); + }); + } + + let includedLanguages = getMappingForIncludedLanguages(); + Object.keys(includedLanguages).forEach(language => { + if (registeredCompletionProviders.includes(language)) { + return; + } + const provider = vscode.languages.registerCompletionItemProvider(language, completionProvider, ...LANGUAGE_MODES[includedLanguages[language]]); + context.subscriptions.push(provider); + registeredCompletionProviders.push(language); + }); +} + export function deactivate() { }