change type of RefactorTriggerReason

This commit is contained in:
Jesse Trinity
2020-05-29 12:54:59 -07:00
parent 23e00644f4
commit f3751fbdf3
8 changed files with 22 additions and 20 deletions
+8 -8
View File
@@ -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 {
+5 -1
View File
@@ -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);
}
}
+2 -4
View File
@@ -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.
@@ -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;
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
+1 -4
View File
@@ -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;
+3
View File
@@ -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: {} }>;