@@ -218,29 +218,40 @@ namespace ts {
218
218
newProgram : Program ;
219
219
host : BuilderProgramHost ;
220
220
oldProgram : BuilderProgram | undefined ;
221
+ configFileParsingDiagnostics : ReadonlyArray < Diagnostic > ;
221
222
}
222
223
223
- export function getBuilderCreationParameters ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | BuilderProgram , oldProgram ?: BuilderProgram ) : BuilderCreationParameters {
224
+ export function getBuilderCreationParameters ( newProgramOrRootNames : Program | ReadonlyArray < string > | undefined , hostOrOptions : BuilderProgramHost | CompilerOptions | undefined , oldProgramOrHost ?: BuilderProgram | CompilerHost , configFileParsingDiagnosticsOrOldProgram ?: ReadonlyArray < Diagnostic > | BuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) : BuilderCreationParameters {
224
225
let host : BuilderProgramHost ;
225
226
let newProgram : Program ;
226
- if ( isArray ( newProgramOrRootNames ) ) {
227
- newProgram = createProgram ( newProgramOrRootNames , hostOrOptions as CompilerOptions , oldProgramOrHost as CompilerHost , oldProgram && oldProgram . getProgram ( ) ) ;
227
+ let oldProgram : BuilderProgram ;
228
+ if ( newProgramOrRootNames === undefined ) {
229
+ Debug . assert ( hostOrOptions === undefined ) ;
230
+ host = oldProgramOrHost as CompilerHost ;
231
+ oldProgram = configFileParsingDiagnosticsOrOldProgram as BuilderProgram ;
232
+ Debug . assert ( ! ! oldProgram ) ;
233
+ newProgram = oldProgram . getProgram ( ) ;
234
+ }
235
+ else if ( isArray ( newProgramOrRootNames ) ) {
236
+ oldProgram = configFileParsingDiagnosticsOrOldProgram as BuilderProgram ;
237
+ newProgram = createProgram ( newProgramOrRootNames , hostOrOptions as CompilerOptions , oldProgramOrHost as CompilerHost , oldProgram && oldProgram . getProgram ( ) , configFileParsingDiagnostics ) ;
228
238
host = oldProgramOrHost as CompilerHost ;
229
239
}
230
240
else {
231
241
newProgram = newProgramOrRootNames ;
232
242
host = hostOrOptions as BuilderProgramHost ;
233
243
oldProgram = oldProgramOrHost as BuilderProgram ;
244
+ configFileParsingDiagnostics = configFileParsingDiagnosticsOrOldProgram as ReadonlyArray < Diagnostic > ;
234
245
}
235
- return { host, newProgram, oldProgram } ;
246
+ return { host, newProgram, oldProgram, configFileParsingDiagnostics : configFileParsingDiagnostics || emptyArray } ;
236
247
}
237
248
238
249
export function createBuilderProgram ( kind : BuilderProgramKind . SemanticDiagnosticsBuilderProgram , builderCreationParameters : BuilderCreationParameters ) : SemanticDiagnosticsBuilderProgram ;
239
250
export function createBuilderProgram ( kind : BuilderProgramKind . EmitAndSemanticDiagnosticsBuilderProgram , builderCreationParameters : BuilderCreationParameters ) : EmitAndSemanticDiagnosticsBuilderProgram ;
240
- export function createBuilderProgram ( kind : BuilderProgramKind , { newProgram, host, oldProgram } : BuilderCreationParameters ) {
251
+ export function createBuilderProgram ( kind : BuilderProgramKind , { newProgram, host, oldProgram, configFileParsingDiagnostics } : BuilderCreationParameters ) {
241
252
// Return same program if underlying program doesnt change
242
253
let oldState = oldProgram && oldProgram . getState ( ) ;
243
- if ( oldState && newProgram === oldState . program ) {
254
+ if ( oldState && newProgram === oldState . program && configFileParsingDiagnostics !== newProgram . getConfigFileParsingDiagnostics ( ) ) {
244
255
newProgram = undefined ;
245
256
oldState = undefined ;
246
257
return oldProgram ;
@@ -269,6 +280,7 @@ namespace ts {
269
280
getSourceFiles : ( ) => state . program . getSourceFiles ( ) ,
270
281
getOptionsDiagnostics : cancellationToken => state . program . getOptionsDiagnostics ( cancellationToken ) ,
271
282
getGlobalDiagnostics : cancellationToken => state . program . getGlobalDiagnostics ( cancellationToken ) ,
283
+ getConfigFileParsingDiagnostics : ( ) => configFileParsingDiagnostics || state . program . getConfigFileParsingDiagnostics ( ) ,
272
284
getSyntacticDiagnostics : ( sourceFile , cancellationToken ) => state . program . getSyntacticDiagnostics ( sourceFile , cancellationToken ) ,
273
285
getSemanticDiagnostics,
274
286
emit,
@@ -471,6 +483,10 @@ namespace ts {
471
483
* Get the diagnostics that dont belong to any file
472
484
*/
473
485
getGlobalDiagnostics ( cancellationToken ?: CancellationToken ) : ReadonlyArray < Diagnostic > ;
486
+ /**
487
+ * Get the diagnostics from config file parsing
488
+ */
489
+ getConfigFileParsingDiagnostics ( ) : ReadonlyArray < Diagnostic > ;
474
490
/**
475
491
* Get the syntax diagnostics, for all source files if source file is not supplied
476
492
*/
@@ -533,29 +549,29 @@ namespace ts {
533
549
/**
534
550
* Create the builder to manage semantic diagnostics and cache them
535
551
*/
536
- export function createSemanticDiagnosticsBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: SemanticDiagnosticsBuilderProgram ) : SemanticDiagnosticsBuilderProgram ;
537
- export function createSemanticDiagnosticsBuilderProgram ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: SemanticDiagnosticsBuilderProgram ) : SemanticDiagnosticsBuilderProgram ;
538
- export function createSemanticDiagnosticsBuilderProgram ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | SemanticDiagnosticsBuilderProgram , oldProgram ?: SemanticDiagnosticsBuilderProgram ) {
539
- return createBuilderProgram ( BuilderProgramKind . SemanticDiagnosticsBuilderProgram , getBuilderCreationParameters ( newProgramOrRootNames , hostOrOptions , oldProgramOrHost , oldProgram ) ) ;
552
+ export function createSemanticDiagnosticsBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: SemanticDiagnosticsBuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) : SemanticDiagnosticsBuilderProgram ;
553
+ export function createSemanticDiagnosticsBuilderProgram ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: SemanticDiagnosticsBuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) : SemanticDiagnosticsBuilderProgram ;
554
+ export function createSemanticDiagnosticsBuilderProgram ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | SemanticDiagnosticsBuilderProgram , configFileParsingDiagnosticsOrOldProgram ?: ReadonlyArray < Diagnostic > | SemanticDiagnosticsBuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) {
555
+ return createBuilderProgram ( BuilderProgramKind . SemanticDiagnosticsBuilderProgram , getBuilderCreationParameters ( newProgramOrRootNames , hostOrOptions , oldProgramOrHost , configFileParsingDiagnosticsOrOldProgram , configFileParsingDiagnostics ) ) ;
540
556
}
541
557
542
558
/**
543
559
* Create the builder that can handle the changes in program and iterate through changed files
544
560
* to emit the those files and manage semantic diagnostics cache as well
545
561
*/
546
- export function createEmitAndSemanticDiagnosticsBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: EmitAndSemanticDiagnosticsBuilderProgram ) : EmitAndSemanticDiagnosticsBuilderProgram ;
547
- export function createEmitAndSemanticDiagnosticsBuilderProgram ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: EmitAndSemanticDiagnosticsBuilderProgram ) : EmitAndSemanticDiagnosticsBuilderProgram ;
548
- export function createEmitAndSemanticDiagnosticsBuilderProgram ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | EmitAndSemanticDiagnosticsBuilderProgram , oldProgram ?: EmitAndSemanticDiagnosticsBuilderProgram ) {
549
- return createBuilderProgram ( BuilderProgramKind . EmitAndSemanticDiagnosticsBuilderProgram , getBuilderCreationParameters ( newProgramOrRootNames , hostOrOptions , oldProgramOrHost , oldProgram ) ) ;
562
+ export function createEmitAndSemanticDiagnosticsBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: EmitAndSemanticDiagnosticsBuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) : EmitAndSemanticDiagnosticsBuilderProgram ;
563
+ export function createEmitAndSemanticDiagnosticsBuilderProgram ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: EmitAndSemanticDiagnosticsBuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) : EmitAndSemanticDiagnosticsBuilderProgram ;
564
+ export function createEmitAndSemanticDiagnosticsBuilderProgram ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | EmitAndSemanticDiagnosticsBuilderProgram , configFileParsingDiagnosticsOrOldProgram ?: ReadonlyArray < Diagnostic > | EmitAndSemanticDiagnosticsBuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) {
565
+ return createBuilderProgram ( BuilderProgramKind . EmitAndSemanticDiagnosticsBuilderProgram , getBuilderCreationParameters ( newProgramOrRootNames , hostOrOptions , oldProgramOrHost , configFileParsingDiagnosticsOrOldProgram , configFileParsingDiagnostics ) ) ;
550
566
}
551
567
552
568
/**
553
569
* Creates a builder thats just abstraction over program and can be used with watch
554
570
*/
555
- export function createAbstractBuilder ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: BuilderProgram ) : BuilderProgram ;
556
- export function createAbstractBuilder ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: BuilderProgram ) : BuilderProgram ;
557
- export function createAbstractBuilder ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | BuilderProgram , oldProgram ?: BuilderProgram ) : BuilderProgram {
558
- const { newProgram : program } = getBuilderCreationParameters ( newProgramOrRootNames , hostOrOptions , oldProgramOrHost , oldProgram ) ;
571
+ export function createAbstractBuilder ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: BuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) : BuilderProgram ;
572
+ export function createAbstractBuilder ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: BuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) : BuilderProgram ;
573
+ export function createAbstractBuilder ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | BuilderProgram , configFileParsingDiagnosticsOrOldProgram ?: ReadonlyArray < Diagnostic > | BuilderProgram , configFileParsingDiagnostics ?: ReadonlyArray < Diagnostic > ) : BuilderProgram {
574
+ const { newProgram : program } = getBuilderCreationParameters ( newProgramOrRootNames , hostOrOptions , oldProgramOrHost , configFileParsingDiagnosticsOrOldProgram , configFileParsingDiagnostics ) ;
559
575
return {
560
576
// Only return program, all other methods are not implemented
561
577
getProgram : ( ) => program ,
@@ -565,6 +581,7 @@ namespace ts {
565
581
getSourceFiles : notImplemented ,
566
582
getOptionsDiagnostics : notImplemented ,
567
583
getGlobalDiagnostics : notImplemented ,
584
+ getConfigFileParsingDiagnostics : notImplemented ,
568
585
getSyntacticDiagnostics : notImplemented ,
569
586
getSemanticDiagnostics : notImplemented ,
570
587
emit : notImplemented ,
0 commit comments