Revert "Provide emmet abbreviations via inline completions (#147387)"

This reverts commit 94de38e7dd.
Reason: Found some bugs while demoing the feature.
This commit is contained in:
Raymond Zhao 2022-04-19 16:31:57 -07:00
parent 08f9528d33
commit 98db85599e
No known key found for this signature in database
GPG Key ID: D36E5FCE46B63B58
4 changed files with 13 additions and 73 deletions

View File

@ -16,9 +16,6 @@
"type": "git",
"url": "https://github.com/microsoft/vscode.git"
},
"enabledApiProposals": [
"inlineCompletionsNew"
],
"activationEvents": [
"onCommand:emmet.expandAbbreviation",
"onCommand:editor.emmet.action.wrapWithAbbreviation",
@ -130,11 +127,6 @@
"default": false,
"markdownDescription": "%emmetTriggerExpansionOnTab%"
},
"emmet.useInlineCompletions": {
"type": "boolean",
"default": true,
"markdownDescription": "%emmetUseInlineCompletions%"
},
"emmet.preferences": {
"type": "object",
"default": {},

View File

@ -59,6 +59,5 @@
"emmetPreferencesOutputInlineBreak": "The number of sibling inline elements needed for line breaks to be placed between those elements. If `0`, inline elements are always expanded onto a single line.",
"emmetPreferencesOutputReverseAttributes": "If `true`, reverses attribute merging directions when resolving snippets.",
"emmetPreferencesOutputSelfClosingStyle": "Style of self-closing tags: html (`<br>`), xml (`<br/>`) or xhtml (`<br />`).",
"emmetPreferencesCssColorShort": "If `true`, color values like `#f` will be expanded to `#fff` instead of `#ffffff`.",
"emmetUseInlineCompletions": "If `true`, Emmet will use inline completions to suggest expansions."
"emmetPreferencesCssColorShort": "If `true`, color values like `#f` will be expanded to `#fff` instead of `#ffffff`."
}

View File

@ -23,7 +23,7 @@ import { addFileToParseCache, clearParseCache, removeFileFromParseCache } from '
export function activateEmmetExtension(context: vscode.ExtensionContext) {
migrateEmmetExtensionsPath();
refreshCompletionProviders(context);
registerCompletionProviders(context);
updateEmmetExtensionsPath();
context.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.wrapWithAbbreviation', (args) => {
@ -122,8 +122,8 @@ export function activateEmmetExtension(context: vscode.ExtensionContext) {
}));
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration((e) => {
if (e.affectsConfiguration('emmet.includeLanguages') || e.affectsConfiguration('emmet.useInlineCompletions')) {
refreshCompletionProviders(context);
if (e.affectsConfiguration('emmet.includeLanguages')) {
registerCompletionProviders(context);
}
if (e.affectsConfiguration('emmet.extensionsPath')) {
updateEmmetExtensionsPath();
@ -159,42 +159,11 @@ export function activateEmmetExtension(context: vscode.ExtensionContext) {
*/
const languageMappingForCompletionProviders: Map<string, string> = new Map<string, string>();
const completionProvidersMapping: Map<string, vscode.Disposable> = new Map<string, vscode.Disposable>();
const completionProviderDisposables: vscode.Disposable[] = [];
function refreshCompletionProviders(_: vscode.ExtensionContext) {
clearCompletionProviderInfo();
function registerCompletionProviders(context: vscode.ExtensionContext) {
let completionProvider = new DefaultCompletionItemProvider();
let includedLanguages = getMappingForIncludedLanguages();
const completionProvider = new DefaultCompletionItemProvider();
const inlineCompletionProvider: vscode.InlineCompletionItemProviderNew = {
async provideInlineCompletionItems(document: vscode.TextDocument, position: vscode.Position, _: vscode.InlineCompletionContextNew, token: vscode.CancellationToken) {
const items = await completionProvider.provideCompletionItems(document, position, token, { triggerCharacter: undefined, triggerKind: vscode.CompletionTriggerKind.Invoke });
if (!items) {
return undefined;
}
const item = items.items[0];
if (!item) {
return undefined;
}
const range = item.range as vscode.Range;
if (document.getText(range) !== item.label) {
// We only want to show an inline completion if we are really sure the user meant emmet.
// If the user types `d`, we don't want to suggest `<div></div>`.
return undefined;
}
return [
{
insertText: item.insertText as any,
filterText: item.label as any,
range
}
];
}
};
const useInlineCompletionProvider = vscode.workspace.getConfiguration('emmet').get<boolean>('useInlineCompletions');
const includedLanguages = getMappingForIncludedLanguages();
Object.keys(includedLanguages).forEach(language => {
if (languageMappingForCompletionProviders.has(language) && languageMappingForCompletionProviders.get(language) === includedLanguages[language]) {
return;
@ -209,13 +178,8 @@ function refreshCompletionProviders(_: vscode.ExtensionContext) {
completionProvidersMapping.delete(language);
}
let provider;
if (useInlineCompletionProvider) {
provider = vscode.languages.registerInlineCompletionItemProviderNew({ language, scheme: '*' }, inlineCompletionProvider);
} else {
provider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[includedLanguages[language]]);
}
completionProviderDisposables.push(provider);
const provider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[includedLanguages[language]]);
context.subscriptions.push(provider);
languageMappingForCompletionProviders.set(language, includedLanguages[language]);
completionProvidersMapping.set(language, provider);
@ -223,13 +187,8 @@ function refreshCompletionProviders(_: vscode.ExtensionContext) {
Object.keys(LANGUAGE_MODES).forEach(language => {
if (!languageMappingForCompletionProviders.has(language)) {
let provider;
if (useInlineCompletionProvider) {
provider = vscode.languages.registerInlineCompletionItemProviderNew({ language, scheme: '*' }, inlineCompletionProvider);
} else {
provider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[language]);
}
completionProviderDisposables.push(provider);
const provider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[language]);
context.subscriptions.push(provider);
languageMappingForCompletionProviders.set(language, language);
completionProvidersMapping.set(language, provider);
@ -237,16 +196,7 @@ function refreshCompletionProviders(_: vscode.ExtensionContext) {
});
}
function clearCompletionProviderInfo() {
languageMappingForCompletionProviders.clear();
completionProvidersMapping.clear();
let disposable: vscode.Disposable | undefined;
while (disposable = completionProviderDisposables.pop()) {
disposable.dispose();
}
}
export function deactivate() {
clearCompletionProviderInfo();
completionProvidersMapping.clear();
clearParseCache();
}

View File

@ -9,7 +9,6 @@
],
"include": [
"src/**/*",
"../../src/vscode-dts/vscode.d.ts",
"../../src/vscode-dts/vscode.proposed.inlineCompletionsNew.d.ts",
"../../src/vscode-dts/vscode.d.ts"
]
}