From f3751fbdf3034d4ccc760753e689b401c2fdbce6 Mon Sep 17 00:00:00 2001 From: Jesse Trinity Date: Thu, 21 May 2020 16:08:19 -0700 Subject: [PATCH] change type of RefactorTriggerReason --- src/harness/fourslashImpl.ts | 16 ++++++++-------- src/harness/fourslashInterfaceImpl.ts | 6 +++++- src/server/protocol.ts | 6 ++---- .../addOrRemoveBracesToArrowFunction.ts | 2 +- src/services/refactors/extractSymbol.ts | 2 +- src/services/refactors/extractType.ts | 2 +- src/services/types.ts | 5 +---- tests/cases/fourslash/fourslash.ts | 3 +++ 8 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/harness/fourslashImpl.ts b/src/harness/fourslashImpl.ts index dd4135ca40c..d3cdcb16558 100644 --- a/src/harness/fourslashImpl.ts +++ b/src/harness/fourslashImpl.ts @@ -3214,8 +3214,8 @@ namespace FourSlash { }; } - public verifyRefactorAvailable(negative: boolean, name: string, actionName?: string) { - let refactors = this.getApplicableRefactorsAtSelection(); + public verifyRefactorAvailable(negative: boolean, triggerReason: ts.RefactorTriggerReason, name: string, actionName?: string) { + let refactors = this.getApplicableRefactorsAtSelection(triggerReason); refactors = refactors.filter(r => r.name === name && (actionName === undefined || r.actions.some(a => a.name === actionName))); const isAvailable = refactors.length > 0; @@ -3644,14 +3644,14 @@ namespace FourSlash { test(renameKeys(newFileContents, key => pathUpdater(key) || key), "with file moved"); } - private getApplicableRefactorsAtSelection() { - return this.getApplicableRefactorsWorker(this.getSelection(), this.activeFile.fileName); + private getApplicableRefactorsAtSelection(triggerReason: ts.RefactorTriggerReason = "implicit") { + return this.getApplicableRefactorsWorker(this.getSelection(), this.activeFile.fileName, ts.emptyOptions, triggerReason); } - private getApplicableRefactors(rangeOrMarker: Range | Marker, preferences = ts.emptyOptions): readonly ts.ApplicableRefactorInfo[] { - return this.getApplicableRefactorsWorker("position" in rangeOrMarker ? rangeOrMarker.position : rangeOrMarker, rangeOrMarker.fileName, preferences); // eslint-disable-line no-in-operator + private getApplicableRefactors(rangeOrMarker: Range | Marker, preferences = ts.emptyOptions, triggerReason: ts.RefactorTriggerReason = "implicit"): readonly ts.ApplicableRefactorInfo[] { + return this.getApplicableRefactorsWorker("position" in rangeOrMarker ? rangeOrMarker.position : rangeOrMarker, rangeOrMarker.fileName, preferences, triggerReason); // eslint-disable-line no-in-operator } - private getApplicableRefactorsWorker(positionOrRange: number | ts.TextRange, fileName: string, preferences = ts.emptyOptions): readonly ts.ApplicableRefactorInfo[] { - return this.languageService.getApplicableRefactors(fileName, positionOrRange, preferences) || ts.emptyArray; + private getApplicableRefactorsWorker(positionOrRange: number | ts.TextRange, fileName: string, preferences = ts.emptyOptions, triggerReason: ts.RefactorTriggerReason): readonly ts.ApplicableRefactorInfo[] { + return this.languageService.getApplicableRefactors(fileName, positionOrRange, preferences, triggerReason) || ts.emptyArray; } public configurePlugin(pluginName: string, configuration: any): void { diff --git a/src/harness/fourslashInterfaceImpl.ts b/src/harness/fourslashInterfaceImpl.ts index f4905c00b84..07eea0c9066 100644 --- a/src/harness/fourslashInterfaceImpl.ts +++ b/src/harness/fourslashInterfaceImpl.ts @@ -208,7 +208,11 @@ namespace FourSlashInterface { } public refactorAvailable(name: string, actionName?: string) { - this.state.verifyRefactorAvailable(this.negative, name, actionName); + this.state.verifyRefactorAvailable(this.negative, "implicit", name, actionName); + } + + public refactorAvailableForTriggerReason(triggerReason: ts.RefactorTriggerReason, name: string, actionName?: string) { + this.state.verifyRefactorAvailable(this.negative, triggerReason, name, actionName); } } diff --git a/src/server/protocol.ts b/src/server/protocol.ts index 58a5988a4bf..db34b0838d9 100644 --- a/src/server/protocol.ts +++ b/src/server/protocol.ts @@ -547,12 +547,10 @@ namespace ts.server.protocol { arguments: GetApplicableRefactorsRequestArgs; } export type GetApplicableRefactorsRequestArgs = FileLocationOrRangeRequestArgs & { - triggerReason?: RefactorTriggerReason; + triggerReason?: RefactorTriggerReason }; - export enum RefactorTriggerReason { - Invoked = "invoked" - } + export type RefactorTriggerReason = "implicit" | "invoked"; /** * Response is a list of available refactorings. diff --git a/src/services/refactors/addOrRemoveBracesToArrowFunction.ts b/src/services/refactors/addOrRemoveBracesToArrowFunction.ts index 3f499a06e7f..3f1324e2266 100644 --- a/src/services/refactors/addOrRemoveBracesToArrowFunction.ts +++ b/src/services/refactors/addOrRemoveBracesToArrowFunction.ts @@ -17,7 +17,7 @@ namespace ts.refactor.addOrRemoveBracesToArrowFunction { function getAvailableActions(context: RefactorContext): readonly ApplicableRefactorInfo[] { const { file, startPosition, triggerReason } = context; - const forImplicitRequest = triggerReason ? triggerReason === RefactorTriggerReason.Implicit : true; + const forImplicitRequest = triggerReason ? triggerReason === "implicit" : true; const info = getConvertibleArrowFunctionAtPosition(file, startPosition, forImplicitRequest); if (!info) return emptyArray; diff --git a/src/services/refactors/extractSymbol.ts b/src/services/refactors/extractSymbol.ts index b7c535fc44f..8425ff9d457 100644 --- a/src/services/refactors/extractSymbol.ts +++ b/src/services/refactors/extractSymbol.ts @@ -8,7 +8,7 @@ namespace ts.refactor.extractSymbol { * Exported for tests. */ export function getAvailableActions(context: RefactorContext): readonly ApplicableRefactorInfo[] { - const forImplicitRequest = context.triggerReason ? context.triggerReason === RefactorTriggerReason.Implicit : true; + const forImplicitRequest = context.triggerReason ? context.triggerReason === "implicit" : true; const rangeToExtract = getRangeToExtract(context.file, getRefactorContextSpan(context), forImplicitRequest); const targetRange = rangeToExtract.targetRange; diff --git a/src/services/refactors/extractType.ts b/src/services/refactors/extractType.ts index f442c5e0c0d..114df56e8d9 100644 --- a/src/services/refactors/extractType.ts +++ b/src/services/refactors/extractType.ts @@ -6,7 +6,7 @@ namespace ts.refactor { const extractToTypeDef = "Extract to typedef"; registerRefactor(refactorName, { getAvailableActions(context): readonly ApplicableRefactorInfo[] { - const forImplicitRequest = context.triggerReason ? context.triggerReason === RefactorTriggerReason.Implicit : true; + const forImplicitRequest = context.triggerReason ? context.triggerReason === "implicit" : true; const info = getRangeToExtract(context, forImplicitRequest); if (!info) return emptyArray; diff --git a/src/services/types.ts b/src/services/types.ts index e4878471e68..d970e5a69e2 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -741,10 +741,7 @@ namespace ts { commands?: CodeActionCommand[]; } - export enum RefactorTriggerReason { - Implicit = "implicit", - Invoked = "invoked", - } + export type RefactorTriggerReason = "implicit" | "invoked"; export interface TextInsertion { newText: string; diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index d7d4935118d..b8b65406055 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -243,6 +243,7 @@ declare namespace FourSlashInterface { applicableRefactorAvailableForRange(): void; refactorAvailable(name: string, actionName?: string): void; + refactorAvailableForTriggerReason(triggerReason: RefactorTriggerReason, name: string, action?: string): void } class verify extends verifyNegatable { assertHasRanges(ranges: Range[]): void; @@ -683,6 +684,8 @@ declare namespace FourSlashInterface { triggerCharacter?: string, } + export type RefactorTriggerReason = "implicit" | "invoked"; + export interface VerifyCodeFixAvailableOptions { readonly description: string; readonly actions?: ReadonlyArray<{ readonly type: string, readonly data: {} }>;