Skip to content

Commit 2b64e50

Browse files
Add support for limiting the number of NavigateTo results that you get back.
1 parent d2c992c commit 2b64e50

10 files changed

Lines changed: 47 additions & 33 deletions

src/services/services.ts

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -900,7 +900,7 @@ module ts {
900900
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
901901
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
902902

903-
getNavigateToItems(searchValue: string): NavigateToItem[];
903+
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
904904
getNavigationBarItems(fileName: string): NavigationBarItem[];
905905

906906
getOutliningSpans(fileName: string): OutliningSpan[];
@@ -1380,8 +1380,8 @@ module ts {
13801380
enum MatchKind {
13811381
none = 0,
13821382
exact = 1,
1383-
substring = 2,
1384-
prefix = 3
1383+
prefix = 2,
1384+
substring = 3,
13851385
}
13861386

13871387
/// Language Service
@@ -4662,7 +4662,7 @@ module ts {
46624662
}
46634663

46644664
/// NavigateTo
4665-
function getNavigateToItems(searchValue: string): NavigateToItem[] {
4665+
function getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[] {
46664666
synchronizeHostData();
46674667

46684668
// Split search value in terms array
@@ -4671,7 +4671,7 @@ module ts {
46714671
// default NavigateTo approach: if search term contains only lower-case chars - use case-insensitive search, otherwise switch to case-sensitive version
46724672
var searchTerms = map(terms, t => ({ caseSensitive: hasAnyUpperCaseCharacter(t), term: t }));
46734673

4674-
var items: NavigateToItem[] = [];
4674+
var rawItems: { name: string; fileName: string; matchKind: MatchKind; declaration: Declaration }[] = [];
46754675

46764676
// Search the declarations in all files and output matched NavigateToItem into array of NavigateToItem[]
46774677
forEach(program.getSourceFiles(), sourceFile => {
@@ -4685,22 +4685,32 @@ module ts {
46854685
var name = (<Identifier>declaration.name).text;
46864686
var matchKind = getMatchKind(searchTerms, name);
46874687
if (matchKind !== MatchKind.none) {
4688-
var container = <Declaration>getContainerNode(declaration);
4689-
items.push({
4690-
name: name,
4691-
kind: getNodeKind(declaration),
4692-
kindModifiers: getNodeModifiers(declaration),
4693-
matchKind: MatchKind[matchKind],
4694-
fileName: fileName,
4695-
textSpan: createTextSpanFromBounds(declaration.getStart(), declaration.getEnd()),
4696-
// TODO(jfreeman): What should be the containerName when the container has a computed name?
4697-
containerName: container && container.name ? (<Identifier>container.name).text : "",
4698-
containerKind: container && container.name ? getNodeKind(container) : ""
4699-
});
4688+
rawItems.push({ name, fileName, matchKind, declaration });
47004689
}
47014690
}
47024691
});
47034692

4693+
rawItems.sort((i1, i2) => i1.matchKind - i2.matchKind);
4694+
if (maxResultCount !== undefined) {
4695+
rawItems = rawItems.slice(0, maxResultCount);
4696+
}
4697+
4698+
var items = map(rawItems, i => {
4699+
var declaration = i.declaration;
4700+
var container = <Declaration>getContainerNode(declaration);
4701+
return <NavigateToItem>{
4702+
name: i.name,
4703+
kind: getNodeKind(declaration),
4704+
kindModifiers: getNodeModifiers(declaration),
4705+
matchKind: MatchKind[i.matchKind],
4706+
fileName: i.fileName,
4707+
textSpan: createTextSpanFromBounds(declaration.getStart(), declaration.getEnd()),
4708+
// TODO(jfreeman): What should be the containerName when the container has a computed name?
4709+
containerName: container && container.name ? (<Identifier>container.name).text : "",
4710+
containerKind: container && container.name ? getNodeKind(container) : ""
4711+
};
4712+
});
4713+
47044714
return items;
47054715

47064716
function hasAnyUpperCaseCharacter(s: string): boolean {

src/services/shims.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ module ts {
138138
* Returns a JSON-encoded value of the type:
139139
* { name: string; kind: string; kindModifiers: string; containerName: string; containerKind: string; matchKind: string; fileName: string; textSpan: { start: number; length: number}; } [] = [];
140140
*/
141-
getNavigateToItems(searchValue: string): string;
141+
getNavigateToItems(searchValue: string, maxResultCount?: number): string;
142142

143143
/**
144144
* Returns a JSON-encoded value of the type:
@@ -628,11 +628,11 @@ module ts {
628628
/// NAVIGATE TO
629629

630630
/** Return a list of symbols that are interesting to navigate to */
631-
public getNavigateToItems(searchValue: string): string {
631+
public getNavigateToItems(searchValue: string, maxResultCount?: number): string {
632632
return this.forwardJSONCall(
633-
"getNavigateToItems('" + searchValue + "')",
633+
"getNavigateToItems('" + searchValue + "', " + maxResultCount+ ")",
634634
() => {
635-
var items = this.languageService.getNavigateToItems(searchValue);
635+
var items = this.languageService.getNavigateToItems(searchValue, maxResultCount);
636636
return items;
637637
});
638638
}

tests/baselines/reference/APISample_compile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1541,7 +1541,7 @@ declare module "typescript" {
15411541
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
15421542
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
15431543
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
1544-
getNavigateToItems(searchValue: string): NavigateToItem[];
1544+
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
15451545
getNavigationBarItems(fileName: string): NavigationBarItem[];
15461546
getOutliningSpans(fileName: string): OutliningSpan[];
15471547
getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[];

tests/baselines/reference/APISample_compile.types

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4986,9 +4986,10 @@ declare module "typescript" {
49864986
>position : number
49874987
>ReferenceEntry : ReferenceEntry
49884988

4989-
getNavigateToItems(searchValue: string): NavigateToItem[];
4990-
>getNavigateToItems : (searchValue: string) => NavigateToItem[]
4989+
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
4990+
>getNavigateToItems : (searchValue: string, maxResultCount?: number) => NavigateToItem[]
49914991
>searchValue : string
4992+
>maxResultCount : number
49924993
>NavigateToItem : NavigateToItem
49934994

49944995
getNavigationBarItems(fileName: string): NavigationBarItem[];

tests/baselines/reference/APISample_linter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1572,7 +1572,7 @@ declare module "typescript" {
15721572
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
15731573
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
15741574
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
1575-
getNavigateToItems(searchValue: string): NavigateToItem[];
1575+
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
15761576
getNavigationBarItems(fileName: string): NavigationBarItem[];
15771577
getOutliningSpans(fileName: string): OutliningSpan[];
15781578
getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[];

tests/baselines/reference/APISample_linter.types

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5130,9 +5130,10 @@ declare module "typescript" {
51305130
>position : number
51315131
>ReferenceEntry : ReferenceEntry
51325132

5133-
getNavigateToItems(searchValue: string): NavigateToItem[];
5134-
>getNavigateToItems : (searchValue: string) => NavigateToItem[]
5133+
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
5134+
>getNavigateToItems : (searchValue: string, maxResultCount?: number) => NavigateToItem[]
51355135
>searchValue : string
5136+
>maxResultCount : number
51365137
>NavigateToItem : NavigateToItem
51375138

51385139
getNavigationBarItems(fileName: string): NavigationBarItem[];

tests/baselines/reference/APISample_transform.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1573,7 +1573,7 @@ declare module "typescript" {
15731573
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
15741574
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
15751575
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
1576-
getNavigateToItems(searchValue: string): NavigateToItem[];
1576+
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
15771577
getNavigationBarItems(fileName: string): NavigationBarItem[];
15781578
getOutliningSpans(fileName: string): OutliningSpan[];
15791579
getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[];

tests/baselines/reference/APISample_transform.types

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5082,9 +5082,10 @@ declare module "typescript" {
50825082
>position : number
50835083
>ReferenceEntry : ReferenceEntry
50845084

5085-
getNavigateToItems(searchValue: string): NavigateToItem[];
5086-
>getNavigateToItems : (searchValue: string) => NavigateToItem[]
5085+
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
5086+
>getNavigateToItems : (searchValue: string, maxResultCount?: number) => NavigateToItem[]
50875087
>searchValue : string
5088+
>maxResultCount : number
50885089
>NavigateToItem : NavigateToItem
50895090

50905091
getNavigationBarItems(fileName: string): NavigationBarItem[];

tests/baselines/reference/APISample_watcher.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1610,7 +1610,7 @@ declare module "typescript" {
16101610
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
16111611
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
16121612
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
1613-
getNavigateToItems(searchValue: string): NavigateToItem[];
1613+
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
16141614
getNavigationBarItems(fileName: string): NavigationBarItem[];
16151615
getOutliningSpans(fileName: string): OutliningSpan[];
16161616
getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[];

tests/baselines/reference/APISample_watcher.types

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5255,9 +5255,10 @@ declare module "typescript" {
52555255
>position : number
52565256
>ReferenceEntry : ReferenceEntry
52575257

5258-
getNavigateToItems(searchValue: string): NavigateToItem[];
5259-
>getNavigateToItems : (searchValue: string) => NavigateToItem[]
5258+
getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[];
5259+
>getNavigateToItems : (searchValue: string, maxResultCount?: number) => NavigateToItem[]
52605260
>searchValue : string
5261+
>maxResultCount : number
52615262
>NavigateToItem : NavigateToItem
52625263

52635264
getNavigationBarItems(fileName: string): NavigationBarItem[];

0 commit comments

Comments
 (0)