Change:
a deprecated extension, for example Bracket Pair Colorizer extensions viewlet -notice how it is not very visible that the extension is deprecated. If the user wants to migrate they have to click on "configure these settings" and uninstall the extension 's solve both of these things by rendering a "Migrate" button for deprecated extensions that have alternatives The migrate button would be similar to the Update button in looks, but it would either: Install the alternative extension, uninstall the deprecated one Uninstall the deprecated extension, open settings view with the desired settings shown
I do not like Migrate button for an extension like Bracket Pair Colorizer that needs settings to configured. It felt little weird to me enabling Migrate button for this extension and opening settings editor but not applying any settings to migrate. Hence I enabled this button only for those extensions with alternate extensions <img width="1120" alt="image (2)" src="https://user-"
that makes great sense, thanks! I plan to try this out as soon as there is a new insiders out. Feel free to close this issue then :)
I just tried the latest insiders which should have your changes. However I do not see the Migrate button in the Extensions details view. Also it would be cool if the button was also in the extensions viewlet. Similar to the button. !
Its because alternate extension is already installed and migrating is just uninstalling the the deprecated extension. I thought it might be too aggressive to show in Extensions Viewlet. What if users do not want to migrate and they always see it in extensions viewlet?
you are right. When I uninstall eslint all is good and the button gets rendered in the extension details - cool! Extensions viewlet - as for users not wanting to migrate and still seeing it - I think that is fine. It is the same if you do not want to update and you always see "reload required". It is an update, it is just an update to a different extension. I do not find this too aggressive, especially since we want to push users off deprecated extensions.
Makes sense. Showing Migrate action in extensions view (without extension name) <img width="293" alt="image" src="https://user-"
Awesome, thanks! Let's see what the users says about the full flow and how it goes during endgame :)

Discussion:
import { IPagedRenderer } from 'vs/base/browser/ui/list/listPaging'; import { Event } from 'vs/base/common/event'; import { IExtension, ExtensionContainers, ExtensionState, IExtensionsWorkbenchService } from 'vs/workbench/contrib/extensions/common/extensions'; <del> import { UpdateAction, ManageExtensionAction, ReloadAction, ExtensionStatusLabelAction, RemoteInstallAction, ExtensionStatusAction, LocalInstallAction, ActionWithDropDownAction, InstallDropdownAction, InstallingLabelAction, ExtensionActionWithDropdownActionViewItem, ExtensionDropDownAction, WebInstallAction, SwitchToPreReleaseVersionAction, SwitchToReleasedVersionAction } from 'vs/workbench/contrib/extensions/browser/extensionsActions'; </del> <ins> import { UpdateAction, ManageExtensionAction, ReloadAction, ExtensionStatusLabelAction, RemoteInstallAction, ExtensionStatusAction, LocalInstallAction, ActionWithDropDownAction, InstallDropdownAction, InstallingLabelAction, ExtensionActionWithDropdownActionViewItem, ExtensionDropDownAction, WebInstallAction, SwitchToPreReleaseVersionAction, SwitchToReleasedVersionAction, MigrateDeprecatedExtension } from 'vs/workbench/contrib/extensions/browser/extensionsActions'; </ins> import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { RatingsWidget, InstallCountWidget, RecommendationWidget, RemoteBadgeWidget, ExtensionPackCountWidget as ExtensionPackBadgeWidget, SyncIgnoredWidget, ExtensionHoverWidget, ExtensionActivationStatusWidget, PreReleaseBookmarkWidget, extensionVerifiedPublisherIconColor } from 'vs/workbench/contrib/extensions/browser/extensionsWidgets'; import { IExtensionService, toExtension } from 'vs/workbench/services/extensions/common/extensions';

const reloadAction = this.instantiationService.createInstance(ReloadAction); const actions = [ this.instantiationService.createInstance(ExtensionStatusLabelAction), <ins> this.instantiationService.createInstance(MigrateDeprecatedExtension, true), </ins> this.instantiationService.createInstance(UpdateAction), reloadAction, this.instantiationService.createInstance(InstallDropdownAction),