Skip to content

Commit afbf89e

Browse files
author
Andy
authored
Refactors can return ReadonlyArray<ApplicableRefactorInfo> (#28305)
* Refactors can return ReadonlyArray<ApplicableRefactorInfo> * Remove unnecessary type assertions
1 parent a682a52 commit afbf89e

9 files changed

+18
-18
lines changed

src/harness/fourslash.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5021,7 +5021,7 @@ namespace FourSlashInterface {
50215021
export interface VerifyRefactorOptions {
50225022
name: string;
50235023
actionName: string;
5024-
refactors: ts.ApplicableRefactorInfo[];
5024+
refactors: ReadonlyArray<ts.ApplicableRefactorInfo>;
50255025
}
50265026

50275027
export interface VerifyCompletionActionOptions extends NewContentOptions {

src/services/refactorProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace ts {
55
getEditsForAction(context: RefactorContext, actionName: string): RefactorEditInfo | undefined;
66

77
/** Compute (quickly) which actions are available here */
8-
getAvailableActions(context: RefactorContext): ApplicableRefactorInfo[] | undefined;
8+
getAvailableActions(context: RefactorContext): ReadonlyArray<ApplicableRefactorInfo>;
99
}
1010

1111
export interface RefactorContext extends textChanges.TextChangesContext {

src/services/refactors/addOrRemoveBracesToArrowFunction.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ namespace ts.refactor.addOrRemoveBracesToArrowFunction {
1515
addBraces: boolean;
1616
}
1717

18-
function getAvailableActions(context: RefactorContext): ApplicableRefactorInfo[] | undefined {
18+
function getAvailableActions(context: RefactorContext): ReadonlyArray<ApplicableRefactorInfo> {
1919
const { file, startPosition } = context;
2020
const info = getConvertibleArrowFunctionAtPosition(file, startPosition);
21-
if (!info) return undefined;
21+
if (!info) return emptyArray;
2222

2323
return [{
2424
name: refactorName,

src/services/refactors/convertExport.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ namespace ts.refactor {
44
const actionNameDefaultToNamed = "Convert default export to named export";
55
const actionNameNamedToDefault = "Convert named export to default export";
66
registerRefactor(refactorName, {
7-
getAvailableActions(context): ApplicableRefactorInfo[] | undefined {
7+
getAvailableActions(context): ReadonlyArray<ApplicableRefactorInfo> {
88
const info = getInfo(context);
9-
if (!info) return undefined;
9+
if (!info) return emptyArray;
1010
const description = info.wasDefault ? Diagnostics.Convert_default_export_to_named_export.message : Diagnostics.Convert_named_export_to_default_export.message;
1111
const actionName = info.wasDefault ? actionNameDefaultToNamed : actionNameNamedToDefault;
1212
return [{ name: refactorName, description, actions: [{ name: actionName, description }] }];

src/services/refactors/convertImport.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ namespace ts.refactor {
44
const actionNameNamespaceToNamed = "Convert namespace import to named imports";
55
const actionNameNamedToNamespace = "Convert named imports to namespace import";
66
registerRefactor(refactorName, {
7-
getAvailableActions(context): ApplicableRefactorInfo[] | undefined {
7+
getAvailableActions(context): ReadonlyArray<ApplicableRefactorInfo> {
88
const i = getImportToConvert(context);
9-
if (!i) return undefined;
9+
if (!i) return emptyArray;
1010
const description = i.kind === SyntaxKind.NamespaceImport ? Diagnostics.Convert_namespace_import_to_named_imports.message : Diagnostics.Convert_named_imports_to_namespace_import.message;
1111
const actionName = i.kind === SyntaxKind.NamespaceImport ? actionNameNamespaceToNamed : actionNameNamedToNamespace;
1212
return [{ name: refactorName, description, actions: [{ name: actionName, description }] }];

src/services/refactors/extractSymbol.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@ namespace ts.refactor.extractSymbol {
77
* Compute the associated code actions
88
* Exported for tests.
99
*/
10-
export function getAvailableActions(context: RefactorContext): ApplicableRefactorInfo[] | undefined {
10+
export function getAvailableActions(context: RefactorContext): ReadonlyArray<ApplicableRefactorInfo> {
1111
const rangeToExtract = getRangeToExtract(context.file, getRefactorContextSpan(context));
1212

1313
const targetRange = rangeToExtract.targetRange;
1414
if (targetRange === undefined) {
15-
return undefined;
15+
return emptyArray;
1616
}
1717

1818
const extractions = getPossibleExtractions(targetRange, context);
1919
if (extractions === undefined) {
2020
// No extractions possible
21-
return undefined;
21+
return emptyArray;
2222
}
2323

2424
const functionActions: RefactorActionInfo[] = [];
@@ -82,7 +82,7 @@ namespace ts.refactor.extractSymbol {
8282
});
8383
}
8484

85-
return infos.length ? infos : undefined;
85+
return infos.length ? infos : emptyArray;
8686
}
8787

8888
/* Exported for tests */

src/services/refactors/generateGetAccessorAndSetAccessor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor {
2020
readonly renameAccessor: boolean;
2121
}
2222

23-
function getAvailableActions(context: RefactorContext): ApplicableRefactorInfo[] | undefined {
24-
if (!getConvertibleFieldAtPosition(context)) return undefined;
23+
function getAvailableActions(context: RefactorContext): ReadonlyArray<ApplicableRefactorInfo> {
24+
if (!getConvertibleFieldAtPosition(context)) return emptyArray;
2525

2626
return [{
2727
name: actionName,

src/services/refactors/moveToNewFile.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
namespace ts.refactor {
33
const refactorName = "Move to a new file";
44
registerRefactor(refactorName, {
5-
getAvailableActions(context): ApplicableRefactorInfo[] | undefined {
6-
if (!context.preferences.allowTextChangesInNewFiles || getStatementsToMove(context) === undefined) return undefined;
5+
getAvailableActions(context): ReadonlyArray<ApplicableRefactorInfo> {
6+
if (!context.preferences.allowTextChangesInNewFiles || getStatementsToMove(context) === undefined) return emptyArray;
77
const description = getLocaleSpecificMessage(Diagnostics.Move_to_a_new_file);
88
return [{ name: refactorName, description, actions: [{ name: refactorName, description }] }];
99
},

src/testRunner/unittests/extractTestHelpers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ namespace ts {
107107
};
108108
const rangeToExtract = refactor.extractSymbol.getRangeToExtract(sourceFile, createTextSpanFromRange(selectionRange));
109109
assert.equal(rangeToExtract.errors, undefined, rangeToExtract.errors && "Range error: " + rangeToExtract.errors[0].messageText);
110-
const infos = refactor.extractSymbol.getAvailableActions(context)!;
110+
const infos = refactor.extractSymbol.getAvailableActions(context);
111111
const actions = find(infos, info => info.description === description.message)!.actions;
112112

113113
const data: string[] = [];
@@ -169,7 +169,7 @@ namespace ts {
169169
};
170170
const rangeToExtract = refactor.extractSymbol.getRangeToExtract(sourceFile, createTextSpanFromRange(selectionRange));
171171
assert.isUndefined(rangeToExtract.errors, rangeToExtract.errors && "Range error: " + rangeToExtract.errors[0].messageText);
172-
const infos = refactor.extractSymbol.getAvailableActions(context)!;
172+
const infos = refactor.extractSymbol.getAvailableActions(context);
173173
assert.isUndefined(find(infos, info => info.description === description.message));
174174
});
175175
}

0 commit comments

Comments
 (0)