Skip to content

Commit c3ff266

Browse files
authored
Print original projects in baseline diff as they impact life time of the projects (#57315)
1 parent 763b5eb commit c3ff266

File tree

79 files changed

+1270
-77
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+1270
-77
lines changed

src/harness/projectServiceStateLogger.ts

+106-51
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
arrayFrom,
33
compareStringsCaseSensitive,
44
Debug,
5+
identity,
56
noop,
67
} from "./_namespaces/ts";
78
import {
@@ -22,6 +23,7 @@ interface ProjectData {
2223
projectProgramVersion: Project["projectProgramVersion"];
2324
autoImportProviderHost: Project["autoImportProviderHost"];
2425
noDtsResolutionProject: Project["noDtsResolutionProject"];
26+
originalConfiguredProjects: Project["originalConfiguredProjects"];
2527
}
2628

2729
interface ScriptInfoData {
@@ -38,20 +40,14 @@ enum Diff {
3840
Deleted = " *deleted*",
3941
}
4042

41-
type StateItemLog = [string, string[], string[]?];
43+
type StateItemLog = [string, ...string[][]];
4244

4345
export function patchServiceForStateBaseline(service: ProjectService) {
4446
if (!service.logger.isTestLogger || !service.logger.hasLevel(LogLevel.verbose)) return;
4547
if (service.baseline !== noop) return; // Already patched
4648

4749
const projects = new Map<Project, ProjectData>();
4850
const scriptInfos = new Map<ScriptInfo, ScriptInfoData>();
49-
const allPropertiesOfProjectData: (keyof ProjectData & keyof Project)[] = [
50-
"projectStateVersion",
51-
"projectProgramVersion",
52-
"autoImportProviderHost",
53-
"noDtsResolutionProject",
54-
];
5551
const logger = service.logger as LoggerWithInMemoryLogs;
5652
service.baseline = title => {
5753
const projectLogs = baselineProjects();
@@ -67,10 +63,9 @@ export function patchServiceForStateBaseline(service: ProjectService) {
6763
if (!logs) return;
6864
logger.log(title);
6965
logs.sort((a, b) => compareStringsCaseSensitive(a[0], b[0]))
70-
.forEach(([title, propertyLogs, additionalPropertyLogs]) => {
66+
.forEach(([title, ...propertyLogs]) => {
7167
logger.log(title);
72-
propertyLogs.forEach(s => logger.log(s));
73-
additionalPropertyLogs?.forEach(s => logger.log(s));
68+
propertyLogs.forEach(p => p.forEach(s => logger.log(s)));
7469
});
7570
logger.log("");
7671
}
@@ -86,22 +81,28 @@ export function patchServiceForStateBaseline(service: ProjectService) {
8681
if (project.noDtsResolutionProject) auxiliaryProjects.push(project.noDtsResolutionProject);
8782
let projectDiff = newOrDeleted(project, projects, data);
8883
const projectPropertyLogs = [] as string[];
89-
allPropertiesOfProjectData.forEach(key => {
90-
let value: Project[typeof key] | string = project[key];
91-
if (key === "autoImportProviderHost" || key === "noDtsResolutionProject") {
92-
if (project[key]) value = (project[key] as Project).projectName;
93-
else if (project[key] === undefined && data?.[key] === undefined) return;
94-
}
95-
projectDiff = printProperty(PrintPropertyWhen.Always, data, key, project[key], projectDiff, projectPropertyLogs, value);
96-
});
97-
logs.push([`${project.projectName} (${ProjectKind[project.projectKind]})${projectDiff}`, projectPropertyLogs]);
98-
return projectDiff;
84+
projectDiff = printProperty(PrintPropertyWhen.Always, data, "projectStateVersion", project.projectStateVersion, projectDiff, projectPropertyLogs);
85+
projectDiff = printProperty(PrintPropertyWhen.Always, data, "projectProgramVersion", project.projectProgramVersion, projectDiff, projectPropertyLogs);
86+
projectDiff = printProperty(PrintPropertyWhen.DefinedOrChangedOrNew, data, "autoImportProviderHost", project.autoImportProviderHost, projectDiff, projectPropertyLogs, project.autoImportProviderHost ? project.autoImportProviderHost.projectName : project.autoImportProviderHost);
87+
projectDiff = printProperty(PrintPropertyWhen.DefinedOrChangedOrNew, data, "noDtsResolutionProject", project.noDtsResolutionProject, projectDiff, projectPropertyLogs, project.noDtsResolutionProject ? project.noDtsResolutionProject.projectName : project.noDtsResolutionProject);
88+
return printSetPropertyAndCreateStatementLog(
89+
logs,
90+
`${project.projectName} (${ProjectKind[project.projectKind]})`,
91+
PrintPropertyWhen.DefinedOrChangedOrNew,
92+
"originalConfiguredProjects",
93+
projectPropertyLogs,
94+
projectDiff,
95+
project.originalConfiguredProjects,
96+
data?.originalConfiguredProjects,
97+
identity,
98+
);
9999
},
100100
project => ({
101101
projectStateVersion: project.projectStateVersion,
102102
projectProgramVersion: project.projectProgramVersion,
103103
autoImportProviderHost: project.autoImportProviderHost,
104104
noDtsResolutionProject: project.noDtsResolutionProject,
105+
originalConfiguredProjects: project.originalConfiguredProjects && new Set(project.originalConfiguredProjects),
105106
}),
106107
);
107108
}
@@ -117,41 +118,24 @@ export function patchServiceForStateBaseline(service: ProjectService) {
117118
infoDiff = printProperty(PrintPropertyWhen.Changed, data, "open", isOpen, infoDiff, infoPropertyLogs);
118119
infoDiff = printProperty(PrintPropertyWhen.Always, data, "version", info.textStorage.getVersion(), infoDiff, infoPropertyLogs);
119120
infoDiff = printProperty(PrintPropertyWhen.TruthyOrChangedOrNew, data, "pendingReloadFromDisk", info.textStorage.pendingReloadFromDisk, infoDiff, infoPropertyLogs);
120-
const containingProjectsLogs = [] as string[];
121-
let containingProjectsDiff = Diff.None;
122-
const defaultProject = isOpen && info.containingProjects.length ? info.getDefaultProject() : undefined;
123-
info.containingProjects.forEach(project =>
124-
containingProjectsDiff = printPropertyWorker(
125-
PrintPropertyWhen.Always,
126-
` ${project.projectName}${defaultProject === project ? " *default*" : ""}`,
127-
containingProjectsLogs,
128-
containingProjectsDiff,
129-
!!data && !data.containingProjects.has(project),
130-
Diff.New,
131-
project,
132-
)
133-
);
134-
const infoProjects = new Set(info.containingProjects);
135-
data?.containingProjects.forEach(project => {
136-
if (infoProjects.has(project)) return;
137-
containingProjectsDiff = Diff.Change;
138-
containingProjectsLogs.push(` ${project.projectName}${Diff.Deleted}`);
139-
});
140-
infoDiff = printPropertyWorker(
121+
let defaultProject: Project | undefined;
122+
try {
123+
if (isOpen) defaultProject = info.getDefaultProject();
124+
}
125+
catch (e) {
126+
Debug.assert(e.message === "No Project.");
127+
}
128+
return printSetPropertyAndCreateStatementLog(
129+
logs,
130+
`${info.fileName}${isOpen ? " (Open)" : ""}`,
141131
PrintPropertyWhen.Always,
142-
`containingProjects: ${info.containingProjects.length}`,
132+
"containingProjects",
143133
infoPropertyLogs,
144134
infoDiff,
145-
!!containingProjectsDiff,
146-
Diff.Change,
147-
info.containingProjects,
135+
new Set(info.containingProjects),
136+
data?.containingProjects,
137+
project => `${project.projectName}${defaultProject === project ? " *default*" : ""}`,
148138
);
149-
logs.push([
150-
`${info.fileName}${isOpen ? " (Open)" : ""}${infoDiff}`,
151-
infoPropertyLogs,
152-
containingProjectsLogs,
153-
]);
154-
return infoDiff;
155139
},
156140
info => ({
157141
open: info.isScriptOpen(),
@@ -201,6 +185,7 @@ export function patchServiceForStateBaseline(service: ProjectService) {
201185
Always,
202186
TruthyOrChangedOrNew,
203187
Changed,
188+
DefinedOrChangedOrNew,
204189
}
205190
function printProperty<Data, Key extends keyof Data & string>(
206191
printWhen: PrintPropertyWhen,
@@ -222,6 +207,45 @@ export function patchServiceForStateBaseline(service: ProjectService) {
222207
);
223208
}
224209

210+
function printSetPropertyValueWorker<T>(
211+
printWhen: PrintPropertyWhen.Always | PrintPropertyWhen.DefinedOrChangedOrNew,
212+
propertyName: string,
213+
propertyLogs: string[],
214+
dataDiff: Diff,
215+
propertyValue: Set<T> | undefined,
216+
dataValue: Set<T> | undefined,
217+
toStringPropertyValue: (v: T) => string,
218+
) {
219+
const setPropertyLogs = [] as string[];
220+
let setPropertyDiff = Diff.None;
221+
propertyValue?.forEach(p =>
222+
setPropertyDiff = printPropertyWorker(
223+
PrintPropertyWhen.Always,
224+
` ${toStringPropertyValue(p)}`,
225+
setPropertyLogs,
226+
setPropertyDiff,
227+
dataDiff !== Diff.New && !dataValue?.has(p),
228+
Diff.New,
229+
p,
230+
)
231+
);
232+
dataValue?.forEach(p => {
233+
if (propertyValue?.has(p)) return;
234+
setPropertyDiff = Diff.Change;
235+
setPropertyLogs.push(` ${toStringPropertyValue(p)}${Diff.Deleted}`);
236+
});
237+
dataDiff = printPropertyWorker(
238+
printWhen,
239+
`${propertyName}: ${propertyValue?.size || 0}`,
240+
propertyLogs,
241+
dataDiff,
242+
!!setPropertyDiff,
243+
Diff.Change,
244+
propertyValue,
245+
);
246+
return { dataDiff, setPropertyLogs };
247+
}
248+
225249
function printPropertyWorker(
226250
printWhen: PrintPropertyWhen,
227251
stringValue: string,
@@ -242,10 +266,41 @@ export function patchServiceForStateBaseline(service: ProjectService) {
242266
break;
243267
case PrintPropertyWhen.Always:
244268
break;
269+
case PrintPropertyWhen.DefinedOrChangedOrNew:
270+
if (value === undefined && !propertyDiff) return result;
271+
break;
245272
default:
246273
Debug.assertNever(printWhen);
247274
}
248275
propertyLogs.push(` ${stringValue}${propertyDiff}`);
249276
return result;
250277
}
278+
279+
function printSetPropertyAndCreateStatementLog<T>(
280+
logs: StateItemLog[],
281+
header: string,
282+
printWhen: PrintPropertyWhen.Always | PrintPropertyWhen.DefinedOrChangedOrNew,
283+
propertyName: string,
284+
propertyLogs: string[],
285+
dataDiff: Diff,
286+
propertyValue: Set<T> | undefined,
287+
dataValue: Set<T> | undefined,
288+
toStringPropertyValue: (v: T) => string,
289+
) {
290+
const result = printSetPropertyValueWorker(
291+
printWhen,
292+
propertyName,
293+
propertyLogs,
294+
dataDiff,
295+
propertyValue,
296+
dataValue,
297+
toStringPropertyValue,
298+
);
299+
logs.push([
300+
`${header}${result.dataDiff}`,
301+
propertyLogs,
302+
result.setPropertyLogs,
303+
]);
304+
return result.dataDiff;
305+
}
251306
}

tests/baselines/reference/tsserver/autoImportProvider/Does-not-create-auto-import-providers-upon-opening-projects-for-find-all-references.js

+8
Original file line numberDiff line numberDiff line change
@@ -644,13 +644,21 @@ Projects::
644644
/packages/a/tsconfig.json (Configured) *new*
645645
projectStateVersion: 1
646646
projectProgramVersion: 1
647+
originalConfiguredProjects: 3
648+
/packages/b/tsconfig.json
649+
/tsconfig.json
650+
/packages/a/tsconfig.json
647651
/packages/b/tsconfig.json (Configured)
648652
projectStateVersion: 1
649653
projectProgramVersion: 1
650654
autoImportProviderHost: /dev/null/autoImportProviderProject1*
651655
/tsconfig.json (Configured) *changed*
652656
projectStateVersion: 1
653657
projectProgramVersion: 1 *changed*
658+
originalConfiguredProjects: 3 *changed*
659+
/packages/b/tsconfig.json *new*
660+
/tsconfig.json *new*
661+
/packages/a/tsconfig.json *new*
654662

655663
ScriptInfos::
656664
/node_modules/@angular/forms/forms.d.ts

tests/baselines/reference/tsserver/declarationFileMaps/findAllReferences-starting-at-definition.js

+14
Original file line numberDiff line numberDiff line change
@@ -1030,6 +1030,16 @@ FsWatchesRecursive::
10301030
/a:
10311031
{}
10321032

1033+
Projects::
1034+
/a/tsconfig.json (Configured)
1035+
projectStateVersion: 1
1036+
projectProgramVersion: 1
1037+
/dev/null/inferredProject1* (Inferred) *changed*
1038+
projectStateVersion: 1
1039+
projectProgramVersion: 1
1040+
originalConfiguredProjects: 1 *changed*
1041+
/a/tsconfig.json *new*
1042+
10331043
ScriptInfos::
10341044
/a/a.ts (Open)
10351045
version: SVC-2-0
@@ -1107,6 +1117,8 @@ Projects::
11071117
/dev/null/inferredProject1* (Inferred) *changed*
11081118
projectStateVersion: 2 *changed*
11091119
projectProgramVersion: 1
1120+
originalConfiguredProjects: 1
1121+
/a/tsconfig.json
11101122

11111123
ScriptInfos::
11121124
/a/a.ts (Open)
@@ -1222,6 +1234,8 @@ Projects::
12221234
/dev/null/inferredProject1* (Inferred) *deleted*
12231235
projectStateVersion: 2
12241236
projectProgramVersion: 1
1237+
originalConfiguredProjects: 1
1238+
/a/tsconfig.json
12251239
/dev/null/inferredProject2* (Inferred) *new*
12261240
projectStateVersion: 1
12271241
projectProgramVersion: 1

tests/baselines/reference/tsserver/declarationFileMaps/findAllReferences.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -902,9 +902,11 @@ Projects::
902902
/a/tsconfig.json (Configured) *new*
903903
projectStateVersion: 1
904904
projectProgramVersion: 1
905-
/dev/null/inferredProject1* (Inferred)
905+
/dev/null/inferredProject1* (Inferred) *changed*
906906
projectStateVersion: 1
907907
projectProgramVersion: 1
908+
originalConfiguredProjects: 1 *changed*
909+
/a/tsconfig.json *new*
908910

909911
ScriptInfos::
910912
/a/a.ts *new*
@@ -983,6 +985,8 @@ Projects::
983985
/dev/null/inferredProject1* (Inferred) *changed*
984986
projectStateVersion: 2 *changed*
985987
projectProgramVersion: 1
988+
originalConfiguredProjects: 1
989+
/a/tsconfig.json
986990

987991
ScriptInfos::
988992
/a/a.ts
@@ -1109,6 +1113,8 @@ Projects::
11091113
/dev/null/inferredProject1* (Inferred) *deleted*
11101114
projectStateVersion: 2
11111115
projectProgramVersion: 1
1116+
originalConfiguredProjects: 1
1117+
/a/tsconfig.json
11121118
/dev/null/inferredProject2* (Inferred) *new*
11131119
projectStateVersion: 1
11141120
projectProgramVersion: 1

tests/baselines/reference/tsserver/declarationFileMaps/findAllReferencesFull-definition-is-in-mapped-file.js

+11
Original file line numberDiff line numberDiff line change
@@ -627,3 +627,14 @@ Info seq [hh:mm:ss:mss] response:
627627
"responseRequired": true
628628
}
629629
After request
630+
631+
Projects::
632+
/a/tsconfig.json (Configured)
633+
projectStateVersion: 1
634+
projectProgramVersion: 1
635+
/b/tsconfig.json (Configured) *changed*
636+
projectStateVersion: 1
637+
projectProgramVersion: 1
638+
originalConfiguredProjects: 2 *changed*
639+
/a/tsconfig.json *new*
640+
/b/tsconfig.json *new*

tests/baselines/reference/tsserver/declarationFileMaps/findAllReferencesFull.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -936,9 +936,11 @@ Projects::
936936
/a/tsconfig.json (Configured) *new*
937937
projectStateVersion: 1
938938
projectProgramVersion: 1
939-
/dev/null/inferredProject1* (Inferred)
939+
/dev/null/inferredProject1* (Inferred) *changed*
940940
projectStateVersion: 1
941941
projectProgramVersion: 1
942+
originalConfiguredProjects: 1 *changed*
943+
/a/tsconfig.json *new*
942944

943945
ScriptInfos::
944946
/a/a.ts *new*
@@ -1017,6 +1019,8 @@ Projects::
10171019
/dev/null/inferredProject1* (Inferred) *changed*
10181020
projectStateVersion: 2 *changed*
10191021
projectProgramVersion: 1
1022+
originalConfiguredProjects: 1
1023+
/a/tsconfig.json
10201024

10211025
ScriptInfos::
10221026
/a/a.ts
@@ -1143,6 +1147,8 @@ Projects::
11431147
/dev/null/inferredProject1* (Inferred) *deleted*
11441148
projectStateVersion: 2
11451149
projectProgramVersion: 1
1150+
originalConfiguredProjects: 1
1151+
/a/tsconfig.json
11461152
/dev/null/inferredProject2* (Inferred) *new*
11471153
projectStateVersion: 1
11481154
projectProgramVersion: 1

0 commit comments

Comments
 (0)