Skip to content

Commit 23f4dc9

Browse files
author
Jesse Trinity
committed
use enum for RefactorTriggerReason
1 parent 53e8ed0 commit 23f4dc9

File tree

6 files changed

+22
-22
lines changed

6 files changed

+22
-22
lines changed

src/server/protocol.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -550,10 +550,8 @@ namespace ts.server.protocol {
550550
triggerReason?: RefactorTriggerReason;
551551
};
552552

553-
export type RefactorTriggerReason = RefactorInvokedReason;
554-
555-
export interface RefactorInvokedReason {
556-
kind: "invoked";
553+
export enum RefactorTriggerReason {
554+
Invoked = "invoked"
557555
}
558556

559557
/**

src/services/refactors/addOrRemoveBracesToArrowFunction.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ namespace ts.refactor.addOrRemoveBracesToArrowFunction {
1717

1818
function getAvailableActions(context: RefactorContext): readonly ApplicableRefactorInfo[] {
1919
const { file, startPosition, triggerReason } = context;
20-
const info = getConvertibleArrowFunctionAtPosition(file, startPosition, triggerReason);
20+
const forImplicitRequest = triggerReason ? triggerReason === RefactorTriggerReason.Implicit : true;
21+
const info = getConvertibleArrowFunctionAtPosition(file, startPosition, forImplicitRequest);
2122
if (!info) return emptyArray;
2223

2324
return [{
@@ -38,7 +39,7 @@ namespace ts.refactor.addOrRemoveBracesToArrowFunction {
3839

3940
function getEditsForAction(context: RefactorContext, actionName: string): RefactorEditInfo | undefined {
4041
const { file, startPosition } = context;
41-
const info = getConvertibleArrowFunctionAtPosition(file, startPosition, /*triggerReason*/ { kind: "invoked" });
42+
const info = getConvertibleArrowFunctionAtPosition(file, startPosition);
4243
if (!info) return undefined;
4344

4445
const { expression, returnStatement, func } = info;
@@ -70,12 +71,12 @@ namespace ts.refactor.addOrRemoveBracesToArrowFunction {
7071
return { renameFilename: undefined, renameLocation: undefined, edits };
7172
}
7273

73-
function getConvertibleArrowFunctionAtPosition(file: SourceFile, startPosition: number, triggerReason?: RefactorTriggerReason): Info | undefined {
74+
function getConvertibleArrowFunctionAtPosition(file: SourceFile, startPosition: number, forImplicitRequest = false): Info | undefined {
7475
const node = getTokenAtPosition(file, startPosition);
7576
const func = getContainingFunction(node);
7677
// Only offer a refactor in the function body on explicit refactor requests.
7778
if (!func || !isArrowFunction(func) || (!rangeContainsRange(func, node)
78-
|| (rangeContainsRange(func.body, node) && triggerReason?.kind !== "invoked"))) return undefined;
79+
|| (rangeContainsRange(func.body, node) && forImplicitRequest))) return undefined;
7980

