mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-24 10:38:59 +01:00
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:
@@ -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() {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user