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,

0 commit comments

Comments
 (0)