Skip to content

Commit 04fa4b5

Browse files
authored
More logging of Script info state infromation for baselining for future script info updates improvements (#57398)
1 parent 0b044f7 commit 04fa4b5

File tree

153 files changed

+3345
-3023
lines changed

Some content is hidden

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

153 files changed

+3345
-3023
lines changed

src/harness/projectServiceStateLogger.ts

Lines changed: 93 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
compareStringsCaseSensitive,
44
Debug,
55
identity,
6+
isString,
67
noop,
78
} from "./_namespaces/ts";
89
import {
@@ -15,6 +16,8 @@ import {
1516
ProjectKind,
1617
ProjectService,
1718
ScriptInfo,
19+
SourceMapFileWatcher,
20+
TextStorage,
1821
} from "./_namespaces/ts.server";
1922
import {
2023
LoggerWithInMemoryLogs,
@@ -24,18 +27,26 @@ interface ProjectData {
2427
projectStateVersion: Project["projectStateVersion"];
2528
projectProgramVersion: Project["projectProgramVersion"];
2629
dirty: Project["dirty"];
27-
isClosed: boolean;
28-
isOrphan: boolean;
30+
isClosed: ReturnType<Project["isClosed"]>;
31+
isOrphan: ReturnType<Project["isOrphan"]>;
2932
noOpenRef: boolean;
3033
autoImportProviderHost: Project["autoImportProviderHost"];
3134
noDtsResolutionProject: Project["noDtsResolutionProject"];
3235
originalConfiguredProjects: Project["originalConfiguredProjects"];
3336
}
3437

38+
interface SourceMapFileWatcherData {
39+
sourceInfos: SourceMapFileWatcher["sourceInfos"];
40+
}
41+
3542
interface ScriptInfoData {
36-
open: boolean;
37-
version: string;
38-
pendingReloadFromDisk: boolean;
43+
open: ReturnType<ScriptInfo["isScriptOpen"]>;
44+
version: ReturnType<TextStorage["getVersion"]>;
45+
pendingReloadFromDisk: TextStorage["pendingReloadFromDisk"];
46+
sourceMapFilePath: Exclude<ScriptInfo["sourceMapFilePath"], SourceMapFileWatcher> | SourceMapFileWatcherData | undefined;
47+
declarationInfoPath: ScriptInfo["declarationInfoPath"];
48+
sourceInfos: ScriptInfo["sourceInfos"];
49+
documentPositionMapper: ScriptInfo["documentPositionMapper"];
3950
containingProjects: Set<Project>;
4051
}
4152

@@ -46,7 +57,8 @@ enum Diff {
4657
Deleted = " *deleted*",
4758
}
4859

49-
type StateItemLog = [string, ...string[][]];
60+
type StatePropertyLog = string | string[];
61+
type StateItemLog = [string, StatePropertyLog[]];
5062

5163
export function patchServiceForStateBaseline(service: ProjectService) {
5264
if (!service.logger.isTestLogger || !service.logger.hasLevel(LogLevel.verbose)) return;
@@ -69,9 +81,9 @@ export function patchServiceForStateBaseline(service: ProjectService) {
6981
if (!logs) return;
7082
logger.log(title);
7183
logs.sort((a, b) => compareStringsCaseSensitive(a[0], b[0]))
72-
.forEach(([title, ...propertyLogs]) => {
84+
.forEach(([title, propertyLogs]) => {
7385
logger.log(title);
74-
propertyLogs.forEach(p => p.forEach(s => logger.log(s)));
86+
propertyLogs.forEach(p => isString(p) ? logger.log(p) : p.forEach(s => logger.log(s)));
7587
});
7688
logger.log("");
7789
}
@@ -99,11 +111,11 @@ export function patchServiceForStateBaseline(service: ProjectService) {
99111
logs,
100112
`${project.projectName} (${ProjectKind[project.projectKind]})`,
101113
PrintPropertyWhen.DefinedOrChangedOrNew,
114+
data?.originalConfiguredProjects,
102115
"originalConfiguredProjects",
103-
projectPropertyLogs,
104-
projectDiff,
105116
project.originalConfiguredProjects,
106-
data?.originalConfiguredProjects,
117+
projectDiff,
118+
projectPropertyLogs,
107119
identity,
108120
);
109121
},
@@ -132,6 +144,10 @@ export function patchServiceForStateBaseline(service: ProjectService) {
132144
infoDiff = printProperty(PrintPropertyWhen.Changed, data, "open", isOpen, infoDiff, infoPropertyLogs);
133145
infoDiff = printProperty(PrintPropertyWhen.Always, data, "version", info.textStorage.getVersion(), infoDiff, infoPropertyLogs);
134146
infoDiff = printProperty(PrintPropertyWhen.TruthyOrChangedOrNew, data, "pendingReloadFromDisk", info.textStorage.pendingReloadFromDisk, infoDiff, infoPropertyLogs);
147+
infoDiff = printScriptInfoSourceMapFilePath(data, info, infoDiff, infoPropertyLogs);
148+
infoDiff = printProperty(PrintPropertyWhen.DefinedOrChangedOrNew, data, "declarationInfoPath", info.declarationInfoPath, infoDiff, infoPropertyLogs);
149+
infoDiff = printSetPropertyValueWorker(PrintPropertyWhen.DefinedOrChangedOrNew, data?.sourceInfos, "sourceInfos", info.sourceInfos, infoDiff, infoPropertyLogs, identity);
150+
infoDiff = printProperty(PrintPropertyWhen.DefinedOrChangedOrNew, data, "documentPositionMapper", info.documentPositionMapper, infoDiff, infoPropertyLogs, info.documentPositionMapper ? "DocumentPositionMapper" : undefined);
135151
let defaultProject: Project | undefined;
136152
try {
137153
if (isOpen) defaultProject = info.getDefaultProject();
@@ -143,18 +159,24 @@ export function patchServiceForStateBaseline(service: ProjectService) {
143159
logs,
144160
`${info.fileName}${info.isDynamic ? " (Dynamic)" : ""}${isOpen ? " (Open)" : ""}`,
145161
PrintPropertyWhen.Always,
162+
data?.containingProjects,
146163
"containingProjects",
147-
infoPropertyLogs,
148-
infoDiff,
149164
new Set(info.containingProjects),
150-
data?.containingProjects,
165+
infoDiff,
166+
infoPropertyLogs,
151167
project => `${project.projectName}${defaultProject === project ? " *default*" : ""}`,
152168
);
153169
},
154170
info => ({
155171
open: info.isScriptOpen(),
156172
version: info.textStorage.getVersion(),
157173
pendingReloadFromDisk: info.textStorage.pendingReloadFromDisk,
174+
sourceMapFilePath: info.sourceMapFilePath && !isString(info.sourceMapFilePath) ?
175+
{ original: info.sourceMapFilePath, sourceInfos: new Set(info.sourceMapFilePath.sourceInfos) } :
176+
info.sourceMapFilePath,
177+
declarationInfoPath: info.declarationInfoPath,
178+
sourceInfos: info.sourceInfos && new Set(info.sourceInfos),
179+
documentPositionMapper: info.documentPositionMapper,
158180
containingProjects: new Set(info.containingProjects),
159181
}),
160182
);
@@ -207,40 +229,40 @@ export function patchServiceForStateBaseline(service: ProjectService) {
207229
key: Key,
208230
value: Data[Key],
209231
dataDiff: Diff,
210-
propertyLogs: string[],
232+
propertyLogs: StatePropertyLog[],
211233
stringValue?: Data[Key] | string,
212234
) {
213235
return printPropertyWorker(
214236
printWhen,
215-
`${key}: ${stringValue === undefined ? value : stringValue}`,
216-
propertyLogs,
217-
dataDiff,
237+
value,
218238
!!data && data[key] !== value,
219239
Diff.Change,
220-
value,
240+
dataDiff,
241+
propertyLogs,
242+
`${key}: ${stringValue === undefined ? value : stringValue}`,
221243
);
222244
}
223245

224246
function printSetPropertyValueWorker<T>(
225247
printWhen: PrintPropertyWhen.Always | PrintPropertyWhen.DefinedOrChangedOrNew,
248+
dataValue: Set<T> | undefined,
226249
propertyName: string,
227-
propertyLogs: string[],
228-
dataDiff: Diff,
229250
propertyValue: Set<T> | undefined,
230-
dataValue: Set<T> | undefined,
251+
dataDiff: Diff,
252+
propertyLogs: StatePropertyLog[],
231253
toStringPropertyValue: (v: T) => string,
232254
) {
233255
const setPropertyLogs = [] as string[];
234256
let setPropertyDiff = Diff.None;
235257
propertyValue?.forEach(p =>
236258
setPropertyDiff = printPropertyWorker(
237259
PrintPropertyWhen.Always,
238-
` ${toStringPropertyValue(p)}`,
239-
setPropertyLogs,
240-
setPropertyDiff,
260+
p,
241261
dataDiff !== Diff.New && !dataValue?.has(p),
242262
Diff.New,
243-
p,
263+
setPropertyDiff,
264+
setPropertyLogs,
265+
` ${toStringPropertyValue(p)}`,
244266
)
245267
);
246268
dataValue?.forEach(p => {
@@ -250,24 +272,25 @@ export function patchServiceForStateBaseline(service: ProjectService) {
250272
});
251273
dataDiff = printPropertyWorker(
252274
printWhen,
253-
`${propertyName}: ${propertyValue?.size || 0}`,
254-
propertyLogs,
255-
dataDiff,
275+
propertyValue,
256276
!!setPropertyDiff,
257277
Diff.Change,
258-
propertyValue,
278+
dataDiff,
279+
propertyLogs,
280+
`${propertyName}: ${propertyValue?.size || 0}`,
259281
);
260-
return { dataDiff, setPropertyLogs };
282+
propertyLogs.push(setPropertyLogs);
283+
return dataDiff;
261284
}
262285

263286
function printPropertyWorker(
264287
printWhen: PrintPropertyWhen,
265-
stringValue: string,
266-
propertyLogs: string[],
267-
dataDiff: Diff,
288+
value: any,
268289
propertyChanged: boolean,
269290
propertyChangeDiff: Diff.Change | Diff.New,
270-
value: any,
291+
dataDiff: Diff,
292+
propertyLogs: StatePropertyLog[],
293+
stringValue: string,
271294
) {
272295
const propertyDiff = propertyChanged ? propertyChangeDiff : Diff.None;
273296
const result = !dataDiff && propertyDiff ? propertyChangeDiff : dataDiff;
@@ -294,27 +317,52 @@ export function patchServiceForStateBaseline(service: ProjectService) {
294317
logs: StateItemLog[],
295318
header: string,
296319
printWhen: PrintPropertyWhen.Always | PrintPropertyWhen.DefinedOrChangedOrNew,
320+
dataValue: Set<T> | undefined,
297321
propertyName: string,
298-
propertyLogs: string[],
299-
dataDiff: Diff,
300322
propertyValue: Set<T> | undefined,
301-
dataValue: Set<T> | undefined,
323+
dataDiff: Diff,
324+
propertyLogs: StatePropertyLog[],
302325
toStringPropertyValue: (v: T) => string,
303326
) {
304-
const result = printSetPropertyValueWorker(
327+
dataDiff = printSetPropertyValueWorker(
305328
printWhen,
329+
dataValue,
306330
propertyName,
307-
propertyLogs,
308-
dataDiff,
309331
propertyValue,
310-
dataValue,
332+
dataDiff,
333+
propertyLogs,
311334
toStringPropertyValue,
312335
);
313336
logs.push([
314-
`${header}${result.dataDiff}`,
337+
`${header}${dataDiff}`,
315338
propertyLogs,
316-
result.setPropertyLogs,
317339
]);
318-
return result.dataDiff;
340+
return dataDiff;
341+
}
342+
343+
function printScriptInfoSourceMapFilePath(
344+
data: ScriptInfoData | undefined,
345+
info: ScriptInfo,
346+
infoDiff: Diff,
347+
infoPropertyLogs: StatePropertyLog[],
348+
) {
349+
return !info.sourceMapFilePath || isString(info.sourceMapFilePath) ?
350+
printProperty(
351+
PrintPropertyWhen.DefinedOrChangedOrNew,
352+
data,
353+
"sourceMapFilePath",
354+
info.sourceMapFilePath,
355+
infoDiff,
356+
infoPropertyLogs,
357+
) :
358+
printSetPropertyValueWorker(
359+
PrintPropertyWhen.DefinedOrChangedOrNew,
360+
data?.sourceMapFilePath && !isString(data?.sourceMapFilePath) ? data.sourceMapFilePath.sourceInfos : undefined,
361+
"sourceMapFilePath sourceInfos",
362+
info.sourceMapFilePath.sourceInfos,
363+
infoDiff,
364+
infoPropertyLogs,
365+
identity,
366+
);
319367
}
320368
}

0 commit comments

Comments
 (0)