@@ -90,87 +90,6 @@ namespace ts.server {
90
90
}
91
91
}
92
92
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
-
174
93
export abstract class Project {
175
94
private rootFiles : ScriptInfo [ ] = [ ] ;
176
95
private rootFilesMap : FileMap < ScriptInfo > = createFileMap < ScriptInfo > ( ) ;
@@ -181,8 +100,6 @@ namespace ts.server {
181
100
private lastCachedUnresolvedImportsList : SortedReadonlyArray < string > ;
182
101
183
102
private readonly languageService : LanguageService ;
184
- // wrapper over the real language service that will suppress all semantic operations
185
- private readonly noSemanticFeaturesLanguageService : LanguageService ;
186
103
187
104
public languageServiceEnabled = true ;
188
105
@@ -258,7 +175,6 @@ namespace ts.server {
258
175
this . lsHost . setCompilationSettings ( this . compilerOptions ) ;
259
176
260
177
this . languageService = ts . createLanguageService ( this . lsHost , this . documentRegistry ) ;
261
- this . noSemanticFeaturesLanguageService = createNoSemanticFeaturesWrapper ( this . languageService ) ;
262
178
263
179
if ( ! languageServiceEnabled ) {
264
180
this . disableLanguageService ( ) ;
@@ -282,9 +198,7 @@ namespace ts.server {
282
198
if ( ensureSynchronized ) {
283
199
this . updateGraph ( ) ;
284
200
}
285
- return this . languageServiceEnabled
286
- ? this . languageService
287
- : this . noSemanticFeaturesLanguageService ;
201
+ return this . languageService ;
288
202
}
289
203
290
204
getCompileOnSaveAffectedFileList ( scriptInfo : ScriptInfo ) : string [ ] {
@@ -373,7 +287,10 @@ namespace ts.server {
373
287
const result : string [ ] = [ ] ;
374
288
if ( this . rootFiles ) {
375
289
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
+ }
377
294
}
378
295
if ( this . typingFiles ) {
379
296
for ( const f of this . typingFiles ) {
@@ -389,6 +306,10 @@ namespace ts.server {
389
306
}
390
307
391
308
getScriptInfos ( ) {
309
+ if ( ! this . languageServiceEnabled ) {
310
+ // if language service is not enabled - return just root files
311
+ return this . rootFiles ;
312
+ }
392
313
return map ( this . program . getSourceFiles ( ) , sourceFile => {
393
314
const scriptInfo = this . projectService . getScriptInfoForPath ( sourceFile . path ) ;
394
315
if ( ! scriptInfo ) {
@@ -529,10 +450,6 @@ namespace ts.server {
529
450
* @returns : true if set of files in the project stays the same and false - otherwise.
530
451
*/
531
452
updateGraph ( ) : boolean {
532
- if ( ! this . languageServiceEnabled ) {
533
- return true ;
534
- }
535
-
536
453
this . lsHost . startRecordingFilesWithChangedResolutions ( ) ;
537
454
538
455
let hasChanges = this . updateGraphWorker ( ) ;
@@ -564,6 +481,16 @@ namespace ts.server {
564
481
if ( this . setTypings ( cachedTypings ) ) {
565
482
hasChanges = this . updateGraphWorker ( ) || hasChanges ;
566
483
}
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
+
567
494
if ( hasChanges ) {
568
495
this . projectStructureVersion ++ ;
569
496
}
@@ -602,7 +529,6 @@ namespace ts.server {
602
529
}
603
530
}
604
531
}
605
- this . builder . onProjectUpdateGraph ( ) ;
606
532
return hasChanges ;
607
533
}
608
534
@@ -673,7 +599,8 @@ namespace ts.server {
673
599
projectName : this . getProjectName ( ) ,
674
600
version : this . projectStructureVersion ,
675
601
isInferred : this . projectKind === ProjectKind . Inferred ,
676
- options : this . getCompilerOptions ( )
602
+ options : this . getCompilerOptions ( ) ,
603
+ languageServiceDisabled : ! this . languageServiceEnabled
677
604
} ;
678
605
const updatedFileNames = this . updatedFileNames ;
679
606
this . updatedFileNames = undefined ;
0 commit comments