8081
if (isExpression(func.body)) {
8182
return {

src/services/refactors/extractSymbol.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ namespace ts.refactor.extractSymbol {
88
* Exported for tests.
99
*/
1010
export function getAvailableActions(context: RefactorContext): readonly ApplicableRefactorInfo[] {
11-
const rangeToExtract = getRangeToExtract(context.file, getRefactorContextSpan(context), context.triggerReason);
11+
const forImplicitRequest = context.triggerReason ? context.triggerReason === RefactorTriggerReason.Implicit : true;
12+
const rangeToExtract = getRangeToExtract(context.file, getRefactorContextSpan(context), forImplicitRequest);
1213

1314
const targetRange = rangeToExtract.targetRange;
1415
if (targetRange === undefined) {
@@ -87,7 +88,7 @@ namespace ts.refactor.extractSymbol {
8788

8889
/* Exported for tests */
8990
export function getEditsForAction(context: RefactorContext, actionName: string): RefactorEditInfo | undefined {
90-
const rangeToExtract = getRangeToExtract(context.file, getRefactorContextSpan(context), /* triggerReason*/ { kind: "invoked" });
91+
const rangeToExtract = getRangeToExtract(context.file, getRefactorContextSpan(context));
9192
const targetRange = rangeToExtract.targetRange!; // TODO:GH#18217
9293

9394
const parsedFunctionIndexMatch = /^function_scope_(\d+)$/.exec(actionName);
@@ -186,12 +187,12 @@ namespace ts.refactor.extractSymbol {
186187
* not shown to the user, but can be used by us diagnostically)
187188
*/
188189
// exported only for tests
189-
export function getRangeToExtract(sourceFile: SourceFile, span: TextSpan, triggerReason?: RefactorTriggerReason): RangeToExtract {
190+
export function getRangeToExtract(sourceFile: SourceFile, span: TextSpan, forImplicitRequest = false): RangeToExtract {
190191
const { length } = span;
191-
if (length === 0 && triggerReason?.kind !== "invoked") {
192+
if (length === 0 && forImplicitRequest) {
192193
return { errors: [createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractEmpty)] };
193194
}
194-
const explicitCursorRequest = length === 0 && triggerReason?.kind === "invoked";
195+
const explicitCursorRequest = length === 0 && !forImplicitRequest;
195196

196197
// Walk up starting from the the start position until we find a non-SourceFile node that subsumes the selected span.
197198
// This may fail (e.g. you select two statements in the root of a source file)

src/services/refactors/extractType.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ namespace ts.refactor {
66
const extractToTypeDef = "Extract to typedef";
77
registerRefactor(refactorName, {
88
getAvailableActions(context): readonly ApplicableRefactorInfo[] {
9-
const info = getRangeToExtract(context, context.triggerReason);
9+
const forImplicitRequest = context.triggerReason ? context.triggerReason === RefactorTriggerReason.Implicit : true;
10+
const info = getRangeToExtract(context, forImplicitRequest);
1011
if (!info) return emptyArray;
1112

1213
return [{
@@ -23,7 +24,7 @@ namespace ts.refactor {
2324
},
2425
getEditsForAction(context, actionName): RefactorEditInfo {
2526
const { file, } = context;
26-
const info = Debug.checkDefined(getRangeToExtract(context, /*triggerReason*/ { kind: "invoked" }), "Expected to find a range to extract");
27+
const info = Debug.checkDefined(getRangeToExtract(context), "Expected to find a range to extract");
2728

2829
const name = getUniqueName("NewType", file);
2930
const edits = textChanges.ChangeTracker.with(context, changes => {
@@ -58,12 +59,12 @@ namespace ts.refactor {
5859

5960
type Info = TypeAliasInfo | InterfaceInfo;
6061

61-
function getRangeToExtract(context: RefactorContext, triggerReason?: RefactorTriggerReason): Info | undefined {
62+
function getRangeToExtract(context: RefactorContext, forImplicitRequest = false): Info | undefined {
6263
const { file, startPosition } = context;
6364
const isJS = isSourceFileJS(file);
6465
const current = getTokenAtPosition(file, startPosition);
6566
const range = createTextRangeFromSpan(getRefactorContextSpan(context));
66-
const explicitCursorRequest = range.pos === range.end && triggerReason?.kind === "invoked";
67+
const explicitCursorRequest = range.pos === range.end && !forImplicitRequest;
6768

6869
const selection = findAncestor(current, (node => node.parent && isTypeNode(node) && !rangeContainsSkipTrivia(range, node.parent, file) &&
6970
(explicitCursorRequest || nodeOverlapsWithStartEnd(current, file, range.pos, range.end))));

src/services/types.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -741,10 +741,9 @@ namespace ts {
741741
commands?: CodeActionCommand[];
742742
}
743743

744-
export type RefactorTriggerReason = RefactorInvokedReason;
745-
746-
export interface RefactorInvokedReason {
747-
kind: "invoked";
744+
export enum RefactorTriggerReason {
745+
Implicit = "implicit",
746+
Invoked = "invoked",
748747
}
749748

750749
export interface TextInsertion {

src/testRunner/unittests/services/extract/ranges.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace ts {
77
if (!selectionRange) {
88
throw new Error(`Test ${s} does not specify selection range`);
99
}
10-
const result = refactor.extractSymbol.getRangeToExtract(file, createTextSpanFromRange(selectionRange));
10+
const result = refactor.extractSymbol.getRangeToExtract(file, createTextSpanFromRange(selectionRange), /*forImplicitRequest*/ true);
1111
assert(result.targetRange === undefined, "failure expected");
1212
const sortedErrors = result.errors!.map(e => <string>e.messageText).sort();
1313
assert.deepEqual(sortedErrors, expectedErrors.sort(), "unexpected errors");

0 commit comments

Comments
 (0)