@@ -90,87 +90,6 @@ namespace ts.server {
9090 }
9191 }
9292
93- const emptyResult : any [ ] = [ ] ;
94- const getEmptyResult = ( ) => emptyResult ;
95- const getUndefined = ( ) => < any > undefined ;
96- const emptyEncodedSemanticClassifications = { spans : emptyResult , endOfLineState : EndOfLineState . None } ;
97-
98- export function createNoSemanticFeaturesWrapper ( realLanguageService : LanguageService ) : LanguageService {
99- return {
100- cleanupSemanticCache : noop ,
101- getSyntacticDiagnostics : ( fileName ) =>
102- fileName ? realLanguageService . getSyntacticDiagnostics ( fileName ) : emptyResult ,
103- getSemanticDiagnostics : getEmptyResult ,
104- getCompilerOptionsDiagnostics : ( ) =>
105- realLanguageService . getCompilerOptionsDiagnostics ( ) ,
106- getSyntacticClassifications : ( fileName , span ) =>
107- realLanguageService . getSyntacticClassifications ( fileName , span ) ,
108- getEncodedSyntacticClassifications : ( fileName , span ) =>
109- realLanguageService . getEncodedSyntacticClassifications ( fileName , span ) ,
110- getSemanticClassifications : getEmptyResult ,
111- getEncodedSemanticClassifications : ( ) =>
112- emptyEncodedSemanticClassifications ,
113- getCompletionsAtPosition : getUndefined ,
114- findReferences : getEmptyResult ,
115- getCompletionEntryDetails : getUndefined ,
116- getQuickInfoAtPosition : getUndefined ,
117- findRenameLocations : getEmptyResult ,
118- getNameOrDottedNameSpan : ( fileName , startPos , endPos ) =>
119- realLanguageService . getNameOrDottedNameSpan ( fileName , startPos , endPos ) ,
120- getBreakpointStatementAtPosition : ( fileName , position ) =>
121- realLanguageService . getBreakpointStatementAtPosition ( fileName , position ) ,
122- getBraceMatchingAtPosition : ( fileName , position ) =>
123- realLanguageService . getBraceMatchingAtPosition ( fileName , position ) ,
124- getSignatureHelpItems : getUndefined ,
125- getDefinitionAtPosition : getEmptyResult ,
126- getRenameInfo : ( ) => ( {
127- canRename : false ,
128- localizedErrorMessage : getLocaleSpecificMessage ( Diagnostics . Language_service_is_disabled ) ,
129- displayName : undefined ,
130- fullDisplayName : undefined ,
131- kind : undefined ,
132- kindModifiers : undefined ,
133- triggerSpan : undefined
134- } ) ,
135- getTypeDefinitionAtPosition : getUndefined ,
136- getReferencesAtPosition : getEmptyResult ,
137- getDocumentHighlights : getEmptyResult ,
138- getOccurrencesAtPosition : getEmptyResult ,
139- getNavigateToItems : getEmptyResult ,
140- getNavigationBarItems : fileName =>
141- realLanguageService . getNavigationBarItems ( fileName ) ,
142- getNavigationTree : fileName =>
143- realLanguageService . getNavigationTree ( fileName ) ,
144- getOutliningSpans : fileName =>
145- realLanguageService . getOutliningSpans ( fileName ) ,
146- getTodoComments : getEmptyResult ,
147- getIndentationAtPosition : ( fileName , position , options ) =>
148- realLanguageService . getIndentationAtPosition ( fileName , position , options ) ,
149- getFormattingEditsForRange : ( fileName , start , end , options ) =>
150- realLanguageService . getFormattingEditsForRange ( fileName , start , end , options ) ,
151- getFormattingEditsForDocument : ( fileName , options ) =>
152- realLanguageService . getFormattingEditsForDocument ( fileName , options ) ,
153- getFormattingEditsAfterKeystroke : ( fileName , position , key , options ) =>
154- realLanguageService . getFormattingEditsAfterKeystroke ( fileName , position , key , options ) ,
155- getDocCommentTemplateAtPosition : ( fileName , position ) =>
156- realLanguageService . getDocCommentTemplateAtPosition ( fileName , position ) ,
157- isValidBraceCompletionAtPosition : ( fileName , position , openingBrace ) =>
158- realLanguageService . isValidBraceCompletionAtPosition ( fileName , position , openingBrace ) ,
159- getEmitOutput : getUndefined ,
160- getProgram : ( ) =>
161- realLanguageService . getProgram ( ) ,
162- getNonBoundSourceFile : fileName =>
163- realLanguageService . getNonBoundSourceFile ( fileName ) ,
164- dispose : ( ) =>
165- realLanguageService . dispose ( ) ,
166- getCompletionEntrySymbol : getUndefined ,
167- getImplementationAtPosition : getEmptyResult ,
168- getSourceFile : fileName =>
169- realLanguageService . getSourceFile ( fileName ) ,
170- getCodeFixesAtPosition : getEmptyResult
171- } ;
172- }
173-
17493 export abstract class Project {
17594 private rootFiles : ScriptInfo [ ] = [ ] ;
17695 private rootFilesMap : FileMap < ScriptInfo > = createFileMap < ScriptInfo > ( ) ;
@@ -181,8 +100,6 @@ namespace ts.server {
181100 private lastCachedUnresolvedImportsList : SortedReadonlyArray < string > ;
182101
183102 private readonly languageService : LanguageService ;
184- // wrapper over the real language service that will suppress all semantic operations
185- private readonly noSemanticFeaturesLanguageService : LanguageService ;
186103
187104 public languageServiceEnabled = true ;
188105
@@ -258,7 +175,6 @@ namespace ts.server {
258175 this . lsHost . setCompilationSettings ( this . compilerOptions ) ;
259176
260177 this . languageService = ts . createLanguageService ( this . lsHost , this . documentRegistry ) ;
261- this . noSemanticFeaturesLanguageService = createNoSemanticFeaturesWrapper ( this . languageService ) ;
262178
263179 if ( ! languageServiceEnabled ) {
264180 this . disableLanguageService ( ) ;
@@ -282,9 +198,7 @@ namespace ts.server {
282198 if ( ensureSynchronized ) {
283199 this . updateGraph ( ) ;
284200 }
285- return this . languageServiceEnabled
286- ? this . languageService
287- : this . noSemanticFeaturesLanguageService ;
201+ return this . languageService ;
288202 }
289203
290204 getCompileOnSaveAffectedFileList ( scriptInfo : ScriptInfo ) : string [ ] {
@@ -373,7 +287,10 @@ namespace ts.server {
373287 const result : string [ ] = [ ] ;
374288 if ( this . rootFiles ) {
375289 for ( const f of this . rootFiles ) {
376- result . push ( f . fileName ) ;
290+ if ( this . languageServiceEnabled || f . isScriptOpen ( ) ) {
291+ // if language service is disabled - process only files that are open
292+ result . push ( f . fileName ) ;
293+ }
377294 }
378295 if ( this . typingFiles ) {
379296 for ( const f of this . typingFiles ) {
@@ -389,6 +306,10 @@ namespace ts.server {
389306 }
390307
391308 getScriptInfos ( ) {
309+ if ( ! this . languageServiceEnabled ) {
310+ // if language service is not enabled - return just root files
311+ return this . rootFiles ;
312+ }
392313 return map ( this . program . getSourceFiles ( ) , sourceFile => {
393314 const scriptInfo = this . projectService . getScriptInfoForPath ( sourceFile . path ) ;
394315 if ( ! scriptInfo ) {
@@ -529,10 +450,6 @@ namespace ts.server {
529450 * @returns : true if set of files in the project stays the same and false - otherwise.
530451 */
531452 updateGraph ( ) : boolean {
532- if ( ! this . languageServiceEnabled ) {
533- return true ;
534- }
535-
536453 this . lsHost . startRecordingFilesWithChangedResolutions ( ) ;
537454
538455 let hasChanges = this . updateGraphWorker ( ) ;
@@ -564,6 +481,16 @@ namespace ts.server {
564481 if ( this . setTypings ( cachedTypings ) ) {
565482 hasChanges = this . updateGraphWorker ( ) || hasChanges ;
566483 }
484+
485+ // update builder only if language service is enabled
486+ // otherwise tell it to drop its internal state
487+ if ( this . languageServiceEnabled ) {
488+ this . builder . onProjectUpdateGraph ( ) ;
489+ }
490+ else {
491+ this . builder . clear ( ) ;
492+ }
493+
567494 if ( hasChanges ) {
568495 this . projectStructureVersion ++ ;
569496 }
@@ -602,7 +529,6 @@ namespace ts.server {
602529 }
603530 }
604531 }
605- this . builder . onProjectUpdateGraph ( ) ;
606532 return hasChanges ;
607533 }
608534
@@ -673,7 +599,8 @@ namespace ts.server {
673599 projectName : this . getProjectName ( ) ,
674600 version : this . projectStructureVersion ,
675601 isInferred : this . projectKind === ProjectKind . Inferred ,
676- options : this . getCompilerOptions ( )
602+ options : this . getCompilerOptions ( ) ,
603+ languageServiceDisabled : ! this . languageServiceEnabled
677604 } ;
678605 const updatedFileNames = this . updatedFileNames ;
679606 this . updatedFileNames = undefined ;
0 commit comments