From 154c4774b58fba810a761fd9401729a6332b380f Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Nov 2019 17:46:32 -0800 Subject: [PATCH] Render code actions contribution point in extension contributions Fixes #84091 --- .../platform/extensions/common/extensions.ts | 12 +++++++ .../extensions/browser/extensionEditor.ts | 32 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts index 99a37eaa9f2..4a9c4489708 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts @@ -96,6 +96,17 @@ export interface IWebviewEditor { }[]; } +export interface ICodeActionContributionAction { + readonly kind: string; + readonly title: string; + readonly description?: string; +} + +export interface ICodeActionContribution { + readonly languages: readonly string[]; + readonly actions: readonly ICodeActionContributionAction[]; +} + export interface IExtensionContributions { commands?: ICommand[]; configuration?: IConfiguration | IConfiguration[]; @@ -113,6 +124,7 @@ export interface IExtensionContributions { colors?: IColor[]; localizations?: ILocalization[]; readonly webviewEditors?: readonly IWebviewEditor[]; + readonly codeActions?: readonly ICodeActionContribution[]; } export type ExtensionKind = 'ui' | 'workspace' | 'web'; diff --git a/src/vs/workbench/contrib/extensions/browser/extensionEditor.ts b/src/vs/workbench/contrib/extensions/browser/extensionEditor.ts index eedb451f6f6..7c0193db0ec 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionEditor.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionEditor.ts @@ -848,6 +848,7 @@ export class ExtensionEditor extends BaseEditor { const renders = [ this.renderSettings(content, manifest, layout), this.renderCommands(content, manifest, layout), + this.renderCodeActions(content, manifest, layout), this.renderLanguages(content, manifest, layout), this.renderColorThemes(content, manifest, layout), this.renderIconThemes(content, manifest, layout), @@ -1075,6 +1076,37 @@ export class ExtensionEditor extends BaseEditor { return true; } + private renderCodeActions(container: HTMLElement, manifest: IExtensionManifest, onDetailsToggle: Function): boolean { + const codeActions = manifest.contributes?.codeActions || []; + if (!codeActions.length) { + return false; + } + + const flatActions = arrays.flatten( + codeActions.map(contribution => + contribution.actions.map(action => ({ ...action, languages: contribution.languages })))); + + const details = $('details', { open: true, ontoggle: onDetailsToggle }, + $('summary', { tabindex: '0' }, localize('codeActions', "Code Actions ({0})", flatActions.length)), + $('table', undefined, + $('tr', undefined, + $('th', undefined, localize('codeActions.title', "Title")), + $('th', undefined, localize('codeActions.kind', "Kind")), + $('th', undefined, localize('codeActions.description', "Description")), + $('th', undefined, localize('codeActions.languages', "Languages"))), + ...flatActions.map(action => + $('tr', undefined, + $('td', undefined, action.title), + $('td', undefined, $('code', undefined, action.kind)), + $('td', undefined, action.description ?? ''), + $('td', undefined, ...action.languages.map(language => $('code', undefined, language))))) + ) + ); + + append(container, details); + return true; + } + private renderColorThemes(container: HTMLElement, manifest: IExtensionManifest, onDetailsToggle: Function): boolean { const contrib = manifest.contributes?.themes || []; if (!contrib.length) { -- GitLab