Skip to content

isProgramUptoDate wrongfully returns true #36010

@yacinehmito

Description

@yacinehmito

TypeScript Version: On master (commit d6c05a135840dc3045ec8f3bbec1da5ffabb6593)

Search Terms: isProgramUptoDate, synchronize program update program.

Code

I was playing around with the TypeScript API and I noticed that if you update the root files of a watcher program with the same number of root files, the source files are not updated.

import * as ts from 'typescript';

const watchHost = ts.createWatchCompilerHost(['path/to/foo']);
const program = ts.createWatchProgram(watchHost);
console.log(const program.getProgram().getSourceFiles()); // <- This has the expected sources
program.updateRootFileNames(['/path/to/bar']);
console.log(const program.getProgram().getSourceFiles()); // <- This has the same source, but it shouldn't

Expected behavior:

The source files should be the expected ones (so include /path/to/bar).

Actual behavior:

The source files didn't change.

Playground Link: Can't reproduce in the playground as it's an API bug.

Related Issues: Didn't find any related issues.


This is the culprit:

if (program.getRootFileNames().length !== rootFileNames.length) {

It should check for array equality, not just array length. I'll make a PR real soon.

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions