Skip to content

Commit aff4556

Browse files
committed
do not send events via stdout if eventPort is specified
1 parent 970ec1a commit aff4556

4 files changed

Lines changed: 36 additions & 12 deletions

File tree

src/harness/harnessLanguageService.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,8 @@ namespace Harness.LanguageService {
698698
/*useOneInferredProject*/ false,
699699
/*typingsInstaller*/ undefined,
700700
Utils.byteLength,
701-
process.hrtime, serverHost);
701+
process.hrtime, serverHost,
702+
/*canUseEvents*/ true);
702703

703704
// Fake the connection between the client and the server
704705
serverHost.writeMessage = client.onMessage.bind(client);

src/harness/unittests/session.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ namespace ts.server {
4444
let lastSent: protocol.Message;
4545

4646
beforeEach(() => {
47-
session = new Session(mockHost, nullCancellationToken, /*useOneInferredProject*/ false, /*typingsInstaller*/ undefined, Utils.byteLength, process.hrtime, mockLogger);
47+
session = new Session(mockHost, nullCancellationToken, /*useOneInferredProject*/ false, /*typingsInstaller*/ undefined, Utils.byteLength, process.hrtime, mockLogger, /*canUseEvents*/ true);
4848
session.send = (msg: protocol.Message) => {
4949
lastSent = msg;
5050
};
@@ -269,7 +269,7 @@ namespace ts.server {
269269
lastSent: protocol.Message;
270270
customHandler = "testhandler";
271271
constructor() {
272-
super(mockHost, nullCancellationToken, /*useOneInferredProject*/ false, /*typingsInstaller*/ undefined, Utils.byteLength, process.hrtime, mockLogger);
272+
super(mockHost, nullCancellationToken, /*useOneInferredProject*/ false, /*typingsInstaller*/ undefined, Utils.byteLength, process.hrtime, mockLogger, /*canUseEvents*/ true);
273273
this.addProtocolHandler(this.customHandler, () => {
274274
return { response: undefined, responseRequired: true };
275275
});
@@ -327,7 +327,7 @@ namespace ts.server {
327327
class InProcSession extends Session {
328328
private queue: protocol.Request[] = [];
329329
constructor(private client: InProcClient) {
330-
super(mockHost, nullCancellationToken, /*useOneInferredProject*/ false, /*typingsInstaller*/ undefined, Utils.byteLength, process.hrtime, mockLogger);
330+
super(mockHost, nullCancellationToken, /*useOneInferredProject*/ false, /*typingsInstaller*/ undefined, Utils.byteLength, process.hrtime, mockLogger, /*canUseEvents*/ true);
331331
this.addProtocolHandler("echo", (req: protocol.Request) => ({
332332
response: req.arguments,
333333
responseRequired: true

src/server/server.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,22 @@ namespace ts.server {
232232
}
233233

234234
class IOSession extends Session {
235-
constructor(host: ServerHost, cancellationToken: HostCancellationToken, eventPort: number, useSingleInferredProject: boolean, logger: server.Logger) {
236-
super(host, cancellationToken, useSingleInferredProject, new NodeTypingsInstaller(logger, eventPort, host.newLine), Buffer.byteLength, process.hrtime, logger);
235+
constructor(
236+
host: ServerHost,
237+
cancellationToken: HostCancellationToken,
238+
installerEventPort: number,
239+
canUseEvents: boolean,
240+
useSingleInferredProject: boolean,
241+
logger: server.Logger) {
242+
super(
243+
host,
244+
cancellationToken,
245+
useSingleInferredProject,
246+
new NodeTypingsInstaller(logger, installerEventPort, host.newLine),
247+
Buffer.byteLength,
248+
process.hrtime,
249+
logger,
250+
canUseEvents);
237251
}
238252

239253
exit() {
@@ -477,7 +491,7 @@ namespace ts.server {
477491
}
478492

479493
const useSingleInferredProject = sys.args.indexOf("--useSingleInferredProject") >= 0;
480-
const ioSession = new IOSession(sys, cancellationToken, eventPort, useSingleInferredProject, logger);
494+
const ioSession = new IOSession(sys, cancellationToken, eventPort, /*canUseEvents*/ eventPort === undefined, useSingleInferredProject, logger);
481495
process.on("uncaughtException", function (err: Error) {
482496
ioSession.logError(err, "unknown");
483497
});

src/server/session.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,14 @@ namespace ts.server {
158158
protected readonly typingsInstaller: ITypingsInstaller,
159159
private byteLength: (buf: string, encoding?: string) => number,
160160
private hrtime: (start?: number[]) => number[],
161-
protected logger: Logger) {
162-
this.projectService =
163-
new ProjectService(host, logger, cancellationToken, useSingleInferredProject, typingsInstaller, (eventName, project, fileName) => {
164-
this.handleEvent(eventName, project, fileName);
165-
});
161+
protected logger: Logger,
162+
protected readonly canUseEvents: boolean) {
163+
164+
const eventHandler: ProjectServiceEventHandler = canUseEvents
165+
? (eventName, project, fileName) => this.handleEvent(eventName, project, fileName)
166+
: undefined;
167+
168+
this.projectService = new ProjectService(host, logger, cancellationToken, useSingleInferredProject, typingsInstaller, eventHandler);
166169
this.gcTimer = new GcTimer(host, /*delay*/ 15000, logger);
167170
}
168171

@@ -186,6 +189,12 @@ namespace ts.server {
186189
}
187190

188191
public send(msg: protocol.Message) {
192+
if (msg.type === "event" && !this.canUseEvents) {
193+
if (this.logger.hasLevel(LogLevel.verbose)) {
194+
this.logger.info(`Session does not support events: ignored event: ${JSON.stringify(msg)}`);
195+
}
196+
return;
197+
}
189198
this.host.write(formatMessage(msg, this.logger, this.byteLength, this.host.newLine));
190199
}
191200

0 commit comments

Comments
 (0)