@@ -218,29 +218,40 @@ namespace ts {
218218 newProgram : Program ;
219219 host : BuilderProgramHost ;
220220 oldProgram : BuilderProgram | undefined ;
221+ configFileParsingDiagnostics : ReadonlyArray < Diagnostic > ;
221222 }
222223
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 {
224225 let host : BuilderProgramHost ;
225226 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 ) ;
228238 host = oldProgramOrHost as CompilerHost ;
229239 }
230240 else {
231241 newProgram = newProgramOrRootNames ;
232242 host = hostOrOptions as BuilderProgramHost ;
233243 oldProgram = oldProgramOrHost as BuilderProgram ;
244+ configFileParsingDiagnostics = configFileParsingDiagnosticsOrOldProgram as ReadonlyArray < Diagnostic > ;
234245 }
235- return { host, newProgram, oldProgram } ;
246+ return { host, newProgram, oldProgram, configFileParsingDiagnostics : configFileParsingDiagnostics || emptyArray } ;
236247 }
237248
238249 export function createBuilderProgram ( kind : BuilderProgramKind . SemanticDiagnosticsBuilderProgram , builderCreationParameters : BuilderCreationParameters ) : SemanticDiagnosticsBuilderProgram ;
239250 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 ) {
241252 // Return same program if underlying program doesnt change
242253 let oldState = oldProgram && oldProgram . getState ( ) ;
243- if ( oldState && newProgram === oldState . program ) {
254+ if ( oldState && newProgram === oldState . program && configFileParsingDiagnostics !== newProgram . getConfigFileParsingDiagnostics ( ) ) {
244255 newProgram = undefined ;
245256 oldState = undefined ;
246257 return oldProgram ;
@@ -269,6 +280,7 @@ namespace ts {
269280 getSourceFiles : ( ) => state . program . getSourceFiles ( ) ,
270281 getOptionsDiagnostics : cancellationToken => state . program . getOptionsDiagnostics ( cancellationToken ) ,
271282 getGlobalDiagnostics : cancellationToken => state . program . getGlobalDiagnostics ( cancellationToken ) ,
283+ getConfigFileParsingDiagnostics : ( ) => configFileParsingDiagnostics || state . program . getConfigFileParsingDiagnostics ( ) ,
272284 getSyntacticDiagnostics : ( sourceFile , cancellationToken ) => state . program . getSyntacticDiagnostics ( sourceFile , cancellationToken ) ,
273285 getSemanticDiagnostics,
274286 emit,
@@ -471,6 +483,10 @@ namespace ts {
471483 * Get the diagnostics that dont belong to any file
472484 */
473485 getGlobalDiagnostics ( cancellationToken ?: CancellationToken ) : ReadonlyArray < Diagnostic > ;
486+ /**
487+ * Get the diagnostics from config file parsing
488+ */
489+ getConfigFileParsingDiagnostics ( ) : ReadonlyArray < Diagnostic > ;
474490 /**
475491 * Get the syntax diagnostics, for all source files if source file is not supplied
476492 */
@@ -533,29 +549,29 @@ namespace ts {
533549 /**
534550 * Create the builder to manage semantic diagnostics and cache them
535551 */
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 ) ) ;
540556 }
541557
542558 /**
543559 * Create the builder that can handle the changes in program and iterate through changed files
544560 * to emit the those files and manage semantic diagnostics cache as well
545561 */
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 ) ) ;
550566 }
551567
552568 /**
553569 * Creates a builder thats just abstraction over program and can be used with watch
554570 */
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 ) ;
559575 return {
560576 // Only return program, all other methods are not implemented
561577 getProgram : ( ) => program ,
@@ -565,6 +581,7 @@ namespace ts {
565581 getSourceFiles : notImplemented ,
566582 getOptionsDiagnostics : notImplemented ,
567583 getGlobalDiagnostics : notImplemented ,
584+ getConfigFileParsingDiagnostics : notImplemented ,
568585 getSyntacticDiagnostics : notImplemented ,
569586 getSemanticDiagnostics : notImplemented ,
570587 emit : notImplemented ,
0 commit comments