diff --git a/tests/cases/fourslash/ambientShorthandFindAllRefs.ts b/tests/cases/fourslash/ambientShorthandFindAllRefs.ts
index 14918f4a449..822a70ccaf6 100644
--- a/tests/cases/fourslash/ambientShorthandFindAllRefs.ts
+++ b/tests/cases/fourslash/ambientShorthandFindAllRefs.ts
@@ -4,13 +4,12 @@
////declare module "jquery";
// @Filename: user.ts
-////import {[|{| "isWriteAccess": true, "isDefinition": true |}x|]} from "jquery";
+////[|import {[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|]} from "jquery";|]
// @Filename: user2.ts
-////import {[|{| "isWriteAccess": true, "isDefinition": true |}x|]} from "jquery";
+////[|import {[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}x|]} from "jquery";|]
-const ranges = test.ranges();
-const [r0, r1] = ranges;
+const [r0Def, r0, r1Def, r1] = test.ranges();
// TODO: Want these to be in the same group, but that would require creating a symbol for `x`.
verify.singleReferenceGroup("(alias) module \"jquery\"\nimport x", [r0]);
verify.singleReferenceGroup("(alias) module \"jquery\"\nimport x", [r1]);
\ No newline at end of file
diff --git a/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts b/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts
index 9334ab28b48..a6ff91fbbd5 100644
--- a/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts
+++ b/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts
@@ -7,9 +7,9 @@
////
//// }
////
-//// public /**/[|{| "isWriteAccess": true, "isDefinition": true |}start|](){
+//// [|public /**/[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}start|](){
//// return this;
-//// }
+//// }|]
////
//// public stop(){
//// return this;
@@ -33,5 +33,5 @@ cancellation.resetCancelled();
checkRefs();
function checkRefs() {
- verify.singleReferenceGroup("(method) Test.start(): this");
+ verify.singleReferenceGroup("(method) Test.start(): this", "start");
}
diff --git a/tests/cases/fourslash/doubleUnderscoreRenames.ts b/tests/cases/fourslash/doubleUnderscoreRenames.ts
index 5709be97b6f..6b50d65f124 100644
--- a/tests/cases/fourslash/doubleUnderscoreRenames.ts
+++ b/tests/cases/fourslash/doubleUnderscoreRenames.ts
@@ -1,12 +1,12 @@
///
// @Filename: fileA.ts
-//// export function [|__foo|]() {
-//// }
+//// [|export function [|{| "declarationRangeIndex": 0 |}__foo|]() {
+//// }|]
////
// @Filename: fileB.ts
-//// import { [|__foo|] as bar } from "./fileA";
+//// [|import { [|{| "declarationRangeIndex": 2 |}__foo|] as bar } from "./fileA";|]
////
//// bar();
-verify.rangesAreRenameLocations();
+verify.rangesWithSameTextAreRenameLocations("__foo");
diff --git a/tests/cases/fourslash/duplicatePackageServices.ts b/tests/cases/fourslash/duplicatePackageServices.ts
index 2ececda4e06..e5653f9da6d 100644
--- a/tests/cases/fourslash/duplicatePackageServices.ts
+++ b/tests/cases/fourslash/duplicatePackageServices.ts
@@ -2,25 +2,25 @@
// @noImplicitReferences: true
// @Filename: /node_modules/a/index.d.ts
-////import [|{| "name": "useAX", "isWriteAccess": true, "isDefinition": true |}X|] from "x";
+////[|import [|{| "name": "useAX", "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}X|] from "x";|]
////export function a(x: [|X|]): void;
// @Filename: /node_modules/a/node_modules/x/index.d.ts
-////export default class /*defAX*/[|{| "isWriteAccess": true, "isDefinition": true |}X|] {
+////[|export default class /*defAX*/[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 3 |}X|] {
//// private x: number;
-////}
+////}|]
// @Filename: /node_modules/a/node_modules/x/package.json
////{ "name": "x", "version": "1.2.3" }
// @Filename: /node_modules/b/index.d.ts
-////import [|{| "name": "useBX", "isWriteAccess": true, "isDefinition": true |}X|] from "x";
+////[|import [|{| "name": "useBX", "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 5 |}X|] from "x";|]
////export const b: [|X|];
// @Filename: /node_modules/b/node_modules/x/index.d.ts
-////export default class /*defBX*/[|{| "isWriteAccess": true, "isDefinition": true |}X|] {
+////[|export default class /*defBX*/[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 8 |}X|] {
//// private x: number;
-////}
+////}|]
// @Filename: /node_modules/b/node_modules/x/package.json
////{ "name": "x", "version": "1.2.3" }
@@ -35,7 +35,7 @@ verify.numberOfErrorsInCurrentFile(0);
verify.goToDefinition("useAX", "defAX");
verify.goToDefinition("useBX", "defAX");
-const [r0, r1, r2, r3, r4, r5] = test.ranges();
+const [r0Def, r0, r1, r2Def, r2, r3Def, r3, r4, r5Def, r5] = test.ranges();
const aImport = { definition: "(alias) class X\nimport X", ranges: [r0, r1] };
const def = { definition: "class X", ranges: [r2] };
const bImport = { definition: "(alias) class X\nimport X", ranges: [r3, r4] };
diff --git a/tests/cases/fourslash/esModuleInteropFindAllReferences.ts b/tests/cases/fourslash/esModuleInteropFindAllReferences.ts
index 4e493e58c24..e1ca3e4c9b1 100644
--- a/tests/cases/fourslash/esModuleInteropFindAllReferences.ts
+++ b/tests/cases/fourslash/esModuleInteropFindAllReferences.ts
@@ -4,11 +4,11 @@
// @Filename: /abc.d.ts
////declare module "a" {
-//// export const [|{| "isWriteAccess": true, "isDefinition": true |}x|]: number;
+//// [|export const [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|]: number;|]
////}
// @Filename: /b.ts
////import a from "a";
////a.[|x|];
-verify.singleReferenceGroup("const x: number");
+verify.singleReferenceGroup("const x: number", "x");
diff --git a/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts b/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts
index e55129a357c..02dbddd6b4e 100644
--- a/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts
+++ b/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts
@@ -6,10 +6,10 @@
// @Filename: /a.d.ts
////export as namespace abc;
-////export const [|{| "isWriteAccess": true, "isDefinition": true |}x|]: number;
+////[|export const [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|]: number;|]
// @Filename: /b.ts
////import a from "./a";
////a.[|x|];
-verify.singleReferenceGroup('const x: number');
+verify.singleReferenceGroup('const x: number', "x");
diff --git a/tests/cases/fourslash/findAllReferPropertyAccessExpressionHeritageClause.ts b/tests/cases/fourslash/findAllReferPropertyAccessExpressionHeritageClause.ts
index 61dfb1c33bc..9e9f552b528 100644
--- a/tests/cases/fourslash/findAllReferPropertyAccessExpressionHeritageClause.ts
+++ b/tests/cases/fourslash/findAllReferPropertyAccessExpressionHeritageClause.ts
@@ -2,9 +2,9 @@
//// class B {}
//// function foo() {
-//// return {[|{| "isWriteAccess": true, "isDefinition": true |}B|]: B};
+//// return {[|[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}B|]: B|]};
//// }
//// class C extends (foo()).[|B|] {}
//// class C1 extends foo().[|B|] {}
-verify.singleReferenceGroup("(property) B: typeof B");
+verify.singleReferenceGroup("(property) B: typeof B", "B");
diff --git a/tests/cases/fourslash/findAllReferencesDynamicImport2.ts b/tests/cases/fourslash/findAllReferencesDynamicImport2.ts
index 6644a55ec1b..5e90911875b 100644
--- a/tests/cases/fourslash/findAllReferencesDynamicImport2.ts
+++ b/tests/cases/fourslash/findAllReferencesDynamicImport2.ts
@@ -1,12 +1,12 @@
///
// @Filename: foo.ts
-//// export function [|{| "isWriteAccess": true, "isDefinition": true |}bar|]() { return "bar"; }
+//// [|export function [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}bar|]() { return "bar"; }|]
//// var x = import("./foo");
//// x.then(foo => {
//// foo.[|bar|]();
//// })
-verify.singleReferenceGroup("function bar(): string");
-verify.rangesAreRenameLocations();
+verify.singleReferenceGroup("function bar(): string", "bar");
+verify.rangesWithSameTextAreRenameLocations("bar");
diff --git a/tests/cases/fourslash/findAllReferencesDynamicImport3.ts b/tests/cases/fourslash/findAllReferencesDynamicImport3.ts
index 371369ac39c..1035ff40389 100644
--- a/tests/cases/fourslash/findAllReferencesDynamicImport3.ts
+++ b/tests/cases/fourslash/findAllReferencesDynamicImport3.ts
@@ -1,10 +1,10 @@
///
// @Filename: foo.ts
-////export function [|{| "isWriteAccess": true, "isDefinition": true |}bar|]() { return "bar"; }
-////import('./foo').then(({ [|{| "isWriteAccess": true, "isDefinition": true |}bar|] }) => undefined);
+////[|export function [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}bar|]() { return "bar"; }|]
+////import('./foo').then(([|{ [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}bar|] }|]) => undefined);
-const [r0, r1] = test.ranges();
+const [r0Def, r0, r1Def, r1] = test.ranges();
verify.referenceGroups(r0, [{ definition: "function bar(): string", ranges: [r0, r1] }]);
verify.referenceGroups(r1, [
{ definition: "function bar(): string", ranges: [r0] },
diff --git a/tests/cases/fourslash/findAllReferencesJSDocFunctionNew.ts b/tests/cases/fourslash/findAllReferencesJSDocFunctionNew.ts
index b094714cefb..50066b9b136 100644
--- a/tests/cases/fourslash/findAllReferencesJSDocFunctionNew.ts
+++ b/tests/cases/fourslash/findAllReferencesJSDocFunctionNew.ts
@@ -1,8 +1,8 @@
///
// @allowJs: true
// @Filename: Foo.js
-/////** @type {function ([|{|"isWriteAccess": true, "isDefinition": true|}new|]: string, string): string} */
+/////** @type {function ([|[|{|"isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0|}new|]: string|], string): string} */
////var f;
-const [a0] = test.ranges();
+const [a0Def, a0] = test.ranges();
verify.singleReferenceGroup("(parameter) new: string", [a0]);
diff --git a/tests/cases/fourslash/findAllReferencesOfConstructor.ts b/tests/cases/fourslash/findAllReferencesOfConstructor.ts
index 3dffdeaffb9..ecaada06b1d 100644
--- a/tests/cases/fourslash/findAllReferencesOfConstructor.ts
+++ b/tests/cases/fourslash/findAllReferencesOfConstructor.ts
@@ -2,9 +2,9 @@
// @Filename: a.ts
////export class C {
-//// [|constructor|](n: number);
-//// [|constructor|]();
-//// [|constructor|](n?: number){}
+//// [|[|{| "declarationRangeIndex": 0 |}constructor|](n: number);|]
+//// [|[|{| "declarationRangeIndex": 2 |}constructor|]();|]
+//// [|[|{| "declarationRangeIndex": 4 |}constructor|](n?: number){}|]
//// static f() {
//// this.f();
//// new [|this|]();
@@ -40,8 +40,7 @@
////new a.[|C|]();
////class d extends a.C { constructor() { [|super|](); }
-const ranges = test.ranges();
-const [a0, a1, a2, a3, a4, b0, c0, d0, d1] = ranges;
+const [a0Def, a0, a1Def, a1, a2Def, a2, a3, a4, b0, c0, d0, d1] = test.ranges();
verify.referenceGroups([a0, a2], defs("class C"));
verify.referenceGroups(a1, defs("class C"));
diff --git a/tests/cases/fourslash/findAllReferencesOfConstructor_badOverload.ts b/tests/cases/fourslash/findAllReferencesOfConstructor_badOverload.ts
index 2c4857145e1..ef4dc289359 100644
--- a/tests/cases/fourslash/findAllReferencesOfConstructor_badOverload.ts
+++ b/tests/cases/fourslash/findAllReferencesOfConstructor_badOverload.ts
@@ -1,8 +1,8 @@
///
////class C {
-//// [|constructor|](n: number);
-//// [|constructor|](){}
+//// [|[|{| "declarationRangeIndex": 0 |}constructor|](n: number);|]
+//// [|[|{| "declarationRangeIndex": 2 |}constructor|](){}|]
////}
-verify.singleReferenceGroup("class C");
+verify.singleReferenceGroup("class C", "constructor");
diff --git a/tests/cases/fourslash/findAllReferencesOfJsonModule.ts b/tests/cases/fourslash/findAllReferencesOfJsonModule.ts
index 36f700b09e6..fd944097299 100644
--- a/tests/cases/fourslash/findAllReferencesOfJsonModule.ts
+++ b/tests/cases/fourslash/findAllReferencesOfJsonModule.ts
@@ -5,10 +5,10 @@
// @esModuleInterop: true
// @Filename: /foo.ts
-////import [|{| "isWriteAccess": true, "isDefinition": true |}settings|] from "./settings.json";
+////[|import [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}settings|] from "./settings.json";|]
////[|settings|];
// @Filename: /settings.json
//// {}
-verify.singleReferenceGroup("import settings");
+verify.singleReferenceGroup("import settings", "settings");
diff --git a/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts b/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts
index 464dcef1548..4876b1e0229 100644
--- a/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts
+++ b/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts
@@ -9,12 +9,12 @@
// @Filename: /node_modules/@types/three/index.d.ts
////export * from "./three-core";
-////export as namespace [|{| "isWriteAccess": true, "isDefinition": true |}THREE|];
+////[|export as namespace [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}THREE|];|]
// @Filename: /typings/global.d.ts
////import * as _THREE from '[|three|]';
////declare global {
-//// const [|{| "isWriteAccess": true, "isDefinition": true |}THREE|]: typeof _THREE;
+//// [|const [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 3 |}THREE|]: typeof _THREE;|]
////}
// @Filename: /src/index.ts
@@ -38,7 +38,8 @@
//// "files": ["/src/index.ts", "typings/global.d.ts"]
////}
+const [r0Def, r0, r1, r2Def, ...rest] = test.ranges();
// GH#29533
// TODO:: this should be var THREE: typeof import instead of module name as var but thats existing issue and repros with quickInfo too.
verify.singleReferenceGroup(`module "/node_modules/@types/three/index"
-var "/node_modules/@types/three/index": typeof import("/node_modules/@types/three/index")`);
\ No newline at end of file
+var "/node_modules/@types/three/index": typeof import("/node_modules/@types/three/index")`, [r0, r1, ...rest]);
\ No newline at end of file
diff --git a/tests/cases/fourslash/findAllRefsBadImport.ts b/tests/cases/fourslash/findAllRefsBadImport.ts
index a54454ea365..cde75d2df9a 100644
--- a/tests/cases/fourslash/findAllRefsBadImport.ts
+++ b/tests/cases/fourslash/findAllRefsBadImport.ts
@@ -1,7 +1,7 @@
///
-////import { [|ab|] as [|{| "isWriteAccess": true, "isDefinition": true |}cd|] } from "doesNotExist";
+////[|import { [|{| "declarationRangeIndex": 0 |}ab|] as [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}cd|] } from "doesNotExist";|]
-const [r0, r1] = test.ranges();
+const [r0Def, r0, r1] = test.ranges();
verify.referenceGroups(r0, undefined);
verify.singleReferenceGroup("import cd", [r1]);
diff --git a/tests/cases/fourslash/findAllRefsClassExpression0.ts b/tests/cases/fourslash/findAllRefsClassExpression0.ts
index e8d4aa671a3..9ccff25ab96 100644
--- a/tests/cases/fourslash/findAllRefsClassExpression0.ts
+++ b/tests/cases/fourslash/findAllRefsClassExpression0.ts
@@ -1,15 +1,15 @@
///
// @Filename: /a.ts
-////export = class [|{| "isWriteAccess": true, "isDefinition": true |}A|] {
+////export = [|class [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}A|] {
//// m() { [|A|]; }
-////};
+////}|];
// @Filename: /b.ts
-////import [|{| "isWriteAccess": true, "isDefinition": true |}A|] = require("./a");
+////[|import [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 3 |}A|] = require("./a");|]
////[|A|];
-const [r0, r1, r2, r3] = test.ranges();
+const [r0Def, r0, r1, r2Def, r2, r3] = test.ranges();
const defs = { definition: "(local class) A", ranges: [r0, r1] };
const imports = { definition: '(alias) (local class) A\nimport A = require("./a")', ranges: [r2, r3] };
verify.referenceGroups([r0, r1], [defs, imports]);
diff --git a/tests/cases/fourslash/findAllRefsClassExpression1.ts b/tests/cases/fourslash/findAllRefsClassExpression1.ts
index 64aad512a5e..96bba426a25 100644
--- a/tests/cases/fourslash/findAllRefsClassExpression1.ts
+++ b/tests/cases/fourslash/findAllRefsClassExpression1.ts
@@ -3,13 +3,13 @@
// @allowJs: true
// @Filename: /a.js
-////module.exports = class [|{| "isWriteAccess": true, "isDefinition": true |}A|] {};
+////module.exports = [|class [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}A|] {}|];
// @Filename: /b.js
-////import [|{| "isWriteAccess": true, "isDefinition": true |}A|] = require("./a");
+////[|import [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}A|] = require("./a");|]
////[|A|];
-const [r0, r1, r2] = test.ranges();
+const [r0Def, r0, r1Def, r1, r2] = test.ranges();
const defs = { definition: "(local class) A", ranges: [r0] };
const imports = { definition: '(alias) (local class) A\nimport A = require("./a")', ranges: [r1, r2] };
verify.referenceGroups([r0], [defs, imports]);
diff --git a/tests/cases/fourslash/findAllRefsClassExpression2.ts b/tests/cases/fourslash/findAllRefsClassExpression2.ts
index 1214e3f7c88..9432e9e7181 100644
--- a/tests/cases/fourslash/findAllRefsClassExpression2.ts
+++ b/tests/cases/fourslash/findAllRefsClassExpression2.ts
@@ -3,13 +3,13 @@
// @allowJs: true
// @Filename: /a.js
-////exports.[|{| "isWriteAccess": true, "isDefinition": true |}A|] = class {};
+////[|exports.[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}A|] = class {};|]
// @Filename: /b.js
-////import { [|{| "isWriteAccess": true, "isDefinition": true |}A|] } from "./a";
+////[|import { [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}A|] } from "./a";|]
////[|A|];
-const [r0, r1, r2] = test.ranges();
+const [r0Def, r0, r1Def, r1, r2] = test.ranges();
const defs = { definition: "class A\n(property) A: typeof A", ranges: [r0] };
const imports = { definition: "(alias) class A\n(alias) (property) A: typeof A\nimport A", ranges: [r1, r2] };
verify.referenceGroups([r0], [defs, imports]);
diff --git a/tests/cases/fourslash/findAllRefsClassWithStaticThisAccess.ts b/tests/cases/fourslash/findAllRefsClassWithStaticThisAccess.ts
index f2c432abc76..419f61836d3 100644
--- a/tests/cases/fourslash/findAllRefsClassWithStaticThisAccess.ts
+++ b/tests/cases/fourslash/findAllRefsClassWithStaticThisAccess.ts
@@ -1,6 +1,6 @@
///
-////class [|{| "isWriteAccess": true, "isDefinition": true |}C|] {
+////[|class [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}C|] {
//// static s() {
//// [|this|];
//// }
@@ -10,9 +10,9 @@
//// function inner() { this; }
//// class Inner { x = this; }
//// }
-////}
+////}|]
-const [r0, r1, r2] = test.ranges();
+const [r0Def, r0, r1, r2] = test.ranges();
verify.referenceGroups(r0, [{ definition: "class C", ranges: [r0, r1, r2] }]);
verify.singleReferenceGroup("this: typeof C", [r1, r2]);
diff --git a/tests/cases/fourslash/findAllRefsConstructorFunctions.ts b/tests/cases/fourslash/findAllRefsConstructorFunctions.ts
index 77fa674f65b..8f95f94da2b 100644
--- a/tests/cases/fourslash/findAllRefsConstructorFunctions.ts
+++ b/tests/cases/fourslash/findAllRefsConstructorFunctions.ts
@@ -4,11 +4,11 @@
// @Filename: /a.js
////function f() {
-//// this.[|{| "isWriteAccess": true, "isDefinition": true |}x|] = 0;
+//// [|this.[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|] = 0;|]
////}
////f.prototype.setX = function() {
-//// this.[|{| "isWriteAccess": true, "isDefinition": true |}x|] = 1;
+//// [|this.[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}x|] = 1;|]
////}
////f.prototype.useX = function() { this.[|x|]; }
-verify.singleReferenceGroup("(property) f.x: number");
+verify.singleReferenceGroup("(property) f.x: number", "x");
diff --git a/tests/cases/fourslash/findAllRefsDeclareClass.ts b/tests/cases/fourslash/findAllRefsDeclareClass.ts
index 9ef813634a5..4632f48c527 100644
--- a/tests/cases/fourslash/findAllRefsDeclareClass.ts
+++ b/tests/cases/fourslash/findAllRefsDeclareClass.ts
@@ -1,7 +1,7 @@
///
-////declare class [|{| "isWriteAccess": true, "isDefinition": true |}C|] {
+////[|declare class [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}C|] {
//// static m(): void;
-////}
+////}|]
-verify.singleReferenceGroup("class C");
+verify.singleReferenceGroup("class C", "C");
diff --git a/tests/cases/fourslash/findAllRefsDefaultImport.ts b/tests/cases/fourslash/findAllRefsDefaultImport.ts
index b981f50bd16..23b7c8af76a 100644
--- a/tests/cases/fourslash/findAllRefsDefaultImport.ts
+++ b/tests/cases/fourslash/findAllRefsDefaultImport.ts
@@ -1,12 +1,12 @@
///
// @Filename: /a.ts
-////export default function [|{| "isWriteAccess": true, "isDefinition": true |}a|]() {}
+////[|export default function [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}a|]() {}|]
// @Filename: /b.ts
-////import [|{| "isWriteAccess": true, "isDefinition": true |}a|], * as ns from "./a";
+////[|import [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}a|], * as ns from "./a";|]
-const [r0, r1] = test.ranges();
+const [r0Def, r0, r1Def, r1] = test.ranges();
const a: FourSlashInterface.ReferenceGroup = { definition: "function a(): void", ranges: [r0] };
const b: FourSlashInterface.ReferenceGroup = { definition: "(alias) function a(): void\nimport a", ranges: [r1] };
verify.referenceGroups(r0, [a, b]);
diff --git a/tests/cases/fourslash/findAllRefsDefaultImportThroughNamespace.ts b/tests/cases/fourslash/findAllRefsDefaultImportThroughNamespace.ts
index 722403f45cf..ca99174463b 100644
--- a/tests/cases/fourslash/findAllRefsDefaultImportThroughNamespace.ts
+++ b/tests/cases/fourslash/findAllRefsDefaultImportThroughNamespace.ts
@@ -1,7 +1,7 @@
///
// @Filename: /a.ts
-////export [|{| "isWriteAccess": true, "isDefinition": true |}default|] function [|{| "isWriteAccess": true, "isDefinition": true |}f|]() {}
+////[|export [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}default|] function [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}f|]() {}|]
// @Filename: /b.ts
////export import a = require("./a");
@@ -10,10 +10,10 @@
////import { a } from "./b";
////a.[|default|]();
////
-////declare const x: { [|{| "isWriteAccess": true, "isDefinition": true |}default|]: number };
+////declare const x: { [|[|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 4 |}default|]: number|] };
////x.[|default|];
-const [r0, r1, r2, r3, r4] = test.ranges();
+const [r0Def, r0, r1, r2, r3Def, r3, r4] = test.ranges();
verify.referenceGroups([r0], [{ definition: "function f(): void", ranges: [r0, r2] }]);
verify.singleReferenceGroup("function f(): void", [r1, r2]);
diff --git a/tests/cases/fourslash/findAllRefsDefinition.ts b/tests/cases/fourslash/findAllRefsDefinition.ts
index 7b7016e7049..4d9d50a618a 100644
--- a/tests/cases/fourslash/findAllRefsDefinition.ts
+++ b/tests/cases/fourslash/findAllRefsDefinition.ts
@@ -1,9 +1,9 @@
///
-////const [|{| "isWriteAccess": true, "isDefinition": true |}x|] = 0;
+////[|const [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}x|] = 0;|]
////[|x|];
-const ranges = test.ranges();
+const ranges = test.rangesByText().get("x");
verify.referenceGroups(ranges, [
{
definition: { text: "const x: 0", range: ranges[0] },
diff --git a/tests/cases/fourslash/findAllRefsDestructureGeneric.ts b/tests/cases/fourslash/findAllRefsDestructureGeneric.ts
index 3d7a84cb35a..d6e96155ec7 100644
--- a/tests/cases/fourslash/findAllRefsDestructureGeneric.ts
+++ b/tests/cases/fourslash/findAllRefsDestructureGeneric.ts
@@ -1,12 +1,12 @@
///
////interface I {
-//// [|{| "isDefinition": true |}x|]: boolean;
+//// [|[|{| "isDefinition": true, "declarationRangeIndex": 0 |}x|]: boolean;|]
////}
////declare const i: I;
-////const { [|{| "isWriteAccess": true, "isDefinition": true |}x|] } = i;
+////[|const { [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}x|] } = i;|]
-const [r0, r1] = test.ranges();
+const [r0Def, r0, r1Def, r1] = test.ranges();
verify.referenceGroups(r0, [{ definition: "(property) I.x: boolean", ranges: [r0, r1] }]);
verify.referenceGroups(r1, [
diff --git a/tests/cases/fourslash/findAllRefsDestructureGetter.ts b/tests/cases/fourslash/findAllRefsDestructureGetter.ts
index 763d3cfb0e5..ed4a74d5d2b 100644
--- a/tests/cases/fourslash/findAllRefsDestructureGetter.ts
+++ b/tests/cases/fourslash/findAllRefsDestructureGetter.ts
@@ -1,14 +1,14 @@
///
////class Test {
-//// get [|{| "isDefinition": true, "isWriteAccess": true |}x|]() { return 0; }
+//// [|get [|{| "isDefinition": true, "isWriteAccess": true, "declarationRangeIndex": 0 |}x|]() { return 0; }|]
////
-//// set [|{| "isDefinition": true, "isWriteAccess": true |}y|](a: number) {}
+//// [|set [|{| "isDefinition": true, "isWriteAccess": true, "declarationRangeIndex": 2 |}y|](a: number) {}|]
////}
-////const { [|{| "isDefinition": true, "isWriteAccess": true |}x|], [|{| "isDefinition": true, "isWriteAccess": true |}y|] } = new Test();
+////[|const { [|{| "isDefinition": true, "isWriteAccess": true, "declarationRangeIndex": 4 |}x|], [|{| "isDefinition": true, "isWriteAccess": true, "declarationRangeIndex": 4 |}y|] } = new Test();|]
////[|x|]; [|y|];
-const [x0, y0, x1, y1, x2, y2] = test.ranges();
+const [x0Def, x0, y0Def, y0, xy1Def, x1, y1, x2, y2] = test.ranges();
verify.referenceGroups(x0, [{ definition: "(property) Test.x: number", ranges: [x0, x1] }]);
verify.referenceGroups(x1, [
{ definition: "(property) Test.x: number", ranges: [x0] },
diff --git a/tests/cases/fourslash/findAllRefsDestructureGetter2.ts b/tests/cases/fourslash/findAllRefsDestructureGetter2.ts
index d26983a1091..8d6300e976f 100644
--- a/tests/cases/fourslash/findAllRefsDestructureGetter2.ts
+++ b/tests/cases/fourslash/findAllRefsDestructureGetter2.ts
@@ -4,13 +4,13 @@
// @Filename: /a.ts
////class C {
-//// get [|{| "isWriteAccess": true, "isDefinition": true |}g|](): number { return 0; }
+//// [|get [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}g|](): number { return 0; }|]
////
-//// set [|{| "isWriteAccess": true, "isDefinition": true |}s|](value: number) {}
+//// [|set [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 2 |}s|](value: number) {}|]
////}
-////const { [|{| "isWriteAccess": true, "isDefinition": true |}g|], [|{| "isWriteAccess": true, "isDefinition": true |}s|] } = new C();
+////[|const { [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 4 |}g|], [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 4 |}s|] } = new C();|]
-const [g0, s0, g1, s1] = test.ranges();
+const [g0Def, g0, s0Def, s0, gs1Def, g1, s1] = test.ranges();
verify.quickInfoAt(g0, "(property) C.g: number");
verify.referenceGroups(g0, [{ definition: "(property) C.g: number", ranges: [g0, g1] }]);
verify.referenceGroups(g1, [
diff --git a/tests/cases/fourslash/shims-pp/getReferencesAtPosition.ts b/tests/cases/fourslash/shims-pp/getReferencesAtPosition.ts
index 7189738435f..fabe77c53ac 100644
--- a/tests/cases/fourslash/shims-pp/getReferencesAtPosition.ts
+++ b/tests/cases/fourslash/shims-pp/getReferencesAtPosition.ts
@@ -7,9 +7,9 @@
////
//// }
////
-//// public [|{| "isWriteAccess": true, "isDefinition": true |}start|](){
+//// [|public [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}start|](){
//// return this;
-//// }
+//// }|]
////
//// public stop(){
//// return this;
@@ -23,4 +23,4 @@
////second.[|start|]();
////second.stop();
-verify.singleReferenceGroup("(method) Test.start(): this");
+verify.singleReferenceGroup("(method) Test.start(): this", "start");
diff --git a/tests/cases/fourslash/shims-pp/getRenameInfo.ts b/tests/cases/fourslash/shims-pp/getRenameInfo.ts
index aa04d69962a..2595a523f16 100644
--- a/tests/cases/fourslash/shims-pp/getRenameInfo.ts
+++ b/tests/cases/fourslash/shims-pp/getRenameInfo.ts
@@ -2,9 +2,9 @@
///////
-////function [|Bar|]() {
+////[|function [|{| "declarationRangeIndex": 0 |}Bar|]() {
//// // This is a reference to Bar in a comment.
//// "this is a reference to Bar in a string"
-////}
+////}|]
-verify.rangesAreRenameLocations();
+verify.rangesWithSameTextAreRenameLocations("Bar");
diff --git a/tests/cases/fourslash/shims/getReferencesAtPosition.ts b/tests/cases/fourslash/shims/getReferencesAtPosition.ts
index 7189738435f..fabe77c53ac 100644
--- a/tests/cases/fourslash/shims/getReferencesAtPosition.ts
+++ b/tests/cases/fourslash/shims/getReferencesAtPosition.ts
@@ -7,9 +7,9 @@
////
//// }
////
-//// public [|{| "isWriteAccess": true, "isDefinition": true |}start|](){
+//// [|public [|{| "isWriteAccess": true, "isDefinition": true, "declarationRangeIndex": 0 |}start|](){
//// return this;
-//// }
+//// }|]
////
//// public stop(){
//// return this;
@@ -23,4 +23,4 @@
////second.[|start|]();
////second.stop();
-verify.singleReferenceGroup("(method) Test.start(): this");
+verify.singleReferenceGroup("(method) Test.start(): this", "start");
diff --git a/tests/cases/fourslash/shims/getRenameInfo.ts b/tests/cases/fourslash/shims/getRenameInfo.ts
index aa04d69962a..2595a523f16 100644
--- a/tests/cases/fourslash/shims/getRenameInfo.ts
+++ b/tests/cases/fourslash/shims/getRenameInfo.ts
@@ -2,9 +2,9 @@
///////
-////function [|Bar|]() {
+////[|function [|{| "declarationRangeIndex": 0 |}Bar|]() {
//// // This is a reference to Bar in a comment.
//// "this is a reference to Bar in a string"
-////}
+////}|]
-verify.rangesAreRenameLocations();
+verify.rangesWithSameTextAreRenameLocations("Bar");