Code change:
} } <ins> export class MigrateDeprecatedExtension extends ExtensionAction { private static readonly EnabledClass = `${ExtensionAction.LABEL_ACTION_CLASS} prominent migrate`; private static readonly DisabledClass = `${MigrateDeprecatedExtension.EnabledClass} disabled`; constructor( private readonly small: boolean, @IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService ) { super('extensions.uninstall', localize('migrateExtension', "Migrate"), MigrateDeprecatedExtension.DisabledClass, false); this.update(); } update(): void { this.enabled = false; this.class = MigrateDeprecatedExtension.DisabledClass; if (!this.extension?.local) { return; } if (this.extension.state !== ExtensionState.Installed) { return; } if (!this.extension.deprecationInfo?.extension) { return; } const id = this.extension.deprecationInfo.extension.id; if (this.extensionsWorkbenchService.local.some(e => areSameExtensions(e.identifier, { id }))) { return; } this.enabled = true; this.class = MigrateDeprecatedExtension.EnabledClass; this.tooltip = localize('migrate to', "Migrate to {0}", this.extension.deprecationInfo.extension.displayName); this.label = this.small ? localize('migrate', "Migrate") : this.tooltip; } override async run(): Promise<any> { if (!this.extension?.deprecationInfo?.extension) { return; } await this.extensionsWorkbenchService.uninstall(this.extension); const [extension] = await this.extensionsWorkbenchService.getExtensions([{ id: this.extension.deprecationInfo.extension.id, preRelease: this.extension.deprecationInfo?.extension?.preRelease }], CancellationToken.None); await this.extensionsWorkbenchService.install(extension); } } </ins> export class ExtensionActionWithDropdownActionViewItem extends ActionWithDropdownActionViewItem { constructor(

Related discussion:
text: Code, search for "bracket pair colorizer" how it is nicely rendered as deprecated on install -notice dialog The dialog should offer a third button to configure built-in settings instead. Same if an extension had an alternative extension. Example: ! fyi
I assume you want the extra button to replicate this link in the hover tip, right? ! As an aside, any doc yet about how an extension gets tagged as deprecated?
yes, a button that will replicate that behaviour correct. No docs yet written. I plan to add them soon. The process is to write an email to us or to ping us on GitHub. In the future we will have a more straightforward approach when MP adds UI.
I feel, the third option would be a general options like More Information... clicking on this shall open the extension editor. This will be consistent and useful so that user will get enough info before taking an action
"More Information..." might work, but in order to have one less hop we could render: "Install EXTENSION_NAME Instead" "Enable Native Settings Instead" That would just do the action right straight away. I am not sure if those button names are too long. So just a suggestion. Whatever you prefer...
Yah I see your point, but going to extension editor gives user more information and an opportunity to look at the alternative extension before installing. And also I do not like that this button changes with extension. More Information... would be consistent.
That's fair. We can start with your proposal and see how it goes. My only concern with "More Information" is that the user might think it is more information about the deprecation. While we actually want to guide the user to a solution. So it is something like "More about the alternative". I am not sure if there is a good button label to represent this.
<img width="308" alt="image (1)" src="https://user-"
Changed the second button as follows ! !
Awesome!!