diff --git a/src/sql/workbench/contrib/extensions/browser/extensions.contribution.ts b/src/sql/workbench/contrib/extensions/browser/extensions.contribution.ts index a4e883043b..286866787e 100644 --- a/src/sql/workbench/contrib/extensions/browser/extensions.contribution.ts +++ b/src/sql/workbench/contrib/extensions/browser/extensions.contribution.ts @@ -4,7 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { Registry } from 'vs/platform/registry/common/platform'; +import { IWorkbenchActionRegistry, Extensions as WorkbenchActionExtensions } from 'vs/workbench/common/actions'; +import { SyncActionDescriptor } from 'vs/platform/actions/common/actions'; +import { ExtensionsLabel } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { OpenExtensionAuthoringDocsAction } from 'sql/workbench/contrib/extensions/browser/extensionsActions'; +// Global Actions +const actionRegistry = Registry.as(WorkbenchActionExtensions.WorkbenchActions); +actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(OpenExtensionAuthoringDocsAction), 'Extensions: Author an Extension...', ExtensionsLabel); + +// Register Commands CommandsRegistry.registerCommand('azdata.extension.open', (accessor: ServicesAccessor, extension: { id: string }) => { if (extension && extension.id) { const commandService = accessor.get(ICommandService); diff --git a/src/sql/workbench/contrib/extensions/browser/extensionsActions.ts b/src/sql/workbench/contrib/extensions/browser/extensionsActions.ts index 2667ece3de..d2ad9e89ed 100644 --- a/src/sql/workbench/contrib/extensions/browser/extensionsActions.ts +++ b/src/sql/workbench/contrib/extensions/browser/extensionsActions.ts @@ -8,6 +8,8 @@ import { Action } from 'vs/base/common/actions'; import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; import { IExtensionsWorkbenchService, VIEWLET_ID, IExtensionsViewPaneContainer } from 'vs/workbench/contrib/extensions/common/extensions'; import { IExtensionRecommendation } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; +import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { URI } from 'vs/base/common/uri'; import { CancellationToken } from 'vs/base/common/cancellation'; import { PagedModel } from 'vs/base/common/paging'; @@ -67,3 +69,22 @@ export class InstallRecommendedExtensionsByScenarioAction extends Action { }); } } + +export class OpenExtensionAuthoringDocsAction extends Action { + + static readonly ID = 'workbench.extensions.action.openExtensionAuthoringDocs'; + static readonly LABEL = localize('openExtensionAuthoringDocs', "Author an Extension..."); + private static readonly extensionAuthoringDocsURI = 'https://docs.microsoft.com/sql/azure-data-studio/extension-authoring'; + + constructor( + id: string = OpenExtensionAuthoringDocsAction.ID, + label: string = OpenExtensionAuthoringDocsAction.LABEL, + @IOpenerService private readonly openerService: IOpenerService, + ) { + super(id, label); + } + + run(): Promise { + return this.openerService.open(URI.parse(OpenExtensionAuthoringDocsAction.extensionAuthoringDocsURI)); + } +} diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts b/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts index 4181cbf42f..dd122ce10c 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts @@ -24,6 +24,7 @@ import { /*RecentlyPublishedExtensionsAction, */ShowInstalledExtensionsAction, ShowOutdatedExtensionsAction, ShowDisabledExtensionsAction, ShowEnabledExtensionsAction, PredefinedExtensionFilterAction } from 'vs/workbench/contrib/extensions/browser/extensionsActions'; +import { OpenExtensionAuthoringDocsAction } from 'sql/workbench/contrib/extensions/browser/extensionsActions'; // {{ SQL CARBON EDIT }} import { IExtensionManagementService, IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement'; import { IWorkbenchExtensionEnablementService, IExtensionManagementServerService, IExtensionManagementServer } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; import { ExtensionsInput } from 'vs/workbench/contrib/extensions/common/extensionsInput'; @@ -555,6 +556,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE actions.push(new Separator()); actions.push(this.instantiationService.createInstance(InstallVSIXAction, InstallVSIXAction.ID, InstallVSIXAction.LABEL)); + actions.push(this.instantiationService.createInstance(OpenExtensionAuthoringDocsAction, OpenExtensionAuthoringDocsAction.ID, OpenExtensionAuthoringDocsAction.LABEL)); // {{SQL CARBON EDIT}} return actions; }