@@ -205,13 +205,15 @@ namespace ts {
205205 }
206206
207207 export function getPreEmitDiagnostics ( program : Program , sourceFile ?: SourceFile , cancellationToken ?: CancellationToken ) : Diagnostic [ ] {
208- let diagnostics = program . getOptionsDiagnostics ( cancellationToken ) . concat (
209- program . getSyntacticDiagnostics ( sourceFile , cancellationToken ) ,
210- program . getGlobalDiagnostics ( cancellationToken ) ,
211- program . getSemanticDiagnostics ( sourceFile , cancellationToken ) ) ;
208+ const diagnostics = [
209+ ...program . getOptionsDiagnostics ( cancellationToken ) ,
210+ ...program . getSyntacticDiagnostics ( sourceFile , cancellationToken ) ,
211+ ...program . getGlobalDiagnostics ( cancellationToken ) ,
212+ ...program . getSemanticDiagnostics ( sourceFile , cancellationToken )
213+ ] ;
212214
213215 if ( program . getCompilerOptions ( ) . declaration ) {
214- diagnostics = diagnostics . concat ( program . getDeclarationDiagnostics ( sourceFile , cancellationToken ) ) ;
216+ addRange ( diagnostics , program . getDeclarationDiagnostics ( sourceFile , cancellationToken ) ) ;
215217 }
216218
217219 return sortAndDeduplicateDiagnostics ( diagnostics ) ;
@@ -223,7 +225,7 @@ namespace ts {
223225 getNewLine ( ) : string ;
224226 }
225227
226- export function formatDiagnostics ( diagnostics : Diagnostic [ ] , host : FormatDiagnosticsHost ) : string {
228+ export function formatDiagnostics ( diagnostics : ReadonlyArray < Diagnostic > , host : FormatDiagnosticsHost ) : string {
227229 let output = "" ;
228230
229231 for ( const diagnostic of diagnostics ) {
@@ -399,7 +401,7 @@ namespace ts {
399401 * @param oldProgram - Reuses an old program structure.
400402 * @returns A 'Program' object.
401403 */
402- export function createProgram ( rootNames : string [ ] , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: Program ) : Program {
404+ export function createProgram ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: Program ) : Program {
403405 let program : Program ;
404406 let files : SourceFile [ ] = [ ] ;
405407 let commonSourceDirectory : string ;
@@ -996,7 +998,7 @@ namespace ts {
996998 }
997999
9981000 function emitWorker ( program : Program , sourceFile : SourceFile , writeFileCallback : WriteFileCallback , cancellationToken : CancellationToken , emitOnlyDtsFiles ?: boolean , customTransformers ?: CustomTransformers ) : EmitResult {
999- let declarationDiagnostics : Diagnostic [ ] = [ ] ;
1001+ let declarationDiagnostics : ReadonlyArray < Diagnostic > = [ ] ;
10001002
10011003 if ( options . noEmit ) {
10021004 return { diagnostics : declarationDiagnostics , sourceMaps : undefined , emittedFiles : undefined , emitSkipped : true } ;
@@ -1006,10 +1008,12 @@ namespace ts {
10061008 // immediately bail out. Note that we pass 'undefined' for 'sourceFile' so that we
10071009 // get any preEmit diagnostics, not just the ones
10081010 if ( options . noEmitOnError ) {
1009- const diagnostics = program . getOptionsDiagnostics ( cancellationToken ) . concat (
1010- program . getSyntacticDiagnostics ( sourceFile , cancellationToken ) ,
1011- program . getGlobalDiagnostics ( cancellationToken ) ,
1012- program . getSemanticDiagnostics ( sourceFile , cancellationToken ) ) ;
1011+ const diagnostics = [
1012+ ...program . getOptionsDiagnostics ( cancellationToken ) ,
1013+ ...program . getSyntacticDiagnostics ( sourceFile , cancellationToken ) ,
1014+ ...program . getGlobalDiagnostics ( cancellationToken ) ,
1015+ ...program . getSemanticDiagnostics ( sourceFile , cancellationToken )
1016+ ] ;
10131017
10141018 if ( diagnostics . length === 0 && program . getCompilerOptions ( ) . declaration ) {
10151019 declarationDiagnostics = program . getDeclarationDiagnostics ( /*sourceFile*/ undefined , cancellationToken ) ;
@@ -1060,8 +1064,8 @@ namespace ts {
10601064
10611065 function getDiagnosticsHelper (
10621066 sourceFile : SourceFile ,
1063- getDiagnostics : ( sourceFile : SourceFile , cancellationToken : CancellationToken ) => Diagnostic [ ] ,
1064- cancellationToken : CancellationToken ) : Diagnostic [ ] {
1067+ getDiagnostics : ( sourceFile : SourceFile , cancellationToken : CancellationToken ) => ReadonlyArray < Diagnostic > ,
1068+ cancellationToken : CancellationToken ) : ReadonlyArray < Diagnostic > {
10651069 if ( sourceFile ) {
10661070 return getDiagnostics ( sourceFile , cancellationToken ) ;
10671071 }
@@ -1073,15 +1077,15 @@ namespace ts {
10731077 } ) ) ;
10741078 }
10751079
1076- function getSyntacticDiagnostics ( sourceFile : SourceFile , cancellationToken : CancellationToken ) : Diagnostic [ ] {
1080+ function getSyntacticDiagnostics ( sourceFile : SourceFile , cancellationToken : CancellationToken ) : ReadonlyArray < Diagnostic > {
10771081 return getDiagnosticsHelper ( sourceFile , getSyntacticDiagnosticsForFile , cancellationToken ) ;
10781082 }
10791083
1080- function getSemanticDiagnostics ( sourceFile : SourceFile , cancellationToken : CancellationToken ) : Diagnostic [ ] {
1084+ function getSemanticDiagnostics ( sourceFile : SourceFile , cancellationToken : CancellationToken ) : ReadonlyArray < Diagnostic > {
10811085 return getDiagnosticsHelper ( sourceFile , getSemanticDiagnosticsForFile , cancellationToken ) ;
10821086 }
10831087
1084- function getDeclarationDiagnostics ( sourceFile : SourceFile , cancellationToken : CancellationToken ) : Diagnostic [ ] {
1088+ function getDeclarationDiagnostics ( sourceFile : SourceFile , cancellationToken : CancellationToken ) : ReadonlyArray < Diagnostic > {
10851089 const options = program . getCompilerOptions ( ) ;
10861090 // collect diagnostics from the program only once if either no source file was specified or out/outFile is set (bundled emit)
10871091 if ( ! sourceFile || options . out || options . outFile ) {
@@ -1092,7 +1096,7 @@ namespace ts {
10921096 }
10931097 }
10941098
1095- function getSyntacticDiagnosticsForFile ( sourceFile : SourceFile ) : Diagnostic [ ] {
1099+ function getSyntacticDiagnosticsForFile ( sourceFile : SourceFile ) : ReadonlyArray < Diagnostic > {
10961100 // For JavaScript files, we report semantic errors for using TypeScript-only
10971101 // constructs from within a JavaScript file as syntactic errors.
10981102 if ( isSourceFileJavaScript ( sourceFile ) ) {
0 commit comments