Skip to content

Commit dcdabff

Browse files
committed
Root files change does not make unsafe to use module resolutions
This also fixes incorrectly not setting fileAddedOrRemoved on project when file is deleted
1 parent 28603e0 commit dcdabff

File tree

27 files changed

+40
-37
lines changed

27 files changed

+40
-37
lines changed

src/compiler/program.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1332,24 +1332,26 @@ namespace ts {
13321332
return StructureIsReused.Not;
13331333
}
13341334

1335+
// Check if any referenced project tsconfig files are different
1336+
if (!canReuseProjectReferences()) {
1337+
return StructureIsReused.Not;
1338+
}
1339+
if (projectReferences) {
1340+
resolvedProjectReferences = projectReferences.map(parseProjectReferenceConfigFile);
1341+
}
1342+
1343+
// Anything below can affect program structure but it is safe to use modules
1344+
13351345
// there is an old program, check if we can reuse its structure
13361346
const oldRootNames = oldProgram.getRootFileNames();
13371347
if (!arrayIsEqualTo(oldRootNames, rootNames)) {
1338-
return StructureIsReused.Not;
1348+
return StructureIsReused.SafeModules;
13391349
}
13401350

13411351
if (!arrayIsEqualTo(options.types, oldOptions.types)) {
13421352
return StructureIsReused.Not;
13431353
}
13441354

1345-
// Check if any referenced project tsconfig files are different
1346-
if (!canReuseProjectReferences()) {
1347-
return StructureIsReused.Not;
1348-
}
1349-
if (projectReferences) {
1350-
resolvedProjectReferences = projectReferences.map(parseProjectReferenceConfigFile);
1351-
}
1352-
13531355
// check if program source files has changed in the way that can affect structure of the program
13541356
structureIsReused = StructureIsReused.Completely;
13551357

