Skip to content

Commit 7fa5f70

Browse files
author
Andy
authored
Remove verify.referencesAre, verify.referencesOf, verify.rangesReferenceEachOther (#23900)
1 parent 0f79b5b commit 7fa5f70

27 files changed

+101
-149
lines changed

src/harness/fourslash.ts

Lines changed: 10 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,32 +1142,6 @@ namespace FourSlash {
11421142
}
11431143
}
11441144

1145-
private verifyReferencesAre(expectedReferences: Range[]) {
1146-
const actualReferences = this.getReferencesAtCaret() || [];
1147-
1148-
if (actualReferences.length > expectedReferences.length) {
1149-
// Find the unaccounted-for reference.
1150-
for (const actual of actualReferences) {
1151-
if (!ts.forEach(expectedReferences, r => r.pos === actual.textSpan.start)) {
1152-
this.raiseError(`A reference ${stringify(actual)} is unaccounted for.`);
1153-
}
1154-
}
1155-
// Probably will never reach here.
1156-
this.raiseError(`There are ${actualReferences.length} references but only ${expectedReferences.length} were expected.`);
1157-
}
1158-
1159-
for (const reference of expectedReferences) {
1160-
const { fileName, pos, end } = reference;
1161-
if (reference.marker && reference.marker.data) {
1162-
const { isWriteAccess, isDefinition } = reference.marker.data as { isWriteAccess?: boolean, isDefinition?: boolean };
1163-
this.verifyReferencesWorker(actualReferences, fileName, pos, end, isWriteAccess, isDefinition);
1164-
}
1165-
else {
1166-
this.verifyReferencesWorker(actualReferences, fileName, pos, end);
1167-
}
1168-
}
1169-
}
1170-
11711145
private verifyDocumentHighlightsRespectFilesList(files: ReadonlyArray<string>): void {
11721146
const startFile = this.activeFile.fileName;
11731147
for (const fileName of files) {
@@ -1179,20 +1153,6 @@ namespace FourSlash {
11791153
}
11801154
}
11811155

1182-
public verifyReferencesOf(range: Range, references: Range[]) {
1183-
this.goToRangeStart(range);
1184-
this.verifyDocumentHighlightsRespectFilesList(unique(references, e => e.fileName));
1185-
this.verifyReferencesAre(references);
1186-
}
1187-
1188-
public verifyRangesReferenceEachOther(ranges?: Range[]) {
1189-
ranges = ranges || this.getRanges();
1190-
assert(ranges.length);
1191-
for (const range of ranges) {
1192-
this.verifyReferencesOf(range, ranges);
1193-
}
1194-
}
1195-
11961156
public verifyReferenceGroups(starts: ArrayOrSingle<string> | ArrayOrSingle<Range>, parts: ReadonlyArray<FourSlashInterface.ReferenceGroup> | undefined): void {
11971157
interface ReferenceGroupJson {
11981158
definition: string | { text: string, range: ts.TextSpan };
@@ -1250,6 +1210,12 @@ namespace FourSlash {
12501210
}
12511211
}
12521212

1213+
// Necessary to have this function since `findReferences` isn't implemented in `client.ts`
1214+
public verifyGetReferencesForServerTest(expected: ReadonlyArray<ts.ReferenceEntry>): void {
1215+
const refs = this.getReferencesAtCaret();
1216+
assert.deepEqual(refs, expected);
1217+
}
1218+
12531219
public verifySingleReferenceGroup(definition: FourSlashInterface.ReferenceGroupDefinition, ranges?: Range[]) {
12541220
ranges = ranges || this.getRanges();
12551221
this.verifyReferenceGroups(ranges, [{ definition, ranges }]);
@@ -1314,23 +1280,6 @@ Actual: ${stringify(fullActual)}`);
13141280
TestState.getDisplayPartsJson(expected), this.messageAtLastKnownMarker("referenced symbol definition display parts"));
13151281
}
13161282

1317-
private verifyReferencesWorker(references: ts.ReferenceEntry[], fileName: string, start: number, end: number, isWriteAccess?: boolean, isDefinition?: boolean) {
1318-
for (const reference of references) {
1319-
if (reference && reference.fileName === fileName && reference.textSpan.start === start && ts.textSpanEnd(reference.textSpan) === end) {
1320-
if (typeof isWriteAccess !== "undefined" && reference.isWriteAccess !== isWriteAccess) {
1321-
this.raiseError(`verifyReferencesAtPositionListContains failed - item isWriteAccess value does not match, actual: ${reference.isWriteAccess}, expected: ${isWriteAccess}.`);
1322-
}
1323-
if (typeof isDefinition !== "undefined" && reference.isDefinition !== isDefinition) {
1324-
this.raiseError(`verifyReferencesAtPositionListContains failed - item isDefinition value does not match, actual: ${reference.isDefinition}, expected: ${isDefinition}.`);
1325-
}
1326-
return;
1327-
}
1328-
}
1329-
1330-
const missingItem = { fileName, start, end, isWriteAccess, isDefinition };
1331-
this.raiseError(`verifyReferencesAtPositionListContains failed - could not find the item: ${stringify(missingItem)} in the returned list: (${stringify(references)})`);
1332-
}
1333-
13341283
private getCompletionListAtCaret(options?: ts.GetCompletionsAtPositionOptions): ts.CompletionInfo {
13351284
return this.languageService.getCompletionsAtPosition(this.activeFile.fileName, this.currentCaretPosition, options);
13361285
}
@@ -4210,10 +4159,6 @@ namespace FourSlashInterface {
42104159
this.state.verifyTypeOfSymbolAtLocation(range, symbol, expected);
42114160
}
42124161

4213-
public referencesOf(start: FourSlash.Range, references: FourSlash.Range[]) {
4214-
this.state.verifyReferencesOf(start, references);
4215-
}
4216-
42174162
public referenceGroups(starts: Many<string> | Many<FourSlash.Range>, parts: ReferenceGroup[]) {
42184163
this.state.verifyReferenceGroups(starts, parts);
42194164
}
@@ -4222,12 +4167,12 @@ namespace FourSlashInterface {
42224167
this.state.verifyNoReferences(markerNameOrRange);
42234168
}
42244169

4225-
public singleReferenceGroup(definition: ReferenceGroupDefinition, ranges?: FourSlash.Range[]) {
4226-
this.state.verifySingleReferenceGroup(definition, ranges);
4170+
public getReferencesForServerTest(expected: ReadonlyArray<ts.ReferenceEntry>) {
4171+
this.state.verifyGetReferencesForServerTest(expected);
42274172
}
42284173

4229-
public rangesReferenceEachOther(ranges?: FourSlash.Range[]) {
4230-
this.state.verifyRangesReferenceEachOther(ranges);
4174+
public singleReferenceGroup(definition: ReferenceGroupDefinition, ranges?: FourSlash.Range[]) {
4175+
this.state.verifySingleReferenceGroup(definition, ranges);
42314176
}
42324177

42334178
public findReferencesDefinitionDisplayPartsAtCaretAre(expected: ts.SymbolDisplayPart[]) {

src/services/findAllReferences.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ namespace ts.FindAllReferences {
119119
const { node } = def;
120120
const symbol = checker.getSymbolAtLocation(node);
121121
const displayParts = symbol && SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(
122-
checker, symbol, node.getSourceFile(), getContainerNode(node), node).displayParts;
122+
checker, symbol, node.getSourceFile(), getContainerNode(node), node).displayParts || [textPart("this")];
123123
return { node, name: "this", kind: ScriptElementKind.variableElement, displayParts };
124124
}
125125
case "string": {

tests/cases/fourslash/esModuleInteropFindAllReferences.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
// @Filename: /abc.d.ts
66
////declare module "a" {
7-
//// export const [|x|]: number;
7+
//// export const [|{| "isWriteAccess": true, "isDefinition": true |}x|]: number;
88
////}
99

1010
// @Filename: /b.ts
1111
////import a from "a";
1212
////a.[|x|];
1313

14-
verify.rangesReferenceEachOther();
14+
verify.singleReferenceGroup("const x: number");

tests/cases/fourslash/esModuleInteropFindAllReferences2.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77
// @Filename: /a.d.ts
88
////export as namespace abc;
9-
////export const [|x|]: number;
9+
////export const [|{| "isWriteAccess": true, "isDefinition": true |}x|]: number;
1010

1111
// @Filename: /b.ts
1212
////import a from "./a";
1313
////a.[|x|];
1414

15-
verify.rangesReferenceEachOther();
15+
verify.singleReferenceGroup('const x: number');

tests/cases/fourslash/findAllReferPropertyAccessExpressionHeritageClause.ts

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

33
//// class B {}
44
//// function foo() {
5-
//// return {[|B|]: B};
5+
//// return {[|{| "isWriteAccess": true, "isDefinition": true |}B|]: B};
66
//// }
77
//// class C extends (foo()).[|B|] {}
88
//// class C1 extends foo().[|B|] {}
99

10-
const ranges = test.ranges();
11-
for (const range of ranges) {
12-
verify.referencesOf(range, ranges);
13-
}
10+
verify.singleReferenceGroup("(property) B: typeof B");

tests/cases/fourslash/findAllReferencesDynamicImport1.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
//// import("[|./foo|]")
77
//// var x = import("[|./foo|]")
88

9-
verify.rangesReferenceEachOther();
9+
verify.singleReferenceGroup('module "/tests/cases/fourslash/foo"');
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/// <reference path='fourslash.ts' />
22

33
// @Filename: foo.ts
4-
//// export function [|bar|]() { return "bar"; }
4+
//// export function [|{| "isWriteAccess": true, "isDefinition": true |}bar|]() { return "bar"; }
55

66
//// var x = import("./foo");
77
//// x.then(foo => {
8-
//// foo.[|bar|]();
8+
//// foo.[|bar|]();
99
//// })
1010

11-
verify.rangesReferenceEachOther();
12-
verify.rangesAreRenameLocations();
11+
verify.singleReferenceGroup("function bar(): string");
12+
verify.rangesAreRenameLocations();
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/// <reference path='fourslash.ts'/>
22

3-
////import { [|ab|] as [|cd|] } from "doesNotExist";
3+
////import { [|ab|] as [|{| "isWriteAccess": true, "isDefinition": true |}cd|] } from "doesNotExist";
44

55
const [r0, r1] = test.ranges();
6-
verify.referencesOf(r0, [r1]);
7-
verify.referencesOf(r1, [r1]);
6+
verify.referenceGroups([r0, r1], [{ definition: "import cd", ranges: [r1] }]);

tests/cases/fourslash/findAllRefsThisKeyword.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
////x.[|this|];
2626

2727
const [global, f0, f1, g0, g1, x, y, constructor, method, propDef, propUse] = test.ranges();
28-
verify.referencesOf(global, [global]);
28+
verify.singleReferenceGroup("this", [global]);
2929
verify.referenceGroups(f0, [{ definition: "(parameter) this: any", ranges: [f0, f1] }]);
3030
verify.referenceGroups(f1, [{ definition: "this: any", ranges: [f0, f1] }]);
3131
verify.referenceGroups(g0, [{ definition: "(parameter) this: any", ranges: [g0, g1] }]);

tests/cases/fourslash/findAllRefsThisKeywordMultipleFiles.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
//// // different 'this'
1313
//// function f(this) { return this; }
1414

15-
verify.rangesReferenceEachOther();
15+
verify.singleReferenceGroup("this");

tests/cases/fourslash/findAllRefsTypedef.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
// @Filename: /a.js
66
/////**
77
//// * @typedef I {Object}
8-
//// * @prop [|p|] {number}
8+
//// * @prop [|{| "isWriteAccess": true, "isDefinition": true |}p|] {number}
99
//// */
1010
////
1111
/////** @type {I} */
1212
////let x;
1313
////x.[|p|];
1414

15-
verify.rangesReferenceEachOther();
15+
verify.singleReferenceGroup("(property) p: number");

tests/cases/fourslash/fourslash.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -253,12 +253,6 @@ declare namespace FourSlashInterface {
253253
noReferences(markerNameOrRange?: string | Range): void;
254254
symbolAtLocation(startRange: Range, ...declarationRanges: Range[]): void;
255255
typeOfSymbolAtLocation(range: Range, symbol: any, expected: string): void;
256-
/**
257-
* @deprecated, prefer 'referenceGroups'
258-
* Like `referencesAre`, but goes to `start` first.
259-
* `start` should be included in `references`.
260-
*/
261-
referencesOf(start: Range, references: Range[]): void;
262256
/**
263257
* For each of starts, asserts the ranges that are referenced from there.
264258
* This uses the 'findReferences' command instead of 'getReferencesAtPosition', so references are grouped by their definition.
@@ -268,11 +262,6 @@ declare namespace FourSlashInterface {
268262
rangesAreOccurrences(isWriteAccess?: boolean): void;
269263
rangesWithSameTextAreRenameLocations(): void;
270264
rangesAreRenameLocations(options?: Range[] | { findInStrings?: boolean, findInComments?: boolean, ranges?: Range[] });
271-
/**
272-
* Performs `referencesOf` for every range on the whole set.
273-
* If `ranges` is omitted, this is `test.ranges()`.
274-
*/
275-
rangesReferenceEachOther(ranges?: Range[]): void;
276265
findReferencesDefinitionDisplayPartsAtCaretAre(expected: ts.SymbolDisplayPart[]): void;
277266
currentParameterHelpArgumentNameIs(name: string): void;
278267
currentParameterSpanIs(parameter: string): void;

tests/cases/fourslash/server/references01.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,22 @@
22

33
// Global class reference.
44

5-
// @Filename: referencesForGlobals_1.ts
6-
////class [|globalClass|] {
5+
// @Filename: /referencesForGlobals_1.ts
6+
////class [|{| "isWriteAccess": true, "isDefinition": true |}globalClass|] {
77
//// public f() { }
88
////}
99

10-
// @Filename: referencesForGlobals_2.ts
10+
// @Filename: /referencesForGlobals_2.ts
1111
///////<reference path="referencesForGlobals_1.ts" />
1212
////var c = [|globalClass|]();
1313

14-
// Must reverse ranges so that referencesForGlobals_2 goes first -- otherwise referencesForGlobals_1 won't pick it up.
15-
verify.rangesReferenceEachOther(test.ranges().reverse());
14+
const [r0, r1] = test.ranges();
15+
goTo.rangeStart(r1);
16+
verify.getReferencesForServerTest([
17+
{ fileName: "/referencesForGlobals_1.ts", isDefinition: true, isWriteAccess: true, textSpan: toSpan(r0) },
18+
{ fileName: "/referencesForGlobals_2.ts", isDefinition: false, isWriteAccess: false, textSpan: toSpan(r1) },
19+
]);
20+
21+
function toSpan(r: FourSlashInterface.Range) {
22+
return { start: r.pos, length: r.end - r.pos };
23+
}

tests/cases/fourslash/server/referencesInConfiguredProject.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,24 @@
22

33
// Global class reference.
44

5-
// @Filename: referencesForGlobals_1.ts
5+
// @Filename: /referencesForGlobals_1.ts
66
////class [|globalClass|] {
77
//// public f() { }
88
////}
99

10-
// @Filename: referencesForGlobals_2.ts
10+
// @Filename: /referencesForGlobals_2.ts
1111
////var c = [|globalClass|]();
1212

13-
// @Filename: tsconfig.json
13+
// @Filename: /tsconfig.json
1414
////{ "files": ["referencesForGlobals_1.ts", "referencesForGlobals_2.ts"] }
1515

16-
verify.rangesReferenceEachOther();
16+
const [r0, r1] = test.ranges();
17+
goTo.rangeStart(r1);
18+
verify.getReferencesForServerTest([
19+
{ fileName: "/referencesForGlobals_1.ts", isDefinition: true, isWriteAccess: true, textSpan: toSpan(r0) },
20+
{ fileName: "/referencesForGlobals_2.ts", isDefinition: false, isWriteAccess: false, textSpan: toSpan(r1) },
21+
]);
22+
23+
function toSpan(r: FourSlashInterface.Range) {
24+
return { start: r.pos, length: r.end - r.pos };
25+
}

tests/cases/fourslash/tsxFindAllReferences1.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//// declare module JSX {
55
//// interface Element { }
66
//// interface IntrinsicElements {
7-
//// [|div|]: {
7+
//// [|{| "isWriteAccess": true, "isDefinition": true |}div|]: {
88
//// name?: string;
99
//// isOpen?: boolean;
1010
//// };
@@ -13,4 +13,7 @@
1313
//// }
1414
//// var x = <[|div|] />;
1515

16-
verify.rangesReferenceEachOther();
16+
verify.singleReferenceGroup(`(property) JSX.IntrinsicElements.div: {
17+
name?: string;
18+
isOpen?: boolean;
19+
}`);

tests/cases/fourslash/tsxFindAllReferences10.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
//// className?: string;
1616
//// }
1717
//// interface ButtonProps extends ClickableProps {
18-
//// [|onClick|](event?: React.MouseEvent<HTMLButtonElement>): void;
18+
//// [|{| "isWriteAccess": true, "isDefinition": true |}onClick|](event?: React.MouseEvent<HTMLButtonElement>): void;
1919
//// }
2020
//// interface LinkProps extends ClickableProps {
2121
//// goTo: string;
@@ -25,9 +25,9 @@
2525
//// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
2626
//// let opt = <MainButton />;
2727
//// let opt = <MainButton children="chidlren" />;
28-
//// let opt = <MainButton [|onClick|]={()=>{}} />;
29-
//// let opt = <MainButton [|onClick|]={()=>{}} ignore-prop />;
28+
//// let opt = <MainButton [|{| "isWriteAccess": true, "isDefinition": true |}onClick|]={()=>{}} />;
29+
//// let opt = <MainButton [|{| "isWriteAccess": true, "isDefinition": true |}onClick|]={()=>{}} ignore-prop />;
3030
//// let opt = <MainButton goTo="goTo" />;
3131
//// let opt = <MainButton wrong />;
3232

33-
verify.rangesReferenceEachOther();
33+
verify.singleReferenceGroup("(method) ButtonProps.onClick(event?: any): void");

tests/cases/fourslash/tsxFindAllReferences11.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
//// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
2424
//// declare function MainButton(linkProps: LinkProps): JSX.Element;
2525
//// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
26-
//// let opt = <MainButton [|wrong|] />; // r1
26+
//// let opt = <MainButton [|{| "isWriteAccess": true, "isDefinition": true |}wrong|] />;
2727

28-
const [r1] = test.ranges();
29-
verify.referencesOf(r1, [r1]);
28+
verify.singleReferenceGroup("(property) wrong: true");

tests/cases/fourslash/tsxFindAllReferences2.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
//// interface Element { }
66
//// interface IntrinsicElements {
77
//// div: {
8-
//// [|name|]?: string;
8+
//// [|{| "isWriteAccess": true, "isDefinition": true |}name|]?: string;
99
//// isOpen?: boolean;
1010
//// };
1111
//// span: { n: string; };
1212
//// }
1313
//// }
14-
//// var x = <div [|name|]="hello" />;
14+
//// var x = <div [|{| "isWriteAccess": true, "isDefinition": true |}name|]="hello" />;
1515

16-
verify.rangesReferenceEachOther();
16+
verify.singleReferenceGroup("(property) name?: string");

0 commit comments

Comments
 (0)