forked from microsoft/TypeScript
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrefactorProvider.ts
More file actions
36 lines (32 loc) · 1.34 KB
/
refactorProvider.ts
File metadata and controls
36 lines (32 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import {
ApplicableRefactorInfo,
arrayFrom,
flatMapIterator,
Refactor,
RefactorContext,
RefactorEditInfo,
} from "./_namespaces/ts";
import { refactorKindBeginsWith } from "./_namespaces/ts.refactor";
// A map with the refactor code as key, the refactor itself as value
// e.g. nonSuggestableRefactors[refactorCode] -> the refactor you want
const refactors = new Map<string, Refactor>();
/**
* @param name An unique code associated with each refactor. Does not have to be human-readable.
*
* @internal
*/
export function registerRefactor(name: string, refactor: Refactor) {
refactors.set(name, refactor);
}
/** @internal */
export function getApplicableRefactors(context: RefactorContext): ApplicableRefactorInfo[] {
return arrayFrom(flatMapIterator(refactors.values(), refactor =>
context.cancellationToken && context.cancellationToken.isCancellationRequested() ||
!refactor.kinds?.some(kind => refactorKindBeginsWith(kind, context.kind)) ? undefined :
refactor.getAvailableActions(context)));
}
/** @internal */
export function getEditsForRefactor(context: RefactorContext, refactorName: string, actionName: string): RefactorEditInfo | undefined {
const refactor = refactors.get(refactorName);
return refactor && refactor.getEditsForAction(context, actionName);
}