From 233eac4110f6640e516634ef7c7cb12be3dbcc0d Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 4 Jun 2020 15:18:41 -0700 Subject: [PATCH] Simplify getFixAllActions --- .../src/features/fixAll.ts | 44 ++++++++----------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/extensions/typescript-language-features/src/features/fixAll.ts b/extensions/typescript-language-features/src/features/fixAll.ts index 8d85618ae98..86dd8116d10 100644 --- a/extensions/typescript-language-features/src/features/fixAll.ts +++ b/extensions/typescript-language-features/src/features/fixAll.ts @@ -186,13 +186,11 @@ class SourceAddMissingImports extends SourceAction { class TypeScriptAutoFixProvider implements vscode.CodeActionProvider { - public static readonly metadata: vscode.CodeActionProviderMetadata = { - providedCodeActionKinds: [ - SourceFixAll.kind, - SourceRemoveUnused.kind, - SourceAddMissingImports.kind, - ] - }; + private static kindProviders = [ + SourceFixAll, + SourceRemoveUnused, + SourceAddMissingImports, + ]; constructor( private readonly client: ITypeScriptServiceClient, @@ -200,6 +198,12 @@ class TypeScriptAutoFixProvider implements vscode.CodeActionProvider { private readonly diagnosticsManager: DiagnosticsManager, ) { } + public get metadata(): vscode.CodeActionProviderMetadata { + return { + providedCodeActionKinds: TypeScriptAutoFixProvider.kindProviders.map(x => x.kind), + }; + } + public async provideCodeActions( document: vscode.TextDocument, _range: vscode.Range, @@ -238,21 +242,9 @@ class TypeScriptAutoFixProvider implements vscode.CodeActionProvider { } private getFixAllActions(only: vscode.CodeActionKind): SourceAction[] { - const fixes = []; - - if (only.intersects(SourceFixAll.kind)) { - fixes.push(new SourceFixAll()); - } - - if (only.intersects(SourceRemoveUnused.kind)) { - fixes.push(new SourceRemoveUnused()); - } - - if (only.intersects(SourceAddMissingImports.kind)) { - fixes.push(new SourceAddMissingImports()); - } - - return fixes; + return TypeScriptAutoFixProvider.kindProviders + .filter(provider => only.intersects(provider.kind)) + .map(provider => new provider()); } } @@ -262,8 +254,8 @@ export function register( fileConfigurationManager: FileConfigurationManager, diagnosticsManager: DiagnosticsManager, ) { - return new VersionDependentRegistration(client, API.v300, () => - vscode.languages.registerCodeActionsProvider(selector, - new TypeScriptAutoFixProvider(client, fileConfigurationManager, diagnosticsManager), - TypeScriptAutoFixProvider.metadata)); + return new VersionDependentRegistration(client, API.v300, () => { + const provider = new TypeScriptAutoFixProvider(client, fileConfigurationManager, diagnosticsManager); + return vscode.languages.registerCodeActionsProvider(selector, provider, provider.metadata); + }); }