Skip to content

Commit c75f6d0

Browse files
author
Andy Hanson
committed
Add multiple overloads for verify.goToDefinition.
Use explicit pairs `verify.goToDefinition([["a", "b"], ["c", "d"]])` instead of `verify.goToDefinition("a", "b", "c", "d")`. Also provide an option `verify.goToDefinition({ a: "b", c: "d" })` for cases where the starts are not theirselves lists.
1 parent 37f8eac commit c75f6d0

24 files changed

+145
-106
lines changed

src/harness/fourslash.ts

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -529,24 +529,35 @@ namespace FourSlash {
529529
this.verifyGoToDefinitionWorker(endMarker instanceof Array ? endMarker : [endMarker]);
530530
}
531531

532-
public verifyGoToDefinition(startsAndEnds: (string | string[])[]) {
533-
if (startsAndEnds.length % 2) {
534-
throw new Error("verify.goToDefinition needs an even number of arguments.");
532+
public verifyGoToDefinition(arg0: any, endMarkerNames?: string | string[]) {
533+
if (endMarkerNames) {
534+
this.verifyGoToDefinitionPlain(arg0, endMarkerNames);
535535
}
536-
537-
for (let i = 0; i < startsAndEnds.length; i += 2) {
538-
const start = startsAndEnds[i];
539-
const end = startsAndEnds[i + 1];
540-
541-
if (start instanceof Array) {
542-
for (const s of start) {
543-
this.verifyGoToDefinitionSingle(s, end);
536+
else if (arg0 instanceof Array) {
537+
const pairs: [string | string[], string | string[]][] = arg0;
538+
for (const [start, end] of pairs) {
539+
this.verifyGoToDefinitionPlain(start, end);
540+
}
541+
}
542+
else {
543+
const obj: { [startMarkerName: string]: string | string[] } = arg0;
544+
for (const startMarkerName in obj) {
545+
if (ts.hasProperty(obj, startMarkerName)) {
546+
this.verifyGoToDefinitionPlain(startMarkerName, obj[startMarkerName]);
544547
}
545548
}
546-
else {
547-
this.verifyGoToDefinitionSingle(start, end);
549+
}
550+
}
551+
552+
private verifyGoToDefinitionPlain(startMarkerNames: string | string[], endMarkerNames: string | string[]) {
553+
if (startMarkerNames instanceof Array) {
554+
for (const start of startMarkerNames) {
555+
this.verifyGoToDefinitionSingle(start, endMarkerNames);
548556
}
549557
}
558+
else {
559+
this.verifyGoToDefinitionSingle(startMarkerNames, endMarkerNames);
560+
}
550561
}
551562

552563
public verifyGoToDefinitionForMarkers(markerNames: string[]) {
@@ -555,9 +566,9 @@ namespace FourSlash {
555566
}
556567
}
557568

558-
private verifyGoToDefinitionSingle(start: string, end: string | string[]) {
559-
this.goToMarker(start);
560-
this.verifyGoToDefinitionWorker(end instanceof Array ? end : [end]);
569+
private verifyGoToDefinitionSingle(startMarkerName: string, endMarkerNames: string | string[]) {
570+
this.goToMarker(startMarkerName);
571+
this.verifyGoToDefinitionWorker(endMarkerNames instanceof Array ? endMarkerNames : [endMarkerNames]);
561572
}
562573

563574
private verifyGoToDefinitionWorker(endMarkers: string[]) {
@@ -2947,8 +2958,11 @@ namespace FourSlashInterface {
29472958
this.state.verifyGoToDefinitionIs(endMarkers);
29482959
}
29492960

2950-
public goToDefinition(...startsAndEnds: (string | string[])[]) {
2951-
this.state.verifyGoToDefinition(startsAndEnds);
2961+
public goToDefinition(startMarkerName: string | string[], endMarkerName: string | string[]): void;
2962+
public goToDefinition(startsAndEnds: [string | string[], string | string[]][]): void;
2963+
public goToDefinition(startsAndEnds: { [startMarkerName: string]: string | string[] }): void;
2964+
public goToDefinition(arg0: any, endMarkerName?: string | string[]) {
2965+
this.state.verifyGoToDefinition(arg0, endMarkerName);
29522966
}
29532967

29542968
public goToDefinitionForMarkers(...markerNames: string[]) {

tests/cases/fourslash/ambientShorthandGotoDefinition.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,25 @@
1212

1313
goTo.marker("useFoo");
1414
verify.quickInfoIs("import foo");
15-
verify.goToDefinition(
16-
"useFoo", "importFoo",
17-
"importFoo", "module");
15+
verify.goToDefinition({
16+
useFoo: "importFoo",
17+
importFoo: "module"
18+
});
1819

1920
goTo.marker("useBar");
2021
verify.quickInfoIs("import bar");
2122
verify.goToDefinition("useBar", "module");
2223

2324
goTo.marker("useBaz");
2425
verify.quickInfoIs("import baz");
25-
verify.goToDefinition(
26-
"useBaz", "importBaz",
27-
"idBaz", "module");
26+
verify.goToDefinition({
27+
useBaz: "importBaz",
28+
idBaz: "module"
29+
});
2830

2931
goTo.marker("useBang");
3032
verify.quickInfoIs("import bang = require(\"jquery\")");
31-
verify.goToDefinition(
32-
"useBang", "importBang",
33-
"idBang", "module");
33+
verify.goToDefinition({
34+
useBang: "importBang",
35+
idBang: "module"
36+
});

tests/cases/fourslash/fourslash.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,12 @@ declare namespace FourSlashInterface {
156156
* `verify.goToDefinition("a", "b");` verifies that go-to-definition at marker "a" takes you to marker "b".
157157
* `verify.goToDefinition(["a", "aa"], "b");` verifies that markers "a" and "aa" have the same definition "b".
158158
* `verify.goToDefinition("a", ["b", "bb"]);` verifies that "a" has multiple definitions available.
159-
* Finally, `verify.goToDefinition("a", "b", "c", "d");` is just `verify.goToDefinition("a", "b"); verify.goToDefinition("c", "d");`.
160159
*/
161-
goToDefinition(...startsAndEnds: (string | string[])[]): void;
160+
goToDefinition(startMarkerNames: string | string[], endMarkerNames: string | string[]): void;
161+
/** Performs `goToDefinition` for each pair. */
162+
goToDefinition(startsAndEnds: [string | string[], string | string[]][]): void;
163+
/** Performs `goToDefinition` on each key and value. */
164+
goToDefinition(startsAndEnds: { [startMarkerName: string]: string | string[] }): void;
162165
/** Verifies goToDefinition for each `${markerName}Reference` -> `${markerName}Definition` */
163166
goToDefinitionForMarkers(...markerNames: string[]): void;
164167
verifyGetEmitOutputForCurrentFile(expected: string): void;

tests/cases/fourslash/goToDeclarationDecoratorOverloads.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
//// @/*useDecSymbol*/dec [s]() {}
1414
////}
1515

16-
verify.goToDefinition(
17-
"useDecString", "defDecString",
18-
"useDecSymbol", "defDecSymbol");
16+
verify.goToDefinition({
17+
useDecString: "defDecString",
18+
useDecSymbol: "defDecSymbol"
19+
});

tests/cases/fourslash/goToDefinitionAlias.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
//// x;
2424
////}
2525

26-
verify.goToDefinition(
27-
["alias1Type", "alias1Value"], "alias1Definition",
28-
["alias2Type", "alias2Value"], "alias2Definition");
26+
verify.goToDefinition([
27+
[["alias1Type", "alias1Value"], "alias1Definition"],
28+
[["alias2Type", "alias2Value"], "alias2Definition"]
29+
]);

tests/cases/fourslash/goToDefinitionConstructorOverloads.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
////var constructorOverload = new /*constructorOverloadReference1*/ConstructorOverload();
1010
////var constructorOverload = new /*constructorOverloadReference2*/ConstructorOverload("foo");
1111

12-
verify.goToDefinition(
13-
"constructorOverloadReference1", "constructorOverload1",
14-
"constructorOverloadReference2", "constructorOverload2",
15-
"constructorOverload1", "constructorDefinition");
12+
verify.goToDefinition({
13+
constructorOverloadReference1: "constructorOverload1",
14+
constructorOverloadReference2: "constructorOverload2",
15+
constructorOverload1: "constructorDefinition"
16+
});

tests/cases/fourslash/goToDefinitionDecorator.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
//// return target => target;
1717
////}
1818

19-
verify.goToDefinition(
20-
"decoratorUse", "decoratorDefinition",
21-
"decoratorFactoryUse", "decoratorFactoryDefinition");
19+
verify.goToDefinition({
20+
decoratorUse: "decoratorDefinition",
21+
decoratorFactoryUse: "decoratorFactoryDefinition"
22+
});

tests/cases/fourslash/goToDefinitionFunctionOverloads.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
/////*functionOverloadReference2*/functionOverload("123");
99
/////*brokenOverload*/functionOverload({});
1010

11-
verify.goToDefinition(
12-
"functionOverloadReference1", "functionOverload1",
13-
"functionOverloadReference2", "functionOverload2",
14-
"brokenOverload", "functionOverload1",
15-
"functionOverload", "functionOverloadDefinition");
11+
verify.goToDefinition({
12+
functionOverloadReference1: "functionOverload1",
13+
functionOverloadReference2: "functionOverload2",
14+
brokenOverload: "functionOverload1",
15+
functionOverload: "functionOverloadDefinition"
16+
});

tests/cases/fourslash/goToDefinitionFunctionOverloadsInClass.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
//// constructor() { }
1212
////}
1313

14-
verify.goToDefinition(
15-
"staticFunctionOverload", "staticFunctionOverloadDefinition",
16-
"functionOverload", "functionOverloadDefinition");
14+
verify.goToDefinition({
15+
staticFunctionOverload: "staticFunctionOverloadDefinition",
16+
functionOverload: "functionOverloadDefinition"
17+
});

tests/cases/fourslash/goToDefinitionInMemberDeclaration.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
//// }
2020
////}
2121

22-
verify.goToDefinition(
23-
["interfaceReference", "interfaceReferenceInList", "interfaceReferenceInConstructor"], "interfaceDefinition",
24-
["classReference", "classReferenceInInitializer"], "classDefinition",
25-
["enumReference", "enumReferenceInInitializer"], "enumDefinition",
26-
"selfReference", "selfDefinition");
22+
verify.goToDefinition([
23+
[["interfaceReference", "interfaceReferenceInList", "interfaceReferenceInConstructor"], "interfaceDefinition"],
24+
[["classReference", "classReferenceInInitializer"], "classDefinition"],
25+
[["enumReference", "enumReferenceInInitializer"], "enumDefinition"],
26+
["selfReference", "selfDefinition"]
27+
]);

tests/cases/fourslash/goToDefinitionLabels.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
//// }
1010
////}
1111

12-
verify.goToDefinition(
13-
"1", "label1Definition",
14-
"2", "label2Definition",
12+
verify.goToDefinition({
13+
1: "label1Definition",
14+
2: "label2Definition",
1515
// labels accross function boundaries
16-
"3", "label1Definition",
16+
3: "label1Definition",
1717
// undefined label
18-
"4", []);
18+
4: []
19+
});

tests/cases/fourslash/goToDefinitionMethodOverloads.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
////methodOverload./*instanceMethodReference1*/method();
1919
////methodOverload./*instanceMethodReference2*/method("456");
2020

21-
verify.goToDefinition(
22-
"staticMethodReference1", "staticMethodOverload1",
23-
"staticMethodReference2", "staticMethodOverload2",
24-
"instanceMethodReference1", "instanceMethodOverload1",
25-
"instanceMethodReference2", "instanceMethodOverload2",
26-
"staticMethodOverload1Name", "staticMethodDefinition",
27-
"instanceMethodOverload1Name", "instanceMethodDefinition");
21+
verify.goToDefinition({
22+
staticMethodReference1: "staticMethodOverload1",
23+
staticMethodReference2: "staticMethodOverload2",
24+
instanceMethodReference1: "instanceMethodOverload1",
25+
instanceMethodReference2: "instanceMethodOverload2",
26+
staticMethodOverload1Name: "staticMethodDefinition",
27+
instanceMethodOverload1Name: "instanceMethodDefinition"
28+
});

tests/cases/fourslash/goToDefinitionShorthandProperty01.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
//// obj./*valueReference1*/name;
88
//// obj./*valueReference2*/id;
99

10-
verify.goToDefinition(
11-
"valueDefinition1", "valueDeclaration1",
12-
"valueDefinition2", ["valueDeclaration2", "valueDeclaration3"],
13-
"valueReference1", "valueDefinition1",
14-
"valueReference2", "valueDefinition2");
10+
verify.goToDefinition({
11+
valueDefinition1: "valueDeclaration1",
12+
valueDefinition2: ["valueDeclaration2", "valueDeclaration3"],
13+
valueReference1: "valueDefinition1",
14+
valueReference2: "valueDefinition2"
15+
});

tests/cases/fourslash/goToDefinitionShorthandProperty03.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//// /*letProp*/y
88
////}
99

10-
verify.goToDefinition(
11-
"varProp", "varDef",
12-
"letProp", "letDef");
10+
verify.goToDefinition({
11+
varProp: "varDef",
12+
letProp: "letDef"
13+
});

tests/cases/fourslash/goToDefinitionSourceUnit.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// @Filename: b.ts
1717
/////*fileB*/
1818

19-
verify.goToDefinition(
20-
"unknownFile", [],
21-
"knownFile", "fileB");
19+
verify.goToDefinition({
20+
unknownFile: [],
21+
knownFile: "fileB"
22+
});

tests/cases/fourslash/goToDefinitionTaggedTemplateOverloads.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
/////*useFNumber*/f`${0}`;
88
/////*useFBool*/f`${false}`;
99

10-
verify.goToDefinition(
11-
"useFNumber", "defFNumber",
12-
"useFBool", "defFBool");
10+
verify.goToDefinition({
11+
useFNumber: "defFNumber",
12+
useFBool: "defFBool"
13+
});

tests/cases/fourslash/goToDefinitionThis.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
//// get self(/*getterDecl*/this: number) { return /*getterUse*/this; }
99
////}
1010

11-
verify.goToDefinition(
12-
"fnUse", "fnDecl",
13-
"clsUse", "cls",
14-
"getterUse", "getterDecl");
11+
verify.goToDefinition({
12+
"fnUse": "fnDecl",
13+
"clsUse": "cls",
14+
"getterUse": "getterDecl"
15+
});

tests/cases/fourslash/goToDefinitionTypePredicate.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
//// return typeof parameter === "string";
66
//// }
77

8-
verify.goToDefinition(
9-
"parameterName", "parameterDeclaration",
10-
"typeReference", "classDeclaration");
8+
verify.goToDefinition({
9+
parameterName: "parameterDeclaration",
10+
typeReference: "classDeclaration"
11+
});

tests/cases/fourslash/goToDefinition_super.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020
////}
2121

2222

23-
verify.goToDefinition(
23+
verify.goToDefinition({
2424
// Super in call position goes to constructor.
25-
"super", "ctr",
25+
super: "ctr",
2626
// Super in any other position goes to the superclass.
27-
"superExpression", "B",
28-
"superBroken", []);
27+
superExpression: "B",
28+
superBroken: []
29+
});

tests/cases/fourslash/goToModuleAliasDefinition.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,3 @@
99

1010
// Won't-fixed: Should go to '2' instead
1111
verify.goToDefinition("1", "3");
12-
goTo.marker('1');

tests/cases/fourslash/javaScriptClass3.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
//// x.alpha/*src1*/;
1616
//// x.beta/*src2*/;
1717

18-
verify.goToDefinition(
19-
"src1", "dst1",
20-
"src2", "dst2");
18+
verify.goToDefinition({
19+
src1: "dst1",
20+
src2: "dst2"
21+
});

tests/cases/fourslash/server/jsdocTypedefTagGoToDefinition.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
//// /** @type {Animal} */
2020
//// var animal; animal.animalName/*4*/
2121

22-
verify.goToDefinition(
23-
"3", "1",
24-
"4", "2");
22+
verify.goToDefinition({
23+
3: "1",
24+
4: "2"
25+
});

tests/cases/fourslash/tsxGoToDefinitionClasses.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
//// var x = <My/*c*/Class />;
1515
//// var y = <MyClass f/*p*/oo= 'hello' />;
1616

17-
verify.goToDefinition(
18-
"c", "ct",
19-
"p", "pt");
17+
verify.goToDefinition({
18+
c: "ct",
19+
p: "pt"
20+
});

tests/cases/fourslash/tsxGoToDefinitionIntrinsics.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
//// var y = <s/*ss*/pan />;
1616
//// var z = <div na/*ps*/me='hello' />;
1717

18-
verify.goToDefinition(
19-
"ds", "dt",
20-
"ss", "st",
21-
"ps", "pt");
18+
verify.goToDefinition({
19+
ds: "dt",
20+
ss: "st",
21+
ps: "pt"
22+
});

0 commit comments

Comments
 (0)