Skip to content

Commit 62b5ffa

Browse files
Merge pull request #2446 from Microsoft/findReferences
Add a new findReferences API that buckets results with the definition th...
2 parents 9141bfc + 927e60d commit 62b5ffa

22 files changed

+318
-100
lines changed

src/compiler/checker.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@ module ts {
77

88
/* @internal */ export let checkTime = 0;
99

10+
/* @internal */
11+
export function getSymbolId(symbol: Symbol): number {
12+
if (!symbol.id) {
13+
symbol.id = nextSymbolId++;
14+
}
15+
16+
return symbol.id;
17+
}
18+
1019
export function createTypeChecker(host: TypeCheckerHost, produceDiagnostics: boolean): TypeChecker {
1120
let Symbol = objectAllocator.getSymbolConstructor();
1221
let Type = objectAllocator.getTypeConstructor();
@@ -250,8 +259,8 @@ module ts {
250259

251260
function getSymbolLinks(symbol: Symbol): SymbolLinks {
252261
if (symbol.flags & SymbolFlags.Transient) return <TransientSymbol>symbol;
253-
if (!symbol.id) symbol.id = nextSymbolId++;
254-
return symbolLinks[symbol.id] || (symbolLinks[symbol.id] = {});
262+
var id = getSymbolId(symbol);
263+
return symbolLinks[id] || (symbolLinks[id] = {});
255264
}
256265

257266
function getNodeLinks(node: Node): NodeLinks {

src/harness/harnessLanguageService.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,9 @@ module Harness.LanguageService {
330330
getReferencesAtPosition(fileName: string, position: number): ts.ReferenceEntry[] {
331331
return unwrapJSONCallResult(this.shim.getReferencesAtPosition(fileName, position));
332332
}
333+
findReferences(fileName: string, position: number): ts.ReferencedSymbol[] {
334+
return unwrapJSONCallResult(this.shim.findReferences(fileName, position));
335+
}
333336
getOccurrencesAtPosition(fileName: string, position: number): ts.ReferenceEntry[] {
334337
return unwrapJSONCallResult(this.shim.getOccurrencesAtPosition(fileName, position));
335338
}

src/server/client.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,11 @@ module ts.server {
300300
});
301301
}
302302

303+
findReferences(fileName: string, position: number): ReferencedSymbol[]{
304+
// Not yet implemented.
305+
return [];
306+
}
307+
303308
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[] {
304309
var lineOffset = this.positionToOneBasedLineOffset(fileName, position);
305310
var args: protocol.FileLocationRequestArgs = {

src/services/services.ts

Lines changed: 185 additions & 83 deletions
Large diffs are not rendered by default.

src/services/shims.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,12 @@ module ts {
127127
* { fileName: string; textSpan: { start: number; length: number}; isWriteAccess: boolean }[]
128128
*/
129129
getReferencesAtPosition(fileName: string, position: number): string;
130+
131+
/**
132+
* Returns a JSON-encoded value of the type:
133+
* { definition: <encoded>; references: <encoded>[] }[]
134+
*/
135+
findReferences(fileName: string, position: number): string;
130136

131137
/**
132138
* Returns a JSON-encoded value of the type:
@@ -555,11 +561,6 @@ module ts {
555561

556562
/// GET REFERENCES
557563

558-
/**
559-
* Return references to a symbol at the requested position.
560-
* References are separated by "\n".
561-
* Each reference is a "fileindex min lim" sub-string.
562-
*/
563564
public getReferencesAtPosition(fileName: string, position: number): string {
564565
return this.forwardJSONCall(
565566
"getReferencesAtPosition('" + fileName + "', " + position + ")",
@@ -568,6 +569,14 @@ module ts {
568569
});
569570
}
570571

572+
public findReferences(fileName: string, position: number): string {
573+
return this.forwardJSONCall(
574+
"findReferences('" + fileName + "', " + position + ")",
575+
() => {
576+
return this.languageService.findReferences(fileName, position);
577+
});
578+
}
579+
571580
public getOccurrencesAtPosition(fileName: string, position: number): string {
572581
return this.forwardJSONCall(
573582
"getOccurrencesAtPosition('" + fileName + "', " + position + ")",

tests/baselines/reference/APISample_compile.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1589,6 +1589,7 @@ declare module "typescript" {
15891589
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
15901590
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
15911591
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
1592+
findReferences(fileName: string, position: number): ReferencedSymbol[];
15921593
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
15931594
getNavigationBarItems(fileName: string): NavigationBarItem[];
15941595
getOutliningSpans(fileName: string): OutliningSpan[];
@@ -1675,6 +1676,10 @@ declare module "typescript" {
16751676
containerKind: string;
16761677
containerName: string;
16771678
}
1679+
interface ReferencedSymbol {
1680+
definition: DefinitionInfo;
1681+
references: ReferenceEntry[];
1682+
}
16781683
enum SymbolDisplayPartKind {
16791684
aliasName = 0,
16801685
className = 1,

tests/baselines/reference/APISample_compile.types

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5154,6 +5154,12 @@ declare module "typescript" {
51545154
>position : number
51555155
>ReferenceEntry : ReferenceEntry
51565156

5157+
findReferences(fileName: string, position: number): ReferencedSymbol[];
5158+
>findReferences : (fileName: string, position: number) => ReferencedSymbol[]
5159+
>fileName : string
5160+
>position : number
5161+
>ReferencedSymbol : ReferencedSymbol
5162+
51575163
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
51585164
>getNavigateToItems : (searchValue: string, maxResultCount?: number) => NavigateToItem[]
51595165
>searchValue : string
@@ -5424,6 +5430,17 @@ declare module "typescript" {
54245430

54255431
containerName: string;
54265432
>containerName : string
5433+
}
5434+
interface ReferencedSymbol {
5435+
>ReferencedSymbol : ReferencedSymbol
5436+
5437+
definition: DefinitionInfo;
5438+
>definition : DefinitionInfo
5439+
>DefinitionInfo : DefinitionInfo
5440+
5441+
references: ReferenceEntry[];
5442+
>references : ReferenceEntry[]
5443+
>ReferenceEntry : ReferenceEntry
54275444
}
54285445
enum SymbolDisplayPartKind {
54295446
>SymbolDisplayPartKind : SymbolDisplayPartKind

tests/baselines/reference/APISample_linter.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1620,6 +1620,7 @@ declare module "typescript" {
16201620
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
16211621
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
16221622
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
1623+
findReferences(fileName: string, position: number): ReferencedSymbol[];
16231624
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
16241625
getNavigationBarItems(fileName: string): NavigationBarItem[];
16251626
getOutliningSpans(fileName: string): OutliningSpan[];
@@ -1706,6 +1707,10 @@ declare module "typescript" {
17061707
containerKind: string;
17071708
containerName: string;
17081709
}
1710+
interface ReferencedSymbol {
1711+
definition: DefinitionInfo;
1712+
references: ReferenceEntry[];
1713+
}
17091714
enum SymbolDisplayPartKind {
17101715
aliasName = 0,
17111716
className = 1,

tests/baselines/reference/APISample_linter.types

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5300,6 +5300,12 @@ declare module "typescript" {
53005300
>position : number
53015301
>ReferenceEntry : ReferenceEntry
53025302

5303+
findReferences(fileName: string, position: number): ReferencedSymbol[];
5304+
>findReferences : (fileName: string, position: number) => ReferencedSymbol[]
5305+
>fileName : string
5306+
>position : number
5307+
>ReferencedSymbol : ReferencedSymbol
5308+
53035309
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
53045310
>getNavigateToItems : (searchValue: string, maxResultCount?: number) => NavigateToItem[]
53055311
>searchValue : string
@@ -5570,6 +5576,17 @@ declare module "typescript" {
55705576

55715577
containerName: string;
55725578
>containerName : string
5579+
}
5580+
interface ReferencedSymbol {
5581+
>ReferencedSymbol : ReferencedSymbol
5582+
5583+
definition: DefinitionInfo;
5584+
>definition : DefinitionInfo
5585+
>DefinitionInfo : DefinitionInfo
5586+
5587+
references: ReferenceEntry[];
5588+
>references : ReferenceEntry[]
5589+
>ReferenceEntry : ReferenceEntry
55735590
}
55745591
enum SymbolDisplayPartKind {
55755592
>SymbolDisplayPartKind : SymbolDisplayPartKind

tests/baselines/reference/APISample_transform.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1621,6 +1621,7 @@ declare module "typescript" {
16211621
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
16221622
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
16231623
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
1624+
findReferences(fileName: string, position: number): ReferencedSymbol[];
16241625
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
16251626
getNavigationBarItems(fileName: string): NavigationBarItem[];
16261627
getOutliningSpans(fileName: string): OutliningSpan[];
@@ -1707,6 +1708,10 @@ declare module "typescript" {
17071708
containerKind: string;
17081709
containerName: string;
17091710
}
1711+
interface ReferencedSymbol {
1712+
definition: DefinitionInfo;
1713+
references: ReferenceEntry[];
1714+
}
17101715
enum SymbolDisplayPartKind {
17111716
aliasName = 0,
17121717
className = 1,

tests/baselines/reference/APISample_transform.types

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5250,6 +5250,12 @@ declare module "typescript" {
52505250
>position : number
52515251
>ReferenceEntry : ReferenceEntry
52525252

5253+
findReferences(fileName: string, position: number): ReferencedSymbol[];
5254+
>findReferences : (fileName: string, position: number) => ReferencedSymbol[]
5255+
>fileName : string
5256+
>position : number
5257+
>ReferencedSymbol : ReferencedSymbol
5258+
52535259
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
52545260
>getNavigateToItems : (searchValue: string, maxResultCount?: number) => NavigateToItem[]
52555261
>searchValue : string
@@ -5520,6 +5526,17 @@ declare module "typescript" {
55205526

55215527
containerName: string;
55225528
>containerName : string
5529+
}
5530+
interface ReferencedSymbol {
5531+
>ReferencedSymbol : ReferencedSymbol
5532+
5533+
definition: DefinitionInfo;
5534+
>definition : DefinitionInfo
5535+
>DefinitionInfo : DefinitionInfo
5536+
5537+
references: ReferenceEntry[];
5538+
>references : ReferenceEntry[]
5539+
>ReferenceEntry : ReferenceEntry
55235540
}
55245541
enum SymbolDisplayPartKind {
55255542
>SymbolDisplayPartKind : SymbolDisplayPartKind

tests/baselines/reference/APISample_watcher.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1658,6 +1658,7 @@ declare module "typescript" {
16581658
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
16591659
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
16601660
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
1661+
findReferences(fileName: string, position: number): ReferencedSymbol[];
16611662
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
16621663
getNavigationBarItems(fileName: string): NavigationBarItem[];
16631664
getOutliningSpans(fileName: string): OutliningSpan[];
@@ -1744,6 +1745,10 @@ declare module "typescript" {
17441745
containerKind: string;
17451746
containerName: string;
17461747
}
1748+
interface ReferencedSymbol {
1749+
definition: DefinitionInfo;
1750+
references: ReferenceEntry[];
1751+
}
17471752
enum SymbolDisplayPartKind {
17481753
aliasName = 0,
17491754
className = 1,

tests/baselines/reference/APISample_watcher.types

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5423,6 +5423,12 @@ declare module "typescript" {
54235423
>position : number
54245424
>ReferenceEntry : ReferenceEntry
54255425

5426+
findReferences(fileName: string, position: number): ReferencedSymbol[];
5427+
>findReferences : (fileName: string, position: number) => ReferencedSymbol[]
5428+
>fileName : string
5429+
>position : number
5430+
>ReferencedSymbol : ReferencedSymbol
5431+
54265432
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
54275433
>getNavigateToItems : (searchValue: string, maxResultCount?: number) => NavigateToItem[]
54285434
>searchValue : string
@@ -5693,6 +5699,17 @@ declare module "typescript" {
56935699

56945700
containerName: string;
56955701
>containerName : string
5702+
}
5703+
interface ReferencedSymbol {
5704+
>ReferencedSymbol : ReferencedSymbol
5705+
5706+
definition: DefinitionInfo;
5707+
>definition : DefinitionInfo
5708+
>DefinitionInfo : DefinitionInfo
5709+
5710+
references: ReferenceEntry[];
5711+
>references : ReferenceEntry[]
5712+
>ReferenceEntry : ReferenceEntry
56965713
}
56975714
enum SymbolDisplayPartKind {
56985715
>SymbolDisplayPartKind : SymbolDisplayPartKind

tests/cases/fourslash/findAllRefsInsideWithBlock.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ goTo.marker('1');
1313
verify.referencesCountIs(3);
1414

1515
goTo.marker('2');
16-
verify.referencesCountIs(1);
16+
verify.referencesCountIs(0);

tests/cases/fourslash/getOccurrencesOfUndefinedSymbol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@
1717

1818
// "any" should not be highlighted
1919
goTo.marker();
20-
verify.occurrencesAtPositionCount(1);
20+
verify.occurrencesAtPositionCount(0);

tests/cases/fourslash/getOccurrencesSwitchCaseDefaultBroken.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ for (var i = 1; i <= test.markers().length; i++) {
3939
verify.occurrencesAtPositionCount(8);
4040
break;
4141
case 4:
42-
case 5:
43-
case 8:
4442
verify.occurrencesAtPositionCount(1);
4543
break;
4644
case 6:
4745
case 7:
4846
case 9:
4947
verify.occurrencesAtPositionCount(8);
5048
break;
49+
case 5:
50+
case 8:
5151
case 10:
5252
case 11:
5353
case 12:

tests/cases/fourslash/getOccurrencesThisNegatives2.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,5 +143,5 @@
143143

144144
test.markers().forEach(m => {
145145
goTo.position(m.position, m.fileName)
146-
verify.occurrencesAtPositionCount(1);
146+
verify.occurrencesAtPositionCount(0);
147147
});

tests/cases/fourslash/getOccurrencesTryCatchFinallyBroken.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ for (var i = 1; i <= test.markers().length; i++) {
3636

3737
switch (i) {
3838
case 1:
39+
verify.occurrencesAtPositionCount(0);
40+
break;
3941
case 2:
4042
case 3:
4143
verify.occurrencesAtPositionCount(1);

tests/cases/fourslash/localGetReferences.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ verify.referencesCountIs(7);
223223

224224
// References to unresolved symbol.
225225
goTo.marker("12");
226-
verify.referencesCountIs(1);
226+
verify.referencesCountIs(0);
227227

228228
// References to no context.
229229
goTo.marker("13");

tests/cases/fourslash/referencesForIllegalAssignment.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
////ba/*4*/r = b/*5*/ar + 1;
77

88
goTo.marker("1");
9-
verify.referencesCountIs(1);
9+
verify.referencesCountIs(0);
1010

1111
goTo.marker("2");
12-
verify.referencesCountIs(1);
12+
verify.referencesCountIs(0);
1313

1414
goTo.marker("3");
1515
verify.referencesCountIs(3);

tests/cases/fourslash/referencesForIndexProperty2.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
////a[/*1*/"blah"];
77

88
goTo.marker("1");
9-
verify.referencesCountIs(1);
9+
verify.referencesCountIs(0);

tests/cases/fourslash/referencesForLabel2.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
////}
1010

1111
goTo.marker("1");
12-
verify.referencesCountIs(1);
12+
verify.referencesCountIs(0);

0 commit comments

Comments
 (0)