mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 13:46:13 +00:00
Allow mapping of default modes to other modes in Emmet completion provider Fixes #32260
This commit is contained in:
parent
1c0757b9dd
commit
905a3081e9
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue