in server/src/eslintServer.ts [1353:1393]
private processQueue(): void {
const message = this.queue.shift();
if (!message) {
return;
}
if (Request.is(message)) {
const requestMessage = message;
if (requestMessage.token.isCancellationRequested) {
requestMessage.reject(new ResponseError(LSPErrorCodes.RequestCancelled, 'Request got cancelled'));
return;
}
const elem = this.requestHandlers.get(requestMessage.method);
if (elem === undefined) {
throw new Error(`No handler registered`);
}
if (elem.versionProvider && requestMessage.documentVersion !== undefined && requestMessage.documentVersion !== elem.versionProvider(requestMessage.params)) {
requestMessage.reject(new ResponseError(LSPErrorCodes.RequestCancelled, 'Request got cancelled'));
return;
}
const result = elem.handler(requestMessage.params, requestMessage.token);
if (Thenable.is(result)) {
result.then((value) => {
requestMessage.resolve(value);
}, (error) => {
requestMessage.reject(error);
});
} else {
requestMessage.resolve(result);
}
} else {
const notificationMessage = message;
const elem = this.notificationHandlers.get(notificationMessage.method);
if (elem === undefined) {
throw new Error(`No handler registered`);
}
if (elem.versionProvider && notificationMessage.documentVersion !== undefined && notificationMessage.documentVersion !== elem.versionProvider(notificationMessage.params)) {
return;
}
elem.handler(notificationMessage.params);
}
}