@@ -52,30 +52,6 @@ module ts.server {
5252 return 1 ;
5353 }
5454 }
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- }
7955
8056 function formatDiag ( fileName : string , project : Project , diag : ts . Diagnostic ) {
8157 return {
@@ -138,7 +114,18 @@ module ts.server {
138114 changeSeq = 0 ;
139115
140116 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+ }
142129 }
143130
144131 logError ( err : Error , cmd : string ) {
@@ -215,6 +202,14 @@ module ts.server {
215202 this . semanticCheck ( file , project ) ;
216203 }
217204
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+
218213 updateErrorCheck ( checkList : PendingErrorCheck [ ] , seq : number ,
219214 matchSeq : ( seq : number ) => boolean , ms = 1500 , followMs = 200 ) {
220215 if ( followMs > ms ) {
@@ -231,7 +226,7 @@ module ts.server {
231226 var checkOne = ( ) => {
232227 if ( matchSeq ( seq ) ) {
233228 var checkSpec = checkList [ index ++ ] ;
234- if ( checkSpec . project . getSourceFileFromName ( checkSpec . fileName ) ) {
229+ if ( checkSpec . project . getSourceFileFromName ( checkSpec . fileName , true ) ) {
235230 this . syntacticCheck ( checkSpec . fileName , checkSpec . project ) ;
236231 this . immediateId = setImmediate ( ( ) => {
237232 this . semanticCheck ( checkSpec . fileName , checkSpec . project ) ;
@@ -404,7 +399,7 @@ module ts.server {
404399 var position = compilerService . host . lineColToPosition ( file , line , col ) ;
405400 var quickInfo = compilerService . languageService . getQuickInfoAtPosition ( file , position ) ;
406401 if ( ! quickInfo ) {
407- throw Errors . NoContent ;
402+ return undefined ;
408403 }
409404
410405 var displayString = ts . displayPartsToString ( quickInfo . displayParts ) ;
@@ -494,7 +489,7 @@ module ts.server {
494489 var file = ts . normalizePath ( fileName ) ;
495490 var project = this . projectService . getProjectForFile ( file ) ;
496491 if ( ! project ) {
497- throw Errors . NoProject ;
492+ return undefined ;
498493 }
499494
500495 var compilerService = project . compilerService ;
@@ -559,6 +554,10 @@ module ts.server {
559554 compilerService . host . editScript ( file , start , end , insertString ) ;
560555 this . changeSeq ++ ;
561556 }
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);
562561 }
563562 }
564563
@@ -625,15 +624,15 @@ module ts.server {
625624 return this . decorateNavigationBarItem ( project , fileName , items ) ;
626625 }
627626
628- getNavigateToItems ( searchTerm : string , fileName : string ) : protocol . NavtoItem [ ] {
627+ getNavigateToItems ( searchValue : string , fileName : string , maxResultCount ?: number ) : protocol . NavtoItem [ ] {
629628 var file = ts . normalizePath ( fileName ) ;
630629 var project = this . projectService . getProjectForFile ( file ) ;
631630 if ( ! project ) {
632631 throw Errors . NoProject ;
633632 }
634633
635634 var compilerService = project . compilerService ;
636- var navItems = sortNavItems ( compilerService . languageService . getNavigateToItems ( searchTerm ) ) ;
635+ var navItems = compilerService . languageService . getNavigateToItems ( searchValue , maxResultCount ) ;
637636 if ( ! navItems ) {
638637 throw Errors . NoContent ;
639638 }
@@ -690,6 +689,7 @@ module ts.server {
690689 try {
691690 var request = < protocol . Request > JSON . parse ( message ) ;
692691 var response : any ;
692+ var errorMessage : string ;
693693 switch ( request . command ) {
694694 case CommandNames . Definition : {
695695 var defArgs = < protocol . FileLocationRequestArgs > request . arguments ;
@@ -714,6 +714,9 @@ module ts.server {
714714 case CommandNames . Quickinfo : {
715715 var quickinfoArgs = < protocol . FileLocationRequestArgs > request . arguments ;
716716 response = this . getQuickInfo ( quickinfoArgs . line , quickinfoArgs . col , quickinfoArgs . file ) ;
717+ if ( ! response ) {
718+ errorMessage = "No info at this location" ;
719+ }
717720 break ;
718721 }
719722 case CommandNames . Format : {
@@ -729,6 +732,9 @@ module ts.server {
729732 case CommandNames . Completions : {
730733 var completionsArgs = < protocol . CompletionsRequestArgs > request . arguments ;
731734 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+ }
732738 break ;
733739 }
734740 case CommandNames . CompletionDetails : {
@@ -765,7 +771,7 @@ module ts.server {
765771 }
766772 case CommandNames . Navto : {
767773 var navtoArgs = < protocol . NavtoRequestArgs > request . arguments ;
768- response = this . getNavigateToItems ( navtoArgs . searchTerm , navtoArgs . file ) ;
774+ response = this . getNavigateToItems ( navtoArgs . searchValue , navtoArgs . file , navtoArgs . maxResultCount ) ;
769775 break ;
770776 }
771777 case CommandNames . Brace : {
@@ -788,6 +794,9 @@ module ts.server {
788794 if ( response ) {
789795 this . output ( response , request . command , request . seq ) ;
790796 }
797+ else if ( errorMessage ) {
798+ this . output ( undefined , request . command , request . seq , errorMessage ) ;
799+ }
791800
792801 } catch ( err ) {
793802 if ( err instanceof OperationCanceledException ) {
0 commit comments