diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts
index 74ed3e307dd..d5c1e179c67 100644
--- a/src/harness/fourslash.ts
+++ b/src/harness/fourslash.ts
@@ -529,24 +529,35 @@ namespace FourSlash {
this.verifyGoToDefinitionWorker(endMarker instanceof Array ? endMarker : [endMarker]);
}
- public verifyGoToDefinition(startsAndEnds: (string | string[])[]) {
- if (startsAndEnds.length % 2) {
- throw new Error("verify.goToDefinition needs an even number of arguments.");
+ public verifyGoToDefinition(arg0: any, endMarkerNames?: string | string[]) {
+ if (endMarkerNames) {
+ this.verifyGoToDefinitionPlain(arg0, endMarkerNames);
}
-
- for (let i = 0; i < startsAndEnds.length; i += 2) {
- const start = startsAndEnds[i];
- const end = startsAndEnds[i + 1];
-
- if (start instanceof Array) {
- for (const s of start) {
- this.verifyGoToDefinitionSingle(s, end);
+ else if (arg0 instanceof Array) {
+ const pairs: [string | string[], string | string[]][] = arg0;
+ for (const [start, end] of pairs) {
+ this.verifyGoToDefinitionPlain(start, end);
+ }
+ }
+ else {
+ const obj: { [startMarkerName: string]: string | string[] } = arg0;
+ for (const startMarkerName in obj) {
+ if (ts.hasProperty(obj, startMarkerName)) {
+ this.verifyGoToDefinitionPlain(startMarkerName, obj[startMarkerName]);
}
}
- else {
- this.verifyGoToDefinitionSingle(start, end);
+ }
+ }
+
+ private verifyGoToDefinitionPlain(startMarkerNames: string | string[], endMarkerNames: string | string[]) {
+ if (startMarkerNames instanceof Array) {
+ for (const start of startMarkerNames) {
+ this.verifyGoToDefinitionSingle(start, endMarkerNames);
}
}
+ else {
+ this.verifyGoToDefinitionSingle(startMarkerNames, endMarkerNames);
+ }
}
public verifyGoToDefinitionForMarkers(markerNames: string[]) {
@@ -555,9 +566,9 @@ namespace FourSlash {
}
}
- private verifyGoToDefinitionSingle(start: string, end: string | string[]) {
- this.goToMarker(start);
- this.verifyGoToDefinitionWorker(end instanceof Array ? end : [end]);
+ private verifyGoToDefinitionSingle(startMarkerName: string, endMarkerNames: string | string[]) {
+ this.goToMarker(startMarkerName);
+ this.verifyGoToDefinitionWorker(endMarkerNames instanceof Array ? endMarkerNames : [endMarkerNames]);
}
private verifyGoToDefinitionWorker(endMarkers: string[]) {
@@ -2947,8 +2958,11 @@ namespace FourSlashInterface {
this.state.verifyGoToDefinitionIs(endMarkers);
}
- public goToDefinition(...startsAndEnds: (string | string[])[]) {
- this.state.verifyGoToDefinition(startsAndEnds);
+ public goToDefinition(startMarkerName: string | string[], endMarkerName: string | string[]): void;
+ public goToDefinition(startsAndEnds: [string | string[], string | string[]][]): void;
+ public goToDefinition(startsAndEnds: { [startMarkerName: string]: string | string[] }): void;
+ public goToDefinition(arg0: any, endMarkerName?: string | string[]) {
+ this.state.verifyGoToDefinition(arg0, endMarkerName);
}
public goToDefinitionForMarkers(...markerNames: string[]) {
diff --git a/tests/cases/fourslash/ambientShorthandGotoDefinition.ts b/tests/cases/fourslash/ambientShorthandGotoDefinition.ts
index bf109ce8ef4..f7fcbe9f053 100644
--- a/tests/cases/fourslash/ambientShorthandGotoDefinition.ts
+++ b/tests/cases/fourslash/ambientShorthandGotoDefinition.ts
@@ -12,9 +12,10 @@
goTo.marker("useFoo");
verify.quickInfoIs("import foo");
-verify.goToDefinition(
- "useFoo", "importFoo",
- "importFoo", "module");
+verify.goToDefinition({
+ useFoo: "importFoo",
+ importFoo: "module"
+});
goTo.marker("useBar");
verify.quickInfoIs("import bar");
@@ -22,12 +23,14 @@ verify.goToDefinition("useBar", "module");
goTo.marker("useBaz");
verify.quickInfoIs("import baz");
-verify.goToDefinition(
- "useBaz", "importBaz",
- "idBaz", "module");
+verify.goToDefinition({
+ useBaz: "importBaz",
+ idBaz: "module"
+});
goTo.marker("useBang");
verify.quickInfoIs("import bang = require(\"jquery\")");
-verify.goToDefinition(
- "useBang", "importBang",
- "idBang", "module");
+verify.goToDefinition({
+ useBang: "importBang",
+ idBang: "module"
+});
diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts
index 834bf1fd2da..1c400ff5f97 100644
--- a/tests/cases/fourslash/fourslash.ts
+++ b/tests/cases/fourslash/fourslash.ts
@@ -156,9 +156,12 @@ declare namespace FourSlashInterface {
* `verify.goToDefinition("a", "b");` verifies that go-to-definition at marker "a" takes you to marker "b".
* `verify.goToDefinition(["a", "aa"], "b");` verifies that markers "a" and "aa" have the same definition "b".
* `verify.goToDefinition("a", ["b", "bb"]);` verifies that "a" has multiple definitions available.
- * Finally, `verify.goToDefinition("a", "b", "c", "d");` is just `verify.goToDefinition("a", "b"); verify.goToDefinition("c", "d");`.
*/
- goToDefinition(...startsAndEnds: (string | string[])[]): void;
+ goToDefinition(startMarkerNames: string | string[], endMarkerNames: string | string[]): void;
+ /** Performs `goToDefinition` for each pair. */
+ goToDefinition(startsAndEnds: [string | string[], string | string[]][]): void;
+ /** Performs `goToDefinition` on each key and value. */
+ goToDefinition(startsAndEnds: { [startMarkerName: string]: string | string[] }): void;
/** Verifies goToDefinition for each `${markerName}Reference` -> `${markerName}Definition` */
goToDefinitionForMarkers(...markerNames: string[]): void;
verifyGetEmitOutputForCurrentFile(expected: string): void;
diff --git a/tests/cases/fourslash/goToDeclarationDecoratorOverloads.ts b/tests/cases/fourslash/goToDeclarationDecoratorOverloads.ts
index ae9d5fa86b6..c107f7f6803 100644
--- a/tests/cases/fourslash/goToDeclarationDecoratorOverloads.ts
+++ b/tests/cases/fourslash/goToDeclarationDecoratorOverloads.ts
@@ -13,6 +13,7 @@
//// @/*useDecSymbol*/dec [s]() {}
////}
-verify.goToDefinition(
- "useDecString", "defDecString",
- "useDecSymbol", "defDecSymbol");
+verify.goToDefinition({
+ useDecString: "defDecString",
+ useDecSymbol: "defDecSymbol"
+});
diff --git a/tests/cases/fourslash/goToDefinitionAlias.ts b/tests/cases/fourslash/goToDefinitionAlias.ts
index 2e73d834d42..23cf849f101 100644
--- a/tests/cases/fourslash/goToDefinitionAlias.ts
+++ b/tests/cases/fourslash/goToDefinitionAlias.ts
@@ -23,6 +23,7 @@
//// x;
////}
-verify.goToDefinition(
- ["alias1Type", "alias1Value"], "alias1Definition",
- ["alias2Type", "alias2Value"], "alias2Definition");
+verify.goToDefinition([
+ [["alias1Type", "alias1Value"], "alias1Definition"],
+ [["alias2Type", "alias2Value"], "alias2Definition"]
+]);
diff --git a/tests/cases/fourslash/goToDefinitionConstructorOverloads.ts b/tests/cases/fourslash/goToDefinitionConstructorOverloads.ts
index 2899ad76dbc..a3a5e3286b2 100644
--- a/tests/cases/fourslash/goToDefinitionConstructorOverloads.ts
+++ b/tests/cases/fourslash/goToDefinitionConstructorOverloads.ts
@@ -9,7 +9,8 @@
////var constructorOverload = new /*constructorOverloadReference1*/ConstructorOverload();
////var constructorOverload = new /*constructorOverloadReference2*/ConstructorOverload("foo");
-verify.goToDefinition(
- "constructorOverloadReference1", "constructorOverload1",
- "constructorOverloadReference2", "constructorOverload2",
- "constructorOverload1", "constructorDefinition");
+verify.goToDefinition({
+ constructorOverloadReference1: "constructorOverload1",
+ constructorOverloadReference2: "constructorOverload2",
+ constructorOverload1: "constructorDefinition"
+});
diff --git a/tests/cases/fourslash/goToDefinitionDecorator.ts b/tests/cases/fourslash/goToDefinitionDecorator.ts
index 6511e87a57e..c86b02ab820 100644
--- a/tests/cases/fourslash/goToDefinitionDecorator.ts
+++ b/tests/cases/fourslash/goToDefinitionDecorator.ts
@@ -16,6 +16,7 @@
//// return target => target;
////}
-verify.goToDefinition(
- "decoratorUse", "decoratorDefinition",
- "decoratorFactoryUse", "decoratorFactoryDefinition");
+verify.goToDefinition({
+ decoratorUse: "decoratorDefinition",
+ decoratorFactoryUse: "decoratorFactoryDefinition"
+});
diff --git a/tests/cases/fourslash/goToDefinitionFunctionOverloads.ts b/tests/cases/fourslash/goToDefinitionFunctionOverloads.ts
index 012689c984d..e30150a1f45 100644
--- a/tests/cases/fourslash/goToDefinitionFunctionOverloads.ts
+++ b/tests/cases/fourslash/goToDefinitionFunctionOverloads.ts
@@ -8,8 +8,9 @@
/////*functionOverloadReference2*/functionOverload("123");
/////*brokenOverload*/functionOverload({});
-verify.goToDefinition(
- "functionOverloadReference1", "functionOverload1",
- "functionOverloadReference2", "functionOverload2",
- "brokenOverload", "functionOverload1",
- "functionOverload", "functionOverloadDefinition");
+verify.goToDefinition({
+ functionOverloadReference1: "functionOverload1",
+ functionOverloadReference2: "functionOverload2",
+ brokenOverload: "functionOverload1",
+ functionOverload: "functionOverloadDefinition"
+});
diff --git a/tests/cases/fourslash/goToDefinitionFunctionOverloadsInClass.ts b/tests/cases/fourslash/goToDefinitionFunctionOverloadsInClass.ts
index bd8c0260622..3426a4d5e1e 100644
--- a/tests/cases/fourslash/goToDefinitionFunctionOverloadsInClass.ts
+++ b/tests/cases/fourslash/goToDefinitionFunctionOverloadsInClass.ts
@@ -11,6 +11,7 @@
//// constructor() { }
////}
-verify.goToDefinition(
- "staticFunctionOverload", "staticFunctionOverloadDefinition",
- "functionOverload", "functionOverloadDefinition");
+verify.goToDefinition({
+ staticFunctionOverload: "staticFunctionOverloadDefinition",
+ functionOverload: "functionOverloadDefinition"
+});
diff --git a/tests/cases/fourslash/goToDefinitionInMemberDeclaration.ts b/tests/cases/fourslash/goToDefinitionInMemberDeclaration.ts
index 307a6813e33..66719bb621b 100644
--- a/tests/cases/fourslash/goToDefinitionInMemberDeclaration.ts
+++ b/tests/cases/fourslash/goToDefinitionInMemberDeclaration.ts
@@ -19,8 +19,9 @@
//// }
////}
-verify.goToDefinition(
- ["interfaceReference", "interfaceReferenceInList", "interfaceReferenceInConstructor"], "interfaceDefinition",
- ["classReference", "classReferenceInInitializer"], "classDefinition",
- ["enumReference", "enumReferenceInInitializer"], "enumDefinition",
- "selfReference", "selfDefinition");
+verify.goToDefinition([
+ [["interfaceReference", "interfaceReferenceInList", "interfaceReferenceInConstructor"], "interfaceDefinition"],
+ [["classReference", "classReferenceInInitializer"], "classDefinition"],
+ [["enumReference", "enumReferenceInInitializer"], "enumDefinition"],
+ ["selfReference", "selfDefinition"]
+]);
diff --git a/tests/cases/fourslash/goToDefinitionLabels.ts b/tests/cases/fourslash/goToDefinitionLabels.ts
index 212c313e023..5cbf3ac8f2f 100644
--- a/tests/cases/fourslash/goToDefinitionLabels.ts
+++ b/tests/cases/fourslash/goToDefinitionLabels.ts
@@ -9,10 +9,11 @@
//// }
////}
-verify.goToDefinition(
- "1", "label1Definition",
- "2", "label2Definition",
+verify.goToDefinition({
+ 1: "label1Definition",
+ 2: "label2Definition",
// labels accross function boundaries
- "3", "label1Definition",
+ 3: "label1Definition",
// undefined label
- "4", []);
+ 4: []
+});
diff --git a/tests/cases/fourslash/goToDefinitionMethodOverloads.ts b/tests/cases/fourslash/goToDefinitionMethodOverloads.ts
index 4b326b38a6c..199b5aee226 100644
--- a/tests/cases/fourslash/goToDefinitionMethodOverloads.ts
+++ b/tests/cases/fourslash/goToDefinitionMethodOverloads.ts
@@ -18,10 +18,11 @@
////methodOverload./*instanceMethodReference1*/method();
////methodOverload./*instanceMethodReference2*/method("456");
-verify.goToDefinition(
- "staticMethodReference1", "staticMethodOverload1",
- "staticMethodReference2", "staticMethodOverload2",
- "instanceMethodReference1", "instanceMethodOverload1",
- "instanceMethodReference2", "instanceMethodOverload2",
- "staticMethodOverload1Name", "staticMethodDefinition",
- "instanceMethodOverload1Name", "instanceMethodDefinition");
+verify.goToDefinition({
+ staticMethodReference1: "staticMethodOverload1",
+ staticMethodReference2: "staticMethodOverload2",
+ instanceMethodReference1: "instanceMethodOverload1",
+ instanceMethodReference2: "instanceMethodOverload2",
+ staticMethodOverload1Name: "staticMethodDefinition",
+ instanceMethodOverload1Name: "instanceMethodDefinition"
+});
diff --git a/tests/cases/fourslash/goToDefinitionShorthandProperty01.ts b/tests/cases/fourslash/goToDefinitionShorthandProperty01.ts
index 54ebceec007..4107049286c 100644
--- a/tests/cases/fourslash/goToDefinitionShorthandProperty01.ts
+++ b/tests/cases/fourslash/goToDefinitionShorthandProperty01.ts
@@ -7,8 +7,9 @@
//// obj./*valueReference1*/name;
//// obj./*valueReference2*/id;
-verify.goToDefinition(
- "valueDefinition1", "valueDeclaration1",
- "valueDefinition2", ["valueDeclaration2", "valueDeclaration3"],
- "valueReference1", "valueDefinition1",
- "valueReference2", "valueDefinition2");
+verify.goToDefinition({
+ valueDefinition1: "valueDeclaration1",
+ valueDefinition2: ["valueDeclaration2", "valueDeclaration3"],
+ valueReference1: "valueDefinition1",
+ valueReference2: "valueDefinition2"
+});
diff --git a/tests/cases/fourslash/goToDefinitionShorthandProperty03.ts b/tests/cases/fourslash/goToDefinitionShorthandProperty03.ts
index 7a0a93934e3..42a9ee0a4d6 100644
--- a/tests/cases/fourslash/goToDefinitionShorthandProperty03.ts
+++ b/tests/cases/fourslash/goToDefinitionShorthandProperty03.ts
@@ -7,6 +7,7 @@
//// /*letProp*/y
////}
-verify.goToDefinition(
- "varProp", "varDef",
- "letProp", "letDef");
+verify.goToDefinition({
+ varProp: "varDef",
+ letProp: "letDef"
+});
diff --git a/tests/cases/fourslash/goToDefinitionSourceUnit.ts b/tests/cases/fourslash/goToDefinitionSourceUnit.ts
index b96a992aac1..e66b5ef7960 100644
--- a/tests/cases/fourslash/goToDefinitionSourceUnit.ts
+++ b/tests/cases/fourslash/goToDefinitionSourceUnit.ts
@@ -16,6 +16,7 @@
// @Filename: b.ts
/////*fileB*/
-verify.goToDefinition(
- "unknownFile", [],
- "knownFile", "fileB");
+verify.goToDefinition({
+ unknownFile: [],
+ knownFile: "fileB"
+});
diff --git a/tests/cases/fourslash/goToDefinitionTaggedTemplateOverloads.ts b/tests/cases/fourslash/goToDefinitionTaggedTemplateOverloads.ts
index a7725bbcda7..fad27cabbb6 100644
--- a/tests/cases/fourslash/goToDefinitionTaggedTemplateOverloads.ts
+++ b/tests/cases/fourslash/goToDefinitionTaggedTemplateOverloads.ts
@@ -7,6 +7,7 @@
/////*useFNumber*/f`${0}`;
/////*useFBool*/f`${false}`;
-verify.goToDefinition(
- "useFNumber", "defFNumber",
- "useFBool", "defFBool");
+verify.goToDefinition({
+ useFNumber: "defFNumber",
+ useFBool: "defFBool"
+});
diff --git a/tests/cases/fourslash/goToDefinitionThis.ts b/tests/cases/fourslash/goToDefinitionThis.ts
index 6f03cb77284..5cb94ef35c7 100644
--- a/tests/cases/fourslash/goToDefinitionThis.ts
+++ b/tests/cases/fourslash/goToDefinitionThis.ts
@@ -8,7 +8,8 @@
//// get self(/*getterDecl*/this: number) { return /*getterUse*/this; }
////}
-verify.goToDefinition(
- "fnUse", "fnDecl",
- "clsUse", "cls",
- "getterUse", "getterDecl");
+verify.goToDefinition({
+ "fnUse": "fnDecl",
+ "clsUse": "cls",
+ "getterUse": "getterDecl"
+});
diff --git a/tests/cases/fourslash/goToDefinitionTypePredicate.ts b/tests/cases/fourslash/goToDefinitionTypePredicate.ts
index 0fb211c5057..dd2b69f37e8 100644
--- a/tests/cases/fourslash/goToDefinitionTypePredicate.ts
+++ b/tests/cases/fourslash/goToDefinitionTypePredicate.ts
@@ -5,6 +5,7 @@
//// return typeof parameter === "string";
//// }
-verify.goToDefinition(
- "parameterName", "parameterDeclaration",
- "typeReference", "classDeclaration");
+verify.goToDefinition({
+ parameterName: "parameterDeclaration",
+ typeReference: "classDeclaration"
+});
diff --git a/tests/cases/fourslash/goToDefinition_super.ts b/tests/cases/fourslash/goToDefinition_super.ts
index 09996fcc2e9..7a7008ba07f 100644
--- a/tests/cases/fourslash/goToDefinition_super.ts
+++ b/tests/cases/fourslash/goToDefinition_super.ts
@@ -20,9 +20,10 @@
////}
-verify.goToDefinition(
+verify.goToDefinition({
// Super in call position goes to constructor.
- "super", "ctr",
+ super: "ctr",
// Super in any other position goes to the superclass.
- "superExpression", "B",
- "superBroken", []);
+ superExpression: "B",
+ superBroken: []
+});
diff --git a/tests/cases/fourslash/goToModuleAliasDefinition.ts b/tests/cases/fourslash/goToModuleAliasDefinition.ts
index 96e6f5b0c40..cdec82fd0d4 100644
--- a/tests/cases/fourslash/goToModuleAliasDefinition.ts
+++ b/tests/cases/fourslash/goToModuleAliasDefinition.ts
@@ -9,4 +9,3 @@
// Won't-fixed: Should go to '2' instead
verify.goToDefinition("1", "3");
-goTo.marker('1');
diff --git a/tests/cases/fourslash/javaScriptClass3.ts b/tests/cases/fourslash/javaScriptClass3.ts
index 2a504d49036..41ce79b35eb 100644
--- a/tests/cases/fourslash/javaScriptClass3.ts
+++ b/tests/cases/fourslash/javaScriptClass3.ts
@@ -15,6 +15,7 @@
//// x.alpha/*src1*/;
//// x.beta/*src2*/;
-verify.goToDefinition(
- "src1", "dst1",
- "src2", "dst2");
+verify.goToDefinition({
+ src1: "dst1",
+ src2: "dst2"
+});
diff --git a/tests/cases/fourslash/server/jsdocTypedefTagGoToDefinition.ts b/tests/cases/fourslash/server/jsdocTypedefTagGoToDefinition.ts
index 1074e206559..2183c8d5471 100644
--- a/tests/cases/fourslash/server/jsdocTypedefTagGoToDefinition.ts
+++ b/tests/cases/fourslash/server/jsdocTypedefTagGoToDefinition.ts
@@ -19,6 +19,7 @@
//// /** @type {Animal} */
//// var animal; animal.animalName/*4*/
-verify.goToDefinition(
- "3", "1",
- "4", "2");
+verify.goToDefinition({
+ 3: "1",
+ 4: "2"
+});
diff --git a/tests/cases/fourslash/tsxGoToDefinitionClasses.ts b/tests/cases/fourslash/tsxGoToDefinitionClasses.ts
index b6ee9ef484f..9c54834534d 100644
--- a/tests/cases/fourslash/tsxGoToDefinitionClasses.ts
+++ b/tests/cases/fourslash/tsxGoToDefinitionClasses.ts
@@ -14,6 +14,7 @@
//// var x = ;
//// var z =