From f205b5a8461c96ed6d086915cdbe19fa87387593 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 14 Nov 2018 15:38:33 -0800 Subject: [PATCH] Fix refactoring action provider not being queried when using a kind filter The provided kind can either be a subset of a superset of the filter --- .../editor/contrib/codeAction/codeAction.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/vs/editor/contrib/codeAction/codeAction.ts b/src/vs/editor/contrib/codeAction/codeAction.ts index 98d34507027..1b6e7346dfb 100644 --- a/src/vs/editor/contrib/codeAction/codeAction.ts +++ b/src/vs/editor/contrib/codeAction/codeAction.ts @@ -23,8 +23,25 @@ export function getCodeActions(model: ITextModel, rangeOrSelection: Range | Sele const promises = CodeActionProviderRegistry.all(model) .filter(provider => { + if (!provider.providedCodeActionKinds) { + return true; + } + // Avoid calling providers that we know will not return code actions of interest - return !provider.providedCodeActionKinds || provider.providedCodeActionKinds.some(providedKind => isValidActionKind(trigger && trigger.filter, providedKind)); + return provider.providedCodeActionKinds.some(providedKind => { + // Filter out actions by kind + // The provided kind can be either a subset of a superset of the filtered kind + if (trigger && trigger.filter && trigger.filter.kind && !(trigger.filter.kind.contains(providedKind) || new CodeActionKind(providedKind).contains(trigger.filter.kind.value))) { + return false; + } + + // Don't return source actions unless they are explicitly requested + if (trigger && CodeActionKind.Source.contains(providedKind) && (!trigger.filter || !trigger.filter.includeSourceActions)) { + return false; + } + + return true; + }); }) .map(support => { return Promise.resolve(support.provideCodeActions(model, rangeOrSelection, codeActionContext, token)).then(providedCodeActions => { -- GitLab