@@ -502,6 +502,7 @@ export class LSHost implements ts.LanguageServiceHost {
502502 compilationSettings : ts . CompilerOptions ;
503503 filenameToScript : Map < ts . Path , ScriptInfo > ;
504504 roots : ScriptInfo [ ] = [ ] ;
505+ version : number = 0 ;
505506
506507 private resolvedModuleNames : Map < ts . Path , ts . Map < TimestampedResolvedModule > > ;
507508 private resolvedTypeReferenceDirectives : Map < ts . Path , ts . Map < TimestampedResolvedTypeReferenceDirective > > ;
@@ -577,6 +578,10 @@ export class LSHost implements ts.LanguageServiceHost {
577578 }
578579 }
579580
581+ getProjectVersion ( ) {
582+ return this . version . toString ( ) ;
583+ }
584+
580585 resolveTypeReferenceDirectives ( typeDirectiveNames : string [ ] , containingFile : string ) : ts . ResolvedTypeReferenceDirective [ ] {
581586 return this . resolveNamesWithLocalCache ( typeDirectiveNames , containingFile , this . resolvedTypeReferenceDirectives , ts . resolveTypeReferenceDirective , m => m . resolvedTypeReferenceDirective ) ;
582587 }
@@ -602,6 +607,7 @@ export class LSHost implements ts.LanguageServiceHost {
602607 // conservatively assume that changing compiler options might affect module resolution strategy
603608 this . resolvedModuleNames . clear ( ) ;
604609 this . resolvedTypeReferenceDirectives . clear ( ) ;
610+ this . modified ( ) ;
605611 }
606612
607613 lineAffectsRefs ( filename : string , line : number ) {
@@ -651,6 +657,7 @@ export class LSHost implements ts.LanguageServiceHost {
651657 this . filenameToScript . delete ( info . path ) ;
652658 this . resolvedModuleNames . delete ( info . path ) ;
653659 this . resolvedTypeReferenceDirectives . delete ( info . path ) ;
660+ this . modified ( ) ;
654661 }
655662 }
656663
@@ -670,6 +677,7 @@ export class LSHost implements ts.LanguageServiceHost {
670677 if ( ! this . filenameToScript . has ( info . path ) ) {
671678 this . filenameToScript . set ( info . path , info ) ;
672679 this . roots . push ( info ) ;
680+ this . modified ( ) ;
673681 }
674682 }
675683
@@ -679,6 +687,7 @@ export class LSHost implements ts.LanguageServiceHost {
679687 this . roots = copyListRemovingItem ( info , this . roots ) ;
680688 this . resolvedModuleNames . delete ( info . path ) ;
681689 this . resolvedTypeReferenceDirectives . delete ( info . path ) ;
690+ this . modified ( ) ;
682691 }
683692 }
684693
@@ -694,13 +703,15 @@ export class LSHost implements ts.LanguageServiceHost {
694703 const script = this . getScriptInfo ( filename ) ;
695704 if ( script ) {
696705 script . svc . reloadFromFile ( tmpfilename , cb ) ;
706+ this . modified ( ) ;
697707 }
698708 }
699709
700710 editScript ( filename : string , start : number , end : number , newText : string ) {
701711 const script = this . getScriptInfo ( filename ) ;
702712 if ( script ) {
703713 script . editContent ( start , end , newText ) ;
714+ this . modified ( ) ;
704715 return ;
705716 }
706717
@@ -774,6 +785,10 @@ export class LSHost implements ts.LanguageServiceHost {
774785 const script : ScriptInfo = this . filenameToScript . get ( path ) ;
775786 return script . snap ( ) . index ;
776787 }
788+
789+ private modified ( ) {
790+ this . version ++ ;
791+ }
777792}
778793
779794export interface ProjectOptions {
@@ -1544,12 +1559,14 @@ export class ProjectService {
15441559 }
15451560
15461561 // Update Angular summaries
1562+ let start = Date . now ( ) ;
15471563 for ( let project of this . configuredProjects ) {
15481564 project . compilerService . ngHost . updateModuleSummary ( ) ;
15491565 }
15501566 for ( let project of this . inferredProjects ) {
15511567 project . compilerService . ngHost . updateModuleSummary ( ) ;
15521568 }
1569+ this . log ( `updated: ng - ${ Date . now ( ) - start } ms` , "Info" ) ;
15531570
15541571 this . printProjects ( ) ;
15551572 }
@@ -1997,7 +2014,7 @@ export class CompilerService {
19972014
19982015 this . ng = this . resolveLanguageServiceModule ( ) ;
19992016 this . ngHost = new this . ng . TypeScriptServiceHost ( ts , this . host , this . languageService ) ;
2000- this . ngService = this . ng . createLanguageService ( this . ngHost ) ;
2017+ this . ngService = logServiceTimes ( logger , this . ng . createLanguageService ( this . ngHost ) ) ;
20012018 this . ngHost . setSite ( this . ngService ) ;
20022019 this . classifier = ts . createClassifier ( ) ;
20032020 }
@@ -3006,3 +3023,27 @@ export class LineLeaf implements LineCollection {
30063023 return 1 ;
30073024 }
30083025}
3026+
3027+
3028+ function logServiceTimes ( logger : Logger , service : ng . LanguageService ) : ng . LanguageService {
3029+ function time < T > ( name : string , cb : ( ) => T ) : T {
3030+ const start = Date . now ( ) ;
3031+ const result = cb ( ) ;
3032+ logger . msg ( `${ name } : ${ Date . now ( ) - start } ms` ) ;
3033+ return result ;
3034+ }
3035+ return {
3036+ getCompletionsAt ( fileName , position ) {
3037+ return time ( "getCompletions" , ( ) => service . getCompletionsAt ( fileName , position ) ) ;
3038+ } ,
3039+ getDiagnostics ( fileName ) {
3040+ return time ( "getDiagnnostics" , ( ) => service . getDiagnostics ( fileName ) ) ;
3041+ } ,
3042+ getTemplateReferences ( ) {
3043+ return time ( "getTemplateRefrences" , ( ) => service . getTemplateReferences ( ) ) ;
3044+ } ,
3045+ getPipesAt ( fileName , position ) {
3046+ return service . getPipesAt ( fileName , position ) ;
3047+ }
3048+ } ;
3049+ }
0 commit comments