diff --git a/src/index.ts b/src/index.ts index f1260a879..4397c28bf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -255,6 +255,7 @@ function updateFileInCache( } if (instance.watchHost && fileWatcherEventKind !== undefined) { + instance.hasUnaccountedModifiedFiles = true; instance.watchHost.invokeFileWatcher(filePath, fileWatcherEventKind); instance.watchHost.invokeDirectoryWatcher(path.dirname(filePath), filePath); } diff --git a/src/instances.ts b/src/instances.ts index b60944d8e..8aa1d0b4a 100644 --- a/src/instances.ts +++ b/src/instances.ts @@ -25,13 +25,16 @@ const instances = {}; function ensureProgram(instance: TSInstance) { if (instance && instance.watchHost) { - if (instance.changedFilesList) { - instance.watchHost.updateRootFileNames(); - } - if (instance.watchOfFilesAndCompilerOptions) { - instance.program = instance.watchOfFilesAndCompilerOptions - .getProgram() - .getProgram(); + if (instance.hasUnaccountedModifiedFiles) { + if (instance.changedFilesList) { + instance.watchHost.updateRootFileNames(); + } + if (instance.watchOfFilesAndCompilerOptions) { + instance.program = instance.watchOfFilesAndCompilerOptions + .getProgram() + .getProgram(); + } + instance.hasUnaccountedModifiedFiles = false; } return instance.program; } diff --git a/src/interfaces.ts b/src/interfaces.ts index eb384c66e..c98e02345 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -256,6 +256,7 @@ export interface TSInstance { typescript.BuilderProgram >; program?: typescript.Program; + hasUnaccountedModifiedFiles?: boolean; changedFilesList?: boolean; }