mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-17 21:06:50 -05:00
Merge pull request #26197 from Microsoft/largeFileEvent
Send event on referencing large file
This commit is contained in:
@@ -13,9 +13,9 @@ namespace ts.textStorage {
|
||||
it("text based storage should be have exactly the same as script version cache", () => {
|
||||
|
||||
const host = projectSystem.createServerHost([f]);
|
||||
|
||||
const ts1 = new server.TextStorage(host, server.asNormalizedPath(f.path));
|
||||
const ts2 = new server.TextStorage(host, server.asNormalizedPath(f.path));
|
||||
// Since script info is not used in these tests, just cheat by passing undefined
|
||||
const ts1 = new server.TextStorage(host, server.asNormalizedPath(f.path), /*initialVersion*/ undefined, /*info*/undefined!);
|
||||
const ts2 = new server.TextStorage(host, server.asNormalizedPath(f.path), /*initialVersion*/ undefined, /*info*/undefined!);
|
||||
|
||||
ts1.useScriptVersionCache_TestOnly();
|
||||
ts2.useText();
|
||||
@@ -48,7 +48,8 @@ namespace ts.textStorage {
|
||||
|
||||
it("should switch to script version cache if necessary", () => {
|
||||
const host = projectSystem.createServerHost([f]);
|
||||
const ts1 = new server.TextStorage(host, server.asNormalizedPath(f.path));
|
||||
// Since script info is not used in these tests, just cheat by passing undefined
|
||||
const ts1 = new server.TextStorage(host, server.asNormalizedPath(f.path), /*initialVersion*/ undefined, /*info*/undefined!);
|
||||
|
||||
ts1.getSnapshot();
|
||||
assert.isTrue(!ts1.hasScriptVersionCache_TestOnly(), "should not have script version cache - 1");
|
||||
|
||||
@@ -2843,7 +2843,7 @@ namespace ts.projectSystem {
|
||||
const session = createSession(host, {
|
||||
canUseEvents: true,
|
||||
eventHandler: e => {
|
||||
if (e.eventName === server.ConfigFileDiagEvent || e.eventName === server.ProjectsUpdatedInBackgroundEvent || e.eventName === server.ProjectInfoTelemetryEvent || e.eventName === server.OpenFileInfoTelemetryEvent) {
|
||||
if (e.eventName === server.ConfigFileDiagEvent || e.eventName === server.ProjectsUpdatedInBackgroundEvent || e.eventName === server.ProjectInfoTelemetryEvent || e.eventName === server.OpenFileInfoTelemetryEvent || e.eventName === server.LargeFileReferencedEvent) {
|
||||
return;
|
||||
}
|
||||
assert.equal(e.eventName, server.ProjectLanguageServiceStateEvent);
|
||||
@@ -9028,6 +9028,27 @@ export const x = 10;`
|
||||
fileSize: server.maxFileSize + 1
|
||||
};
|
||||
|
||||
function createSessionWithEventHandler(host: TestServerHost) {
|
||||
const largeFileReferencedEvents: server.LargeFileReferencedEvent[] = [];
|
||||
const session = createSession(host, {
|
||||
eventHandler: e => {
|
||||
if (e.eventName === server.LargeFileReferencedEvent) {
|
||||
largeFileReferencedEvents.push(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return { session, verifyLargeFileReferencedEvent };
|
||||
|
||||
function verifyLargeFileReferencedEvent() {
|
||||
assert.equal(largeFileReferencedEvents.length, 1);
|
||||
assert.deepEqual(largeFileReferencedEvents, [{
|
||||
eventName: server.LargeFileReferencedEvent,
|
||||
data: { file: largeFile.path, fileSize: largeFile.fileSize, maxFileSize: server.maxFileSize }
|
||||
}]);
|
||||
}
|
||||
}
|
||||
|
||||
it("when large file is included by tsconfig", () => {
|
||||
const file: File = {
|
||||
path: `${projectRoot}/src/file.ts`,
|
||||
@@ -9039,13 +9060,15 @@ export const x = 10;`
|
||||
};
|
||||
const files = [file, largeFile, libFile, tsconfig];
|
||||
const host = createServerHost(files);
|
||||
const service = createProjectService(host);
|
||||
service.openClientFile(file.path);
|
||||
service.checkNumberOfProjects({ configuredProjects: 1 });
|
||||
const { session, verifyLargeFileReferencedEvent } = createSessionWithEventHandler(host);
|
||||
const service = session.getProjectService();
|
||||
openFilesForSession([file], session);
|
||||
checkNumberOfProjects(service, { configuredProjects: 1 });
|
||||
const project = service.configuredProjects.get(tsconfig.path)!;
|
||||
checkProjectActualFiles(project, [file.path, libFile.path, largeFile.path, tsconfig.path]);
|
||||
const info = service.getScriptInfo(largeFile.path)!;
|
||||
assert.equal(info.cacheSourceFile.sourceFile.text, "");
|
||||
verifyLargeFileReferencedEvent();
|
||||
});
|
||||
|
||||
it("when large file is included by module resolution", () => {
|
||||
@@ -9055,13 +9078,15 @@ export const x = 10;`
|
||||
};
|
||||
const files = [file, largeFile, libFile];
|
||||
const host = createServerHost(files);
|
||||
const service = createProjectService(host);
|
||||
service.openClientFile(file.path);
|
||||
service.checkNumberOfProjects({ inferredProjects: 1 });
|
||||
const { session, verifyLargeFileReferencedEvent } = createSessionWithEventHandler(host);
|
||||
const service = session.getProjectService();
|
||||
openFilesForSession([file], session);
|
||||
checkNumberOfProjects(service, { inferredProjects: 1 });
|
||||
const project = service.inferredProjects[0];
|
||||
checkProjectActualFiles(project, [file.path, libFile.path, largeFile.path]);
|
||||
const info = service.getScriptInfo(largeFile.path)!;
|
||||
assert.equal(info.cacheSourceFile.sourceFile.text, "");
|
||||
verifyLargeFileReferencedEvent();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user