src/server/scriptInfo.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,7 @@ namespace ts.server {
477477
const existingRoot = p.getRootFilesMap().get(this.path);
478478
// detach is unnecessary since we'll clean the list of containing projects anyways
479479
p.removeFile(this, /*fileExists*/ false, /*detachFromProjects*/ false);
480+
p.onFileAddedOrRemoved();
480481
// If the info was for the external or configured project's root,
481482
// add missing file as the root
482483
if (existingRoot && !isInferredProject(p)) {

tests/baselines/reference/tscWatch/emit/emit-for-configured-projects/should-be-up-to-date-with-deleted-files.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ Output::
136136

137137
Program root files: ["/a/b/file1Consumer1.ts","/a/b/globalFile3.ts","/a/b/moduleFile1.ts","/a/b/moduleFile2.ts"]
138138
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
139-
Program structureReused: Not
139+
Program structureReused: SafeModules
140140
Program files::
141141
/a/lib/lib.d.ts
142142
/a/b/moduleFile1.ts

tests/baselines/reference/tscWatch/emit/emit-for-configured-projects/should-be-up-to-date-with-newly-created-files.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ Output::
138138

139139
Program root files: ["/a/b/file1Consumer1.ts","/a/b/file1Consumer2.ts","/a/b/file1Consumer3.ts","/a/b/globalFile3.ts","/a/b/moduleFile1.ts","/a/b/moduleFile2.ts"]
140140
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
141-
Program structureReused: Not
141+
Program structureReused: SafeModules
142142
Program files::
143143
/a/lib/lib.d.ts
144144
/a/b/moduleFile1.ts

tests/baselines/reference/tscWatch/emit/emit-for-configured-projects/should-detect-non-existing-code-file.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ Output::
177177

178178
Program root files: ["/a/b/moduleFile2.ts","/a/b/referenceFile1.ts"]
179179
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
180-
Program structureReused: Not
180+
Program structureReused: SafeModules
181181
Program files::
182182
/a/lib/lib.d.ts
183183
/a/b/moduleFile2.ts

tests/baselines/reference/tscWatch/emit/emit-for-configured-projects/should-detect-removed-code-file.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ Output::
113113

114114
Program root files: ["/a/b/referenceFile1.ts"]
115115
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
116-
Program structureReused: Not
116+
Program structureReused: SafeModules
117117
Program files::
118118
/a/lib/lib.d.ts
119119
/a/b/referenceFile1.ts

tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/when-renaming-file-with-different-casing.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ Output::
104104

105105
Program root files: ["/user/username/projects/myproject/Logger.ts","/user/username/projects/myproject/another.ts"]
106106
Program options: {"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject/tsconfig.json","configFilePath":"/user/username/projects/myproject/tsconfig.json"}
107-
Program structureReused: Not
107+
Program structureReused: SafeModules
108108
Program files::
109109
/a/lib/lib.d.ts
110110
/user/username/projects/myproject/Logger.ts

tests/baselines/reference/tscWatch/programUpdates/add-new-files-to-a-configured-program-without-file-list.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ Output::
7979

8080
Program root files: ["/a/b/commonFile1.ts","/a/b/commonFile2.ts"]
8181
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
82-
Program structureReused: Not
82+
Program structureReused: SafeModules
8383
Program files::
8484
/a/lib/lib.d.ts
8585
/a/b/commonFile1.ts

tests/baselines/reference/tscWatch/programUpdates/can-correctly-update-configured-project-when-set-of-root-files-has-changed-(new-file-in-list-of-files).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ Output::
8080

8181
Program root files: ["/a/b/f1.ts","/a/b/f2.ts"]
8282
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
83-
Program structureReused: Not
83+
Program structureReused: SafeModules
8484
Program files::
8585
/a/lib/lib.d.ts
8686
/a/b/f1.ts

tests/baselines/reference/tscWatch/programUpdates/can-correctly-update-configured-project-when-set-of-root-files-has-changed-(new-file-on-disk).js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ Output::
7979

8080
Program root files: ["/a/b/f1.ts","/a/b/f2.ts"]
8181
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
82-
Program structureReused: Not
82+
Program structureReused: SafeModules
8383
Program files::
8484
/a/lib/lib.d.ts
8585
/a/b/f1.ts

tests/baselines/reference/tscWatch/programUpdates/can-correctly-update-configured-project-when-set-of-root-files-has-changed-through-include.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ Output::
8484

8585
Program root files: ["/user/username/projects/myproject/Project/file1.ts","/user/username/projects/myproject/Project/file2.ts"]
8686
Program options: {"watch":true,"project":"/user/username/projects/myproject/Project","configFilePath":"/user/username/projects/myproject/Project/tsconfig.json"}
87-
Program structureReused: Not
87+
Program structureReused: SafeModules
8888
Program files::
8989
/a/lib/lib.d.ts
9090
/user/username/projects/myproject/Project/file1.ts

tests/baselines/reference/tscWatch/programUpdates/handle-recreated-files-correctly.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ Output::
8888

8989
Program root files: ["/a/b/commonFile1.ts"]
9090
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
91-
Program structureReused: Not
91+
Program structureReused: SafeModules
9292
Program files::
9393
/a/lib/lib.d.ts
9494
/a/b/commonFile1.ts
@@ -133,7 +133,7 @@ Output::
133133

134134
Program root files: ["/a/b/commonFile1.ts","/a/b/commonFile2.ts"]
135135
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
136-
Program structureReused: Not
136+
Program structureReused: SafeModules
137137
Program files::
138138
/a/lib/lib.d.ts
139139
/a/b/commonFile1.ts

tests/baselines/reference/tscWatch/programUpdates/rename-a-module-file-and-rename-back-should-restore-the-states-for-configured-projects.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ Output::
105105

106106
Program root files: ["/a/b/file1.ts","/a/b/moduleFile1.ts"]
107107
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
108-
Program structureReused: Not
108+
Program structureReused: SafeModules
109109
Program files::
110110
/a/lib/lib.d.ts
111111
/a/b/file1.ts
@@ -168,7 +168,7 @@ Output::
168168

169169
Program root files: ["/a/b/file1.ts","/a/b/moduleFile.ts"]
170170
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
171-
Program structureReused: Not
171+
Program structureReused: SafeModules
172172
Program files::
173173
/a/lib/lib.d.ts
174174
/a/b/moduleFile.ts

tests/baselines/reference/tscWatch/programUpdates/should-not-trigger-recompilation-because-of-program-emit/declarationDir-is-specified.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ Output::
210210

211211
Program root files: ["/user/username/projects/myproject/file1.ts","/user/username/projects/myproject/src/file2.ts","/user/username/projects/myproject/src/file3.ts"]
212212
Program options: {"target":1,"module":2,"declaration":true,"strict":true,"esModuleInterop":true,"declarationDir":"/user/username/projects/myproject/decls","skipLibCheck":true,"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject/tsconfig.json","configFilePath":"/user/username/projects/myproject/tsconfig.json"}
213-
Program structureReused: Not
213+
Program structureReused: SafeModules
214214
Program files::
215215
/a/lib/lib.d.ts
216216
/user/username/projects/myproject/file1.ts

tests/baselines/reference/tscWatch/programUpdates/should-not-trigger-recompilation-because-of-program-emit/when-outDir-and-declarationDir-is-specified.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ Output::
210210

211211
Program root files: ["/user/username/projects/myproject/file1.ts","/user/username/projects/myproject/src/file2.ts","/user/username/projects/myproject/src/file3.ts"]
212212
Program options: {"target":1,"module":2,"declaration":true,"outDir":"/user/username/projects/myproject/build","strict":true,"esModuleInterop":true,"declarationDir":"/user/username/projects/myproject/decls","skipLibCheck":true,"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject/tsconfig.json","configFilePath":"/user/username/projects/myproject/tsconfig.json"}
213-
Program structureReused: Not
213+
Program structureReused: SafeModules
214214
Program files::
215215
/a/lib/lib.d.ts
216216
/user/username/projects/myproject/file1.ts

tests/baselines/reference/tscWatch/programUpdates/should-not-trigger-recompilation-because-of-program-emit/when-outDir-is-specified.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ Output::
201201

202202
Program root files: ["/user/username/projects/myproject/file1.ts","/user/username/projects/myproject/src/file2.ts","/user/username/projects/myproject/src/file3.ts"]
203203
Program options: {"target":1,"module":2,"outDir":"/user/username/projects/myproject/build","strict":true,"esModuleInterop":true,"skipLibCheck":true,"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject/tsconfig.json","configFilePath":"/user/username/projects/myproject/tsconfig.json"}
204-
Program structureReused: Not
204+
Program structureReused: SafeModules
205205
Program files::
206206
/a/lib/lib.d.ts
207207
/user/username/projects/myproject/file1.ts

tests/baselines/reference/tscWatch/programUpdates/should-not-trigger-recompilation-because-of-program-emit/with-outFile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ Output::
195195

196196
Program root files: ["/user/username/projects/myproject/file1.ts","/user/username/projects/myproject/src/file2.ts","/user/username/projects/myproject/src/file3.ts"]
197197
Program options: {"target":1,"module":2,"outFile":"/user/username/projects/myproject/build/outFile.js","strict":true,"esModuleInterop":true,"skipLibCheck":true,"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject/tsconfig.json","configFilePath":"/user/username/projects/myproject/tsconfig.json"}
198-
Program structureReused: Not
198+
Program structureReused: SafeModules
199199
Program files::
200200
/a/lib/lib.d.ts
201201
/user/username/projects/myproject/file1.ts

tests/baselines/reference/tscWatch/programUpdates/should-not-trigger-recompilation-because-of-program-emit/without-outDir-or-outFile-is-specified-with-declaration-enabled.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ Output::
209209

210210
Program root files: ["/user/username/projects/myproject/file1.ts","/user/username/projects/myproject/src/file2.ts","/user/username/projects/myproject/src/file3.ts"]
211211
Program options: {"target":1,"module":2,"declaration":true,"strict":true,"esModuleInterop":true,"skipLibCheck":true,"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject/tsconfig.json","configFilePath":"/user/username/projects/myproject/tsconfig.json"}
212-
Program structureReused: Not
212+
Program structureReused: SafeModules
213213
Program files::
214214
/a/lib/lib.d.ts
215215
/user/username/projects/myproject/file1.ts

tests/baselines/reference/tscWatch/programUpdates/should-not-trigger-recompilation-because-of-program-emit/without-outDir-or-outFile-is-specified.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ Output::
201201

202202
Program root files: ["/user/username/projects/myproject/file1.ts","/user/username/projects/myproject/src/file2.ts","/user/username/projects/myproject/src/file3.ts"]
203203
Program options: {"target":1,"module":2,"strict":true,"esModuleInterop":true,"skipLibCheck":true,"forceConsistentCasingInFileNames":true,"watch":true,"project":"/user/username/projects/myproject/tsconfig.json","configFilePath":"/user/username/projects/myproject/tsconfig.json"}
204-
Program structureReused: Not
204+
Program structureReused: SafeModules
205205
Program files::
206206
/a/lib/lib.d.ts
207207
/user/username/projects/myproject/file1.ts

tests/baselines/reference/tscWatch/programUpdates/should-reflect-change-in-config-file.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ Output::
9494

9595
Program root files: ["/a/b/commonFile1.ts"]
9696
Program options: {"watch":true,"project":"/a/b/tsconfig.json","configFilePath":"/a/b/tsconfig.json"}
97-
Program structureReused: Not
97+
Program structureReused: SafeModules
9898
Program files::
9999
/a/lib/lib.d.ts
100100
/a/b/commonFile1.ts

tests/baselines/reference/tscWatch/programUpdates/updates-errors-when-ambient-modules-of-program-changes.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ Output::
102102

103103
Program root files: ["/user/username/projects/myproject/a.ts","/user/username/projects/myproject/b.ts"]
104104
Program options: {"watch":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"}
105-
Program structureReused: Not
105+
Program structureReused: SafeModules
106106
Program files::
107107
/a/lib/lib.d.ts
108108
/user/username/projects/myproject/a.ts
@@ -153,7 +153,7 @@ Output::
153153

154154
Program root files: ["/user/username/projects/myproject/a.ts"]
155155
Program options: {"watch":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"}
156-
Program structureReused: Not
156+
Program structureReused: SafeModules
157157
Program files::
158158
/a/lib/lib.d.ts
159159
/user/username/projects/myproject/a.ts

tests/baselines/reference/tscWatch/programUpdates/watched-files-when-file-is-deleted-and-new-file-is-added-as-part-of-change.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ Output::
8080

8181
Program root files: ["/home/username/project/src/file2.ts"]
8282
Program options: {"watch":true,"project":"/home/username/project/tsconfig.json","configFilePath":"/home/username/project/tsconfig.json"}
83-
Program structureReused: Not
83+
Program structureReused: SafeModules
8484
Program files::
8585
/a/lib/lib.d.ts
8686
/home/username/project/src/file2.ts

tests/baselines/reference/tscWatch/watchEnvironment/watchDirectories/uses-non-recursive-dynamic-polling-when-renaming-file-in-subfolder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ Output::
7575

7676
Program root files: ["/a/username/project/src/file2.ts"]
7777
Program options: {"watch":true,"project":"/a/username/project/tsconfig.json","configFilePath":"/a/username/project/tsconfig.json"}
78-
Program structureReused: Not
78+
Program structureReused: SafeModules
7979
Program files::
8080
/a/lib/lib.d.ts
8181
/a/username/project/src/file2.ts

tests/baselines/reference/tscWatch/watchEnvironment/watchDirectories/uses-non-recursive-watchDirectory-when-renaming-file-in-subfolder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ Output::
8181

8282
Program root files: ["/a/username/project/src/file2.ts"]
8383
Program options: {"watch":true,"project":"/a/username/project/tsconfig.json","configFilePath":"/a/username/project/tsconfig.json"}
84-
Program structureReused: Not
84+
Program structureReused: SafeModules
8585
Program files::
8686
/a/lib/lib.d.ts
8787
/a/username/project/src/file2.ts

tests/baselines/reference/tscWatch/watchEnvironment/watchDirectories/uses-watchFile-when-renaming-file-in-subfolder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ Output::
8181

8282
Program root files: ["/a/username/project/src/file2.ts"]
8383
Program options: {"watch":true,"project":"/a/username/project/tsconfig.json","configFilePath":"/a/username/project/tsconfig.json"}
84-
Program structureReused: Not
84+
Program structureReused: SafeModules
8585
Program files::
8686
/a/lib/lib.d.ts
8787
/a/username/project/src/file2.ts

tests/baselines/reference/tscWatch/watchEnvironment/watchDirectories/with-non-synchronous-watch-directory-renaming-a-file.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ Output::
185185

186186
Program root files: ["/user/username/projects/myproject/src/file1.ts","/user/username/projects/myproject/src/renamed.ts"]
187187
Program options: {"outDir":"/user/username/projects/myproject/dist","watch":true,"project":"/user/username/projects/myproject/tsconfig.json","configFilePath":"/user/username/projects/myproject/tsconfig.json"}
188-
Program structureReused: Not
188+
Program structureReused: SafeModules
189189
Program files::
190190
/a/lib/lib.d.ts
191191
/user/username/projects/myproject/src/file1.ts

tests/baselines/reference/tscWatch/watchEnvironment/watchDirectories/with-non-synchronous-watch-directory-with-outDir-and-declaration-enabled.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ Output::
169169

170170
Program root files: ["/user/username/projects/myproject/src/file1.ts","/user/username/projects/myproject/src/file3.ts"]
171171
Program options: {"outDir":"/user/username/projects/myproject/dist","declaration":true,"watch":true,"project":"/user/username/projects/myproject/tsconfig.json","configFilePath":"/user/username/projects/myproject/tsconfig.json"}
172-
Program structureReused: Not
172+
Program structureReused: SafeModules
173173
Program files::
174174
/a/lib/lib.d.ts
175175
/user/username/projects/myproject/node_modules/file2/index.d.ts

0 commit comments

Comments
 (0)