Skip to content

Commit 7fb3123

Browse files
authored
Merge pull request #24298 from Microsoft/noErrOnBackgroundUpdate
Add noGetErrOnBackgroundUpdate session option to not queue diagnostics check for open files
2 parents a5029e3 + f1acbc9 commit 7fb3123

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed

src/harness/unittests/tsserverProjectSystem.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7445,10 +7445,17 @@ namespace ts.projectSystem {
74457445
});
74467446

74477447
describe("when event handler is not set but session is created with canUseEvents = true", () => {
7448-
verifyProjectsUpdatedInBackgroundEvent(createSessionThatUsesEvents);
7448+
describe("without noGetErrOnBackgroundUpdate, diagnostics for open files are queued", () => {
7449+
verifyProjectsUpdatedInBackgroundEvent(createSessionThatUsesEvents);
7450+
});
7451+
7452+
describe("with noGetErrOnBackgroundUpdate, diagnostics for open file are not queued", () => {
7453+
verifyProjectsUpdatedInBackgroundEvent(host => createSessionThatUsesEvents(host, /*noGetErrOnBackgroundUpdate*/ true));
7454+
});
74497455

7450-
function createSessionThatUsesEvents(host: TestServerHost): ProjectsUpdatedInBackgroundEventVerifier {
7451-
const session = createSession(host, { canUseEvents: true });
7456+
7457+
function createSessionThatUsesEvents(host: TestServerHost, noGetErrOnBackgroundUpdate?: boolean): ProjectsUpdatedInBackgroundEventVerifier {
7458+
const session = createSession(host, { canUseEvents: true, noGetErrOnBackgroundUpdate });
74527459

74537460
return {
74547461
session,
@@ -7480,6 +7487,10 @@ namespace ts.projectSystem {
74807487

74817488
// Verified the events, reset them
74827489
session.clearMessages();
7490+
7491+
if (events.length) {
7492+
host.checkTimeoutQueueLength(noGetErrOnBackgroundUpdate ? 0 : 1); // Error checking queued only if not noGetErrOnBackgroundUpdate
7493+
}
74837494
}
74847495
}
74857496
});

src/server/server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@ namespace ts.server {
505505
canUseEvents: true,
506506
suppressDiagnosticEvents,
507507
syntaxOnly,
508+
noGetErrOnBackgroundUpdate,
508509
globalPlugins,
509510
pluginProbeLocations,
510511
allowLocalPluginLoads,
@@ -939,6 +940,7 @@ namespace ts.server {
939940
const suppressDiagnosticEvents = hasArgument("--suppressDiagnosticEvents");
940941
const syntaxOnly = hasArgument("--syntaxOnly");
941942
const telemetryEnabled = hasArgument(Arguments.EnableTelemetry);
943+
const noGetErrOnBackgroundUpdate = hasArgument("--noGetErrOnBackgroundUpdate");
942944

943945
logger.info(`Starting TS Server`);
944946
logger.info(`Version: ${version}`);

src/server/session.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ namespace ts.server {
295295
suppressDiagnosticEvents?: boolean;
296296
syntaxOnly?: boolean;
297297
throttleWaitMilliseconds?: number;
298+
noGetErrOnBackgroundUpdate?: boolean;
298299

299300
globalPlugins?: ReadonlyArray<string>;
300301
pluginProbeLocations?: ReadonlyArray<string>;
@@ -319,6 +320,7 @@ namespace ts.server {
319320
protected canUseEvents: boolean;
320321
private suppressDiagnosticEvents?: boolean;
321322
private eventHandler: ProjectServiceEventHandler;
323+
private readonly noGetErrOnBackgroundUpdate?: boolean;
322324

323325
constructor(opts: SessionOptions) {
324326
this.host = opts.host;
@@ -329,6 +331,7 @@ namespace ts.server {
329331
this.logger = opts.logger;
330332
this.canUseEvents = opts.canUseEvents;
331333
this.suppressDiagnosticEvents = opts.suppressDiagnosticEvents;
334+
this.noGetErrOnBackgroundUpdate = opts.noGetErrOnBackgroundUpdate;
332335

333336
const { throttleWaitMilliseconds } = opts;
334337

@@ -404,7 +407,7 @@ namespace ts.server {
404407
private projectsUpdatedInBackgroundEvent(openFiles: string[]): void {
405408
this.projectService.logger.info(`got projects updated in background, updating diagnostics for ${openFiles}`);
406409
if (openFiles.length) {
407-
if (!this.suppressDiagnosticEvents) {
410+
if (!this.suppressDiagnosticEvents && !this.noGetErrOnBackgroundUpdate) {
408411
const checkList = this.createCheckList(openFiles);
409412

410413
// For now only queue error checking for open files. We can change this to include non open files as well

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8391,6 +8391,7 @@ declare namespace ts.server {
83918391
suppressDiagnosticEvents?: boolean;
83928392
syntaxOnly?: boolean;
83938393
throttleWaitMilliseconds?: number;
8394+
noGetErrOnBackgroundUpdate?: boolean;
83948395
globalPlugins?: ReadonlyArray<string>;
83958396
pluginProbeLocations?: ReadonlyArray<string>;
83968397
allowLocalPluginLoads?: boolean;
@@ -8410,6 +8411,7 @@ declare namespace ts.server {
84108411
protected canUseEvents: boolean;
84118412
private suppressDiagnosticEvents?;
84128413
private eventHandler;
8414+
private readonly noGetErrOnBackgroundUpdate?;
84138415
constructor(opts: SessionOptions);
84148416
private sendRequestCompletedEvent;
84158417
private defaultEventHandler;

0 commit comments

Comments
 (0)