Skip to content

Commit 9e72ab7

Browse files
🤖 Pick PR #63239 (Fix missing lib files in reused pro...) into release-6.0 (#63246)
Co-authored-by: Jake Bailey <5341706+jakebailey@users.noreply.github.com>
1 parent 35ff23d commit 9e72ab7

32 files changed

+40
-49
lines changed

‎lib/_tsc.js‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123444,6 +123444,9 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi
123444123444
Debug.assert(newSourceFiles.length === oldProgram.getSourceFiles().length);
123445123445
for (const newSourceFile of newSourceFiles) {
123446123446
filesByName.set(newSourceFile.path, newSourceFile);
123447+
if (oldProgram.isSourceFileDefaultLibrary(newSourceFile)) {
123448+
libFiles.add(newSourceFile.path);
123449+
}
123447123450
}
123448123451
const oldFilesByNameMap = oldProgram.getFilesByNameMap();
123449123452
oldFilesByNameMap.forEach((oldFile, path) => {

‎lib/typescript.js‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128318,6 +128318,9 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi
128318128318
Debug.assert(newSourceFiles.length === oldProgram.getSourceFiles().length);
128319128319
for (const newSourceFile of newSourceFiles) {
128320128320
filesByName.set(newSourceFile.path, newSourceFile);
128321+
if (oldProgram.isSourceFileDefaultLibrary(newSourceFile)) {
128322+
libFiles.add(newSourceFile.path);
128323+
}
128321128324
}
128322128325
const oldFilesByNameMap = oldProgram.getFilesByNameMap();
128323128326
oldFilesByNameMap.forEach((oldFile, path) => {

‎src/compiler/program.ts‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2555,6 +2555,9 @@ export function createProgram(_rootNamesOrOptions: readonly string[] | CreatePro
25552555
Debug.assert(newSourceFiles.length === oldProgram.getSourceFiles().length);
25562556
for (const newSourceFile of newSourceFiles) {
25572557
filesByName.set(newSourceFile.path, newSourceFile);
2558+
if (oldProgram.isSourceFileDefaultLibrary(newSourceFile)) {
2559+
libFiles.add(newSourceFile.path);
2560+
}
25582561
}
25592562
const oldFilesByNameMap = oldProgram.getFilesByNameMap();
25602563
oldFilesByNameMap.forEach((oldFile, path) => {

‎src/testRunner/unittests/reuseProgramStructure.ts‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,35 @@ describe("unittests:: reuseProgramStructure:: General", () => {
769769
baselineDiagnostics(baselines, program4);
770770
runBaseline("handles file preprocessing dignostics when diagnostics are not queried", baselines);
771771
});
772+
773+
it("isSourceFileDefaultLibrary is preserved after program reuse", () => {
774+
const libFile = { name: "/lib.d.ts", text: SourceText.New("", "", "declare var console: any;") };
775+
const mainFile = { name: "/main.ts", text: SourceText.New("", "", "var x = 1;") };
776+
const files = [libFile, mainFile];
777+
778+
const host = createTestCompilerHost(files, target);
779+
host.getDefaultLibFileName = () => "/lib.d.ts";
780+
781+
const options: ts.CompilerOptions = { target };
782+
const program1 = ts.createProgram(["/main.ts"], options, host) as ProgramWithSourceTexts;
783+
program1.sourceTexts = files;
784+
program1.host = host;
785+
program1.version = 1;
786+
787+
const libSourceFile1 = program1.getSourceFile("/lib.d.ts")!;
788+
assert.isDefined(libSourceFile1, "lib file should exist in program 1");
789+
assert.isTrue(program1.isSourceFileDefaultLibrary(libSourceFile1), "lib file should be a default library in program 1");
790+
791+
// Update main file only (code change) -> should trigger complete structure reuse
792+
mainFile.text = mainFile.text.updateProgram("var x = 2;");
793+
const host2 = createTestCompilerHost(files, target, program1);
794+
host2.getDefaultLibFileName = () => "/lib.d.ts";
795+
const program2 = ts.createProgram(["/main.ts"], options, host2, program1);
796+
797+
const libSourceFile2 = program2.getSourceFile("/lib.d.ts")!;
798+
assert.isDefined(libSourceFile2, "lib file should exist in program 2");
799+
assert.isTrue(program2.isSourceFileDefaultLibrary(libSourceFile2), "lib file should still be a default library in program 2 after reuse");
800+
});
772801
});
773802

774803
describe("unittests:: reuseProgramStructure:: host is optional", () => {

‎tests/baselines/reference/tscWatch/emit/emit-file-content/file-is-deleted-and-created-as-part-of-change.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,5 @@ Semantic diagnostics in builder refreshed for::
126126

127127
Shape signatures in builder refreshed for::
128128
/home/username/projects/project/app/file.ts (computed .d.ts)
129-
/home/src/tslibs/TS/Lib/lib.es2025.full.d.ts (used version)
130129

131130
exitCode:: ExitStatus.undefined

‎tests/baselines/reference/tscWatch/emit/emit-file-content/handles-new-lines-carriageReturn-lineFeed.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,5 @@ Semantic diagnostics in builder refreshed for::
115115

116116
Shape signatures in builder refreshed for::
117117
/home/src/projects/a/app.ts (computed .d.ts)
118-
/home/src/tslibs/ts/lib/lib.es2025.full.d.ts (used version)
119118

120119
exitCode:: ExitStatus.undefined

‎tests/baselines/reference/tscWatch/emit/emit-file-content/handles-new-lines-lineFeed.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,5 @@ Semantic diagnostics in builder refreshed for::
115115

116116
Shape signatures in builder refreshed for::
117117
/home/src/projects/a/app.ts (computed .d.ts)
118-
/home/src/tslibs/ts/lib/lib.es2025.full.d.ts (used version)
119118

120119
exitCode:: ExitStatus.undefined

‎tests/baselines/reference/tscWatch/emit/emit-for-configured-projects/should-return-all-files-if-a-global-file-changed-shape.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,6 @@ Semantic diagnostics in builder refreshed for::
189189

190190
Shape signatures in builder refreshed for::
191191
/home/src/projects/a/b/globalfile3.ts (computed .d.ts)
192-
/home/src/tslibs/ts/lib/lib.es2025.full.d.ts (used version)
193192
/home/src/projects/a/b/modulefile1.ts (computed .d.ts)
194193
/home/src/projects/a/b/file1consumer1.ts (computed .d.ts)
195194
/home/src/projects/a/b/file1consumer2.ts (computed .d.ts)

‎tests/baselines/reference/tscWatch/emit/emit-with-outFile-or-out-setting/config-does-not-have-out-or-outFile.js‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ Semantic diagnostics in builder refreshed for::
142142

143143
Shape signatures in builder refreshed for::
144144
/home/src/projects/a/a.ts (computed .d.ts)
145-
/home/src/tslibs/ts/lib/lib.es2025.full.d.ts (used version)
146145
/home/src/projects/a/b.ts (computed .d.ts)
147146

148147
exitCode:: ExitStatus.undefined
@@ -200,7 +199,6 @@ Semantic diagnostics in builder refreshed for::
200199

201200
Shape signatures in builder refreshed for::
202201
/home/src/projects/a/a.ts (computed .d.ts)
203-
/home/src/tslibs/ts/lib/lib.es2025.full.d.ts (used version)
204202
/home/src/projects/a/b.ts (computed .d.ts)
205203

206204
exitCode:: ExitStatus.undefined

‎tests/baselines/reference/tscWatch/emit/emit-with-outFile-or-out-setting/config-has-out.js‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ No cached semantic diagnostics in the builder::
150150

151151
Shape signatures in builder refreshed for::
152152
/home/src/projects/a/a.ts (computed .d.ts)
153-
/home/src/tslibs/ts/lib/lib.es2025.full.d.ts (used version)
154153
/home/src/projects/a/b.ts (computed .d.ts)
155154

156155
exitCode:: ExitStatus.undefined
@@ -211,7 +210,6 @@ No cached semantic diagnostics in the builder::
211210

212211
Shape signatures in builder refreshed for::
213212
/home/src/projects/a/a.ts (computed .d.ts)
214-
/home/src/tslibs/ts/lib/lib.es2025.full.d.ts (used version)
215213
/home/src/projects/a/b.ts (computed .d.ts)
216214

217215
exitCode:: ExitStatus.undefined

0 commit comments

Comments
 (0)