@@ -52,30 +52,6 @@ module ts.server {
52
52
return 1 ;
53
53
}
54
54
}
55
-
56
- function sortNavItems ( items : ts . NavigateToItem [ ] ) {
57
- return items . sort ( ( a , b ) => {
58
- if ( a . matchKind < b . matchKind ) {
59
- return - 1 ;
60
- }
61
- else if ( a . matchKind == b . matchKind ) {
62
- var lowa = a . name . toLowerCase ( ) ;
63
- var lowb = b . name . toLowerCase ( ) ;
64
- if ( lowa < lowb ) {
65
- return - 1 ;
66
- }
67
- else if ( lowa == lowb ) {
68
- return 0 ;
69
- }
70
- else {
71
- return 1 ;
72
- }
73
- }
74
- else {
75
- return 1 ;
76
- }
77
- } )
78
- }
79
55
80
56
function formatDiag ( fileName : string , project : Project , diag : ts . Diagnostic ) {
81
57
return {
@@ -138,7 +114,18 @@ module ts.server {
138
114
changeSeq = 0 ;
139
115
140
116
constructor ( private host : ServerHost , private logger : Logger ) {
141
- this . projectService = new ProjectService ( host , logger ) ;
117
+ this . projectService =
118
+ new ProjectService ( host , logger , ( eventName , project , fileName ) => {
119
+ this . handleEvent ( eventName , project , fileName ) ;
120
+ } ) ;
121
+ }
122
+
123
+ handleEvent ( eventName : string , project : Project , fileName : string ) {
124
+ if ( eventName == "context" ) {
125
+ this . projectService . log ( "got context event, updating diagnostics for" + fileName , "Info" ) ;
126
+ this . updateErrorCheck ( [ { fileName, project } ] , this . changeSeq ,
127
+ ( n ) => n == this . changeSeq , 100 ) ;
128
+ }
142
129
}
143
130
144
131
logError ( err : Error , cmd : string ) {
@@ -215,6 +202,14 @@ module ts.server {
215
202
this . semanticCheck ( file , project ) ;
216
203
}
217
204
205
+ updateProjectStructure ( seq : number , matchSeq : ( seq : number ) => boolean , ms = 1500 ) {
206
+ setTimeout ( ( ) => {
207
+ if ( matchSeq ( seq ) ) {
208
+ this . projectService . updateProjectStructure ( ) ;
209
+ }
210
+ } , ms ) ;
211
+ }
212
+
218
213
updateErrorCheck ( checkList : PendingErrorCheck [ ] , seq : number ,
219
214
matchSeq : ( seq : number ) => boolean , ms = 1500 , followMs = 200 ) {
220
215
if ( followMs > ms ) {
@@ -231,7 +226,7 @@ module ts.server {
231
226
var checkOne = ( ) => {
232
227
if ( matchSeq ( seq ) ) {
233
228
var checkSpec = checkList [ index ++ ] ;
234
- if ( checkSpec . project . getSourceFileFromName ( checkSpec . fileName ) ) {
229
+ if ( checkSpec . project . getSourceFileFromName ( checkSpec . fileName , true ) ) {
235
230
this . syntacticCheck ( checkSpec . fileName , checkSpec . project ) ;
236
231
this . immediateId = setImmediate ( ( ) => {
237
232
this . semanticCheck ( checkSpec . fileName , checkSpec . project ) ;
@@ -404,7 +399,7 @@ module ts.server {
404
399
var position = compilerService . host . lineColToPosition ( file , line , col ) ;
405
400
var quickInfo = compilerService . languageService . getQuickInfoAtPosition ( file , position ) ;
406
401
if ( ! quickInfo ) {
407
- throw Errors . NoContent ;
402
+ return undefined ;
408
403
}
409
404
410
405
var displayString = ts . displayPartsToString ( quickInfo . displayParts ) ;
@@ -494,7 +489,7 @@ module ts.server {
494
489
var file = ts . normalizePath ( fileName ) ;
495
490
var project = this . projectService . getProjectForFile ( file ) ;
496
491
if ( ! project ) {
497
- throw Errors . NoProject ;
492
+ return undefined ;
498
493
}
499
494
500
495
var compilerService = project . compilerService ;
@@ -559,6 +554,10 @@ module ts.server {
559
554
compilerService . host . editScript ( file , start , end , insertString ) ;
560
555
this . changeSeq ++ ;
561
556
}
557
+ // update project structure on idle commented out
558
+ // until we can have the host return only the root files
559
+ // from getScriptFileNames()
560
+ //this.updateProjectStructure(this.changeSeq, (n) => n == this.changeSeq);
562
561
}
563
562
}
564
563
@@ -625,15 +624,15 @@ module ts.server {
625
624
return this . decorateNavigationBarItem ( project , fileName , items ) ;
626
625
}
627
626
628
- getNavigateToItems ( searchTerm : string , fileName : string ) : protocol . NavtoItem [ ] {
627
+ getNavigateToItems ( searchValue : string , fileName : string , maxResultCount ?: number ) : protocol . NavtoItem [ ] {
629
628
var file = ts . normalizePath ( fileName ) ;
630
629
var project = this . projectService . getProjectForFile ( file ) ;
631
630
if ( ! project ) {
632
631
throw Errors . NoProject ;
633
632
}
634
633
635
634
var compilerService = project . compilerService ;
636
- var navItems = sortNavItems ( compilerService . languageService . getNavigateToItems ( searchTerm ) ) ;
635
+ var navItems = compilerService . languageService . getNavigateToItems ( searchValue , maxResultCount ) ;
637
636
if ( ! navItems ) {
638
637
throw Errors . NoContent ;
639
638
}
@@ -690,6 +689,7 @@ module ts.server {
690
689
try {
691
690
var request = < protocol . Request > JSON . parse ( message ) ;
692
691
var response : any ;
692
+ var errorMessage : string ;
693
693
switch ( request . command ) {
694
694
case CommandNames . Definition : {
695
695
var defArgs = < protocol . FileLocationRequestArgs > request . arguments ;
@@ -714,6 +714,9 @@ module ts.server {
714
714
case CommandNames . Quickinfo : {
715
715
var quickinfoArgs = < protocol . FileLocationRequestArgs > request . arguments ;
716
716
response = this . getQuickInfo ( quickinfoArgs . line , quickinfoArgs . col , quickinfoArgs . file ) ;
717
+ if ( ! response ) {
718
+ errorMessage = "No info at this location" ;
719
+ }
717
720
break ;
718
721
}
719
722
case CommandNames . Format : {
@@ -729,6 +732,9 @@ module ts.server {
729
732
case CommandNames . Completions : {
730
733
var completionsArgs = < protocol . CompletionsRequestArgs > request . arguments ;
731
734
response = this . getCompletions ( request . arguments . line , request . arguments . col , completionsArgs . prefix , request . arguments . file ) ;
735
+ if ( ! response ) {
736
+ errorMessage = "No completions at this location" ;
737
+ }
732
738
break ;
733
739
}
734
740
case CommandNames . CompletionDetails : {
@@ -765,7 +771,7 @@ module ts.server {
765
771
}
766
772
case CommandNames . Navto : {
767
773
var navtoArgs = < protocol . NavtoRequestArgs > request . arguments ;
768
- response = this . getNavigateToItems ( navtoArgs . searchTerm , navtoArgs . file ) ;
774
+ response = this . getNavigateToItems ( navtoArgs . searchValue , navtoArgs . file , navtoArgs . maxResultCount ) ;
769
775
break ;
770
776
}
771
777
case CommandNames . Brace : {
@@ -788,6 +794,9 @@ module ts.server {
788
794
if ( response ) {
789
795
this . output ( response , request . command , request . seq ) ;
790
796
}
797
+ else if ( errorMessage ) {
798
+ this . output ( undefined , request . command , request . seq , errorMessage ) ;
799
+ }
791
800
792
801
} catch ( err ) {
793
802
if ( err instanceof OperationCanceledException ) {
0 commit comments