support hot registration emmet (#29986)

* register new included languages in emmet on the fly

* no need to export the function

* only register default completion on startup

* fix tests
This commit is contained in:
Jens Hausdorf
2017-07-23 00:40:24 +02:00
committed by Ramya Rao
parent a9d463248a
commit 4e6c429030

View File

@@ -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() {
}