Skip to content

Commit 1da6d87

Browse files
authored
ScriptInfo versioning improvements (microsoft#53001)
1 parent 8b87de1 commit 1da6d87

File tree

569 files changed

+18895
-15246
lines changed

Some content is hidden

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

569 files changed

+18895
-15246
lines changed

src/server/editorServices.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ import {
169169
ProjectKind,
170170
ProjectOptions,
171171
ScriptInfo,
172-
ScriptInfoVersion,
173172
ServerHost,
174173
Session,
175174
SetTypings,
@@ -870,7 +869,7 @@ export class ProjectService {
870869
* it does not reset when creating script info again
871870
* (and could have potentially collided with version where contents mismatch)
872871
*/
873-
private readonly filenameToScriptInfoVersion = new Map<string, ScriptInfoVersion>();
872+
private readonly filenameToScriptInfoVersion = new Map<string, number>();
874873
// Set of all '.js' files ever opened.
875874
private readonly allJsFilesForOpenFileTelemetry = new Map<string, true>();
876875

@@ -1623,7 +1622,7 @@ export class ProjectService {
16231622

16241623
private removeProject(project: Project) {
16251624
this.logger.info("`remove Project::");
1626-
project.print(/*writeProjectFileNames*/ true);
1625+
project.print(/*writeProjectFileNames*/ true, /*writeFileExplaination*/ true, /*writeFileVersionAndText*/ false);
16271626

16281627
project.close();
16291628
if (Debug.shouldAssert(AssertionLevel.Normal)) {
@@ -1812,7 +1811,7 @@ export class ProjectService {
18121811

18131812
private deleteScriptInfo(info: ScriptInfo) {
18141813
this.filenameToScriptInfo.delete(info.path);
1815-
this.filenameToScriptInfoVersion.set(info.path, info.getVersion());
1814+
this.filenameToScriptInfoVersion.set(info.path, info.textStorage.version);
18161815
const realpath = info.getRealpathIfDifferent();
18171816
if (realpath) {
18181817
this.realpathToScriptInfos!.remove(realpath, info); // TODO: GH#18217
@@ -3001,7 +3000,7 @@ export class ProjectService {
30013000
// Opening closed script info
30023001
// either it was created just now, or was part of projects but was closed
30033002
this.stopWatchingScriptInfo(info);
3004-
info.open(fileContent!);
3003+
info.open(fileContent);
30053004
if (hasMixedContent) {
30063005
info.registerFileUpdate();
30073006
}
@@ -3075,7 +3074,7 @@ export class ProjectService {
30753074
const documentPositionMapper = getDocumentPositionMapper(
30763075
{ getCanonicalFileName: this.toCanonicalFileName, log: s => this.logger.info(s), getSourceFileLike: f => this.getSourceFileLike(f, projectName, declarationInfo) },
30773076
declarationInfo.fileName,
3078-
declarationInfo.getLineInfo(),
3077+
declarationInfo.textStorage.getLineInfo(),
30793078
readMapFile
30803079
);
30813080
readMapFile = undefined; // Remove ref to project
@@ -4493,5 +4492,5 @@ export function isConfigFile(config: ScriptInfoOrConfig): config is TsConfigSour
44934492
}
44944493

44954494
function printProjectWithoutFileNames(project: Project) {
4496-
project.print(/*writeProjectFileNames*/ false);
4495+
project.print(/*writeProjectFileNames*/ false, /*writeFileExplaination*/ false, /*writeFileVersionAndText*/ false);
44974496
}

src/server/project.ts

+28-9
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ export function countEachFileTypes(infos: ScriptInfo[], includeSizes = false): F
171171
deferred: 0, deferredSize: 0,
172172
};
173173
for (const info of infos) {
174-
const fileSize = includeSizes ? info.getTelemetryFileSize() : 0;
174+
const fileSize = includeSizes ? info.textStorage.getTelemetryFileSize() : 0;
175175
switch (info.scriptKind) {
176176
case ScriptKind.JS:
177177
result.js += 1;
@@ -1461,8 +1461,16 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
14611461
const elapsed = timestamp() - start;
14621462
this.sendPerformanceEvent("UpdateGraph", elapsed);
14631463
this.writeLog(`Finishing updateGraphWorker: Project: ${this.getProjectName()} Version: ${this.getProjectVersion()} structureChanged: ${hasNewProgram}${this.program ? ` structureIsReused:: ${(ts as any).StructureIsReused[this.program.structureIsReused]}` : ""} Elapsed: ${elapsed}ms`);
1464-
if (this.hasAddedorRemovedFiles) {
1465-
this.print(/*writeProjectFileNames*/ true);
1464+
if (this.projectService.logger.isTestLogger) {
1465+
if (this.program !== oldProgram) {
1466+
this.print(/*writeProjectFileNames*/ true, this.hasAddedorRemovedFiles, /*writeFileVersionAndText*/ true);
1467+
}
1468+
else {
1469+
this.writeLog(`Same program as before`);
1470+
}
1471+
}
1472+
else if (this.hasAddedorRemovedFiles) {
1473+
this.print(/*writeProjectFileNames*/ true, /*writeFileExplaination*/ true, /*writeFileVersionAndText*/ false);
14661474
}
14671475
else if (this.program !== oldProgram) {
14681476
this.writeLog(`Different program with same set of files`);
@@ -1589,27 +1597,38 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
15891597
}
15901598

15911599
filesToString(writeProjectFileNames: boolean) {
1600+
return this.filesToStringWorker(writeProjectFileNames, /*writeFileExplaination*/ true, /*writeFileVersionAndText*/ false);
1601+
}
1602+
1603+
/** @internal */
1604+
private filesToStringWorker(writeProjectFileNames: boolean, writeFileExplaination: boolean, writeFileVersionAndText: boolean) {
15921605
if (this.isInitialLoadPending()) return "\tFiles (0) InitialLoadPending\n";
15931606
if (!this.program) return "\tFiles (0) NoProgram\n";
15941607
const sourceFiles = this.program.getSourceFiles();
15951608
let strBuilder = `\tFiles (${sourceFiles.length})\n`;
15961609
if (writeProjectFileNames) {
15971610
for (const file of sourceFiles) {
1598-
strBuilder += `\t${file.fileName}\n`;
1611+
strBuilder += `\t${file.fileName}${writeFileVersionAndText?` ${file.version} ${JSON.stringify(file.text)}` : ""}\n`;
1612+
}
1613+
if (writeFileExplaination) {
1614+
strBuilder += "\n\n";
1615+
explainFiles(this.program, s => strBuilder += `\t${s}\n`);
15991616
}
1600-
strBuilder += "\n\n";
1601-
explainFiles(this.program, s => strBuilder += `\t${s}\n`);
16021617
}
16031618
return strBuilder;
16041619
}
16051620

16061621
/** @internal */
1607-
print(writeProjectFileNames: boolean) {
1622+
print(writeProjectFileNames: boolean, writeFileExplaination: boolean, writeFileVersionAndText: boolean) {
16081623
this.writeLog(`Project '${this.projectName}' (${ProjectKind[this.projectKind]})`);
1609-
this.writeLog(this.filesToString(writeProjectFileNames && this.projectService.logger.hasLevel(LogLevel.verbose)));
1624+
this.writeLog(this.filesToStringWorker(
1625+
writeProjectFileNames && this.projectService.logger.hasLevel(LogLevel.verbose),
1626+
writeFileExplaination && this.projectService.logger.hasLevel(LogLevel.verbose),
1627+
writeFileVersionAndText && this.projectService.logger.hasLevel(LogLevel.verbose),
1628+
));
16101629
this.writeLog("-----------------------------------------------");
16111630
if (this.autoImportProviderHost) {
1612-
this.autoImportProviderHost.print(/*writeProjectFileNames*/ false);
1631+
this.autoImportProviderHost.print(/*writeProjectFileNames*/ false, /*writeFileExplaination*/ false, /*writeFileVersionAndText*/ false);
16131632
}
16141633
}
16151634

0 commit comments

Comments
 (0)