UNPKG

typescript-language-server

Version:

Language Server Protocol (LSP) implementation for TypeScript using tsserver

74 lines 2.65 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ /* * Copyright (C) 2022 TypeFox and others. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 */ export var RequestQueueingType; (function (RequestQueueingType) { /** * Normal request that is executed in order. */ RequestQueueingType[RequestQueueingType["Normal"] = 1] = "Normal"; /** * Request that normal requests jump in front of in the queue. */ RequestQueueingType[RequestQueueingType["LowPriority"] = 2] = "LowPriority"; /** * A fence that blocks request reordering. * * Fences are not reordered. Unlike a normal request, a fence will never jump in front of a low priority request * in the request queue. */ RequestQueueingType[RequestQueueingType["Fence"] = 3] = "Fence"; })(RequestQueueingType = RequestQueueingType || (RequestQueueingType = {})); export class RequestQueue { constructor() { this.queue = []; this.sequenceNumber = 0; } get length() { return this.queue.length; } enqueue(item) { if (item.queueingType === RequestQueueingType.Normal) { let index = this.queue.length - 1; while (index >= 0) { if (this.queue[index].queueingType !== RequestQueueingType.LowPriority) { break; } --index; } this.queue.splice(index + 1, 0, item); } else { // Only normal priority requests can be reordered. All other requests just go to the end. this.queue.push(item); } } dequeue() { return this.queue.shift(); } tryDeletePendingRequest(seq) { for (let i = 0; i < this.queue.length; i++) { if (this.queue[i].request.seq === seq) { this.queue.splice(i, 1); return true; } } return false; } createRequest(command, args) { return { seq: this.sequenceNumber++, type: 'request', command: command, arguments: args, }; } } //# sourceMappingURL=requestQueue.js.map