提交 4e6c4290 编写于 作者: J Jens Hausdorf 提交者: Ramya Rao

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
上级 a9d46324
......@@ -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() {
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册