Allow mapping of default modes to other modes in Emmet completion provider Fixes #32260

This commit is contained in:
Ramya Achutha Rao 2017-08-24 15:24:19 -07:00
parent 1c0757b9dd
commit 905a3081e9

View file

@ -25,7 +25,7 @@ import { reflectCssValue } from './reflectCssValue';
import * as path from 'path';
export function activate(context: vscode.ExtensionContext) {
registerCompletionProviders(context, true);
registerCompletionProviders(context);
context.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.wrapWithAbbreviation', (args) => {
wrapWithAbbreviation(args);
@ -143,7 +143,7 @@ export function activate(context: vscode.ExtensionContext) {
resolveUpdateExtensionsPath();
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(() => {
registerCompletionProviders(context, false);
registerCompletionProviders(context);
resolveUpdateExtensionsPath();
}));
}
@ -151,26 +151,39 @@ export function activate(context: vscode.ExtensionContext) {
/**
* Holds any registered completion providers by their language strings
*/
const registeredCompletionProviders: string[] = [];
const languageMappingForCompletionProviders: Map<string, string> = new Map<string, string>();
const completionProvidersMapping: Map<string, vscode.Disposable> = new Map<string, vscode.Disposable>();
function registerCompletionProviders(context: vscode.ExtensionContext, isFirstStart: boolean) {
function registerCompletionProviders(context: vscode.ExtensionContext) {
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)) {
if (languageMappingForCompletionProviders.has(language) && languageMappingForCompletionProviders.get(language) === includedLanguages[language]) {
return;
}
if (languageMappingForCompletionProviders.has(language)) {
completionProvidersMapping.get(language).dispose();
languageMappingForCompletionProviders.delete(language);
completionProvidersMapping.delete(language);
}
const provider = vscode.languages.registerCompletionItemProvider(language, completionProvider, ...LANGUAGE_MODES[includedLanguages[language]]);
context.subscriptions.push(provider);
registeredCompletionProviders.push(language);
languageMappingForCompletionProviders.set(language, includedLanguages[language]);
completionProvidersMapping.set(language, provider);
});
Object.keys(LANGUAGE_MODES).forEach(language => {
if (!languageMappingForCompletionProviders.has(language)) {
const provider = vscode.languages.registerCompletionItemProvider(language, completionProvider, ...LANGUAGE_MODES[language]);
context.subscriptions.push(provider);
languageMappingForCompletionProviders.set(language, language);
completionProvidersMapping.set(language, provider);
}
});
}