diff --git a/extensions/emmet/package.json b/extensions/emmet/package.json index 4d26781cfd2..2609279bc0a 100644 --- a/extensions/emmet/package.json +++ b/extensions/emmet/package.json @@ -84,12 +84,11 @@ "description": "%emmetExclude%" }, "emmet.extensionsPath": { - "type": [ - "string", - "array", - "null" - ], - "default": null, + "type": "array", + "items": { + "type": "string" + }, + "default": [], "description": "%emmetExtensionsPath%" }, "emmet.triggerExpansionOnTab": { diff --git a/extensions/emmet/src/emmetCommon.ts b/extensions/emmet/src/emmetCommon.ts index cb8dc21c586..b4c57b134be 100644 --- a/extensions/emmet/src/emmetCommon.ts +++ b/extensions/emmet/src/emmetCommon.ts @@ -17,11 +17,12 @@ import { fetchEditPoint } from './editPoint'; import { fetchSelectItem } from './selectItem'; import { evaluateMathExpression } from './evaluateMathExpression'; import { incrementDecrement } from './incrementDecrement'; -import { LANGUAGE_MODES, getMappingForIncludedLanguages, updateEmmetExtensionsPath, getPathBaseName, getSyntaxes, getEmmetMode } from './util'; +import { LANGUAGE_MODES, getMappingForIncludedLanguages, updateEmmetExtensionsPath, migrateEmmetExtensionsPath, getPathBaseName, getSyntaxes, getEmmetMode } from './util'; import { reflectCssValue } from './reflectCssValue'; import { addFileToParseCache, removeFileFromParseCache } from './parseDocument'; export function activateEmmetExtension(context: vscode.ExtensionContext) { + migrateEmmetExtensionsPath(); registerCompletionProviders(context); updateEmmetExtensionsPath(); diff --git a/extensions/emmet/src/util.ts b/extensions/emmet/src/util.ts index 2894647a472..ba81b46dfe7 100644 --- a/extensions/emmet/src/util.ts +++ b/extensions/emmet/src/util.ts @@ -49,6 +49,34 @@ export function updateEmmetExtensionsPath(forceRefresh: boolean = false) { } } +/** + * Migrate old configuration(string) for extensionsPath to new type(string[]) + * https://github.com/microsoft/vscode/issues/117517 + */ +export function migrateEmmetExtensionsPath() { + // Get the detail info of emmet.extensionsPath setting + let config = vscode.workspace.getConfiguration().inspect('emmet.extensionsPath'); + + // Update Global setting if the value type is string or the value is null + if (typeof config?.globalValue === 'string') { + vscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.globalValue], true); + } else if (config?.globalValue === null) { + vscode.workspace.getConfiguration().update('emmet.extensionsPath', [], true); + } + // Update Workspace setting if the value type is string or the value is null + if (typeof config?.workspaceValue === 'string') { + vscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.workspaceValue], false); + } else if (config?.workspaceValue === null) { + vscode.workspace.getConfiguration().update('emmet.extensionsPath', [], false); + } + // Update WorkspaceFolder setting if the value type is string or the value is null + if (typeof config?.workspaceFolderValue === 'string') { + vscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.workspaceFolderValue]); + } else if (config?.workspaceFolderValue === null) { + vscode.workspace.getConfiguration().update('emmet.extensionsPath', []); + } +} + /** * Mapping between languages that support Emmet and completion trigger characters */