From 53a53f8bb97ffce8cc7e840f8ed695b5cfb68a3f Mon Sep 17 00:00:00 2001 From: Raymond Zhao <7199958+rzhao271@users.noreply.github.com> Date: Fri, 26 May 2023 12:54:04 -0700 Subject: [PATCH] Remove toggle setting more eagerly (#183584) --- .../preferences/browser/settingsEditor2.ts | 15 +++++++++++---- .../contrib/preferences/browser/settingsTree.ts | 2 +- .../preferences/browser/settingsTreeModels.ts | 2 +- .../services/preferences/common/preferences.ts | 4 +++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts index 85176b9e7ae..966c9fc7afa 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts @@ -1196,8 +1196,13 @@ export class SettingsEditor2 extends EditorPane { } private addOrRemoveManageExtensionSetting(setting: ISetting, extension: IGalleryExtension, groups: ISettingsGroup[]): ISettingsGroup | undefined { - const extensionId = setting.extensionId!; - const matchingGroups = groups.filter(g => g.extensionInfo?.id.toLowerCase() === extensionId.toLowerCase()); + const matchingGroups = groups.filter(g => { + const lowerCaseId = g.extensionInfo?.id.toLowerCase(); + return (lowerCaseId === setting.stableExtensionId!.toLowerCase() || + lowerCaseId === setting.prereleaseExtensionId!.toLowerCase()); + }); + + const extensionId = setting.displayExtensionId!; if (!matchingGroups.length) { const newGroup: ISettingsGroup = { sections: [{ @@ -1217,7 +1222,7 @@ export class SettingsEditor2 extends EditorPane { } else if (matchingGroups.length >= 2) { // Remove the group with the manage extension setting. const matchingGroupIndex = matchingGroups.findIndex(group => - group.sections.length === 1 && group.sections[0].settings.length === 1 && group.sections[0].settings[0].extensionId); + group.sections.length === 1 && group.sections[0].settings.length === 1 && group.sections[0].settings[0].displayExtensionId); if (matchingGroupIndex !== -1) { groups.splice(matchingGroupIndex, 1); } @@ -1286,7 +1291,9 @@ export class SettingsEditor2 extends EditorPane { title: localize('manageExtension', "Manage {0}", extensionName), scope: ConfigurationScope.WINDOW, type: 'null', - extensionId: extensionId, + displayExtensionId: extensionId, + stableExtensionId: key, + prereleaseExtensionId: typeof prerelease === 'string' ? prerelease : key, extensionGroupTitle: groupTitle ?? extensionName }; const additionalGroup = this.addOrRemoveManageExtensionSetting(setting, extension, groups); diff --git a/src/vs/workbench/contrib/preferences/browser/settingsTree.ts b/src/vs/workbench/contrib/preferences/browser/settingsTree.ts index e9d2abb003b..fba91877693 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsTree.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsTree.ts @@ -1926,7 +1926,7 @@ export class SettingsExtensionToggleRenderer extends AbstractSettingRenderer imp protected renderValue(dataElement: SettingsTreeSettingElement, template: ISettingExtensionToggleItemTemplate, onChange: (_: undefined) => void): void { template.elementDisposables.clear(); - const extensionId = dataElement.setting.extensionId!; + const extensionId = dataElement.setting.displayExtensionId!; template.elementDisposables.add(template.actionButton.onDidClick(async () => { this._telemetryService.publicLog2<{ extensionId: String }, ManageExtensionClickTelemetryClassification>('ManageExtensionClick', { extensionId }); this._commandService.executeCommand('extension.open', extensionId); diff --git a/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts b/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts index 0c3fca00640..27d5d03efbd 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts @@ -750,7 +750,7 @@ function trimCategoryForGroup(category: string, groupId: string): string { function isExtensionToggleSetting(setting: ISetting, productService: IProductService): boolean { return ENABLE_EXTENSION_TOGGLE_SETTINGS && !!productService.extensionRecommendations && - !!setting.extensionId; + !!setting.displayExtensionId; } function isExcludeSetting(setting: ISetting): boolean { diff --git a/src/vs/workbench/services/preferences/common/preferences.ts b/src/vs/workbench/services/preferences/common/preferences.ts index 38ff3bb4879..eb3cd0cb738 100644 --- a/src/vs/workbench/services/preferences/common/preferences.ts +++ b/src/vs/workbench/services/preferences/common/preferences.ts @@ -97,7 +97,9 @@ export interface ISetting { categoryLabel?: string; // For ExtensionToggle settings - extensionId?: string; + displayExtensionId?: string; + stableExtensionId?: string; + prereleaseExtensionId?: string; title?: string; extensionGroupTitle?: string; }