@@ -147,6 +147,9 @@ namespace ts {
147
147
reportWatchModeWithoutSysSupport ( ) ;
148
148
createWatchOfConfigFile ( configParseResult , commandLineOptions ) ;
149
149
}
150
+ else if ( isIncrementalCompilation ( configParseResult . options ) ) {
151
+ performIncrementalCompilation ( configParseResult ) ;
152
+ }
150
153
else {
151
154
performCompilation ( configParseResult . fileNames , configParseResult . projectReferences , configParseResult . options , getConfigFileParsingDiagnostics ( configParseResult ) ) ;
152
155
}
@@ -254,6 +257,44 @@ namespace ts {
254
257
return sys . exit ( exitStatus ) ;
255
258
}
256
259
260
+ function performIncrementalCompilation ( config : ParsedCommandLine ) {
261
+ const { options, fileNames, projectReferences } = config ;
262
+ const host = createCompilerHost ( options ) ;
263
+ const currentDirectory = host . getCurrentDirectory ( ) ;
264
+ const getCanonicalFileName = createGetCanonicalFileName ( host . useCaseSensitiveFileNames ( ) ) ;
265
+ changeCompilerHostLikeToUseCache ( host , fileName => toPath ( fileName , currentDirectory , getCanonicalFileName ) ) ;
266
+ enableStatistics ( options ) ;
267
+ const oldProgram = readBuilderProgram ( options , path => host . readFile ( path ) ) ;
268
+ const configFileParsingDiagnostics = getConfigFileParsingDiagnostics ( config ) ;
269
+ const programOptions : CreateProgramOptions = {
270
+ rootNames : fileNames ,
271
+ options,
272
+ projectReferences,
273
+ host,
274
+ configFileParsingDiagnostics : getConfigFileParsingDiagnostics ( config ) ,
275
+ } ;
276
+ const program = createProgram ( programOptions ) ;
277
+ const builderProgram = createEmitAndSemanticDiagnosticsBuilderProgram (
278
+ program ,
279
+ {
280
+ useCaseSensitiveFileNames : ( ) => sys . useCaseSensitiveFileNames ,
281
+ createHash : maybeBind ( sys , sys . createHash ) ,
282
+ writeFile : ( path , data , writeByteOrderMark ) => sys . writeFile ( path , data , writeByteOrderMark )
283
+ } ,
284
+ oldProgram ,
285
+ configFileParsingDiagnostics
286
+ ) ;
287
+
288
+ const exitStatus = emitFilesAndReportErrors (
289
+ builderProgram ,
290
+ reportDiagnostic ,
291
+ s => sys . write ( s + sys . newLine ) ,
292
+ createReportErrorSummary ( options )
293
+ ) ;
294
+ reportStatistics ( program ) ;
295
+ return sys . exit ( exitStatus ) ;
296
+ }
297
+
257
298
function updateCreateProgram < T extends BuilderProgram > ( host : { createProgram : CreateProgram < T > ; } ) {
258
299
const compileUsingBuilder = host . createProgram ;
259
300
host . createProgram = ( rootNames , options , host , oldProgram , configFileParsingDiagnostics , projectReferences ) => {
0 commit comments