diff --git a/tests/cases/fourslash/findAllRefsUnionProperty.ts b/tests/cases/fourslash/findAllRefsUnionProperty.ts
index 3b7813f638b..61f4df03047 100644
--- a/tests/cases/fourslash/findAllRefsUnionProperty.ts
+++ b/tests/cases/fourslash/findAllRefsUnionProperty.ts
@@ -1,11 +1,11 @@
///
////type T =
-//// | { [|{| "isDefinition": true |}type|]: "a", [|{| "isDefinition": true |}prop|]: number }
-//// | { [|{| "isDefinition": true |}type|]: "b", [|{| "isDefinition": true |}prop|]: string };
+//// | { [|[|{| "isDefinition": true, "declarationRangeIndex": 0 |}type|]: "a",|] [|[|{| "isDefinition": true, "declarationRangeIndex": 2 |}prop|]: number|] }
+//// | { [|[|{| "isDefinition": true, "declarationRangeIndex": 4 |}type|]: "b",|] [|[|{| "isDefinition": true, "declarationRangeIndex": 6 |}prop|]: string|] };
////const tt: T = {
-//// [|{| "isWriteAccess": true, "isDefinition": true |}type|]: "a",
-//// [|{| "isWriteAccess": true, "isDefinition": true |}prop|]: 0,
+//// [|[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 8 |}type|]: "a"|],
+//// [|[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 10 |}prop|]: 0|],
////};
////declare const t: T;
////if (t.[|type|] === "a") {
@@ -14,7 +14,7 @@
//// t.[|type|];
////}
-const [t0, p0, t1, p1, t2, p2, t3, t4, t5] = test.ranges();
+const [t0Def, t0, p0Def, p0, t1Def, t1, p1Def, p1, t2Def, t2, p2Def, p2, t3, t4, t5] = test.ranges();
const a = { definition: { text: '(property) type: "a"', range: t0 }, ranges: [t0, t2, t4] };
const b = { definition: { text: '(property) type: "b"', range: t1 }, ranges: [t1, t5] };
diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts
index 4a1bf374c05..2ae0cc4ac71 100644
--- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts
+++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts
@@ -1,10 +1,10 @@
///
////class Foo {
-//// public [|{| "isWriteAccess": true, "isDefinition": true |}_bar|]() { return 0; }
+//// [|public [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}_bar|]() { return 0; }|]
////}
////
////var x: Foo;
////x.[|_bar|];
-verify.singleReferenceGroup("(method) Foo._bar(): number");
+verify.singleReferenceGroup("(method) Foo._bar(): number", test.rangesByText().get("_bar"));
diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts
index ec120254fde..038e66449d4 100644
--- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts
+++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts
@@ -1,10 +1,10 @@
///
////class Foo {
-//// public [|{| "isWriteAccess": true, "isDefinition": true |}__bar|]() { return 0; }
+//// [|public [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}__bar|]() { return 0; }|]
////}
////
////var x: Foo;
////x.[|__bar|];
-verify.singleReferenceGroup("(method) Foo.__bar(): number");
+verify.singleReferenceGroup("(method) Foo.__bar(): number", test.rangesByText().get("__bar"));
diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts
index e6f46b128e7..9c7815dea01 100644
--- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts
+++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts
@@ -1,10 +1,10 @@
///
////class Foo {
-//// public [|{| "isWriteAccess": true, "isDefinition": true |}___bar|]() { return 0; }
+//// [|public [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}___bar|]() { return 0; }|]
////}
////
////var x: Foo;
////x.[|___bar|];
-verify.singleReferenceGroup("(method) Foo.___bar(): number");
+verify.singleReferenceGroup("(method) Foo.___bar(): number", test.rangesByText().get("___bar"));
diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts
index 593d61f3fbe..5c6566a8a0f 100644
--- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts
+++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts
@@ -1,10 +1,10 @@
///
////class Foo {
-//// public [|{| "isWriteAccess": true, "isDefinition": true |}____bar|]() { return 0; }
+//// [|public [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}____bar|]() { return 0; }|]
////}
////
////var x: Foo;
////x.[|____bar|];
-verify.singleReferenceGroup("(method) Foo.____bar(): number");
+verify.singleReferenceGroup("(method) Foo.____bar(): number", test.rangesByText().get("____bar"));
diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts
index cf171662596..f3c807483cd 100644
--- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts
+++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts
@@ -3,7 +3,7 @@
////class Foo {
//// public _bar;
//// public __bar;
-//// public [|{| "isDefinition": true |}___bar|];
+//// [|public [|{| "isDefinition": true, "declarationRangeIndex": 0 |}___bar|];|]
//// public ____bar;
////}
////
@@ -13,4 +13,4 @@
////x.[|___bar|];
////x.____bar;
-verify.singleReferenceGroup("(property) Foo.___bar: any");
+verify.singleReferenceGroup("(property) Foo.___bar: any", test.rangesByText().get("___bar"));
diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts
index 77197480eb1..be8859c01a0 100644
--- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts
+++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts
@@ -2,7 +2,7 @@
////class Foo {
//// public _bar;
-//// public [|{| "isDefinition": true |}__bar|];
+//// [|public [|{| "isDefinition": true, "declarationRangeIndex": 0 |}__bar|];|]
//// public ___bar;
//// public ____bar;
////}
@@ -13,4 +13,4 @@
////x.___bar;
////x.____bar;
-verify.singleReferenceGroup("(property) Foo.__bar: any");
+verify.singleReferenceGroup("(property) Foo.__bar: any", test.rangesByText().get("__bar"));
diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts
index dac42f4fc7c..b6de0be25c9 100644
--- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts
+++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts
@@ -1,7 +1,7 @@
///
-////function [|{| "isWriteAccess": true, "isDefinition": true |}__foo|]() {
+////[|function [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}__foo|]() {
//// [|__foo|]();
-////}
+////}|]
-verify.singleReferenceGroup("function __foo(): void");
+verify.singleReferenceGroup("function __foo(): void", test.rangesByText().get("__foo"));
diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts
index 8c92275e27f..945fa91e6d6 100644
--- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts
+++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts
@@ -1,7 +1,7 @@
///
-////(function [|{| "isWriteAccess": true, "isDefinition": true |}__foo|]() {
+////([|function [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}__foo|]() {
//// [|__foo|]();
-////})
+////}|])
-verify.singleReferenceGroup("(local function) __foo(): void");
+verify.singleReferenceGroup("(local function) __foo(): void", test.rangesByText().get("__foo"));
diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts
index bc5799e61cf..2ff0420cc16 100644
--- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts
+++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts
@@ -1,7 +1,7 @@
///
-////(function [|{| "isWriteAccess": true, "isDefinition": true |}___foo|]() {
+////([|function [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}___foo|]() {
//// [|___foo|]();
-////})
+////}|])
-verify.singleReferenceGroup("(local function) ___foo(): void");
+verify.singleReferenceGroup("(local function) ___foo(): void", test.rangesByText().get("___foo"));
diff --git a/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment.ts b/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment.ts
index b25c08cd692..490b87d624d 100644
--- a/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment.ts
+++ b/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment.ts
@@ -1,12 +1,12 @@
///
-//// var [|{| "isWriteAccess": true, "isDefinition": true |}name|] = "Foo";
+//// [|var [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}name|] = "Foo";|]
////
//// var obj = { [|{| "isWriteAccess": true, "isDefinition": true |}name|] };
-//// var obj1 = { [|{| "isWriteAccess": true, "isDefinition": true |}name|]:[|name|] };
+//// var obj1 = { [|[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 3 |}name|]:[|name|]|] };
//// obj.[|name|];
-const [r0, r1, r2, r3, r4] = test.ranges();
+const [r0Def, r0, r1, r2Def, r2, r3, r4] = test.ranges();
verify.referenceGroups([r0, r3], [{ definition: "var name: string", ranges: [r0, r1, r3] }]);
verify.referenceGroups(r1, [
{ definition: "var name: string", ranges: [r0, r1, r3] },
diff --git a/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment2.ts b/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment2.ts
index f19640698cd..39804714464 100644
--- a/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment2.ts
+++ b/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment2.ts
@@ -1,15 +1,15 @@
///
-//// var [|{| "isWriteAccess": true, "isDefinition": true |}dx|] = "Foo";
+//// [|var [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}dx|] = "Foo";|]
////
-//// module M { export var [|{| "isDefinition": true |}dx|]; }
+//// module M { [|export var [|{| "isDefinition": true, "declarationRangeIndex": 2 |}dx|];|] }
//// module M {
//// var z = 100;
//// export var y = { [|{| "isWriteAccess": true, "isDefinition": true |}dx|], z };
//// }
//// M.y.[|dx|];
-const [r0, r1, r2, r3] = test.ranges();
+const [r0Def, r0, r1Def, r1, r2, r3] = test.ranges();
verify.singleReferenceGroup("var dx: string", [r0]);
verify.referenceGroups(r1, [{ definition: "var M.dx: any", ranges: [r1, r2] }]);
verify.referenceGroups(r2, [
diff --git a/tests/cases/fourslash/findAllRefs_importType_exportEquals.ts b/tests/cases/fourslash/findAllRefs_importType_exportEquals.ts
index 3734b7a2e88..0d60c153ce9 100644
--- a/tests/cases/fourslash/findAllRefs_importType_exportEquals.ts
+++ b/tests/cases/fourslash/findAllRefs_importType_exportEquals.ts
@@ -1,11 +1,11 @@
///
// @Filename: /a.ts
-////type [|{| "isWriteAccess": true, "isDefinition": true |}T|] = number;
-////namespace [|{| "isWriteAccess": true, "isDefinition": true |}T|] {
+////[|type [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}T|] = number;|]
+////[|namespace [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}T|] {
//// export type U = string;
-////}
-////[|export|] = [|T|];
+////}|]
+////[|[|export|] = [|{| "declarationRangeIndex": 4 |}T|];|]
// @Filename: /b.ts
////const x: import("[|./[|a|]|]") = 0;
@@ -13,7 +13,7 @@
verify.noErrors();
-const [r0, r1, rExport, r2, r3, r3b, r4, r4b] = test.ranges();
+const [r0Def, r0, r1Def, r1, r2Def, rExport, r2, r3, r3b, r4, r4b] = test.ranges();
verify.referenceGroups(r0, [{ definition: "type T = number\nnamespace T", ranges: [r0, r2, r3] }]);
verify.referenceGroups(r1, [{ definition: "namespace T", ranges: [r1, r2] }]);
const t: FourSlashInterface.ReferenceGroup = { definition: "type T = number\nnamespace T", ranges: [r0, r1, r2, r3] };
diff --git a/tests/cases/fourslash/findAllRefs_importType_js.ts b/tests/cases/fourslash/findAllRefs_importType_js.ts
index b1f612c8e45..79f99da90a4 100644
--- a/tests/cases/fourslash/findAllRefs_importType_js.ts
+++ b/tests/cases/fourslash/findAllRefs_importType_js.ts
@@ -4,8 +4,8 @@
// @checkJs: true
// @Filename: /a.js
-////[|module|].exports = class [|{| "isWriteAccess": true, "isDefinition": true |}C|] {};
-////module.exports.[|{| "isWriteAccess": true, "isDefinition": true |}D|] = class [|{| "isWriteAccess": true, "isDefinition": true |}D|] {};
+////[|[|{| "declarationRangeIndex": 0 |}module|].exports = [|class [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}C|] {}|];|]
+////[|module.exports.[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 4 |}D|] = [|class [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 6 |}D|] {}|];|]
// @Filename: /b.js
/////** @type {import("[|./a|]")} */
@@ -17,7 +17,7 @@ verify.noErrors();
// TODO: GH#24025
-const [rModule, r0, r1, r2, r3, r4, r5] = test.ranges();
+const [rModuleDef, rModule, r0Def, r0, r1Def, r1, r2Def, r2, r3, r4, r5] = test.ranges();
verify.referenceGroups(rModule, [{ definition: 'module "/a"', ranges: [r3, r4, rModule] }]);
verify.referenceGroups(r0, [
{ definition: "(local class) C", ranges: [r0] },
diff --git a/tests/cases/fourslash/findAllRefs_importType_meaningAtLocation.ts b/tests/cases/fourslash/findAllRefs_importType_meaningAtLocation.ts
index 4c79999a866..367a6f0febd 100644
--- a/tests/cases/fourslash/findAllRefs_importType_meaningAtLocation.ts
+++ b/tests/cases/fourslash/findAllRefs_importType_meaningAtLocation.ts
@@ -1,13 +1,13 @@
///
// @Filename: /a.ts
-////export type [|{| "isWriteAccess": true, "isDefinition": true |}T|] = 0;
-////export const [|{| "isWriteAccess": true, "isDefinition": true |}T|] = 0;
+////[|export type [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}T|] = 0;|]
+////[|export const [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}T|] = 0;|]
// @Filename: /b.ts
////const x: import("./a").[|T|] = 0;
////const x: typeof import("./a").[|T|] = 0;
-const [r0, r1, r2, r3] = test.ranges();
+const [r0Def, r0, r1Def, r1, r2, r3] = test.ranges();
verify.singleReferenceGroup("type T = 0", [r0, r2]);
verify.singleReferenceGroup("const T: 0", [r1, r3]);
diff --git a/tests/cases/fourslash/findAllRefs_importType_named.ts b/tests/cases/fourslash/findAllRefs_importType_named.ts
index ed4d4a1427b..ae3b7585764 100644
--- a/tests/cases/fourslash/findAllRefs_importType_named.ts
+++ b/tests/cases/fourslash/findAllRefs_importType_named.ts
@@ -1,13 +1,13 @@
///
// @Filename: /a.ts
-////export type [|{| "isWriteAccess": true, "isDefinition": true |}T|] = number;
-////export type [|{| "isWriteAccess": true, "isDefinition": true |}U|] = string;
+////[|export type [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}T|] = number;|]
+////[|export type [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}U|] = string;|]
// @Filename: /b.ts
////const x: import("./a").[|T|] = 0;
////const x: import("./a").[|U|] = 0;
-const [r0, r1, r2, r3] = test.ranges();
+const [r0Def, r0, r1Def, r1, r2, r3] = test.ranges();
verify.singleReferenceGroup("type T = number", [r0, r2]);
verify.singleReferenceGroup("type U = string", [r1, r3]);
diff --git a/tests/cases/fourslash/findAllRefs_jsEnum.ts b/tests/cases/fourslash/findAllRefs_jsEnum.ts
index c77b24256bf..79c007c2947 100644
--- a/tests/cases/fourslash/findAllRefs_jsEnum.ts
+++ b/tests/cases/fourslash/findAllRefs_jsEnum.ts
@@ -4,7 +4,7 @@
// @Filename: /a.js
/////** @enum {string} */
-////const [|{| "isWriteAccess": true, "isDefinition": true |}E|] = { A: "" };
+////[|const [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}E|] = { A: "" };|]
////[|E|]["A"];
/////** @type {[|E|]} */
////const e = [|E|].A;
@@ -13,4 +13,4 @@ verify.singleReferenceGroup(
`enum E
const E: {
A: string;
-}`);
+}`, test.rangesByText().get("E"));
diff --git a/tests/cases/fourslash/findReferencesAcrossMultipleProjects.ts b/tests/cases/fourslash/findReferencesAcrossMultipleProjects.ts
index 2141399705f..b94b8629620 100644
--- a/tests/cases/fourslash/findReferencesAcrossMultipleProjects.ts
+++ b/tests/cases/fourslash/findReferencesAcrossMultipleProjects.ts
@@ -1,7 +1,7 @@
///
//@Filename: a.ts
-////var [|{| "isDefinition": true |}x|]: number;
+////[|var [|{| "isDefinition": true, "declarationRangeIndex": 0 |}x|]: number;|]
//@Filename: b.ts
///////
@@ -11,4 +11,4 @@
///////
////[|{| "isWriteAccess": true |}x|]++;
-verify.singleReferenceGroup("var x: number");
+verify.singleReferenceGroup("var x: number", test.rangesByText().get("x"));
diff --git a/tests/cases/fourslash/findReferencesAfterEdit.ts b/tests/cases/fourslash/findReferencesAfterEdit.ts
index 3787617692a..9a8717eb1e3 100644
--- a/tests/cases/fourslash/findReferencesAfterEdit.ts
+++ b/tests/cases/fourslash/findReferencesAfterEdit.ts
@@ -2,7 +2,7 @@
// @Filename: a.ts
////interface A {
-//// [|{| "isDefinition": true |}foo|]: string;
+//// [|[|{| "isDefinition": true, "declarationRangeIndex": 0 |}foo|]: string;|]
////}
// @Filename: b.ts
@@ -12,9 +12,9 @@
//// x.[|foo|]
////}
-verify.singleReferenceGroup("(property) A.foo: string");
+verify.singleReferenceGroup("(property) A.foo: string", test.rangesByText().get("foo"));
goTo.marker("");
edit.insert("\n");
-verify.singleReferenceGroup("(property) A.foo: string");
+verify.singleReferenceGroup("(property) A.foo: string", test.rangesByText().get("foo"));
diff --git a/tests/cases/fourslash/findReferencesJSXTagName.ts b/tests/cases/fourslash/findReferencesJSXTagName.ts
index 8547ad8b330..ec011671c9e 100644
--- a/tests/cases/fourslash/findReferencesJSXTagName.ts
+++ b/tests/cases/fourslash/findReferencesJSXTagName.ts
@@ -1,17 +1,17 @@
///
// @Filename: index.tsx
-////import { [|{| "isWriteAccess": true, "isDefinition": true |}SubmissionComp|] } from "./RedditSubmission"
+////[|import { [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}SubmissionComp|] } from "./RedditSubmission"|]
////function displaySubreddit(subreddit: string) {
//// let components = submissions
//// .map((value, index) => <[|SubmissionComp|] key={ index } elementPosition= { index } {...value.data} />);
////}
// @Filename: RedditSubmission.ts
-////export const [|{| "isWriteAccess": true, "isDefinition": true |}SubmissionComp|] = (submission: SubmissionProps) =>
-////
;
+////export const [|[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 3 |}SubmissionComp|] = (submission: SubmissionProps) =>
+//// ;
-const [r0, r1, r2] = test.ranges();
+const [r0Def, r0, r1, r2Def, r2] = test.ranges();
const imports = { definition: "(alias) const SubmissionComp: (submission: any) => any\nimport SubmissionComp", ranges: [r0, r1] };
const def = { definition: "const SubmissionComp: (submission: any) => any", ranges: [r2] };
verify.referenceGroups([r0, r1], [imports, def]);
diff --git a/tests/cases/fourslash/findReferencesJSXTagName2.ts b/tests/cases/fourslash/findReferencesJSXTagName2.ts
index a8882b60088..46133d8e339 100644
--- a/tests/cases/fourslash/findReferencesJSXTagName2.ts
+++ b/tests/cases/fourslash/findReferencesJSXTagName2.ts
@@ -1,9 +1,9 @@
///
// @Filename: index.tsx
-////const [|{| "isWriteAccess": true, "isDefinition": true |}obj|] = {Component: () => };
+////[|const [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}obj|] = {Component: () => };|]
////const element = <[|obj|].Component/>;
verify.singleReferenceGroup(`const obj: {
Component: () => any;
-}`);
+}`, test.rangesByText().get("obj"));
diff --git a/tests/cases/fourslash/findReferencesJSXTagName3.ts b/tests/cases/fourslash/findReferencesJSXTagName3.ts
index 58715ade2fa..afd90562777 100644
--- a/tests/cases/fourslash/findReferencesJSXTagName3.ts
+++ b/tests/cases/fourslash/findReferencesJSXTagName3.ts
@@ -6,22 +6,21 @@
////namespace JSX {
//// export interface Element { }
//// export interface IntrinsicElements {
-//// [|{| "isDefinition": true |}div|]: any;
+//// [|[|{| "isDefinition": true, "declarationRangeIndex": 0 |}div|]: any;|]
//// }
////}
////
-////const [|{| "isWriteAccess": true, "isDefinition": true |}Comp|] = () =>
+////[|const [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}Comp|] = () =>
//// <[|div|]>
//// Some content
//// <[|div|]>More content[|div|]>
-//// [|div|]>;
+//// [|div|]>;|]
////
////const x = <[|Comp|]>
//// Content
////[|Comp|]>;
-const ranges = test.ranges();
-const [d0, c0, d1, d2, d3, d4, c1, c2] = test.ranges();
+const [d0Def, d0, c0Def, c0, d1, d2, d3, d4, c1, c2] = test.ranges();
const allD = [d0, d1, d2, d3, d4];
const allC = [c0, c1, c2];
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts
index b1acb76ad2c..a50b2ca1149 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts
@@ -1,5 +1,5 @@
///
-////var [|{| "isWriteAccess": true, "isDefinition": true |}f|] = x => x + 1;
+////[|var [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}f|] = x => x + 1;|]
////[|f|](12);
-verify.singleReferenceGroup("var f: (x: any) => any");
+verify.singleReferenceGroup("var f: (x: any) => any", test.rangesByText().get("f"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts
index 32fec74d162..44a7c70e001 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts
@@ -1,8 +1,8 @@
///
-////const { [|{| "isWriteAccess": true, "isDefinition": true |}x|], y } = { [|{| "isWriteAccess": true, "isDefinition": true |}x|]: 1, y: 2 };
+////[|const { [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|], y } = { [|[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}x|]: 1|], y: 2 };|]
////const z = [|x|];
-const [r0, r1, r2] = test.ranges();
+const [r0Def, r0, r1Def, r1, r2] = test.ranges();
const local = { definition: "const x: number", ranges: [r0, r2] };
const prop = { definition: "(property) x: number", ranges: [r1] };
verify.referenceGroups(r0, [local, prop]);
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts
index 302ed5ce6f5..add271f14e4 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts
@@ -1,10 +1,10 @@
///
-////class [|{| "isWriteAccess": true, "isDefinition": true |}C|] {
+////[|class [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}C|] {
//// n: number;
//// constructor() {
//// this.n = 12;
//// }
-////}
+////}|]
////let c = new [|C|]();
-verify.singleReferenceGroup("class C");
+verify.singleReferenceGroup("class C", test.rangesByText().get("C"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts
index 88ab38e5428..d67dfe74c95 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts
@@ -1,6 +1,6 @@
///
-////let o = { ["[|{| "isWriteAccess": true, "isDefinition": true |}foo|]"]: 12 };
+////let o = { [|["[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}foo|]"]: 12|] };
////let y = o.[|foo|];
////let z = o['[|foo|]'];
-verify.singleReferenceGroup('(property) ["foo"]: number');
+verify.singleReferenceGroup('(property) ["foo"]: number', test.rangesByText().get("foo"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts
index 325674d8ee7..d1721c3b88b 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts
@@ -1,8 +1,8 @@
///
-////enum [|{| "isWriteAccess": true, "isDefinition": true |}E|] {
+////[|enum [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}E|] {
//// First,
//// Second
-////}
+////}|]
////let first = [|E|].First;
-verify.singleReferenceGroup("enum E");
+verify.singleReferenceGroup("enum E", test.rangesByText().get("E"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts
index e31bc46eae6..1f0439b8d50 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts
@@ -1,12 +1,12 @@
///
// @Filename: m.ts
-////export var [|{| "isWriteAccess": true, "isDefinition": true |}x|] = 12;
+////[|export var [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|] = 12;|]
// @Filename: main.ts
-////import { [|{| "isWriteAccess": true, "isDefinition": true |}x|] } from "./m";
+////[|import { [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}x|] } from "./m";|]
////const y = [|x|];
const ranges = test.ranges();
-const [r0, r1, r2] = ranges;
+const [r0Def, r0, r1Def, r1, r2] = ranges;
const defs = { definition: "var x: number", ranges: [r0] };
const imports = { definition: "(alias) var x: number\nimport x", ranges: [r1, r2] };
verify.referenceGroups(r0, [defs, imports]);
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts
index 4c91bc08ef8..71746119230 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts
@@ -1,6 +1,6 @@
///
-////function [|{| "isWriteAccess": true, "isDefinition": true |}func|](x: number) {
-////}
+////[|function [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}func|](x: number) {
+////}|]
////[|func|](x)
-verify.singleReferenceGroup("function func(x: number): void");
+verify.singleReferenceGroup("function func(x: number): void", test.rangesByText().get("func"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts
index 826890c4da9..57c96da1e8b 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts
@@ -1,7 +1,7 @@
///
-////interface [|{| "isWriteAccess": true, "isDefinition": true |}I|] {
+////[|interface [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}I|] {
//// p: number;
-////}
+////}|]
////let i: [|I|] = { p: 12 };
-verify.singleReferenceGroup("interface I");
+verify.singleReferenceGroup("interface I", test.rangesByText().get("I"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts
index 0e363a216eb..2ec89979df4 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts
@@ -1,16 +1,16 @@
///
-////interface [|{| "isWriteAccess": true, "isDefinition": true |}Numbers|] {
+////[|interface [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}Numbers|] {
//// p: number;
-////}
-////interface [|{| "isWriteAccess": true, "isDefinition": true |}Numbers|] {
+////}|]
+////[|interface [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}Numbers|] {
//// m: number;
-////}
-////class [|{| "isWriteAccess": true, "isDefinition": true |}Numbers|] {
+////}|]
+////[|class [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 4 |}Numbers|] {
//// f(n: number) {
//// return this.p + this.m + n;
//// }
-////}
+////}|]
////let i: [|Numbers|] = new [|Numbers|]();
////let x = i.f(i.p + i.m);
-verify.singleReferenceGroup("class Numbers\ninterface Numbers");
+verify.singleReferenceGroup("class Numbers\ninterface Numbers", test.rangesByText().get("Numbers"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts
index 04d00e6c19f..0fc07b3bb6b 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts
@@ -1,7 +1,7 @@
///
-////namespace [|{| "isWriteAccess": true, "isDefinition": true |}Numbers|] {
+////[|namespace [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}Numbers|] {
//// export var n = 12;
-////}
+////}|]
////let x = [|Numbers|].n + 1;
-verify.singleReferenceGroup("namespace Numbers");
+verify.singleReferenceGroup("namespace Numbers", test.rangesByText().get("Numbers"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts
index 33bdad09e1a..249d768bf11 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts
@@ -1,5 +1,5 @@
///
-////let o = { [|{| "isWriteAccess": true, "isDefinition": true |}1|]: 12 };
+////let o = { [|[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}1|]: 12|] };
////let y = o[[|1|]];
-verify.singleReferenceGroup("(property) 1: number");
+verify.singleReferenceGroup("(property) 1: number", test.rangesByText().get("1"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts
index 8afa67bfe64..b18fc51f8eb 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts
@@ -1,6 +1,6 @@
///
-////function f([|{| "isWriteAccess": true, "isDefinition": true |}x|]: number) {
+////function f([|[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|]: number|]) {
//// return [|x|] + 1
////}
-verify.singleReferenceGroup("(parameter) x: number");
+verify.singleReferenceGroup("(parameter) x: number", test.rangesByText().get("x"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts
index cf88d476fef..7ca03f00482 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts
@@ -1,5 +1,5 @@
///
-////let o = { "[|{| "isWriteAccess": true, "isDefinition": true |}x|]": 12 };
+////let o = { [|"[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|]": 12|] };
////let y = o.[|x|];
-verify.singleReferenceGroup('(property) "x": number');
+verify.singleReferenceGroup('(property) "x": number', test.rangesByText().get("x"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts
index 18a4ec0396c..cf69914507b 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts
@@ -1,5 +1,5 @@
///
-////type [|{| "isWriteAccess": true, "isDefinition": true |}Alias|]= number;
+////[|type [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}Alias|]= number;|]
////let n: [|Alias|] = 12;
-verify.singleReferenceGroup("type Alias = number");
+verify.singleReferenceGroup("type Alias = number", test.rangesByText().get("Alias"));
diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts
index 2faf5b53e1b..b3a3ab4cc17 100644
--- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts
+++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts
@@ -1,5 +1,5 @@
///
-////var [|{| "isWriteAccess": true, "isDefinition": true |}x|] = 0;
+////[|var [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|] = 0;|]
////var assignmentRightHandSide = [|x|];
////var assignmentRightHandSide2 = 1 + [|x|];
////
@@ -17,4 +17,4 @@
////[|{| "isWriteAccess": true |}x|] += 1;
////[|{| "isWriteAccess": true |}x|] <<= 1;
-verify.singleReferenceGroup("var x: number");
+verify.singleReferenceGroup("var x: number", test.rangesByText().get("x"));