5461 lines
205 KiB
JavaScript
5461 lines
205 KiB
JavaScript
var __create = Object.create;
|
|
var __defProp = Object.defineProperty;
|
|
var __getProtoOf = Object.getPrototypeOf;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
|
|
var __commonJS = (callback, module2) => () => {
|
|
if (!module2) {
|
|
module2 = {exports: {}};
|
|
callback(module2.exports, module2);
|
|
}
|
|
return module2.exports;
|
|
};
|
|
var __export = (target, all) => {
|
|
__markAsModule(target);
|
|
for (var name in all)
|
|
__defProp(target, name, {get: all[name], enumerable: true});
|
|
};
|
|
var __exportStar = (target, module2, desc) => {
|
|
__markAsModule(target);
|
|
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
for (let key of __getOwnPropNames(module2))
|
|
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
__defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
|
|
}
|
|
return target;
|
|
};
|
|
var __toModule = (module2) => {
|
|
if (module2 && module2.__esModule)
|
|
return module2;
|
|
return __exportStar(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", {value: module2, enumerable: true}), module2);
|
|
};
|
|
|
|
// node_modules/vscode-jsonrpc/lib/is.js
|
|
var require_is = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
function boolean(value) {
|
|
return value === true || value === false;
|
|
}
|
|
exports2.boolean = boolean;
|
|
function string(value) {
|
|
return typeof value === "string" || value instanceof String;
|
|
}
|
|
exports2.string = string;
|
|
function number(value) {
|
|
return typeof value === "number" || value instanceof Number;
|
|
}
|
|
exports2.number = number;
|
|
function error(value) {
|
|
return value instanceof Error;
|
|
}
|
|
exports2.error = error;
|
|
function func(value) {
|
|
return typeof value === "function";
|
|
}
|
|
exports2.func = func;
|
|
function array(value) {
|
|
return Array.isArray(value);
|
|
}
|
|
exports2.array = array;
|
|
function stringArray(value) {
|
|
return array(value) && value.every((elem) => string(elem));
|
|
}
|
|
exports2.stringArray = stringArray;
|
|
});
|
|
|
|
// node_modules/vscode-jsonrpc/lib/messages.js
|
|
var require_messages = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var is = require_is();
|
|
var ErrorCodes;
|
|
(function(ErrorCodes2) {
|
|
ErrorCodes2.ParseError = -32700;
|
|
ErrorCodes2.InvalidRequest = -32600;
|
|
ErrorCodes2.MethodNotFound = -32601;
|
|
ErrorCodes2.InvalidParams = -32602;
|
|
ErrorCodes2.InternalError = -32603;
|
|
ErrorCodes2.serverErrorStart = -32099;
|
|
ErrorCodes2.serverErrorEnd = -32e3;
|
|
ErrorCodes2.ServerNotInitialized = -32002;
|
|
ErrorCodes2.UnknownErrorCode = -32001;
|
|
ErrorCodes2.RequestCancelled = -32800;
|
|
ErrorCodes2.ContentModified = -32801;
|
|
ErrorCodes2.MessageWriteError = 1;
|
|
ErrorCodes2.MessageReadError = 2;
|
|
})(ErrorCodes = exports2.ErrorCodes || (exports2.ErrorCodes = {}));
|
|
var ResponseError = class extends Error {
|
|
constructor(code, message, data) {
|
|
super(message);
|
|
this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
|
|
this.data = data;
|
|
Object.setPrototypeOf(this, ResponseError.prototype);
|
|
}
|
|
toJson() {
|
|
return {
|
|
code: this.code,
|
|
message: this.message,
|
|
data: this.data
|
|
};
|
|
}
|
|
};
|
|
exports2.ResponseError = ResponseError;
|
|
var AbstractMessageType = class {
|
|
constructor(_method, _numberOfParams) {
|
|
this._method = _method;
|
|
this._numberOfParams = _numberOfParams;
|
|
}
|
|
get method() {
|
|
return this._method;
|
|
}
|
|
get numberOfParams() {
|
|
return this._numberOfParams;
|
|
}
|
|
};
|
|
exports2.AbstractMessageType = AbstractMessageType;
|
|
var RequestType0 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 0);
|
|
}
|
|
};
|
|
exports2.RequestType0 = RequestType0;
|
|
var RequestType2 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 1);
|
|
}
|
|
};
|
|
exports2.RequestType = RequestType2;
|
|
var RequestType1 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 1);
|
|
}
|
|
};
|
|
exports2.RequestType1 = RequestType1;
|
|
var RequestType22 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 2);
|
|
}
|
|
};
|
|
exports2.RequestType2 = RequestType22;
|
|
var RequestType3 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 3);
|
|
}
|
|
};
|
|
exports2.RequestType3 = RequestType3;
|
|
var RequestType4 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 4);
|
|
}
|
|
};
|
|
exports2.RequestType4 = RequestType4;
|
|
var RequestType5 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 5);
|
|
}
|
|
};
|
|
exports2.RequestType5 = RequestType5;
|
|
var RequestType6 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 6);
|
|
}
|
|
};
|
|
exports2.RequestType6 = RequestType6;
|
|
var RequestType7 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 7);
|
|
}
|
|
};
|
|
exports2.RequestType7 = RequestType7;
|
|
var RequestType8 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 8);
|
|
}
|
|
};
|
|
exports2.RequestType8 = RequestType8;
|
|
var RequestType9 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 9);
|
|
}
|
|
};
|
|
exports2.RequestType9 = RequestType9;
|
|
var NotificationType2 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 1);
|
|
this._ = void 0;
|
|
}
|
|
};
|
|
exports2.NotificationType = NotificationType2;
|
|
var NotificationType02 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 0);
|
|
}
|
|
};
|
|
exports2.NotificationType0 = NotificationType02;
|
|
var NotificationType1 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 1);
|
|
}
|
|
};
|
|
exports2.NotificationType1 = NotificationType1;
|
|
var NotificationType22 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 2);
|
|
}
|
|
};
|
|
exports2.NotificationType2 = NotificationType22;
|
|
var NotificationType3 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 3);
|
|
}
|
|
};
|
|
exports2.NotificationType3 = NotificationType3;
|
|
var NotificationType4 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 4);
|
|
}
|
|
};
|
|
exports2.NotificationType4 = NotificationType4;
|
|
var NotificationType5 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 5);
|
|
}
|
|
};
|
|
exports2.NotificationType5 = NotificationType5;
|
|
var NotificationType6 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 6);
|
|
}
|
|
};
|
|
exports2.NotificationType6 = NotificationType6;
|
|
var NotificationType7 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 7);
|
|
}
|
|
};
|
|
exports2.NotificationType7 = NotificationType7;
|
|
var NotificationType8 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 8);
|
|
}
|
|
};
|
|
exports2.NotificationType8 = NotificationType8;
|
|
var NotificationType9 = class extends AbstractMessageType {
|
|
constructor(method) {
|
|
super(method, 9);
|
|
}
|
|
};
|
|
exports2.NotificationType9 = NotificationType9;
|
|
function isRequestMessage(message) {
|
|
let candidate = message;
|
|
return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
|
|
}
|
|
exports2.isRequestMessage = isRequestMessage;
|
|
function isNotificationMessage(message) {
|
|
let candidate = message;
|
|
return candidate && is.string(candidate.method) && message.id === void 0;
|
|
}
|
|
exports2.isNotificationMessage = isNotificationMessage;
|
|
function isResponseMessage(message) {
|
|
let candidate = message;
|
|
return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
|
|
}
|
|
exports2.isResponseMessage = isResponseMessage;
|
|
});
|
|
|
|
// node_modules/vscode-jsonrpc/lib/events.js
|
|
var require_events = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var Disposable3;
|
|
(function(Disposable4) {
|
|
function create(func) {
|
|
return {
|
|
dispose: func
|
|
};
|
|
}
|
|
Disposable4.create = create;
|
|
})(Disposable3 = exports2.Disposable || (exports2.Disposable = {}));
|
|
var Event;
|
|
(function(Event2) {
|
|
const _disposable = {dispose() {
|
|
}};
|
|
Event2.None = function() {
|
|
return _disposable;
|
|
};
|
|
})(Event = exports2.Event || (exports2.Event = {}));
|
|
var CallbackList = class {
|
|
add(callback, context = null, bucket) {
|
|
if (!this._callbacks) {
|
|
this._callbacks = [];
|
|
this._contexts = [];
|
|
}
|
|
this._callbacks.push(callback);
|
|
this._contexts.push(context);
|
|
if (Array.isArray(bucket)) {
|
|
bucket.push({dispose: () => this.remove(callback, context)});
|
|
}
|
|
}
|
|
remove(callback, context = null) {
|
|
if (!this._callbacks) {
|
|
return;
|
|
}
|
|
var foundCallbackWithDifferentContext = false;
|
|
for (var i = 0, len = this._callbacks.length; i < len; i++) {
|
|
if (this._callbacks[i] === callback) {
|
|
if (this._contexts[i] === context) {
|
|
this._callbacks.splice(i, 1);
|
|
this._contexts.splice(i, 1);
|
|
return;
|
|
} else {
|
|
foundCallbackWithDifferentContext = true;
|
|
}
|
|
}
|
|
}
|
|
if (foundCallbackWithDifferentContext) {
|
|
throw new Error("When adding a listener with a context, you should remove it with the same context");
|
|
}
|
|
}
|
|
invoke(...args) {
|
|
if (!this._callbacks) {
|
|
return [];
|
|
}
|
|
var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
|
|
for (var i = 0, len = callbacks.length; i < len; i++) {
|
|
try {
|
|
ret.push(callbacks[i].apply(contexts[i], args));
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
isEmpty() {
|
|
return !this._callbacks || this._callbacks.length === 0;
|
|
}
|
|
dispose() {
|
|
this._callbacks = void 0;
|
|
this._contexts = void 0;
|
|
}
|
|
};
|
|
var Emitter = class {
|
|
constructor(_options) {
|
|
this._options = _options;
|
|
}
|
|
get event() {
|
|
if (!this._event) {
|
|
this._event = (listener, thisArgs, disposables) => {
|
|
if (!this._callbacks) {
|
|
this._callbacks = new CallbackList();
|
|
}
|
|
if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
|
|
this._options.onFirstListenerAdd(this);
|
|
}
|
|
this._callbacks.add(listener, thisArgs);
|
|
let result;
|
|
result = {
|
|
dispose: () => {
|
|
this._callbacks.remove(listener, thisArgs);
|
|
result.dispose = Emitter._noop;
|
|
if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
|
|
this._options.onLastListenerRemove(this);
|
|
}
|
|
}
|
|
};
|
|
if (Array.isArray(disposables)) {
|
|
disposables.push(result);
|
|
}
|
|
return result;
|
|
};
|
|
}
|
|
return this._event;
|
|
}
|
|
fire(event) {
|
|
if (this._callbacks) {
|
|
this._callbacks.invoke.call(this._callbacks, event);
|
|
}
|
|
}
|
|
dispose() {
|
|
if (this._callbacks) {
|
|
this._callbacks.dispose();
|
|
this._callbacks = void 0;
|
|
}
|
|
}
|
|
};
|
|
exports2.Emitter = Emitter;
|
|
Emitter._noop = function() {
|
|
};
|
|
});
|
|
|
|
// node_modules/vscode-jsonrpc/lib/messageReader.js
|
|
var require_messageReader = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var events_1 = require_events();
|
|
var Is2 = require_is();
|
|
var DefaultSize = 8192;
|
|
var CR = Buffer.from("\r", "ascii")[0];
|
|
var LF = Buffer.from("\n", "ascii")[0];
|
|
var CRLF = "\r\n";
|
|
var MessageBuffer = class {
|
|
constructor(encoding = "utf8") {
|
|
this.encoding = encoding;
|
|
this.index = 0;
|
|
this.buffer = Buffer.allocUnsafe(DefaultSize);
|
|
}
|
|
append(chunk) {
|
|
var toAppend = chunk;
|
|
if (typeof chunk === "string") {
|
|
var str = chunk;
|
|
var bufferLen = Buffer.byteLength(str, this.encoding);
|
|
toAppend = Buffer.allocUnsafe(bufferLen);
|
|
toAppend.write(str, 0, bufferLen, this.encoding);
|
|
}
|
|
if (this.buffer.length - this.index >= toAppend.length) {
|
|
toAppend.copy(this.buffer, this.index, 0, toAppend.length);
|
|
} else {
|
|
var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;
|
|
if (this.index === 0) {
|
|
this.buffer = Buffer.allocUnsafe(newSize);
|
|
toAppend.copy(this.buffer, 0, 0, toAppend.length);
|
|
} else {
|
|
this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);
|
|
}
|
|
}
|
|
this.index += toAppend.length;
|
|
}
|
|
tryReadHeaders() {
|
|
let result = void 0;
|
|
let current = 0;
|
|
while (current + 3 < this.index && (this.buffer[current] !== CR || this.buffer[current + 1] !== LF || this.buffer[current + 2] !== CR || this.buffer[current + 3] !== LF)) {
|
|
current++;
|
|
}
|
|
if (current + 3 >= this.index) {
|
|
return result;
|
|
}
|
|
result = Object.create(null);
|
|
let headers = this.buffer.toString("ascii", 0, current).split(CRLF);
|
|
headers.forEach((header) => {
|
|
let index = header.indexOf(":");
|
|
if (index === -1) {
|
|
throw new Error("Message header must separate key and value using :");
|
|
}
|
|
let key = header.substr(0, index);
|
|
let value = header.substr(index + 1).trim();
|
|
result[key] = value;
|
|
});
|
|
let nextStart = current + 4;
|
|
this.buffer = this.buffer.slice(nextStart);
|
|
this.index = this.index - nextStart;
|
|
return result;
|
|
}
|
|
tryReadContent(length) {
|
|
if (this.index < length) {
|
|
return null;
|
|
}
|
|
let result = this.buffer.toString(this.encoding, 0, length);
|
|
let nextStart = length;
|
|
this.buffer.copy(this.buffer, 0, nextStart);
|
|
this.index = this.index - nextStart;
|
|
return result;
|
|
}
|
|
get numberOfBytes() {
|
|
return this.index;
|
|
}
|
|
};
|
|
var MessageReader;
|
|
(function(MessageReader2) {
|
|
function is(value) {
|
|
let candidate = value;
|
|
return candidate && Is2.func(candidate.listen) && Is2.func(candidate.dispose) && Is2.func(candidate.onError) && Is2.func(candidate.onClose) && Is2.func(candidate.onPartialMessage);
|
|
}
|
|
MessageReader2.is = is;
|
|
})(MessageReader = exports2.MessageReader || (exports2.MessageReader = {}));
|
|
var AbstractMessageReader = class {
|
|
constructor() {
|
|
this.errorEmitter = new events_1.Emitter();
|
|
this.closeEmitter = new events_1.Emitter();
|
|
this.partialMessageEmitter = new events_1.Emitter();
|
|
}
|
|
dispose() {
|
|
this.errorEmitter.dispose();
|
|
this.closeEmitter.dispose();
|
|
}
|
|
get onError() {
|
|
return this.errorEmitter.event;
|
|
}
|
|
fireError(error) {
|
|
this.errorEmitter.fire(this.asError(error));
|
|
}
|
|
get onClose() {
|
|
return this.closeEmitter.event;
|
|
}
|
|
fireClose() {
|
|
this.closeEmitter.fire(void 0);
|
|
}
|
|
get onPartialMessage() {
|
|
return this.partialMessageEmitter.event;
|
|
}
|
|
firePartialMessage(info) {
|
|
this.partialMessageEmitter.fire(info);
|
|
}
|
|
asError(error) {
|
|
if (error instanceof Error) {
|
|
return error;
|
|
} else {
|
|
return new Error(`Reader received error. Reason: ${Is2.string(error.message) ? error.message : "unknown"}`);
|
|
}
|
|
}
|
|
};
|
|
exports2.AbstractMessageReader = AbstractMessageReader;
|
|
var StreamMessageReader = class extends AbstractMessageReader {
|
|
constructor(readable, encoding = "utf8") {
|
|
super();
|
|
this.readable = readable;
|
|
this.buffer = new MessageBuffer(encoding);
|
|
this._partialMessageTimeout = 1e4;
|
|
}
|
|
set partialMessageTimeout(timeout) {
|
|
this._partialMessageTimeout = timeout;
|
|
}
|
|
get partialMessageTimeout() {
|
|
return this._partialMessageTimeout;
|
|
}
|
|
listen(callback) {
|
|
this.nextMessageLength = -1;
|
|
this.messageToken = 0;
|
|
this.partialMessageTimer = void 0;
|
|
this.callback = callback;
|
|
this.readable.on("data", (data) => {
|
|
this.onData(data);
|
|
});
|
|
this.readable.on("error", (error) => this.fireError(error));
|
|
this.readable.on("close", () => this.fireClose());
|
|
}
|
|
onData(data) {
|
|
this.buffer.append(data);
|
|
while (true) {
|
|
if (this.nextMessageLength === -1) {
|
|
let headers = this.buffer.tryReadHeaders();
|
|
if (!headers) {
|
|
return;
|
|
}
|
|
let contentLength = headers["Content-Length"];
|
|
if (!contentLength) {
|
|
throw new Error("Header must provide a Content-Length property.");
|
|
}
|
|
let length = parseInt(contentLength);
|
|
if (isNaN(length)) {
|
|
throw new Error("Content-Length value must be a number.");
|
|
}
|
|
this.nextMessageLength = length;
|
|
}
|
|
var msg = this.buffer.tryReadContent(this.nextMessageLength);
|
|
if (msg === null) {
|
|
this.setPartialMessageTimer();
|
|
return;
|
|
}
|
|
this.clearPartialMessageTimer();
|
|
this.nextMessageLength = -1;
|
|
this.messageToken++;
|
|
var json = JSON.parse(msg);
|
|
this.callback(json);
|
|
}
|
|
}
|
|
clearPartialMessageTimer() {
|
|
if (this.partialMessageTimer) {
|
|
clearTimeout(this.partialMessageTimer);
|
|
this.partialMessageTimer = void 0;
|
|
}
|
|
}
|
|
setPartialMessageTimer() {
|
|
this.clearPartialMessageTimer();
|
|
if (this._partialMessageTimeout <= 0) {
|
|
return;
|
|
}
|
|
this.partialMessageTimer = setTimeout((token, timeout) => {
|
|
this.partialMessageTimer = void 0;
|
|
if (token === this.messageToken) {
|
|
this.firePartialMessage({messageToken: token, waitingTime: timeout});
|
|
this.setPartialMessageTimer();
|
|
}
|
|
}, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
|
|
}
|
|
};
|
|
exports2.StreamMessageReader = StreamMessageReader;
|
|
var IPCMessageReader = class extends AbstractMessageReader {
|
|
constructor(process2) {
|
|
super();
|
|
this.process = process2;
|
|
let eventEmitter = this.process;
|
|
eventEmitter.on("error", (error) => this.fireError(error));
|
|
eventEmitter.on("close", () => this.fireClose());
|
|
}
|
|
listen(callback) {
|
|
this.process.on("message", callback);
|
|
}
|
|
};
|
|
exports2.IPCMessageReader = IPCMessageReader;
|
|
var SocketMessageReader = class extends StreamMessageReader {
|
|
constructor(socket, encoding = "utf-8") {
|
|
super(socket, encoding);
|
|
}
|
|
};
|
|
exports2.SocketMessageReader = SocketMessageReader;
|
|
});
|
|
|
|
// node_modules/vscode-jsonrpc/lib/messageWriter.js
|
|
var require_messageWriter = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var events_1 = require_events();
|
|
var Is2 = require_is();
|
|
var ContentLength = "Content-Length: ";
|
|
var CRLF = "\r\n";
|
|
var MessageWriter;
|
|
(function(MessageWriter2) {
|
|
function is(value) {
|
|
let candidate = value;
|
|
return candidate && Is2.func(candidate.dispose) && Is2.func(candidate.onClose) && Is2.func(candidate.onError) && Is2.func(candidate.write);
|
|
}
|
|
MessageWriter2.is = is;
|
|
})(MessageWriter = exports2.MessageWriter || (exports2.MessageWriter = {}));
|
|
var AbstractMessageWriter = class {
|
|
constructor() {
|
|
this.errorEmitter = new events_1.Emitter();
|
|
this.closeEmitter = new events_1.Emitter();
|
|
}
|
|
dispose() {
|
|
this.errorEmitter.dispose();
|
|
this.closeEmitter.dispose();
|
|
}
|
|
get onError() {
|
|
return this.errorEmitter.event;
|
|
}
|
|
fireError(error, message, count) {
|
|
this.errorEmitter.fire([this.asError(error), message, count]);
|
|
}
|
|
get onClose() {
|
|
return this.closeEmitter.event;
|
|
}
|
|
fireClose() {
|
|
this.closeEmitter.fire(void 0);
|
|
}
|
|
asError(error) {
|
|
if (error instanceof Error) {
|
|
return error;
|
|
} else {
|
|
return new Error(`Writer received error. Reason: ${Is2.string(error.message) ? error.message : "unknown"}`);
|
|
}
|
|
}
|
|
};
|
|
exports2.AbstractMessageWriter = AbstractMessageWriter;
|
|
var StreamMessageWriter = class extends AbstractMessageWriter {
|
|
constructor(writable, encoding = "utf8") {
|
|
super();
|
|
this.writable = writable;
|
|
this.encoding = encoding;
|
|
this.errorCount = 0;
|
|
this.writable.on("error", (error) => this.fireError(error));
|
|
this.writable.on("close", () => this.fireClose());
|
|
}
|
|
write(msg) {
|
|
let json = JSON.stringify(msg);
|
|
let contentLength = Buffer.byteLength(json, this.encoding);
|
|
let headers = [
|
|
ContentLength,
|
|
contentLength.toString(),
|
|
CRLF,
|
|
CRLF
|
|
];
|
|
try {
|
|
this.writable.write(headers.join(""), "ascii");
|
|
this.writable.write(json, this.encoding);
|
|
this.errorCount = 0;
|
|
} catch (error) {
|
|
this.errorCount++;
|
|
this.fireError(error, msg, this.errorCount);
|
|
}
|
|
}
|
|
};
|
|
exports2.StreamMessageWriter = StreamMessageWriter;
|
|
var IPCMessageWriter = class extends AbstractMessageWriter {
|
|
constructor(process2) {
|
|
super();
|
|
this.process = process2;
|
|
this.errorCount = 0;
|
|
this.queue = [];
|
|
this.sending = false;
|
|
let eventEmitter = this.process;
|
|
eventEmitter.on("error", (error) => this.fireError(error));
|
|
eventEmitter.on("close", () => this.fireClose);
|
|
}
|
|
write(msg) {
|
|
if (!this.sending && this.queue.length === 0) {
|
|
this.doWriteMessage(msg);
|
|
} else {
|
|
this.queue.push(msg);
|
|
}
|
|
}
|
|
doWriteMessage(msg) {
|
|
try {
|
|
if (this.process.send) {
|
|
this.sending = true;
|
|
this.process.send(msg, void 0, void 0, (error) => {
|
|
this.sending = false;
|
|
if (error) {
|
|
this.errorCount++;
|
|
this.fireError(error, msg, this.errorCount);
|
|
} else {
|
|
this.errorCount = 0;
|
|
}
|
|
if (this.queue.length > 0) {
|
|
this.doWriteMessage(this.queue.shift());
|
|
}
|
|
});
|
|
}
|
|
} catch (error) {
|
|
this.errorCount++;
|
|
this.fireError(error, msg, this.errorCount);
|
|
}
|
|
}
|
|
};
|
|
exports2.IPCMessageWriter = IPCMessageWriter;
|
|
var SocketMessageWriter = class extends AbstractMessageWriter {
|
|
constructor(socket, encoding = "utf8") {
|
|
super();
|
|
this.socket = socket;
|
|
this.queue = [];
|
|
this.sending = false;
|
|
this.encoding = encoding;
|
|
this.errorCount = 0;
|
|
this.socket.on("error", (error) => this.fireError(error));
|
|
this.socket.on("close", () => this.fireClose());
|
|
}
|
|
dispose() {
|
|
super.dispose();
|
|
this.socket.destroy();
|
|
}
|
|
write(msg) {
|
|
if (!this.sending && this.queue.length === 0) {
|
|
this.doWriteMessage(msg);
|
|
} else {
|
|
this.queue.push(msg);
|
|
}
|
|
}
|
|
doWriteMessage(msg) {
|
|
let json = JSON.stringify(msg);
|
|
let contentLength = Buffer.byteLength(json, this.encoding);
|
|
let headers = [
|
|
ContentLength,
|
|
contentLength.toString(),
|
|
CRLF,
|
|
CRLF
|
|
];
|
|
try {
|
|
this.sending = true;
|
|
this.socket.write(headers.join(""), "ascii", (error) => {
|
|
if (error) {
|
|
this.handleError(error, msg);
|
|
}
|
|
try {
|
|
this.socket.write(json, this.encoding, (error2) => {
|
|
this.sending = false;
|
|
if (error2) {
|
|
this.handleError(error2, msg);
|
|
} else {
|
|
this.errorCount = 0;
|
|
}
|
|
if (this.queue.length > 0) {
|
|
this.doWriteMessage(this.queue.shift());
|
|
}
|
|
});
|
|
} catch (error2) {
|
|
this.handleError(error2, msg);
|
|
}
|
|
});
|
|
} catch (error) {
|
|
this.handleError(error, msg);
|
|
}
|
|
}
|
|
handleError(error, msg) {
|
|
this.errorCount++;
|
|
this.fireError(error, msg, this.errorCount);
|
|
}
|
|
};
|
|
exports2.SocketMessageWriter = SocketMessageWriter;
|
|
});
|
|
|
|
// node_modules/vscode-jsonrpc/lib/cancellation.js
|
|
var require_cancellation = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var events_1 = require_events();
|
|
var Is2 = require_is();
|
|
var CancellationToken;
|
|
(function(CancellationToken2) {
|
|
CancellationToken2.None = Object.freeze({
|
|
isCancellationRequested: false,
|
|
onCancellationRequested: events_1.Event.None
|
|
});
|
|
CancellationToken2.Cancelled = Object.freeze({
|
|
isCancellationRequested: true,
|
|
onCancellationRequested: events_1.Event.None
|
|
});
|
|
function is(value) {
|
|
let candidate = value;
|
|
return candidate && (candidate === CancellationToken2.None || candidate === CancellationToken2.Cancelled || Is2.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested);
|
|
}
|
|
CancellationToken2.is = is;
|
|
})(CancellationToken = exports2.CancellationToken || (exports2.CancellationToken = {}));
|
|
var shortcutEvent = Object.freeze(function(callback, context) {
|
|
let handle = setTimeout(callback.bind(context), 0);
|
|
return {dispose() {
|
|
clearTimeout(handle);
|
|
}};
|
|
});
|
|
var MutableToken = class {
|
|
constructor() {
|
|
this._isCancelled = false;
|
|
}
|
|
cancel() {
|
|
if (!this._isCancelled) {
|
|
this._isCancelled = true;
|
|
if (this._emitter) {
|
|
this._emitter.fire(void 0);
|
|
this.dispose();
|
|
}
|
|
}
|
|
}
|
|
get isCancellationRequested() {
|
|
return this._isCancelled;
|
|
}
|
|
get onCancellationRequested() {
|
|
if (this._isCancelled) {
|
|
return shortcutEvent;
|
|
}
|
|
if (!this._emitter) {
|
|
this._emitter = new events_1.Emitter();
|
|
}
|
|
return this._emitter.event;
|
|
}
|
|
dispose() {
|
|
if (this._emitter) {
|
|
this._emitter.dispose();
|
|
this._emitter = void 0;
|
|
}
|
|
}
|
|
};
|
|
var CancellationTokenSource = class {
|
|
get token() {
|
|
if (!this._token) {
|
|
this._token = new MutableToken();
|
|
}
|
|
return this._token;
|
|
}
|
|
cancel() {
|
|
if (!this._token) {
|
|
this._token = CancellationToken.Cancelled;
|
|
} else {
|
|
this._token.cancel();
|
|
}
|
|
}
|
|
dispose() {
|
|
if (!this._token) {
|
|
this._token = CancellationToken.None;
|
|
} else if (this._token instanceof MutableToken) {
|
|
this._token.dispose();
|
|
}
|
|
}
|
|
};
|
|
exports2.CancellationTokenSource = CancellationTokenSource;
|
|
});
|
|
|
|
// node_modules/vscode-jsonrpc/lib/linkedMap.js
|
|
var require_linkedMap = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var Touch;
|
|
(function(Touch2) {
|
|
Touch2.None = 0;
|
|
Touch2.First = 1;
|
|
Touch2.Last = 2;
|
|
})(Touch = exports2.Touch || (exports2.Touch = {}));
|
|
var LinkedMap = class {
|
|
constructor() {
|
|
this._map = new Map();
|
|
this._head = void 0;
|
|
this._tail = void 0;
|
|
this._size = 0;
|
|
}
|
|
clear() {
|
|
this._map.clear();
|
|
this._head = void 0;
|
|
this._tail = void 0;
|
|
this._size = 0;
|
|
}
|
|
isEmpty() {
|
|
return !this._head && !this._tail;
|
|
}
|
|
get size() {
|
|
return this._size;
|
|
}
|
|
has(key) {
|
|
return this._map.has(key);
|
|
}
|
|
get(key) {
|
|
const item = this._map.get(key);
|
|
if (!item) {
|
|
return void 0;
|
|
}
|
|
return item.value;
|
|
}
|
|
set(key, value, touch = Touch.None) {
|
|
let item = this._map.get(key);
|
|
if (item) {
|
|
item.value = value;
|
|
if (touch !== Touch.None) {
|
|
this.touch(item, touch);
|
|
}
|
|
} else {
|
|
item = {key, value, next: void 0, previous: void 0};
|
|
switch (touch) {
|
|
case Touch.None:
|
|
this.addItemLast(item);
|
|
break;
|
|
case Touch.First:
|
|
this.addItemFirst(item);
|
|
break;
|
|
case Touch.Last:
|
|
this.addItemLast(item);
|
|
break;
|
|
default:
|
|
this.addItemLast(item);
|
|
break;
|
|
}
|
|
this._map.set(key, item);
|
|
this._size++;
|
|
}
|
|
}
|
|
delete(key) {
|
|
const item = this._map.get(key);
|
|
if (!item) {
|
|
return false;
|
|
}
|
|
this._map.delete(key);
|
|
this.removeItem(item);
|
|
this._size--;
|
|
return true;
|
|
}
|
|
shift() {
|
|
if (!this._head && !this._tail) {
|
|
return void 0;
|
|
}
|
|
if (!this._head || !this._tail) {
|
|
throw new Error("Invalid list");
|
|
}
|
|
const item = this._head;
|
|
this._map.delete(item.key);
|
|
this.removeItem(item);
|
|
this._size--;
|
|
return item.value;
|
|
}
|
|
forEach(callbackfn, thisArg) {
|
|
let current = this._head;
|
|
while (current) {
|
|
if (thisArg) {
|
|
callbackfn.bind(thisArg)(current.value, current.key, this);
|
|
} else {
|
|
callbackfn(current.value, current.key, this);
|
|
}
|
|
current = current.next;
|
|
}
|
|
}
|
|
forEachReverse(callbackfn, thisArg) {
|
|
let current = this._tail;
|
|
while (current) {
|
|
if (thisArg) {
|
|
callbackfn.bind(thisArg)(current.value, current.key, this);
|
|
} else {
|
|
callbackfn(current.value, current.key, this);
|
|
}
|
|
current = current.previous;
|
|
}
|
|
}
|
|
values() {
|
|
let result = [];
|
|
let current = this._head;
|
|
while (current) {
|
|
result.push(current.value);
|
|
current = current.next;
|
|
}
|
|
return result;
|
|
}
|
|
keys() {
|
|
let result = [];
|
|
let current = this._head;
|
|
while (current) {
|
|
result.push(current.key);
|
|
current = current.next;
|
|
}
|
|
return result;
|
|
}
|
|
addItemFirst(item) {
|
|
if (!this._head && !this._tail) {
|
|
this._tail = item;
|
|
} else if (!this._head) {
|
|
throw new Error("Invalid list");
|
|
} else {
|
|
item.next = this._head;
|
|
this._head.previous = item;
|
|
}
|
|
this._head = item;
|
|
}
|
|
addItemLast(item) {
|
|
if (!this._head && !this._tail) {
|
|
this._head = item;
|
|
} else if (!this._tail) {
|
|
throw new Error("Invalid list");
|
|
} else {
|
|
item.previous = this._tail;
|
|
this._tail.next = item;
|
|
}
|
|
this._tail = item;
|
|
}
|
|
removeItem(item) {
|
|
if (item === this._head && item === this._tail) {
|
|
this._head = void 0;
|
|
this._tail = void 0;
|
|
} else if (item === this._head) {
|
|
this._head = item.next;
|
|
} else if (item === this._tail) {
|
|
this._tail = item.previous;
|
|
} else {
|
|
const next = item.next;
|
|
const previous = item.previous;
|
|
if (!next || !previous) {
|
|
throw new Error("Invalid list");
|
|
}
|
|
next.previous = previous;
|
|
previous.next = next;
|
|
}
|
|
}
|
|
touch(item, touch) {
|
|
if (!this._head || !this._tail) {
|
|
throw new Error("Invalid list");
|
|
}
|
|
if (touch !== Touch.First && touch !== Touch.Last) {
|
|
return;
|
|
}
|
|
if (touch === Touch.First) {
|
|
if (item === this._head) {
|
|
return;
|
|
}
|
|
const next = item.next;
|
|
const previous = item.previous;
|
|
if (item === this._tail) {
|
|
previous.next = void 0;
|
|
this._tail = previous;
|
|
} else {
|
|
next.previous = previous;
|
|
previous.next = next;
|
|
}
|
|
item.previous = void 0;
|
|
item.next = this._head;
|
|
this._head.previous = item;
|
|
this._head = item;
|
|
} else if (touch === Touch.Last) {
|
|
if (item === this._tail) {
|
|
return;
|
|
}
|
|
const next = item.next;
|
|
const previous = item.previous;
|
|
if (item === this._head) {
|
|
next.previous = void 0;
|
|
this._head = next;
|
|
} else {
|
|
next.previous = previous;
|
|
previous.next = next;
|
|
}
|
|
item.next = void 0;
|
|
item.previous = this._tail;
|
|
this._tail.next = item;
|
|
this._tail = item;
|
|
}
|
|
}
|
|
};
|
|
exports2.LinkedMap = LinkedMap;
|
|
});
|
|
|
|
// node_modules/vscode-jsonrpc/lib/pipeSupport.js
|
|
var require_pipeSupport = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var path_1 = require("path");
|
|
var os_1 = require("os");
|
|
var crypto_1 = require("crypto");
|
|
var net_1 = require("net");
|
|
var messageReader_1 = require_messageReader();
|
|
var messageWriter_1 = require_messageWriter();
|
|
function generateRandomPipeName() {
|
|
const randomSuffix = crypto_1.randomBytes(21).toString("hex");
|
|
if (process.platform === "win32") {
|
|
return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
|
|
} else {
|
|
return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);
|
|
}
|
|
}
|
|
exports2.generateRandomPipeName = generateRandomPipeName;
|
|
function createClientPipeTransport(pipeName, encoding = "utf-8") {
|
|
let connectResolve;
|
|
let connected = new Promise((resolve, _reject) => {
|
|
connectResolve = resolve;
|
|
});
|
|
return new Promise((resolve, reject) => {
|
|
let server = net_1.createServer((socket) => {
|
|
server.close();
|
|
connectResolve([
|
|
new messageReader_1.SocketMessageReader(socket, encoding),
|
|
new messageWriter_1.SocketMessageWriter(socket, encoding)
|
|
]);
|
|
});
|
|
server.on("error", reject);
|
|
server.listen(pipeName, () => {
|
|
server.removeListener("error", reject);
|
|
resolve({
|
|
onConnected: () => {
|
|
return connected;
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
exports2.createClientPipeTransport = createClientPipeTransport;
|
|
function createServerPipeTransport(pipeName, encoding = "utf-8") {
|
|
const socket = net_1.createConnection(pipeName);
|
|
return [
|
|
new messageReader_1.SocketMessageReader(socket, encoding),
|
|
new messageWriter_1.SocketMessageWriter(socket, encoding)
|
|
];
|
|
}
|
|
exports2.createServerPipeTransport = createServerPipeTransport;
|
|
});
|
|
|
|
// node_modules/vscode-jsonrpc/lib/socketSupport.js
|
|
var require_socketSupport = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var net_1 = require("net");
|
|
var messageReader_1 = require_messageReader();
|
|
var messageWriter_1 = require_messageWriter();
|
|
function createClientSocketTransport(port, encoding = "utf-8") {
|
|
let connectResolve;
|
|
let connected = new Promise((resolve, _reject) => {
|
|
connectResolve = resolve;
|
|
});
|
|
return new Promise((resolve, reject) => {
|
|
let server = net_1.createServer((socket) => {
|
|
server.close();
|
|
connectResolve([
|
|
new messageReader_1.SocketMessageReader(socket, encoding),
|
|
new messageWriter_1.SocketMessageWriter(socket, encoding)
|
|
]);
|
|
});
|
|
server.on("error", reject);
|
|
server.listen(port, "127.0.0.1", () => {
|
|
server.removeListener("error", reject);
|
|
resolve({
|
|
onConnected: () => {
|
|
return connected;
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
exports2.createClientSocketTransport = createClientSocketTransport;
|
|
function createServerSocketTransport(port, encoding = "utf-8") {
|
|
const socket = net_1.createConnection(port, "127.0.0.1");
|
|
return [
|
|
new messageReader_1.SocketMessageReader(socket, encoding),
|
|
new messageWriter_1.SocketMessageWriter(socket, encoding)
|
|
];
|
|
}
|
|
exports2.createServerSocketTransport = createServerSocketTransport;
|
|
});
|
|
|
|
// node_modules/vscode-jsonrpc/lib/main.js
|
|
var require_main = __commonJS((exports2) => {
|
|
"use strict";
|
|
function __export2(m) {
|
|
for (var p in m)
|
|
if (!exports2.hasOwnProperty(p))
|
|
exports2[p] = m[p];
|
|
}
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var Is2 = require_is();
|
|
var messages_1 = require_messages();
|
|
exports2.RequestType = messages_1.RequestType;
|
|
exports2.RequestType0 = messages_1.RequestType0;
|
|
exports2.RequestType1 = messages_1.RequestType1;
|
|
exports2.RequestType2 = messages_1.RequestType2;
|
|
exports2.RequestType3 = messages_1.RequestType3;
|
|
exports2.RequestType4 = messages_1.RequestType4;
|
|
exports2.RequestType5 = messages_1.RequestType5;
|
|
exports2.RequestType6 = messages_1.RequestType6;
|
|
exports2.RequestType7 = messages_1.RequestType7;
|
|
exports2.RequestType8 = messages_1.RequestType8;
|
|
exports2.RequestType9 = messages_1.RequestType9;
|
|
exports2.ResponseError = messages_1.ResponseError;
|
|
exports2.ErrorCodes = messages_1.ErrorCodes;
|
|
exports2.NotificationType = messages_1.NotificationType;
|
|
exports2.NotificationType0 = messages_1.NotificationType0;
|
|
exports2.NotificationType1 = messages_1.NotificationType1;
|
|
exports2.NotificationType2 = messages_1.NotificationType2;
|
|
exports2.NotificationType3 = messages_1.NotificationType3;
|
|
exports2.NotificationType4 = messages_1.NotificationType4;
|
|
exports2.NotificationType5 = messages_1.NotificationType5;
|
|
exports2.NotificationType6 = messages_1.NotificationType6;
|
|
exports2.NotificationType7 = messages_1.NotificationType7;
|
|
exports2.NotificationType8 = messages_1.NotificationType8;
|
|
exports2.NotificationType9 = messages_1.NotificationType9;
|
|
var messageReader_1 = require_messageReader();
|
|
exports2.MessageReader = messageReader_1.MessageReader;
|
|
exports2.StreamMessageReader = messageReader_1.StreamMessageReader;
|
|
exports2.IPCMessageReader = messageReader_1.IPCMessageReader;
|
|
exports2.SocketMessageReader = messageReader_1.SocketMessageReader;
|
|
var messageWriter_1 = require_messageWriter();
|
|
exports2.MessageWriter = messageWriter_1.MessageWriter;
|
|
exports2.StreamMessageWriter = messageWriter_1.StreamMessageWriter;
|
|
exports2.IPCMessageWriter = messageWriter_1.IPCMessageWriter;
|
|
exports2.SocketMessageWriter = messageWriter_1.SocketMessageWriter;
|
|
var events_1 = require_events();
|
|
exports2.Disposable = events_1.Disposable;
|
|
exports2.Event = events_1.Event;
|
|
exports2.Emitter = events_1.Emitter;
|
|
var cancellation_1 = require_cancellation();
|
|
exports2.CancellationTokenSource = cancellation_1.CancellationTokenSource;
|
|
exports2.CancellationToken = cancellation_1.CancellationToken;
|
|
var linkedMap_1 = require_linkedMap();
|
|
__export2(require_pipeSupport());
|
|
__export2(require_socketSupport());
|
|
var CancelNotification;
|
|
(function(CancelNotification2) {
|
|
CancelNotification2.type = new messages_1.NotificationType("$/cancelRequest");
|
|
})(CancelNotification || (CancelNotification = {}));
|
|
var ProgressNotification;
|
|
(function(ProgressNotification2) {
|
|
ProgressNotification2.type = new messages_1.NotificationType("$/progress");
|
|
})(ProgressNotification || (ProgressNotification = {}));
|
|
var ProgressType = class {
|
|
constructor() {
|
|
}
|
|
};
|
|
exports2.ProgressType = ProgressType;
|
|
exports2.NullLogger = Object.freeze({
|
|
error: () => {
|
|
},
|
|
warn: () => {
|
|
},
|
|
info: () => {
|
|
},
|
|
log: () => {
|
|
}
|
|
});
|
|
var Trace;
|
|
(function(Trace2) {
|
|
Trace2[Trace2["Off"] = 0] = "Off";
|
|
Trace2[Trace2["Messages"] = 1] = "Messages";
|
|
Trace2[Trace2["Verbose"] = 2] = "Verbose";
|
|
})(Trace = exports2.Trace || (exports2.Trace = {}));
|
|
(function(Trace2) {
|
|
function fromString(value) {
|
|
if (!Is2.string(value)) {
|
|
return Trace2.Off;
|
|
}
|
|
value = value.toLowerCase();
|
|
switch (value) {
|
|
case "off":
|
|
return Trace2.Off;
|
|
case "messages":
|
|
return Trace2.Messages;
|
|
case "verbose":
|
|
return Trace2.Verbose;
|
|
default:
|
|
return Trace2.Off;
|
|
}
|
|
}
|
|
Trace2.fromString = fromString;
|
|
function toString(value) {
|
|
switch (value) {
|
|
case Trace2.Off:
|
|
return "off";
|
|
case Trace2.Messages:
|
|
return "messages";
|
|
case Trace2.Verbose:
|
|
return "verbose";
|
|
default:
|
|
return "off";
|
|
}
|
|
}
|
|
Trace2.toString = toString;
|
|
})(Trace = exports2.Trace || (exports2.Trace = {}));
|
|
var TraceFormat;
|
|
(function(TraceFormat2) {
|
|
TraceFormat2["Text"] = "text";
|
|
TraceFormat2["JSON"] = "json";
|
|
})(TraceFormat = exports2.TraceFormat || (exports2.TraceFormat = {}));
|
|
(function(TraceFormat2) {
|
|
function fromString(value) {
|
|
value = value.toLowerCase();
|
|
if (value === "json") {
|
|
return TraceFormat2.JSON;
|
|
} else {
|
|
return TraceFormat2.Text;
|
|
}
|
|
}
|
|
TraceFormat2.fromString = fromString;
|
|
})(TraceFormat = exports2.TraceFormat || (exports2.TraceFormat = {}));
|
|
var SetTraceNotification;
|
|
(function(SetTraceNotification2) {
|
|
SetTraceNotification2.type = new messages_1.NotificationType("$/setTraceNotification");
|
|
})(SetTraceNotification = exports2.SetTraceNotification || (exports2.SetTraceNotification = {}));
|
|
var LogTraceNotification;
|
|
(function(LogTraceNotification2) {
|
|
LogTraceNotification2.type = new messages_1.NotificationType("$/logTraceNotification");
|
|
})(LogTraceNotification = exports2.LogTraceNotification || (exports2.LogTraceNotification = {}));
|
|
var ConnectionErrors;
|
|
(function(ConnectionErrors2) {
|
|
ConnectionErrors2[ConnectionErrors2["Closed"] = 1] = "Closed";
|
|
ConnectionErrors2[ConnectionErrors2["Disposed"] = 2] = "Disposed";
|
|
ConnectionErrors2[ConnectionErrors2["AlreadyListening"] = 3] = "AlreadyListening";
|
|
})(ConnectionErrors = exports2.ConnectionErrors || (exports2.ConnectionErrors = {}));
|
|
var ConnectionError = class extends Error {
|
|
constructor(code, message) {
|
|
super(message);
|
|
this.code = code;
|
|
Object.setPrototypeOf(this, ConnectionError.prototype);
|
|
}
|
|
};
|
|
exports2.ConnectionError = ConnectionError;
|
|
var ConnectionStrategy;
|
|
(function(ConnectionStrategy2) {
|
|
function is(value) {
|
|
let candidate = value;
|
|
return candidate && Is2.func(candidate.cancelUndispatched);
|
|
}
|
|
ConnectionStrategy2.is = is;
|
|
})(ConnectionStrategy = exports2.ConnectionStrategy || (exports2.ConnectionStrategy = {}));
|
|
var ConnectionState;
|
|
(function(ConnectionState2) {
|
|
ConnectionState2[ConnectionState2["New"] = 1] = "New";
|
|
ConnectionState2[ConnectionState2["Listening"] = 2] = "Listening";
|
|
ConnectionState2[ConnectionState2["Closed"] = 3] = "Closed";
|
|
ConnectionState2[ConnectionState2["Disposed"] = 4] = "Disposed";
|
|
})(ConnectionState || (ConnectionState = {}));
|
|
function _createMessageConnection(messageReader, messageWriter, logger, strategy) {
|
|
let sequenceNumber = 0;
|
|
let notificationSquenceNumber = 0;
|
|
let unknownResponseSquenceNumber = 0;
|
|
const version = "2.0";
|
|
let starRequestHandler = void 0;
|
|
let requestHandlers = Object.create(null);
|
|
let starNotificationHandler = void 0;
|
|
let notificationHandlers = Object.create(null);
|
|
let progressHandlers = new Map();
|
|
let timer;
|
|
let messageQueue = new linkedMap_1.LinkedMap();
|
|
let responsePromises = Object.create(null);
|
|
let requestTokens = Object.create(null);
|
|
let trace = Trace.Off;
|
|
let traceFormat = TraceFormat.Text;
|
|
let tracer;
|
|
let state = ConnectionState.New;
|
|
let errorEmitter = new events_1.Emitter();
|
|
let closeEmitter = new events_1.Emitter();
|
|
let unhandledNotificationEmitter = new events_1.Emitter();
|
|
let unhandledProgressEmitter = new events_1.Emitter();
|
|
let disposeEmitter = new events_1.Emitter();
|
|
function createRequestQueueKey(id) {
|
|
return "req-" + id.toString();
|
|
}
|
|
function createResponseQueueKey(id) {
|
|
if (id === null) {
|
|
return "res-unknown-" + (++unknownResponseSquenceNumber).toString();
|
|
} else {
|
|
return "res-" + id.toString();
|
|
}
|
|
}
|
|
function createNotificationQueueKey() {
|
|
return "not-" + (++notificationSquenceNumber).toString();
|
|
}
|
|
function addMessageToQueue(queue, message) {
|
|
if (messages_1.isRequestMessage(message)) {
|
|
queue.set(createRequestQueueKey(message.id), message);
|
|
} else if (messages_1.isResponseMessage(message)) {
|
|
queue.set(createResponseQueueKey(message.id), message);
|
|
} else {
|
|
queue.set(createNotificationQueueKey(), message);
|
|
}
|
|
}
|
|
function cancelUndispatched(_message) {
|
|
return void 0;
|
|
}
|
|
function isListening() {
|
|
return state === ConnectionState.Listening;
|
|
}
|
|
function isClosed() {
|
|
return state === ConnectionState.Closed;
|
|
}
|
|
function isDisposed() {
|
|
return state === ConnectionState.Disposed;
|
|
}
|
|
function closeHandler() {
|
|
if (state === ConnectionState.New || state === ConnectionState.Listening) {
|
|
state = ConnectionState.Closed;
|
|
closeEmitter.fire(void 0);
|
|
}
|
|
}
|
|
function readErrorHandler(error) {
|
|
errorEmitter.fire([error, void 0, void 0]);
|
|
}
|
|
function writeErrorHandler(data) {
|
|
errorEmitter.fire(data);
|
|
}
|
|
messageReader.onClose(closeHandler);
|
|
messageReader.onError(readErrorHandler);
|
|
messageWriter.onClose(closeHandler);
|
|
messageWriter.onError(writeErrorHandler);
|
|
function triggerMessageQueue() {
|
|
if (timer || messageQueue.size === 0) {
|
|
return;
|
|
}
|
|
timer = setImmediate(() => {
|
|
timer = void 0;
|
|
processMessageQueue();
|
|
});
|
|
}
|
|
function processMessageQueue() {
|
|
if (messageQueue.size === 0) {
|
|
return;
|
|
}
|
|
let message = messageQueue.shift();
|
|
try {
|
|
if (messages_1.isRequestMessage(message)) {
|
|
handleRequest(message);
|
|
} else if (messages_1.isNotificationMessage(message)) {
|
|
handleNotification(message);
|
|
} else if (messages_1.isResponseMessage(message)) {
|
|
handleResponse(message);
|
|
} else {
|
|
handleInvalidMessage(message);
|
|
}
|
|
} finally {
|
|
triggerMessageQueue();
|
|
}
|
|
}
|
|
let callback = (message) => {
|
|
try {
|
|
if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
|
|
let key = createRequestQueueKey(message.params.id);
|
|
let toCancel = messageQueue.get(key);
|
|
if (messages_1.isRequestMessage(toCancel)) {
|
|
let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
|
|
if (response && (response.error !== void 0 || response.result !== void 0)) {
|
|
messageQueue.delete(key);
|
|
response.id = toCancel.id;
|
|
traceSendingResponse(response, message.method, Date.now());
|
|
messageWriter.write(response);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
addMessageToQueue(messageQueue, message);
|
|
} finally {
|
|
triggerMessageQueue();
|
|
}
|
|
};
|
|
function handleRequest(requestMessage) {
|
|
if (isDisposed()) {
|
|
return;
|
|
}
|
|
function reply(resultOrError, method, startTime2) {
|
|
let message = {
|
|
jsonrpc: version,
|
|
id: requestMessage.id
|
|
};
|
|
if (resultOrError instanceof messages_1.ResponseError) {
|
|
message.error = resultOrError.toJson();
|
|
} else {
|
|
message.result = resultOrError === void 0 ? null : resultOrError;
|
|
}
|
|
traceSendingResponse(message, method, startTime2);
|
|
messageWriter.write(message);
|
|
}
|
|
function replyError(error, method, startTime2) {
|
|
let message = {
|
|
jsonrpc: version,
|
|
id: requestMessage.id,
|
|
error: error.toJson()
|
|
};
|
|
traceSendingResponse(message, method, startTime2);
|
|
messageWriter.write(message);
|
|
}
|
|
function replySuccess(result, method, startTime2) {
|
|
if (result === void 0) {
|
|
result = null;
|
|
}
|
|
let message = {
|
|
jsonrpc: version,
|
|
id: requestMessage.id,
|
|
result
|
|
};
|
|
traceSendingResponse(message, method, startTime2);
|
|
messageWriter.write(message);
|
|
}
|
|
traceReceivedRequest(requestMessage);
|
|
let element = requestHandlers[requestMessage.method];
|
|
let type;
|
|
let requestHandler;
|
|
if (element) {
|
|
type = element.type;
|
|
requestHandler = element.handler;
|
|
}
|
|
let startTime = Date.now();
|
|
if (requestHandler || starRequestHandler) {
|
|
let cancellationSource = new cancellation_1.CancellationTokenSource();
|
|
let tokenKey = String(requestMessage.id);
|
|
requestTokens[tokenKey] = cancellationSource;
|
|
try {
|
|
let handlerResult;
|
|
if (requestMessage.params === void 0 || type !== void 0 && type.numberOfParams === 0) {
|
|
handlerResult = requestHandler ? requestHandler(cancellationSource.token) : starRequestHandler(requestMessage.method, cancellationSource.token);
|
|
} else if (Is2.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {
|
|
handlerResult = requestHandler ? requestHandler(...requestMessage.params, cancellationSource.token) : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);
|
|
} else {
|
|
handlerResult = requestHandler ? requestHandler(requestMessage.params, cancellationSource.token) : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
|
|
}
|
|
let promise = handlerResult;
|
|
if (!handlerResult) {
|
|
delete requestTokens[tokenKey];
|
|
replySuccess(handlerResult, requestMessage.method, startTime);
|
|
} else if (promise.then) {
|
|
promise.then((resultOrError) => {
|
|
delete requestTokens[tokenKey];
|
|
reply(resultOrError, requestMessage.method, startTime);
|
|
}, (error) => {
|
|
delete requestTokens[tokenKey];
|
|
if (error instanceof messages_1.ResponseError) {
|
|
replyError(error, requestMessage.method, startTime);
|
|
} else if (error && Is2.string(error.message)) {
|
|
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
|
|
} else {
|
|
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
|
|
}
|
|
});
|
|
} else {
|
|
delete requestTokens[tokenKey];
|
|
reply(handlerResult, requestMessage.method, startTime);
|
|
}
|
|
} catch (error) {
|
|
delete requestTokens[tokenKey];
|
|
if (error instanceof messages_1.ResponseError) {
|
|
reply(error, requestMessage.method, startTime);
|
|
} else if (error && Is2.string(error.message)) {
|
|
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
|
|
} else {
|
|
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
|
|
}
|
|
}
|
|
} else {
|
|
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
|
|
}
|
|
}
|
|
function handleResponse(responseMessage) {
|
|
if (isDisposed()) {
|
|
return;
|
|
}
|
|
if (responseMessage.id === null) {
|
|
if (responseMessage.error) {
|
|
logger.error(`Received response message without id: Error is:
|
|
${JSON.stringify(responseMessage.error, void 0, 4)}`);
|
|
} else {
|
|
logger.error(`Received response message without id. No further error information provided.`);
|
|
}
|
|
} else {
|
|
let key = String(responseMessage.id);
|
|
let responsePromise = responsePromises[key];
|
|
traceReceivedResponse(responseMessage, responsePromise);
|
|
if (responsePromise) {
|
|
delete responsePromises[key];
|
|
try {
|
|
if (responseMessage.error) {
|
|
let error = responseMessage.error;
|
|
responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
|
|
} else if (responseMessage.result !== void 0) {
|
|
responsePromise.resolve(responseMessage.result);
|
|
} else {
|
|
throw new Error("Should never happen.");
|
|
}
|
|
} catch (error) {
|
|
if (error.message) {
|
|
logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
|
|
} else {
|
|
logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function handleNotification(message) {
|
|
if (isDisposed()) {
|
|
return;
|
|
}
|
|
let type = void 0;
|
|
let notificationHandler;
|
|
if (message.method === CancelNotification.type.method) {
|
|
notificationHandler = (params) => {
|
|
let id = params.id;
|
|
let source = requestTokens[String(id)];
|
|
if (source) {
|
|
source.cancel();
|
|
}
|
|
};
|
|
} else {
|
|
let element = notificationHandlers[message.method];
|
|
if (element) {
|
|
notificationHandler = element.handler;
|
|
type = element.type;
|
|
}
|
|
}
|
|
if (notificationHandler || starNotificationHandler) {
|
|
try {
|
|
traceReceivedNotification(message);
|
|
if (message.params === void 0 || type !== void 0 && type.numberOfParams === 0) {
|
|
notificationHandler ? notificationHandler() : starNotificationHandler(message.method);
|
|
} else if (Is2.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {
|
|
notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);
|
|
} else {
|
|
notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);
|
|
}
|
|
} catch (error) {
|
|
if (error.message) {
|
|
logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
|
|
} else {
|
|
logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
|
|
}
|
|
}
|
|
} else {
|
|
unhandledNotificationEmitter.fire(message);
|
|
}
|
|
}
|
|
function handleInvalidMessage(message) {
|
|
if (!message) {
|
|
logger.error("Received empty message.");
|
|
return;
|
|
}
|
|
logger.error(`Received message which is neither a response nor a notification message:
|
|
${JSON.stringify(message, null, 4)}`);
|
|
let responseMessage = message;
|
|
if (Is2.string(responseMessage.id) || Is2.number(responseMessage.id)) {
|
|
let key = String(responseMessage.id);
|
|
let responseHandler = responsePromises[key];
|
|
if (responseHandler) {
|
|
responseHandler.reject(new Error("The received response has neither a result nor an error property."));
|
|
}
|
|
}
|
|
}
|
|
function traceSendingRequest(message) {
|
|
if (trace === Trace.Off || !tracer) {
|
|
return;
|
|
}
|
|
if (traceFormat === TraceFormat.Text) {
|
|
let data = void 0;
|
|
if (trace === Trace.Verbose && message.params) {
|
|
data = `Params: ${JSON.stringify(message.params, null, 4)}
|
|
|
|
`;
|
|
}
|
|
tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
|
|
} else {
|
|
logLSPMessage("send-request", message);
|
|
}
|
|
}
|
|
function traceSendingNotification(message) {
|
|
if (trace === Trace.Off || !tracer) {
|
|
return;
|
|
}
|
|
if (traceFormat === TraceFormat.Text) {
|
|
let data = void 0;
|
|
if (trace === Trace.Verbose) {
|
|
if (message.params) {
|
|
data = `Params: ${JSON.stringify(message.params, null, 4)}
|
|
|
|
`;
|
|
} else {
|
|
data = "No parameters provided.\n\n";
|
|
}
|
|
}
|
|
tracer.log(`Sending notification '${message.method}'.`, data);
|
|
} else {
|
|
logLSPMessage("send-notification", message);
|
|
}
|
|
}
|
|
function traceSendingResponse(message, method, startTime) {
|
|
if (trace === Trace.Off || !tracer) {
|
|
return;
|
|
}
|
|
if (traceFormat === TraceFormat.Text) {
|
|
let data = void 0;
|
|
if (trace === Trace.Verbose) {
|
|
if (message.error && message.error.data) {
|
|
data = `Error data: ${JSON.stringify(message.error.data, null, 4)}
|
|
|
|
`;
|
|
} else {
|
|
if (message.result) {
|
|
data = `Result: ${JSON.stringify(message.result, null, 4)}
|
|
|
|
`;
|
|
} else if (message.error === void 0) {
|
|
data = "No result returned.\n\n";
|
|
}
|
|
}
|
|
}
|
|
tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
|
|
} else {
|
|
logLSPMessage("send-response", message);
|
|
}
|
|
}
|
|
function traceReceivedRequest(message) {
|
|
if (trace === Trace.Off || !tracer) {
|
|
return;
|
|
}
|
|
if (traceFormat === TraceFormat.Text) {
|
|
let data = void 0;
|
|
if (trace === Trace.Verbose && message.params) {
|
|
data = `Params: ${JSON.stringify(message.params, null, 4)}
|
|
|
|
`;
|
|
}
|
|
tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
|
|
} else {
|
|
logLSPMessage("receive-request", message);
|
|
}
|
|
}
|
|
function traceReceivedNotification(message) {
|
|
if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
|
|
return;
|
|
}
|
|
if (traceFormat === TraceFormat.Text) {
|
|
let data = void 0;
|
|
if (trace === Trace.Verbose) {
|
|
if (message.params) {
|
|
data = `Params: ${JSON.stringify(message.params, null, 4)}
|
|
|
|
`;
|
|
} else {
|
|
data = "No parameters provided.\n\n";
|
|
}
|
|
}
|
|
tracer.log(`Received notification '${message.method}'.`, data);
|
|
} else {
|
|
logLSPMessage("receive-notification", message);
|
|
}
|
|
}
|
|
function traceReceivedResponse(message, responsePromise) {
|
|
if (trace === Trace.Off || !tracer) {
|
|
return;
|
|
}
|
|
if (traceFormat === TraceFormat.Text) {
|
|
let data = void 0;
|
|
if (trace === Trace.Verbose) {
|
|
if (message.error && message.error.data) {
|
|
data = `Error data: ${JSON.stringify(message.error.data, null, 4)}
|
|
|
|
`;
|
|
} else {
|
|
if (message.result) {
|
|
data = `Result: ${JSON.stringify(message.result, null, 4)}
|
|
|
|
`;
|
|
} else if (message.error === void 0) {
|
|
data = "No result returned.\n\n";
|
|
}
|
|
}
|
|
}
|
|
if (responsePromise) {
|
|
let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : "";
|
|
tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
|
|
} else {
|
|
tracer.log(`Received response ${message.id} without active response promise.`, data);
|
|
}
|
|
} else {
|
|
logLSPMessage("receive-response", message);
|
|
}
|
|
}
|
|
function logLSPMessage(type, message) {
|
|
if (!tracer || trace === Trace.Off) {
|
|
return;
|
|
}
|
|
const lspMessage = {
|
|
isLSPMessage: true,
|
|
type,
|
|
message,
|
|
timestamp: Date.now()
|
|
};
|
|
tracer.log(lspMessage);
|
|
}
|
|
function throwIfClosedOrDisposed() {
|
|
if (isClosed()) {
|
|
throw new ConnectionError(ConnectionErrors.Closed, "Connection is closed.");
|
|
}
|
|
if (isDisposed()) {
|
|
throw new ConnectionError(ConnectionErrors.Disposed, "Connection is disposed.");
|
|
}
|
|
}
|
|
function throwIfListening() {
|
|
if (isListening()) {
|
|
throw new ConnectionError(ConnectionErrors.AlreadyListening, "Connection is already listening");
|
|
}
|
|
}
|
|
function throwIfNotListening() {
|
|
if (!isListening()) {
|
|
throw new Error("Call listen() first.");
|
|
}
|
|
}
|
|
function undefinedToNull(param) {
|
|
if (param === void 0) {
|
|
return null;
|
|
} else {
|
|
return param;
|
|
}
|
|
}
|
|
function computeMessageParams(type, params) {
|
|
let result;
|
|
let numberOfParams = type.numberOfParams;
|
|
switch (numberOfParams) {
|
|
case 0:
|
|
result = null;
|
|
break;
|
|
case 1:
|
|
result = undefinedToNull(params[0]);
|
|
break;
|
|
default:
|
|
result = [];
|
|
for (let i = 0; i < params.length && i < numberOfParams; i++) {
|
|
result.push(undefinedToNull(params[i]));
|
|
}
|
|
if (params.length < numberOfParams) {
|
|
for (let i = params.length; i < numberOfParams; i++) {
|
|
result.push(null);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
let connection = {
|
|
sendNotification: (type, ...params) => {
|
|
throwIfClosedOrDisposed();
|
|
let method;
|
|
let messageParams;
|
|
if (Is2.string(type)) {
|
|
method = type;
|
|
switch (params.length) {
|
|
case 0:
|
|
messageParams = null;
|
|
break;
|
|
case 1:
|
|
messageParams = params[0];
|
|
break;
|
|
default:
|
|
messageParams = params;
|
|
break;
|
|
}
|
|
} else {
|
|
method = type.method;
|
|
messageParams = computeMessageParams(type, params);
|
|
}
|
|
let notificationMessage = {
|
|
jsonrpc: version,
|
|
method,
|
|
params: messageParams
|
|
};
|
|
traceSendingNotification(notificationMessage);
|
|
messageWriter.write(notificationMessage);
|
|
},
|
|
onNotification: (type, handler) => {
|
|
throwIfClosedOrDisposed();
|
|
if (Is2.func(type)) {
|
|
starNotificationHandler = type;
|
|
} else if (handler) {
|
|
if (Is2.string(type)) {
|
|
notificationHandlers[type] = {type: void 0, handler};
|
|
} else {
|
|
notificationHandlers[type.method] = {type, handler};
|
|
}
|
|
}
|
|
},
|
|
onProgress: (_type, token, handler) => {
|
|
if (progressHandlers.has(token)) {
|
|
throw new Error(`Progress handler for token ${token} already registered`);
|
|
}
|
|
progressHandlers.set(token, handler);
|
|
return {
|
|
dispose: () => {
|
|
progressHandlers.delete(token);
|
|
}
|
|
};
|
|
},
|
|
sendProgress: (_type, token, value) => {
|
|
connection.sendNotification(ProgressNotification.type, {token, value});
|
|
},
|
|
onUnhandledProgress: unhandledProgressEmitter.event,
|
|
sendRequest: (type, ...params) => {
|
|
throwIfClosedOrDisposed();
|
|
throwIfNotListening();
|
|
let method;
|
|
let messageParams;
|
|
let token = void 0;
|
|
if (Is2.string(type)) {
|
|
method = type;
|
|
switch (params.length) {
|
|
case 0:
|
|
messageParams = null;
|
|
break;
|
|
case 1:
|
|
if (cancellation_1.CancellationToken.is(params[0])) {
|
|
messageParams = null;
|
|
token = params[0];
|
|
} else {
|
|
messageParams = undefinedToNull(params[0]);
|
|
}
|
|
break;
|
|
default:
|
|
const last = params.length - 1;
|
|
if (cancellation_1.CancellationToken.is(params[last])) {
|
|
token = params[last];
|
|
if (params.length === 2) {
|
|
messageParams = undefinedToNull(params[0]);
|
|
} else {
|
|
messageParams = params.slice(0, last).map((value) => undefinedToNull(value));
|
|
}
|
|
} else {
|
|
messageParams = params.map((value) => undefinedToNull(value));
|
|
}
|
|
break;
|
|
}
|
|
} else {
|
|
method = type.method;
|
|
messageParams = computeMessageParams(type, params);
|
|
let numberOfParams = type.numberOfParams;
|
|
token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : void 0;
|
|
}
|
|
let id = sequenceNumber++;
|
|
let result = new Promise((resolve, reject) => {
|
|
let requestMessage = {
|
|
jsonrpc: version,
|
|
id,
|
|
method,
|
|
params: messageParams
|
|
};
|
|
let responsePromise = {method, timerStart: Date.now(), resolve, reject};
|
|
traceSendingRequest(requestMessage);
|
|
try {
|
|
messageWriter.write(requestMessage);
|
|
} catch (e) {
|
|
responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : "Unknown reason"));
|
|
responsePromise = null;
|
|
}
|
|
if (responsePromise) {
|
|
responsePromises[String(id)] = responsePromise;
|
|
}
|
|
});
|
|
if (token) {
|
|
token.onCancellationRequested(() => {
|
|
connection.sendNotification(CancelNotification.type, {id});
|
|
});
|
|
}
|
|
return result;
|
|
},
|
|
onRequest: (type, handler) => {
|
|
throwIfClosedOrDisposed();
|
|
if (Is2.func(type)) {
|
|
starRequestHandler = type;
|
|
} else if (handler) {
|
|
if (Is2.string(type)) {
|
|
requestHandlers[type] = {type: void 0, handler};
|
|
} else {
|
|
requestHandlers[type.method] = {type, handler};
|
|
}
|
|
}
|
|
},
|
|
trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
|
|
let _sendNotification = false;
|
|
let _traceFormat = TraceFormat.Text;
|
|
if (sendNotificationOrTraceOptions !== void 0) {
|
|
if (Is2.boolean(sendNotificationOrTraceOptions)) {
|
|
_sendNotification = sendNotificationOrTraceOptions;
|
|
} else {
|
|
_sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
|
|
_traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
|
|
}
|
|
}
|
|
trace = _value;
|
|
traceFormat = _traceFormat;
|
|
if (trace === Trace.Off) {
|
|
tracer = void 0;
|
|
} else {
|
|
tracer = _tracer;
|
|
}
|
|
if (_sendNotification && !isClosed() && !isDisposed()) {
|
|
connection.sendNotification(SetTraceNotification.type, {value: Trace.toString(_value)});
|
|
}
|
|
},
|
|
onError: errorEmitter.event,
|
|
onClose: closeEmitter.event,
|
|
onUnhandledNotification: unhandledNotificationEmitter.event,
|
|
onDispose: disposeEmitter.event,
|
|
dispose: () => {
|
|
if (isDisposed()) {
|
|
return;
|
|
}
|
|
state = ConnectionState.Disposed;
|
|
disposeEmitter.fire(void 0);
|
|
let error = new Error("Connection got disposed.");
|
|
Object.keys(responsePromises).forEach((key) => {
|
|
responsePromises[key].reject(error);
|
|
});
|
|
responsePromises = Object.create(null);
|
|
requestTokens = Object.create(null);
|
|
messageQueue = new linkedMap_1.LinkedMap();
|
|
if (Is2.func(messageWriter.dispose)) {
|
|
messageWriter.dispose();
|
|
}
|
|
if (Is2.func(messageReader.dispose)) {
|
|
messageReader.dispose();
|
|
}
|
|
},
|
|
listen: () => {
|
|
throwIfClosedOrDisposed();
|
|
throwIfListening();
|
|
state = ConnectionState.Listening;
|
|
messageReader.listen(callback);
|
|
},
|
|
inspect: () => {
|
|
console.log("inspect");
|
|
}
|
|
};
|
|
connection.onNotification(LogTraceNotification.type, (params) => {
|
|
if (trace === Trace.Off || !tracer) {
|
|
return;
|
|
}
|
|
tracer.log(params.message, trace === Trace.Verbose ? params.verbose : void 0);
|
|
});
|
|
connection.onNotification(ProgressNotification.type, (params) => {
|
|
const handler = progressHandlers.get(params.token);
|
|
if (handler) {
|
|
handler(params.value);
|
|
} else {
|
|
unhandledProgressEmitter.fire(params);
|
|
}
|
|
});
|
|
return connection;
|
|
}
|
|
function isMessageReader(value) {
|
|
return value.listen !== void 0 && value.read === void 0;
|
|
}
|
|
function isMessageWriter(value) {
|
|
return value.write !== void 0 && value.end === void 0;
|
|
}
|
|
function createMessageConnection(input, output, logger, strategy) {
|
|
if (!logger) {
|
|
logger = exports2.NullLogger;
|
|
}
|
|
let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);
|
|
let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);
|
|
return _createMessageConnection(reader, writer, logger, strategy);
|
|
}
|
|
exports2.createMessageConnection = createMessageConnection;
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-types/lib/esm/main.js
|
|
var require_main2 = __commonJS((exports2) => {
|
|
__export(exports2, {
|
|
CodeAction: () => CodeAction2,
|
|
CodeActionContext: () => CodeActionContext2,
|
|
CodeActionKind: () => CodeActionKind2,
|
|
CodeLens: () => CodeLens,
|
|
Color: () => Color,
|
|
ColorInformation: () => ColorInformation,
|
|
ColorPresentation: () => ColorPresentation,
|
|
Command: () => Command2,
|
|
CompletionItem: () => CompletionItem,
|
|
CompletionItemKind: () => CompletionItemKind,
|
|
CompletionItemTag: () => CompletionItemTag,
|
|
CompletionList: () => CompletionList,
|
|
CreateFile: () => CreateFile,
|
|
DeleteFile: () => DeleteFile,
|
|
Diagnostic: () => Diagnostic2,
|
|
DiagnosticRelatedInformation: () => DiagnosticRelatedInformation,
|
|
DiagnosticSeverity: () => DiagnosticSeverity,
|
|
DiagnosticTag: () => DiagnosticTag,
|
|
DocumentHighlight: () => DocumentHighlight,
|
|
DocumentHighlightKind: () => DocumentHighlightKind,
|
|
DocumentLink: () => DocumentLink,
|
|
DocumentSymbol: () => DocumentSymbol,
|
|
EOL: () => EOL,
|
|
FoldingRange: () => FoldingRange,
|
|
FoldingRangeKind: () => FoldingRangeKind,
|
|
FormattingOptions: () => FormattingOptions,
|
|
Hover: () => Hover,
|
|
InsertTextFormat: () => InsertTextFormat,
|
|
Location: () => Location2,
|
|
LocationLink: () => LocationLink,
|
|
MarkedString: () => MarkedString,
|
|
MarkupContent: () => MarkupContent,
|
|
MarkupKind: () => MarkupKind,
|
|
ParameterInformation: () => ParameterInformation,
|
|
Position: () => Position2,
|
|
Range: () => Range2,
|
|
RenameFile: () => RenameFile,
|
|
SelectionRange: () => SelectionRange,
|
|
SignatureInformation: () => SignatureInformation,
|
|
SymbolInformation: () => SymbolInformation,
|
|
SymbolKind: () => SymbolKind,
|
|
SymbolTag: () => SymbolTag,
|
|
TextDocument: () => TextDocument2,
|
|
TextDocumentEdit: () => TextDocumentEdit,
|
|
TextDocumentIdentifier: () => TextDocumentIdentifier2,
|
|
TextDocumentItem: () => TextDocumentItem,
|
|
TextEdit: () => TextEdit,
|
|
VersionedTextDocumentIdentifier: () => VersionedTextDocumentIdentifier2,
|
|
WorkspaceChange: () => WorkspaceChange,
|
|
WorkspaceEdit: () => WorkspaceEdit
|
|
});
|
|
"use strict";
|
|
var Position2;
|
|
(function(Position3) {
|
|
function create(line, character) {
|
|
return {line, character};
|
|
}
|
|
Position3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.objectLiteral(candidate) && Is2.number(candidate.line) && Is2.number(candidate.character);
|
|
}
|
|
Position3.is = is;
|
|
})(Position2 || (Position2 = {}));
|
|
var Range2;
|
|
(function(Range3) {
|
|
function create(one, two, three, four) {
|
|
if (Is2.number(one) && Is2.number(two) && Is2.number(three) && Is2.number(four)) {
|
|
return {start: Position2.create(one, two), end: Position2.create(three, four)};
|
|
} else if (Position2.is(one) && Position2.is(two)) {
|
|
return {start: one, end: two};
|
|
} else {
|
|
throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
|
|
}
|
|
}
|
|
Range3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.objectLiteral(candidate) && Position2.is(candidate.start) && Position2.is(candidate.end);
|
|
}
|
|
Range3.is = is;
|
|
})(Range2 || (Range2 = {}));
|
|
var Location2;
|
|
(function(Location3) {
|
|
function create(uri, range) {
|
|
return {uri, range};
|
|
}
|
|
Location3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Range2.is(candidate.range) && (Is2.string(candidate.uri) || Is2.undefined(candidate.uri));
|
|
}
|
|
Location3.is = is;
|
|
})(Location2 || (Location2 = {}));
|
|
var LocationLink;
|
|
(function(LocationLink2) {
|
|
function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
|
|
return {targetUri, targetRange, targetSelectionRange, originSelectionRange};
|
|
}
|
|
LocationLink2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Range2.is(candidate.targetRange) && Is2.string(candidate.targetUri) && (Range2.is(candidate.targetSelectionRange) || Is2.undefined(candidate.targetSelectionRange)) && (Range2.is(candidate.originSelectionRange) || Is2.undefined(candidate.originSelectionRange));
|
|
}
|
|
LocationLink2.is = is;
|
|
})(LocationLink || (LocationLink = {}));
|
|
var Color;
|
|
(function(Color2) {
|
|
function create(red, green, blue, alpha) {
|
|
return {
|
|
red,
|
|
green,
|
|
blue,
|
|
alpha
|
|
};
|
|
}
|
|
Color2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.number(candidate.red) && Is2.number(candidate.green) && Is2.number(candidate.blue) && Is2.number(candidate.alpha);
|
|
}
|
|
Color2.is = is;
|
|
})(Color || (Color = {}));
|
|
var ColorInformation;
|
|
(function(ColorInformation2) {
|
|
function create(range, color) {
|
|
return {
|
|
range,
|
|
color
|
|
};
|
|
}
|
|
ColorInformation2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Range2.is(candidate.range) && Color.is(candidate.color);
|
|
}
|
|
ColorInformation2.is = is;
|
|
})(ColorInformation || (ColorInformation = {}));
|
|
var ColorPresentation;
|
|
(function(ColorPresentation2) {
|
|
function create(label, textEdit, additionalTextEdits) {
|
|
return {
|
|
label,
|
|
textEdit,
|
|
additionalTextEdits
|
|
};
|
|
}
|
|
ColorPresentation2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.string(candidate.label) && (Is2.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is2.undefined(candidate.additionalTextEdits) || Is2.typedArray(candidate.additionalTextEdits, TextEdit.is));
|
|
}
|
|
ColorPresentation2.is = is;
|
|
})(ColorPresentation || (ColorPresentation = {}));
|
|
var FoldingRangeKind;
|
|
(function(FoldingRangeKind2) {
|
|
FoldingRangeKind2["Comment"] = "comment";
|
|
FoldingRangeKind2["Imports"] = "imports";
|
|
FoldingRangeKind2["Region"] = "region";
|
|
})(FoldingRangeKind || (FoldingRangeKind = {}));
|
|
var FoldingRange;
|
|
(function(FoldingRange2) {
|
|
function create(startLine, endLine, startCharacter, endCharacter, kind) {
|
|
var result = {
|
|
startLine,
|
|
endLine
|
|
};
|
|
if (Is2.defined(startCharacter)) {
|
|
result.startCharacter = startCharacter;
|
|
}
|
|
if (Is2.defined(endCharacter)) {
|
|
result.endCharacter = endCharacter;
|
|
}
|
|
if (Is2.defined(kind)) {
|
|
result.kind = kind;
|
|
}
|
|
return result;
|
|
}
|
|
FoldingRange2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.number(candidate.startLine) && Is2.number(candidate.startLine) && (Is2.undefined(candidate.startCharacter) || Is2.number(candidate.startCharacter)) && (Is2.undefined(candidate.endCharacter) || Is2.number(candidate.endCharacter)) && (Is2.undefined(candidate.kind) || Is2.string(candidate.kind));
|
|
}
|
|
FoldingRange2.is = is;
|
|
})(FoldingRange || (FoldingRange = {}));
|
|
var DiagnosticRelatedInformation;
|
|
(function(DiagnosticRelatedInformation2) {
|
|
function create(location, message) {
|
|
return {
|
|
location,
|
|
message
|
|
};
|
|
}
|
|
DiagnosticRelatedInformation2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Location2.is(candidate.location) && Is2.string(candidate.message);
|
|
}
|
|
DiagnosticRelatedInformation2.is = is;
|
|
})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
|
|
var DiagnosticSeverity;
|
|
(function(DiagnosticSeverity2) {
|
|
DiagnosticSeverity2.Error = 1;
|
|
DiagnosticSeverity2.Warning = 2;
|
|
DiagnosticSeverity2.Information = 3;
|
|
DiagnosticSeverity2.Hint = 4;
|
|
})(DiagnosticSeverity || (DiagnosticSeverity = {}));
|
|
var DiagnosticTag;
|
|
(function(DiagnosticTag2) {
|
|
DiagnosticTag2.Unnecessary = 1;
|
|
DiagnosticTag2.Deprecated = 2;
|
|
})(DiagnosticTag || (DiagnosticTag = {}));
|
|
var Diagnostic2;
|
|
(function(Diagnostic3) {
|
|
function create(range, message, severity, code, source, relatedInformation) {
|
|
var result = {range, message};
|
|
if (Is2.defined(severity)) {
|
|
result.severity = severity;
|
|
}
|
|
if (Is2.defined(code)) {
|
|
result.code = code;
|
|
}
|
|
if (Is2.defined(source)) {
|
|
result.source = source;
|
|
}
|
|
if (Is2.defined(relatedInformation)) {
|
|
result.relatedInformation = relatedInformation;
|
|
}
|
|
return result;
|
|
}
|
|
Diagnostic3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Range2.is(candidate.range) && Is2.string(candidate.message) && (Is2.number(candidate.severity) || Is2.undefined(candidate.severity)) && (Is2.number(candidate.code) || Is2.string(candidate.code) || Is2.undefined(candidate.code)) && (Is2.string(candidate.source) || Is2.undefined(candidate.source)) && (Is2.undefined(candidate.relatedInformation) || Is2.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
|
|
}
|
|
Diagnostic3.is = is;
|
|
})(Diagnostic2 || (Diagnostic2 = {}));
|
|
var Command2;
|
|
(function(Command3) {
|
|
function create(title, command) {
|
|
var args = [];
|
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
args[_i - 2] = arguments[_i];
|
|
}
|
|
var result = {title, command};
|
|
if (Is2.defined(args) && args.length > 0) {
|
|
result.arguments = args;
|
|
}
|
|
return result;
|
|
}
|
|
Command3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Is2.string(candidate.title) && Is2.string(candidate.command);
|
|
}
|
|
Command3.is = is;
|
|
})(Command2 || (Command2 = {}));
|
|
var TextEdit;
|
|
(function(TextEdit2) {
|
|
function replace(range, newText) {
|
|
return {range, newText};
|
|
}
|
|
TextEdit2.replace = replace;
|
|
function insert(position, newText) {
|
|
return {range: {start: position, end: position}, newText};
|
|
}
|
|
TextEdit2.insert = insert;
|
|
function del(range) {
|
|
return {range, newText: ""};
|
|
}
|
|
TextEdit2.del = del;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.objectLiteral(candidate) && Is2.string(candidate.newText) && Range2.is(candidate.range);
|
|
}
|
|
TextEdit2.is = is;
|
|
})(TextEdit || (TextEdit = {}));
|
|
var TextDocumentEdit;
|
|
(function(TextDocumentEdit2) {
|
|
function create(textDocument, edits) {
|
|
return {textDocument, edits};
|
|
}
|
|
TextDocumentEdit2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && VersionedTextDocumentIdentifier2.is(candidate.textDocument) && Array.isArray(candidate.edits);
|
|
}
|
|
TextDocumentEdit2.is = is;
|
|
})(TextDocumentEdit || (TextDocumentEdit = {}));
|
|
var CreateFile;
|
|
(function(CreateFile2) {
|
|
function create(uri, options) {
|
|
var result = {
|
|
kind: "create",
|
|
uri
|
|
};
|
|
if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
|
|
result.options = options;
|
|
}
|
|
return result;
|
|
}
|
|
CreateFile2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return candidate && candidate.kind === "create" && Is2.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is2.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is2.boolean(candidate.options.ignoreIfExists)));
|
|
}
|
|
CreateFile2.is = is;
|
|
})(CreateFile || (CreateFile = {}));
|
|
var RenameFile;
|
|
(function(RenameFile2) {
|
|
function create(oldUri, newUri, options) {
|
|
var result = {
|
|
kind: "rename",
|
|
oldUri,
|
|
newUri
|
|
};
|
|
if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
|
|
result.options = options;
|
|
}
|
|
return result;
|
|
}
|
|
RenameFile2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return candidate && candidate.kind === "rename" && Is2.string(candidate.oldUri) && Is2.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is2.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is2.boolean(candidate.options.ignoreIfExists)));
|
|
}
|
|
RenameFile2.is = is;
|
|
})(RenameFile || (RenameFile = {}));
|
|
var DeleteFile;
|
|
(function(DeleteFile2) {
|
|
function create(uri, options) {
|
|
var result = {
|
|
kind: "delete",
|
|
uri
|
|
};
|
|
if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {
|
|
result.options = options;
|
|
}
|
|
return result;
|
|
}
|
|
DeleteFile2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return candidate && candidate.kind === "delete" && Is2.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is2.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is2.boolean(candidate.options.ignoreIfNotExists)));
|
|
}
|
|
DeleteFile2.is = is;
|
|
})(DeleteFile || (DeleteFile = {}));
|
|
var WorkspaceEdit;
|
|
(function(WorkspaceEdit2) {
|
|
function is(value) {
|
|
var candidate = value;
|
|
return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every(function(change) {
|
|
if (Is2.string(change.kind)) {
|
|
return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
|
|
} else {
|
|
return TextDocumentEdit.is(change);
|
|
}
|
|
}));
|
|
}
|
|
WorkspaceEdit2.is = is;
|
|
})(WorkspaceEdit || (WorkspaceEdit = {}));
|
|
var TextEditChangeImpl = function() {
|
|
function TextEditChangeImpl2(edits) {
|
|
this.edits = edits;
|
|
}
|
|
TextEditChangeImpl2.prototype.insert = function(position, newText) {
|
|
this.edits.push(TextEdit.insert(position, newText));
|
|
};
|
|
TextEditChangeImpl2.prototype.replace = function(range, newText) {
|
|
this.edits.push(TextEdit.replace(range, newText));
|
|
};
|
|
TextEditChangeImpl2.prototype.delete = function(range) {
|
|
this.edits.push(TextEdit.del(range));
|
|
};
|
|
TextEditChangeImpl2.prototype.add = function(edit) {
|
|
this.edits.push(edit);
|
|
};
|
|
TextEditChangeImpl2.prototype.all = function() {
|
|
return this.edits;
|
|
};
|
|
TextEditChangeImpl2.prototype.clear = function() {
|
|
this.edits.splice(0, this.edits.length);
|
|
};
|
|
return TextEditChangeImpl2;
|
|
}();
|
|
var WorkspaceChange = function() {
|
|
function WorkspaceChange2(workspaceEdit) {
|
|
var _this = this;
|
|
this._textEditChanges = Object.create(null);
|
|
if (workspaceEdit) {
|
|
this._workspaceEdit = workspaceEdit;
|
|
if (workspaceEdit.documentChanges) {
|
|
workspaceEdit.documentChanges.forEach(function(change) {
|
|
if (TextDocumentEdit.is(change)) {
|
|
var textEditChange = new TextEditChangeImpl(change.edits);
|
|
_this._textEditChanges[change.textDocument.uri] = textEditChange;
|
|
}
|
|
});
|
|
} else if (workspaceEdit.changes) {
|
|
Object.keys(workspaceEdit.changes).forEach(function(key) {
|
|
var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
|
|
_this._textEditChanges[key] = textEditChange;
|
|
});
|
|
}
|
|
}
|
|
}
|
|
Object.defineProperty(WorkspaceChange2.prototype, "edit", {
|
|
get: function() {
|
|
return this._workspaceEdit;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
WorkspaceChange2.prototype.getTextEditChange = function(key) {
|
|
if (VersionedTextDocumentIdentifier2.is(key)) {
|
|
if (!this._workspaceEdit) {
|
|
this._workspaceEdit = {
|
|
documentChanges: []
|
|
};
|
|
}
|
|
if (!this._workspaceEdit.documentChanges) {
|
|
throw new Error("Workspace edit is not configured for document changes.");
|
|
}
|
|
var textDocument = key;
|
|
var result = this._textEditChanges[textDocument.uri];
|
|
if (!result) {
|
|
var edits = [];
|
|
var textDocumentEdit = {
|
|
textDocument,
|
|
edits
|
|
};
|
|
this._workspaceEdit.documentChanges.push(textDocumentEdit);
|
|
result = new TextEditChangeImpl(edits);
|
|
this._textEditChanges[textDocument.uri] = result;
|
|
}
|
|
return result;
|
|
} else {
|
|
if (!this._workspaceEdit) {
|
|
this._workspaceEdit = {
|
|
changes: Object.create(null)
|
|
};
|
|
}
|
|
if (!this._workspaceEdit.changes) {
|
|
throw new Error("Workspace edit is not configured for normal text edit changes.");
|
|
}
|
|
var result = this._textEditChanges[key];
|
|
if (!result) {
|
|
var edits = [];
|
|
this._workspaceEdit.changes[key] = edits;
|
|
result = new TextEditChangeImpl(edits);
|
|
this._textEditChanges[key] = result;
|
|
}
|
|
return result;
|
|
}
|
|
};
|
|
WorkspaceChange2.prototype.createFile = function(uri, options) {
|
|
this.checkDocumentChanges();
|
|
this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));
|
|
};
|
|
WorkspaceChange2.prototype.renameFile = function(oldUri, newUri, options) {
|
|
this.checkDocumentChanges();
|
|
this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));
|
|
};
|
|
WorkspaceChange2.prototype.deleteFile = function(uri, options) {
|
|
this.checkDocumentChanges();
|
|
this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));
|
|
};
|
|
WorkspaceChange2.prototype.checkDocumentChanges = function() {
|
|
if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {
|
|
throw new Error("Workspace edit is not configured for document changes.");
|
|
}
|
|
};
|
|
return WorkspaceChange2;
|
|
}();
|
|
var TextDocumentIdentifier2;
|
|
(function(TextDocumentIdentifier3) {
|
|
function create(uri) {
|
|
return {uri};
|
|
}
|
|
TextDocumentIdentifier3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Is2.string(candidate.uri);
|
|
}
|
|
TextDocumentIdentifier3.is = is;
|
|
})(TextDocumentIdentifier2 || (TextDocumentIdentifier2 = {}));
|
|
var VersionedTextDocumentIdentifier2;
|
|
(function(VersionedTextDocumentIdentifier3) {
|
|
function create(uri, version) {
|
|
return {uri, version};
|
|
}
|
|
VersionedTextDocumentIdentifier3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Is2.string(candidate.uri) && (candidate.version === null || Is2.number(candidate.version));
|
|
}
|
|
VersionedTextDocumentIdentifier3.is = is;
|
|
})(VersionedTextDocumentIdentifier2 || (VersionedTextDocumentIdentifier2 = {}));
|
|
var TextDocumentItem;
|
|
(function(TextDocumentItem2) {
|
|
function create(uri, languageId, version, text) {
|
|
return {uri, languageId, version, text};
|
|
}
|
|
TextDocumentItem2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Is2.string(candidate.uri) && Is2.string(candidate.languageId) && Is2.number(candidate.version) && Is2.string(candidate.text);
|
|
}
|
|
TextDocumentItem2.is = is;
|
|
})(TextDocumentItem || (TextDocumentItem = {}));
|
|
var MarkupKind;
|
|
(function(MarkupKind2) {
|
|
MarkupKind2.PlainText = "plaintext";
|
|
MarkupKind2.Markdown = "markdown";
|
|
})(MarkupKind || (MarkupKind = {}));
|
|
(function(MarkupKind2) {
|
|
function is(value) {
|
|
var candidate = value;
|
|
return candidate === MarkupKind2.PlainText || candidate === MarkupKind2.Markdown;
|
|
}
|
|
MarkupKind2.is = is;
|
|
})(MarkupKind || (MarkupKind = {}));
|
|
var MarkupContent;
|
|
(function(MarkupContent2) {
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is2.string(candidate.value);
|
|
}
|
|
MarkupContent2.is = is;
|
|
})(MarkupContent || (MarkupContent = {}));
|
|
var CompletionItemKind;
|
|
(function(CompletionItemKind2) {
|
|
CompletionItemKind2.Text = 1;
|
|
CompletionItemKind2.Method = 2;
|
|
CompletionItemKind2.Function = 3;
|
|
CompletionItemKind2.Constructor = 4;
|
|
CompletionItemKind2.Field = 5;
|
|
CompletionItemKind2.Variable = 6;
|
|
CompletionItemKind2.Class = 7;
|
|
CompletionItemKind2.Interface = 8;
|
|
CompletionItemKind2.Module = 9;
|
|
CompletionItemKind2.Property = 10;
|
|
CompletionItemKind2.Unit = 11;
|
|
CompletionItemKind2.Value = 12;
|
|
CompletionItemKind2.Enum = 13;
|
|
CompletionItemKind2.Keyword = 14;
|
|
CompletionItemKind2.Snippet = 15;
|
|
CompletionItemKind2.Color = 16;
|
|
CompletionItemKind2.File = 17;
|
|
CompletionItemKind2.Reference = 18;
|
|
CompletionItemKind2.Folder = 19;
|
|
CompletionItemKind2.EnumMember = 20;
|
|
CompletionItemKind2.Constant = 21;
|
|
CompletionItemKind2.Struct = 22;
|
|
CompletionItemKind2.Event = 23;
|
|
CompletionItemKind2.Operator = 24;
|
|
CompletionItemKind2.TypeParameter = 25;
|
|
})(CompletionItemKind || (CompletionItemKind = {}));
|
|
var InsertTextFormat;
|
|
(function(InsertTextFormat2) {
|
|
InsertTextFormat2.PlainText = 1;
|
|
InsertTextFormat2.Snippet = 2;
|
|
})(InsertTextFormat || (InsertTextFormat = {}));
|
|
var CompletionItemTag;
|
|
(function(CompletionItemTag2) {
|
|
CompletionItemTag2.Deprecated = 1;
|
|
})(CompletionItemTag || (CompletionItemTag = {}));
|
|
var CompletionItem;
|
|
(function(CompletionItem2) {
|
|
function create(label) {
|
|
return {label};
|
|
}
|
|
CompletionItem2.create = create;
|
|
})(CompletionItem || (CompletionItem = {}));
|
|
var CompletionList;
|
|
(function(CompletionList2) {
|
|
function create(items, isIncomplete) {
|
|
return {items: items ? items : [], isIncomplete: !!isIncomplete};
|
|
}
|
|
CompletionList2.create = create;
|
|
})(CompletionList || (CompletionList = {}));
|
|
var MarkedString;
|
|
(function(MarkedString2) {
|
|
function fromPlainText(plainText) {
|
|
return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&");
|
|
}
|
|
MarkedString2.fromPlainText = fromPlainText;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.string(candidate) || Is2.objectLiteral(candidate) && Is2.string(candidate.language) && Is2.string(candidate.value);
|
|
}
|
|
MarkedString2.is = is;
|
|
})(MarkedString || (MarkedString = {}));
|
|
var Hover;
|
|
(function(Hover2) {
|
|
function is(value) {
|
|
var candidate = value;
|
|
return !!candidate && Is2.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is2.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range2.is(value.range));
|
|
}
|
|
Hover2.is = is;
|
|
})(Hover || (Hover = {}));
|
|
var ParameterInformation;
|
|
(function(ParameterInformation2) {
|
|
function create(label, documentation) {
|
|
return documentation ? {label, documentation} : {label};
|
|
}
|
|
ParameterInformation2.create = create;
|
|
})(ParameterInformation || (ParameterInformation = {}));
|
|
var SignatureInformation;
|
|
(function(SignatureInformation2) {
|
|
function create(label, documentation) {
|
|
var parameters = [];
|
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
parameters[_i - 2] = arguments[_i];
|
|
}
|
|
var result = {label};
|
|
if (Is2.defined(documentation)) {
|
|
result.documentation = documentation;
|
|
}
|
|
if (Is2.defined(parameters)) {
|
|
result.parameters = parameters;
|
|
} else {
|
|
result.parameters = [];
|
|
}
|
|
return result;
|
|
}
|
|
SignatureInformation2.create = create;
|
|
})(SignatureInformation || (SignatureInformation = {}));
|
|
var DocumentHighlightKind;
|
|
(function(DocumentHighlightKind2) {
|
|
DocumentHighlightKind2.Text = 1;
|
|
DocumentHighlightKind2.Read = 2;
|
|
DocumentHighlightKind2.Write = 3;
|
|
})(DocumentHighlightKind || (DocumentHighlightKind = {}));
|
|
var DocumentHighlight;
|
|
(function(DocumentHighlight2) {
|
|
function create(range, kind) {
|
|
var result = {range};
|
|
if (Is2.number(kind)) {
|
|
result.kind = kind;
|
|
}
|
|
return result;
|
|
}
|
|
DocumentHighlight2.create = create;
|
|
})(DocumentHighlight || (DocumentHighlight = {}));
|
|
var SymbolKind;
|
|
(function(SymbolKind2) {
|
|
SymbolKind2.File = 1;
|
|
SymbolKind2.Module = 2;
|
|
SymbolKind2.Namespace = 3;
|
|
SymbolKind2.Package = 4;
|
|
SymbolKind2.Class = 5;
|
|
SymbolKind2.Method = 6;
|
|
SymbolKind2.Property = 7;
|
|
SymbolKind2.Field = 8;
|
|
SymbolKind2.Constructor = 9;
|
|
SymbolKind2.Enum = 10;
|
|
SymbolKind2.Interface = 11;
|
|
SymbolKind2.Function = 12;
|
|
SymbolKind2.Variable = 13;
|
|
SymbolKind2.Constant = 14;
|
|
SymbolKind2.String = 15;
|
|
SymbolKind2.Number = 16;
|
|
SymbolKind2.Boolean = 17;
|
|
SymbolKind2.Array = 18;
|
|
SymbolKind2.Object = 19;
|
|
SymbolKind2.Key = 20;
|
|
SymbolKind2.Null = 21;
|
|
SymbolKind2.EnumMember = 22;
|
|
SymbolKind2.Struct = 23;
|
|
SymbolKind2.Event = 24;
|
|
SymbolKind2.Operator = 25;
|
|
SymbolKind2.TypeParameter = 26;
|
|
})(SymbolKind || (SymbolKind = {}));
|
|
var SymbolTag;
|
|
(function(SymbolTag2) {
|
|
SymbolTag2.Deprecated = 1;
|
|
})(SymbolTag || (SymbolTag = {}));
|
|
var SymbolInformation;
|
|
(function(SymbolInformation2) {
|
|
function create(name, kind, range, uri, containerName) {
|
|
var result = {
|
|
name,
|
|
kind,
|
|
location: {uri, range}
|
|
};
|
|
if (containerName) {
|
|
result.containerName = containerName;
|
|
}
|
|
return result;
|
|
}
|
|
SymbolInformation2.create = create;
|
|
})(SymbolInformation || (SymbolInformation = {}));
|
|
var DocumentSymbol;
|
|
(function(DocumentSymbol2) {
|
|
function create(name, detail, kind, range, selectionRange, children) {
|
|
var result = {
|
|
name,
|
|
detail,
|
|
kind,
|
|
range,
|
|
selectionRange
|
|
};
|
|
if (children !== void 0) {
|
|
result.children = children;
|
|
}
|
|
return result;
|
|
}
|
|
DocumentSymbol2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return candidate && Is2.string(candidate.name) && Is2.number(candidate.kind) && Range2.is(candidate.range) && Range2.is(candidate.selectionRange) && (candidate.detail === void 0 || Is2.string(candidate.detail)) && (candidate.deprecated === void 0 || Is2.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children));
|
|
}
|
|
DocumentSymbol2.is = is;
|
|
})(DocumentSymbol || (DocumentSymbol = {}));
|
|
var CodeActionKind2;
|
|
(function(CodeActionKind3) {
|
|
CodeActionKind3.Empty = "";
|
|
CodeActionKind3.QuickFix = "quickfix";
|
|
CodeActionKind3.Refactor = "refactor";
|
|
CodeActionKind3.RefactorExtract = "refactor.extract";
|
|
CodeActionKind3.RefactorInline = "refactor.inline";
|
|
CodeActionKind3.RefactorRewrite = "refactor.rewrite";
|
|
CodeActionKind3.Source = "source";
|
|
CodeActionKind3.SourceOrganizeImports = "source.organizeImports";
|
|
CodeActionKind3.SourceFixAll = "source.fixAll";
|
|
})(CodeActionKind2 || (CodeActionKind2 = {}));
|
|
var CodeActionContext2;
|
|
(function(CodeActionContext3) {
|
|
function create(diagnostics, only) {
|
|
var result = {diagnostics};
|
|
if (only !== void 0 && only !== null) {
|
|
result.only = only;
|
|
}
|
|
return result;
|
|
}
|
|
CodeActionContext3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Is2.typedArray(candidate.diagnostics, Diagnostic2.is) && (candidate.only === void 0 || Is2.typedArray(candidate.only, Is2.string));
|
|
}
|
|
CodeActionContext3.is = is;
|
|
})(CodeActionContext2 || (CodeActionContext2 = {}));
|
|
var CodeAction2;
|
|
(function(CodeAction3) {
|
|
function create(title, commandOrEdit, kind) {
|
|
var result = {title};
|
|
if (Command2.is(commandOrEdit)) {
|
|
result.command = commandOrEdit;
|
|
} else {
|
|
result.edit = commandOrEdit;
|
|
}
|
|
if (kind !== void 0) {
|
|
result.kind = kind;
|
|
}
|
|
return result;
|
|
}
|
|
CodeAction3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return candidate && Is2.string(candidate.title) && (candidate.diagnostics === void 0 || Is2.typedArray(candidate.diagnostics, Diagnostic2.is)) && (candidate.kind === void 0 || Is2.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command2.is(candidate.command)) && (candidate.isPreferred === void 0 || Is2.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));
|
|
}
|
|
CodeAction3.is = is;
|
|
})(CodeAction2 || (CodeAction2 = {}));
|
|
var CodeLens;
|
|
(function(CodeLens2) {
|
|
function create(range, data) {
|
|
var result = {range};
|
|
if (Is2.defined(data)) {
|
|
result.data = data;
|
|
}
|
|
return result;
|
|
}
|
|
CodeLens2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Range2.is(candidate.range) && (Is2.undefined(candidate.command) || Command2.is(candidate.command));
|
|
}
|
|
CodeLens2.is = is;
|
|
})(CodeLens || (CodeLens = {}));
|
|
var FormattingOptions;
|
|
(function(FormattingOptions2) {
|
|
function create(tabSize, insertSpaces) {
|
|
return {tabSize, insertSpaces};
|
|
}
|
|
FormattingOptions2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Is2.number(candidate.tabSize) && Is2.boolean(candidate.insertSpaces);
|
|
}
|
|
FormattingOptions2.is = is;
|
|
})(FormattingOptions || (FormattingOptions = {}));
|
|
var DocumentLink;
|
|
(function(DocumentLink2) {
|
|
function create(range, target, data) {
|
|
return {range, target, data};
|
|
}
|
|
DocumentLink2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Range2.is(candidate.range) && (Is2.undefined(candidate.target) || Is2.string(candidate.target));
|
|
}
|
|
DocumentLink2.is = is;
|
|
})(DocumentLink || (DocumentLink = {}));
|
|
var SelectionRange;
|
|
(function(SelectionRange2) {
|
|
function create(range, parent) {
|
|
return {range, parent};
|
|
}
|
|
SelectionRange2.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return candidate !== void 0 && Range2.is(candidate.range) && (candidate.parent === void 0 || SelectionRange2.is(candidate.parent));
|
|
}
|
|
SelectionRange2.is = is;
|
|
})(SelectionRange || (SelectionRange = {}));
|
|
var EOL = ["\n", "\r\n", "\r"];
|
|
var TextDocument2;
|
|
(function(TextDocument3) {
|
|
function create(uri, languageId, version, content) {
|
|
return new FullTextDocument(uri, languageId, version, content);
|
|
}
|
|
TextDocument3.create = create;
|
|
function is(value) {
|
|
var candidate = value;
|
|
return Is2.defined(candidate) && Is2.string(candidate.uri) && (Is2.undefined(candidate.languageId) || Is2.string(candidate.languageId)) && Is2.number(candidate.lineCount) && Is2.func(candidate.getText) && Is2.func(candidate.positionAt) && Is2.func(candidate.offsetAt) ? true : false;
|
|
}
|
|
TextDocument3.is = is;
|
|
function applyEdits(document, edits) {
|
|
var text = document.getText();
|
|
var sortedEdits = mergeSort(edits, function(a, b) {
|
|
var diff = a.range.start.line - b.range.start.line;
|
|
if (diff === 0) {
|
|
return a.range.start.character - b.range.start.character;
|
|
}
|
|
return diff;
|
|
});
|
|
var lastModifiedOffset = text.length;
|
|
for (var i = sortedEdits.length - 1; i >= 0; i--) {
|
|
var e = sortedEdits[i];
|
|
var startOffset = document.offsetAt(e.range.start);
|
|
var endOffset = document.offsetAt(e.range.end);
|
|
if (endOffset <= lastModifiedOffset) {
|
|
text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
|
|
} else {
|
|
throw new Error("Overlapping edit");
|
|
}
|
|
lastModifiedOffset = startOffset;
|
|
}
|
|
return text;
|
|
}
|
|
TextDocument3.applyEdits = applyEdits;
|
|
function mergeSort(data, compare) {
|
|
if (data.length <= 1) {
|
|
return data;
|
|
}
|
|
var p = data.length / 2 | 0;
|
|
var left = data.slice(0, p);
|
|
var right = data.slice(p);
|
|
mergeSort(left, compare);
|
|
mergeSort(right, compare);
|
|
var leftIdx = 0;
|
|
var rightIdx = 0;
|
|
var i = 0;
|
|
while (leftIdx < left.length && rightIdx < right.length) {
|
|
var ret = compare(left[leftIdx], right[rightIdx]);
|
|
if (ret <= 0) {
|
|
data[i++] = left[leftIdx++];
|
|
} else {
|
|
data[i++] = right[rightIdx++];
|
|
}
|
|
}
|
|
while (leftIdx < left.length) {
|
|
data[i++] = left[leftIdx++];
|
|
}
|
|
while (rightIdx < right.length) {
|
|
data[i++] = right[rightIdx++];
|
|
}
|
|
return data;
|
|
}
|
|
})(TextDocument2 || (TextDocument2 = {}));
|
|
var FullTextDocument = function() {
|
|
function FullTextDocument2(uri, languageId, version, content) {
|
|
this._uri = uri;
|
|
this._languageId = languageId;
|
|
this._version = version;
|
|
this._content = content;
|
|
this._lineOffsets = void 0;
|
|
}
|
|
Object.defineProperty(FullTextDocument2.prototype, "uri", {
|
|
get: function() {
|
|
return this._uri;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(FullTextDocument2.prototype, "languageId", {
|
|
get: function() {
|
|
return this._languageId;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(FullTextDocument2.prototype, "version", {
|
|
get: function() {
|
|
return this._version;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
FullTextDocument2.prototype.getText = function(range) {
|
|
if (range) {
|
|
var start = this.offsetAt(range.start);
|
|
var end = this.offsetAt(range.end);
|
|
return this._content.substring(start, end);
|
|
}
|
|
return this._content;
|
|
};
|
|
FullTextDocument2.prototype.update = function(event, version) {
|
|
this._content = event.text;
|
|
this._version = version;
|
|
this._lineOffsets = void 0;
|
|
};
|
|
FullTextDocument2.prototype.getLineOffsets = function() {
|
|
if (this._lineOffsets === void 0) {
|
|
var lineOffsets = [];
|
|
var text = this._content;
|
|
var isLineStart = true;
|
|
for (var i = 0; i < text.length; i++) {
|
|
if (isLineStart) {
|
|
lineOffsets.push(i);
|
|
isLineStart = false;
|
|
}
|
|
var ch = text.charAt(i);
|
|
isLineStart = ch === "\r" || ch === "\n";
|
|
if (ch === "\r" && i + 1 < text.length && text.charAt(i + 1) === "\n") {
|
|
i++;
|
|
}
|
|
}
|
|
if (isLineStart && text.length > 0) {
|
|
lineOffsets.push(text.length);
|
|
}
|
|
this._lineOffsets = lineOffsets;
|
|
}
|
|
return this._lineOffsets;
|
|
};
|
|
FullTextDocument2.prototype.positionAt = function(offset) {
|
|
offset = Math.max(Math.min(offset, this._content.length), 0);
|
|
var lineOffsets = this.getLineOffsets();
|
|
var low = 0, high = lineOffsets.length;
|
|
if (high === 0) {
|
|
return Position2.create(0, offset);
|
|
}
|
|
while (low < high) {
|
|
var mid = Math.floor((low + high) / 2);
|
|
if (lineOffsets[mid] > offset) {
|
|
high = mid;
|
|
} else {
|
|
low = mid + 1;
|
|
}
|
|
}
|
|
var line = low - 1;
|
|
return Position2.create(line, offset - lineOffsets[line]);
|
|
};
|
|
FullTextDocument2.prototype.offsetAt = function(position) {
|
|
var lineOffsets = this.getLineOffsets();
|
|
if (position.line >= lineOffsets.length) {
|
|
return this._content.length;
|
|
} else if (position.line < 0) {
|
|
return 0;
|
|
}
|
|
var lineOffset = lineOffsets[position.line];
|
|
var nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;
|
|
return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
|
|
};
|
|
Object.defineProperty(FullTextDocument2.prototype, "lineCount", {
|
|
get: function() {
|
|
return this.getLineOffsets().length;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
return FullTextDocument2;
|
|
}();
|
|
var Is2;
|
|
(function(Is3) {
|
|
var toString = Object.prototype.toString;
|
|
function defined(value) {
|
|
return typeof value !== "undefined";
|
|
}
|
|
Is3.defined = defined;
|
|
function undefined2(value) {
|
|
return typeof value === "undefined";
|
|
}
|
|
Is3.undefined = undefined2;
|
|
function boolean(value) {
|
|
return value === true || value === false;
|
|
}
|
|
Is3.boolean = boolean;
|
|
function string(value) {
|
|
return toString.call(value) === "[object String]";
|
|
}
|
|
Is3.string = string;
|
|
function number(value) {
|
|
return toString.call(value) === "[object Number]";
|
|
}
|
|
Is3.number = number;
|
|
function func(value) {
|
|
return toString.call(value) === "[object Function]";
|
|
}
|
|
Is3.func = func;
|
|
function objectLiteral(value) {
|
|
return value !== null && typeof value === "object";
|
|
}
|
|
Is3.objectLiteral = objectLiteral;
|
|
function typedArray(value, check) {
|
|
return Array.isArray(value) && value.every(check);
|
|
}
|
|
Is3.typedArray = typedArray;
|
|
})(Is2 || (Is2 = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/utils/is.js
|
|
var require_is2 = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
function boolean(value) {
|
|
return value === true || value === false;
|
|
}
|
|
exports2.boolean = boolean;
|
|
function string(value) {
|
|
return typeof value === "string" || value instanceof String;
|
|
}
|
|
exports2.string = string;
|
|
function number(value) {
|
|
return typeof value === "number" || value instanceof Number;
|
|
}
|
|
exports2.number = number;
|
|
function error(value) {
|
|
return value instanceof Error;
|
|
}
|
|
exports2.error = error;
|
|
function func(value) {
|
|
return typeof value === "function";
|
|
}
|
|
exports2.func = func;
|
|
function array(value) {
|
|
return Array.isArray(value);
|
|
}
|
|
exports2.array = array;
|
|
function stringArray(value) {
|
|
return array(value) && value.every((elem) => string(elem));
|
|
}
|
|
exports2.stringArray = stringArray;
|
|
function typedArray(value, check) {
|
|
return Array.isArray(value) && value.every(check);
|
|
}
|
|
exports2.typedArray = typedArray;
|
|
function objectLiteral(value) {
|
|
return value !== null && typeof value === "object";
|
|
}
|
|
exports2.objectLiteral = objectLiteral;
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/messages.js
|
|
var require_messages2 = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var vscode_jsonrpc_1 = require_main();
|
|
var ProtocolRequestType0 = class extends vscode_jsonrpc_1.RequestType0 {
|
|
constructor(method) {
|
|
super(method);
|
|
}
|
|
};
|
|
exports2.ProtocolRequestType0 = ProtocolRequestType0;
|
|
var ProtocolRequestType = class extends vscode_jsonrpc_1.RequestType {
|
|
constructor(method) {
|
|
super(method);
|
|
}
|
|
};
|
|
exports2.ProtocolRequestType = ProtocolRequestType;
|
|
var ProtocolNotificationType = class extends vscode_jsonrpc_1.NotificationType {
|
|
constructor(method) {
|
|
super(method);
|
|
}
|
|
};
|
|
exports2.ProtocolNotificationType = ProtocolNotificationType;
|
|
var ProtocolNotificationType0 = class extends vscode_jsonrpc_1.NotificationType0 {
|
|
constructor(method) {
|
|
super(method);
|
|
}
|
|
};
|
|
exports2.ProtocolNotificationType0 = ProtocolNotificationType0;
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.implementation.js
|
|
var require_protocol_implementation = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var vscode_jsonrpc_1 = require_main();
|
|
var messages_1 = require_messages2();
|
|
var ImplementationRequest;
|
|
(function(ImplementationRequest2) {
|
|
ImplementationRequest2.method = "textDocument/implementation";
|
|
ImplementationRequest2.type = new messages_1.ProtocolRequestType(ImplementationRequest2.method);
|
|
ImplementationRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(ImplementationRequest = exports2.ImplementationRequest || (exports2.ImplementationRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.typeDefinition.js
|
|
var require_protocol_typeDefinition = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var vscode_jsonrpc_1 = require_main();
|
|
var messages_1 = require_messages2();
|
|
var TypeDefinitionRequest;
|
|
(function(TypeDefinitionRequest2) {
|
|
TypeDefinitionRequest2.method = "textDocument/typeDefinition";
|
|
TypeDefinitionRequest2.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest2.method);
|
|
TypeDefinitionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(TypeDefinitionRequest = exports2.TypeDefinitionRequest || (exports2.TypeDefinitionRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.workspaceFolders.js
|
|
var require_protocol_workspaceFolders = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var messages_1 = require_messages2();
|
|
var WorkspaceFoldersRequest;
|
|
(function(WorkspaceFoldersRequest2) {
|
|
WorkspaceFoldersRequest2.type = new messages_1.ProtocolRequestType0("workspace/workspaceFolders");
|
|
})(WorkspaceFoldersRequest = exports2.WorkspaceFoldersRequest || (exports2.WorkspaceFoldersRequest = {}));
|
|
var DidChangeWorkspaceFoldersNotification;
|
|
(function(DidChangeWorkspaceFoldersNotification2) {
|
|
DidChangeWorkspaceFoldersNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeWorkspaceFolders");
|
|
})(DidChangeWorkspaceFoldersNotification = exports2.DidChangeWorkspaceFoldersNotification || (exports2.DidChangeWorkspaceFoldersNotification = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.configuration.js
|
|
var require_protocol_configuration = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var messages_1 = require_messages2();
|
|
var ConfigurationRequest;
|
|
(function(ConfigurationRequest2) {
|
|
ConfigurationRequest2.type = new messages_1.ProtocolRequestType("workspace/configuration");
|
|
})(ConfigurationRequest = exports2.ConfigurationRequest || (exports2.ConfigurationRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.colorProvider.js
|
|
var require_protocol_colorProvider = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var vscode_jsonrpc_1 = require_main();
|
|
var messages_1 = require_messages2();
|
|
var DocumentColorRequest;
|
|
(function(DocumentColorRequest2) {
|
|
DocumentColorRequest2.method = "textDocument/documentColor";
|
|
DocumentColorRequest2.type = new messages_1.ProtocolRequestType(DocumentColorRequest2.method);
|
|
DocumentColorRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(DocumentColorRequest = exports2.DocumentColorRequest || (exports2.DocumentColorRequest = {}));
|
|
var ColorPresentationRequest;
|
|
(function(ColorPresentationRequest2) {
|
|
ColorPresentationRequest2.type = new messages_1.ProtocolRequestType("textDocument/colorPresentation");
|
|
})(ColorPresentationRequest = exports2.ColorPresentationRequest || (exports2.ColorPresentationRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.foldingRange.js
|
|
var require_protocol_foldingRange = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var vscode_jsonrpc_1 = require_main();
|
|
var messages_1 = require_messages2();
|
|
var FoldingRangeKind;
|
|
(function(FoldingRangeKind2) {
|
|
FoldingRangeKind2["Comment"] = "comment";
|
|
FoldingRangeKind2["Imports"] = "imports";
|
|
FoldingRangeKind2["Region"] = "region";
|
|
})(FoldingRangeKind = exports2.FoldingRangeKind || (exports2.FoldingRangeKind = {}));
|
|
var FoldingRangeRequest;
|
|
(function(FoldingRangeRequest2) {
|
|
FoldingRangeRequest2.method = "textDocument/foldingRange";
|
|
FoldingRangeRequest2.type = new messages_1.ProtocolRequestType(FoldingRangeRequest2.method);
|
|
FoldingRangeRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(FoldingRangeRequest = exports2.FoldingRangeRequest || (exports2.FoldingRangeRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.declaration.js
|
|
var require_protocol_declaration = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var vscode_jsonrpc_1 = require_main();
|
|
var messages_1 = require_messages2();
|
|
var DeclarationRequest;
|
|
(function(DeclarationRequest2) {
|
|
DeclarationRequest2.method = "textDocument/declaration";
|
|
DeclarationRequest2.type = new messages_1.ProtocolRequestType(DeclarationRequest2.method);
|
|
DeclarationRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(DeclarationRequest = exports2.DeclarationRequest || (exports2.DeclarationRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.selectionRange.js
|
|
var require_protocol_selectionRange = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var vscode_jsonrpc_1 = require_main();
|
|
var messages_1 = require_messages2();
|
|
var SelectionRangeRequest;
|
|
(function(SelectionRangeRequest2) {
|
|
SelectionRangeRequest2.method = "textDocument/selectionRange";
|
|
SelectionRangeRequest2.type = new messages_1.ProtocolRequestType(SelectionRangeRequest2.method);
|
|
SelectionRangeRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(SelectionRangeRequest = exports2.SelectionRangeRequest || (exports2.SelectionRangeRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.progress.js
|
|
var require_protocol_progress = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var vscode_jsonrpc_1 = require_main();
|
|
var messages_1 = require_messages2();
|
|
var WorkDoneProgress;
|
|
(function(WorkDoneProgress2) {
|
|
WorkDoneProgress2.type = new vscode_jsonrpc_1.ProgressType();
|
|
})(WorkDoneProgress = exports2.WorkDoneProgress || (exports2.WorkDoneProgress = {}));
|
|
var WorkDoneProgressCreateRequest;
|
|
(function(WorkDoneProgressCreateRequest2) {
|
|
WorkDoneProgressCreateRequest2.type = new messages_1.ProtocolRequestType("window/workDoneProgress/create");
|
|
})(WorkDoneProgressCreateRequest = exports2.WorkDoneProgressCreateRequest || (exports2.WorkDoneProgressCreateRequest = {}));
|
|
var WorkDoneProgressCancelNotification;
|
|
(function(WorkDoneProgressCancelNotification2) {
|
|
WorkDoneProgressCancelNotification2.type = new messages_1.ProtocolNotificationType("window/workDoneProgress/cancel");
|
|
})(WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCancelNotification || (exports2.WorkDoneProgressCancelNotification = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.js
|
|
var require_protocol = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var Is2 = require_is2();
|
|
var vscode_jsonrpc_1 = require_main();
|
|
var messages_1 = require_messages2();
|
|
var protocol_implementation_1 = require_protocol_implementation();
|
|
exports2.ImplementationRequest = protocol_implementation_1.ImplementationRequest;
|
|
var protocol_typeDefinition_1 = require_protocol_typeDefinition();
|
|
exports2.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;
|
|
var protocol_workspaceFolders_1 = require_protocol_workspaceFolders();
|
|
exports2.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;
|
|
exports2.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;
|
|
var protocol_configuration_1 = require_protocol_configuration();
|
|
exports2.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;
|
|
var protocol_colorProvider_1 = require_protocol_colorProvider();
|
|
exports2.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;
|
|
exports2.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;
|
|
var protocol_foldingRange_1 = require_protocol_foldingRange();
|
|
exports2.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;
|
|
var protocol_declaration_1 = require_protocol_declaration();
|
|
exports2.DeclarationRequest = protocol_declaration_1.DeclarationRequest;
|
|
var protocol_selectionRange_1 = require_protocol_selectionRange();
|
|
exports2.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;
|
|
var protocol_progress_1 = require_protocol_progress();
|
|
exports2.WorkDoneProgress = protocol_progress_1.WorkDoneProgress;
|
|
exports2.WorkDoneProgressCreateRequest = protocol_progress_1.WorkDoneProgressCreateRequest;
|
|
exports2.WorkDoneProgressCancelNotification = protocol_progress_1.WorkDoneProgressCancelNotification;
|
|
var DocumentFilter2;
|
|
(function(DocumentFilter3) {
|
|
function is(value) {
|
|
const candidate = value;
|
|
return Is2.string(candidate.language) || Is2.string(candidate.scheme) || Is2.string(candidate.pattern);
|
|
}
|
|
DocumentFilter3.is = is;
|
|
})(DocumentFilter2 = exports2.DocumentFilter || (exports2.DocumentFilter = {}));
|
|
var DocumentSelector;
|
|
(function(DocumentSelector2) {
|
|
function is(value) {
|
|
if (!Array.isArray(value)) {
|
|
return false;
|
|
}
|
|
for (let elem of value) {
|
|
if (!Is2.string(elem) && !DocumentFilter2.is(elem)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
DocumentSelector2.is = is;
|
|
})(DocumentSelector = exports2.DocumentSelector || (exports2.DocumentSelector = {}));
|
|
var RegistrationRequest;
|
|
(function(RegistrationRequest2) {
|
|
RegistrationRequest2.type = new messages_1.ProtocolRequestType("client/registerCapability");
|
|
})(RegistrationRequest = exports2.RegistrationRequest || (exports2.RegistrationRequest = {}));
|
|
var UnregistrationRequest;
|
|
(function(UnregistrationRequest2) {
|
|
UnregistrationRequest2.type = new messages_1.ProtocolRequestType("client/unregisterCapability");
|
|
})(UnregistrationRequest = exports2.UnregistrationRequest || (exports2.UnregistrationRequest = {}));
|
|
var ResourceOperationKind;
|
|
(function(ResourceOperationKind2) {
|
|
ResourceOperationKind2.Create = "create";
|
|
ResourceOperationKind2.Rename = "rename";
|
|
ResourceOperationKind2.Delete = "delete";
|
|
})(ResourceOperationKind = exports2.ResourceOperationKind || (exports2.ResourceOperationKind = {}));
|
|
var FailureHandlingKind;
|
|
(function(FailureHandlingKind2) {
|
|
FailureHandlingKind2.Abort = "abort";
|
|
FailureHandlingKind2.Transactional = "transactional";
|
|
FailureHandlingKind2.TextOnlyTransactional = "textOnlyTransactional";
|
|
FailureHandlingKind2.Undo = "undo";
|
|
})(FailureHandlingKind = exports2.FailureHandlingKind || (exports2.FailureHandlingKind = {}));
|
|
var StaticRegistrationOptions;
|
|
(function(StaticRegistrationOptions2) {
|
|
function hasId(value) {
|
|
const candidate = value;
|
|
return candidate && Is2.string(candidate.id) && candidate.id.length > 0;
|
|
}
|
|
StaticRegistrationOptions2.hasId = hasId;
|
|
})(StaticRegistrationOptions = exports2.StaticRegistrationOptions || (exports2.StaticRegistrationOptions = {}));
|
|
var TextDocumentRegistrationOptions;
|
|
(function(TextDocumentRegistrationOptions2) {
|
|
function is(value) {
|
|
const candidate = value;
|
|
return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
|
|
}
|
|
TextDocumentRegistrationOptions2.is = is;
|
|
})(TextDocumentRegistrationOptions = exports2.TextDocumentRegistrationOptions || (exports2.TextDocumentRegistrationOptions = {}));
|
|
var WorkDoneProgressOptions;
|
|
(function(WorkDoneProgressOptions2) {
|
|
function is(value) {
|
|
const candidate = value;
|
|
return Is2.objectLiteral(candidate) && (candidate.workDoneProgress === void 0 || Is2.boolean(candidate.workDoneProgress));
|
|
}
|
|
WorkDoneProgressOptions2.is = is;
|
|
function hasWorkDoneProgress(value) {
|
|
const candidate = value;
|
|
return candidate && Is2.boolean(candidate.workDoneProgress);
|
|
}
|
|
WorkDoneProgressOptions2.hasWorkDoneProgress = hasWorkDoneProgress;
|
|
})(WorkDoneProgressOptions = exports2.WorkDoneProgressOptions || (exports2.WorkDoneProgressOptions = {}));
|
|
var InitializeRequest;
|
|
(function(InitializeRequest2) {
|
|
InitializeRequest2.type = new messages_1.ProtocolRequestType("initialize");
|
|
})(InitializeRequest = exports2.InitializeRequest || (exports2.InitializeRequest = {}));
|
|
var InitializeError;
|
|
(function(InitializeError2) {
|
|
InitializeError2.unknownProtocolVersion = 1;
|
|
})(InitializeError = exports2.InitializeError || (exports2.InitializeError = {}));
|
|
var InitializedNotification;
|
|
(function(InitializedNotification2) {
|
|
InitializedNotification2.type = new messages_1.ProtocolNotificationType("initialized");
|
|
})(InitializedNotification = exports2.InitializedNotification || (exports2.InitializedNotification = {}));
|
|
var ShutdownRequest;
|
|
(function(ShutdownRequest2) {
|
|
ShutdownRequest2.type = new messages_1.ProtocolRequestType0("shutdown");
|
|
})(ShutdownRequest = exports2.ShutdownRequest || (exports2.ShutdownRequest = {}));
|
|
var ExitNotification;
|
|
(function(ExitNotification2) {
|
|
ExitNotification2.type = new messages_1.ProtocolNotificationType0("exit");
|
|
})(ExitNotification = exports2.ExitNotification || (exports2.ExitNotification = {}));
|
|
var DidChangeConfigurationNotification2;
|
|
(function(DidChangeConfigurationNotification3) {
|
|
DidChangeConfigurationNotification3.type = new messages_1.ProtocolNotificationType("workspace/didChangeConfiguration");
|
|
})(DidChangeConfigurationNotification2 = exports2.DidChangeConfigurationNotification || (exports2.DidChangeConfigurationNotification = {}));
|
|
var MessageType;
|
|
(function(MessageType2) {
|
|
MessageType2.Error = 1;
|
|
MessageType2.Warning = 2;
|
|
MessageType2.Info = 3;
|
|
MessageType2.Log = 4;
|
|
})(MessageType = exports2.MessageType || (exports2.MessageType = {}));
|
|
var ShowMessageNotification;
|
|
(function(ShowMessageNotification2) {
|
|
ShowMessageNotification2.type = new messages_1.ProtocolNotificationType("window/showMessage");
|
|
})(ShowMessageNotification = exports2.ShowMessageNotification || (exports2.ShowMessageNotification = {}));
|
|
var ShowMessageRequest;
|
|
(function(ShowMessageRequest2) {
|
|
ShowMessageRequest2.type = new messages_1.ProtocolRequestType("window/showMessageRequest");
|
|
})(ShowMessageRequest = exports2.ShowMessageRequest || (exports2.ShowMessageRequest = {}));
|
|
var LogMessageNotification;
|
|
(function(LogMessageNotification2) {
|
|
LogMessageNotification2.type = new messages_1.ProtocolNotificationType("window/logMessage");
|
|
})(LogMessageNotification = exports2.LogMessageNotification || (exports2.LogMessageNotification = {}));
|
|
var TelemetryEventNotification;
|
|
(function(TelemetryEventNotification2) {
|
|
TelemetryEventNotification2.type = new messages_1.ProtocolNotificationType("telemetry/event");
|
|
})(TelemetryEventNotification = exports2.TelemetryEventNotification || (exports2.TelemetryEventNotification = {}));
|
|
var TextDocumentSyncKind;
|
|
(function(TextDocumentSyncKind2) {
|
|
TextDocumentSyncKind2.None = 0;
|
|
TextDocumentSyncKind2.Full = 1;
|
|
TextDocumentSyncKind2.Incremental = 2;
|
|
})(TextDocumentSyncKind = exports2.TextDocumentSyncKind || (exports2.TextDocumentSyncKind = {}));
|
|
var DidOpenTextDocumentNotification2;
|
|
(function(DidOpenTextDocumentNotification3) {
|
|
DidOpenTextDocumentNotification3.method = "textDocument/didOpen";
|
|
DidOpenTextDocumentNotification3.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification3.method);
|
|
})(DidOpenTextDocumentNotification2 = exports2.DidOpenTextDocumentNotification || (exports2.DidOpenTextDocumentNotification = {}));
|
|
var DidChangeTextDocumentNotification;
|
|
(function(DidChangeTextDocumentNotification2) {
|
|
DidChangeTextDocumentNotification2.method = "textDocument/didChange";
|
|
DidChangeTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification2.method);
|
|
})(DidChangeTextDocumentNotification = exports2.DidChangeTextDocumentNotification || (exports2.DidChangeTextDocumentNotification = {}));
|
|
var DidCloseTextDocumentNotification2;
|
|
(function(DidCloseTextDocumentNotification3) {
|
|
DidCloseTextDocumentNotification3.method = "textDocument/didClose";
|
|
DidCloseTextDocumentNotification3.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification3.method);
|
|
})(DidCloseTextDocumentNotification2 = exports2.DidCloseTextDocumentNotification || (exports2.DidCloseTextDocumentNotification = {}));
|
|
var DidSaveTextDocumentNotification;
|
|
(function(DidSaveTextDocumentNotification2) {
|
|
DidSaveTextDocumentNotification2.method = "textDocument/didSave";
|
|
DidSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification2.method);
|
|
})(DidSaveTextDocumentNotification = exports2.DidSaveTextDocumentNotification || (exports2.DidSaveTextDocumentNotification = {}));
|
|
var TextDocumentSaveReason;
|
|
(function(TextDocumentSaveReason2) {
|
|
TextDocumentSaveReason2.Manual = 1;
|
|
TextDocumentSaveReason2.AfterDelay = 2;
|
|
TextDocumentSaveReason2.FocusOut = 3;
|
|
})(TextDocumentSaveReason = exports2.TextDocumentSaveReason || (exports2.TextDocumentSaveReason = {}));
|
|
var WillSaveTextDocumentNotification;
|
|
(function(WillSaveTextDocumentNotification2) {
|
|
WillSaveTextDocumentNotification2.method = "textDocument/willSave";
|
|
WillSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification2.method);
|
|
})(WillSaveTextDocumentNotification = exports2.WillSaveTextDocumentNotification || (exports2.WillSaveTextDocumentNotification = {}));
|
|
var WillSaveTextDocumentWaitUntilRequest;
|
|
(function(WillSaveTextDocumentWaitUntilRequest2) {
|
|
WillSaveTextDocumentWaitUntilRequest2.method = "textDocument/willSaveWaitUntil";
|
|
WillSaveTextDocumentWaitUntilRequest2.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest2.method);
|
|
})(WillSaveTextDocumentWaitUntilRequest = exports2.WillSaveTextDocumentWaitUntilRequest || (exports2.WillSaveTextDocumentWaitUntilRequest = {}));
|
|
var DidChangeWatchedFilesNotification;
|
|
(function(DidChangeWatchedFilesNotification2) {
|
|
DidChangeWatchedFilesNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeWatchedFiles");
|
|
})(DidChangeWatchedFilesNotification = exports2.DidChangeWatchedFilesNotification || (exports2.DidChangeWatchedFilesNotification = {}));
|
|
var FileChangeType;
|
|
(function(FileChangeType2) {
|
|
FileChangeType2.Created = 1;
|
|
FileChangeType2.Changed = 2;
|
|
FileChangeType2.Deleted = 3;
|
|
})(FileChangeType = exports2.FileChangeType || (exports2.FileChangeType = {}));
|
|
var WatchKind;
|
|
(function(WatchKind2) {
|
|
WatchKind2.Create = 1;
|
|
WatchKind2.Change = 2;
|
|
WatchKind2.Delete = 4;
|
|
})(WatchKind = exports2.WatchKind || (exports2.WatchKind = {}));
|
|
var PublishDiagnosticsNotification;
|
|
(function(PublishDiagnosticsNotification2) {
|
|
PublishDiagnosticsNotification2.type = new messages_1.ProtocolNotificationType("textDocument/publishDiagnostics");
|
|
})(PublishDiagnosticsNotification = exports2.PublishDiagnosticsNotification || (exports2.PublishDiagnosticsNotification = {}));
|
|
var CompletionTriggerKind;
|
|
(function(CompletionTriggerKind2) {
|
|
CompletionTriggerKind2.Invoked = 1;
|
|
CompletionTriggerKind2.TriggerCharacter = 2;
|
|
CompletionTriggerKind2.TriggerForIncompleteCompletions = 3;
|
|
})(CompletionTriggerKind = exports2.CompletionTriggerKind || (exports2.CompletionTriggerKind = {}));
|
|
var CompletionRequest;
|
|
(function(CompletionRequest2) {
|
|
CompletionRequest2.method = "textDocument/completion";
|
|
CompletionRequest2.type = new messages_1.ProtocolRequestType(CompletionRequest2.method);
|
|
CompletionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(CompletionRequest = exports2.CompletionRequest || (exports2.CompletionRequest = {}));
|
|
var CompletionResolveRequest;
|
|
(function(CompletionResolveRequest2) {
|
|
CompletionResolveRequest2.method = "completionItem/resolve";
|
|
CompletionResolveRequest2.type = new messages_1.ProtocolRequestType(CompletionResolveRequest2.method);
|
|
})(CompletionResolveRequest = exports2.CompletionResolveRequest || (exports2.CompletionResolveRequest = {}));
|
|
var HoverRequest;
|
|
(function(HoverRequest2) {
|
|
HoverRequest2.method = "textDocument/hover";
|
|
HoverRequest2.type = new messages_1.ProtocolRequestType(HoverRequest2.method);
|
|
})(HoverRequest = exports2.HoverRequest || (exports2.HoverRequest = {}));
|
|
var SignatureHelpTriggerKind;
|
|
(function(SignatureHelpTriggerKind2) {
|
|
SignatureHelpTriggerKind2.Invoked = 1;
|
|
SignatureHelpTriggerKind2.TriggerCharacter = 2;
|
|
SignatureHelpTriggerKind2.ContentChange = 3;
|
|
})(SignatureHelpTriggerKind = exports2.SignatureHelpTriggerKind || (exports2.SignatureHelpTriggerKind = {}));
|
|
var SignatureHelpRequest;
|
|
(function(SignatureHelpRequest2) {
|
|
SignatureHelpRequest2.method = "textDocument/signatureHelp";
|
|
SignatureHelpRequest2.type = new messages_1.ProtocolRequestType(SignatureHelpRequest2.method);
|
|
})(SignatureHelpRequest = exports2.SignatureHelpRequest || (exports2.SignatureHelpRequest = {}));
|
|
var DefinitionRequest;
|
|
(function(DefinitionRequest2) {
|
|
DefinitionRequest2.method = "textDocument/definition";
|
|
DefinitionRequest2.type = new messages_1.ProtocolRequestType(DefinitionRequest2.method);
|
|
DefinitionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(DefinitionRequest = exports2.DefinitionRequest || (exports2.DefinitionRequest = {}));
|
|
var ReferencesRequest;
|
|
(function(ReferencesRequest2) {
|
|
ReferencesRequest2.method = "textDocument/references";
|
|
ReferencesRequest2.type = new messages_1.ProtocolRequestType(ReferencesRequest2.method);
|
|
ReferencesRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(ReferencesRequest = exports2.ReferencesRequest || (exports2.ReferencesRequest = {}));
|
|
var DocumentHighlightRequest;
|
|
(function(DocumentHighlightRequest2) {
|
|
DocumentHighlightRequest2.method = "textDocument/documentHighlight";
|
|
DocumentHighlightRequest2.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest2.method);
|
|
DocumentHighlightRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(DocumentHighlightRequest = exports2.DocumentHighlightRequest || (exports2.DocumentHighlightRequest = {}));
|
|
var DocumentSymbolRequest;
|
|
(function(DocumentSymbolRequest2) {
|
|
DocumentSymbolRequest2.method = "textDocument/documentSymbol";
|
|
DocumentSymbolRequest2.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest2.method);
|
|
DocumentSymbolRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(DocumentSymbolRequest = exports2.DocumentSymbolRequest || (exports2.DocumentSymbolRequest = {}));
|
|
var CodeActionRequest2;
|
|
(function(CodeActionRequest3) {
|
|
CodeActionRequest3.method = "textDocument/codeAction";
|
|
CodeActionRequest3.type = new messages_1.ProtocolRequestType(CodeActionRequest3.method);
|
|
CodeActionRequest3.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(CodeActionRequest2 = exports2.CodeActionRequest || (exports2.CodeActionRequest = {}));
|
|
var WorkspaceSymbolRequest;
|
|
(function(WorkspaceSymbolRequest2) {
|
|
WorkspaceSymbolRequest2.method = "workspace/symbol";
|
|
WorkspaceSymbolRequest2.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest2.method);
|
|
WorkspaceSymbolRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(WorkspaceSymbolRequest = exports2.WorkspaceSymbolRequest || (exports2.WorkspaceSymbolRequest = {}));
|
|
var CodeLensRequest;
|
|
(function(CodeLensRequest2) {
|
|
CodeLensRequest2.type = new messages_1.ProtocolRequestType("textDocument/codeLens");
|
|
CodeLensRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(CodeLensRequest = exports2.CodeLensRequest || (exports2.CodeLensRequest = {}));
|
|
var CodeLensResolveRequest;
|
|
(function(CodeLensResolveRequest2) {
|
|
CodeLensResolveRequest2.type = new messages_1.ProtocolRequestType("codeLens/resolve");
|
|
})(CodeLensResolveRequest = exports2.CodeLensResolveRequest || (exports2.CodeLensResolveRequest = {}));
|
|
var DocumentLinkRequest;
|
|
(function(DocumentLinkRequest2) {
|
|
DocumentLinkRequest2.method = "textDocument/documentLink";
|
|
DocumentLinkRequest2.type = new messages_1.ProtocolRequestType(DocumentLinkRequest2.method);
|
|
DocumentLinkRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
|
|
})(DocumentLinkRequest = exports2.DocumentLinkRequest || (exports2.DocumentLinkRequest = {}));
|
|
var DocumentLinkResolveRequest;
|
|
(function(DocumentLinkResolveRequest2) {
|
|
DocumentLinkResolveRequest2.type = new messages_1.ProtocolRequestType("documentLink/resolve");
|
|
})(DocumentLinkResolveRequest = exports2.DocumentLinkResolveRequest || (exports2.DocumentLinkResolveRequest = {}));
|
|
var DocumentFormattingRequest;
|
|
(function(DocumentFormattingRequest2) {
|
|
DocumentFormattingRequest2.method = "textDocument/formatting";
|
|
DocumentFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest2.method);
|
|
})(DocumentFormattingRequest = exports2.DocumentFormattingRequest || (exports2.DocumentFormattingRequest = {}));
|
|
var DocumentRangeFormattingRequest;
|
|
(function(DocumentRangeFormattingRequest2) {
|
|
DocumentRangeFormattingRequest2.method = "textDocument/rangeFormatting";
|
|
DocumentRangeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest2.method);
|
|
})(DocumentRangeFormattingRequest = exports2.DocumentRangeFormattingRequest || (exports2.DocumentRangeFormattingRequest = {}));
|
|
var DocumentOnTypeFormattingRequest;
|
|
(function(DocumentOnTypeFormattingRequest2) {
|
|
DocumentOnTypeFormattingRequest2.method = "textDocument/onTypeFormatting";
|
|
DocumentOnTypeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest2.method);
|
|
})(DocumentOnTypeFormattingRequest = exports2.DocumentOnTypeFormattingRequest || (exports2.DocumentOnTypeFormattingRequest = {}));
|
|
var RenameRequest;
|
|
(function(RenameRequest2) {
|
|
RenameRequest2.method = "textDocument/rename";
|
|
RenameRequest2.type = new messages_1.ProtocolRequestType(RenameRequest2.method);
|
|
})(RenameRequest = exports2.RenameRequest || (exports2.RenameRequest = {}));
|
|
var PrepareRenameRequest;
|
|
(function(PrepareRenameRequest2) {
|
|
PrepareRenameRequest2.method = "textDocument/prepareRename";
|
|
PrepareRenameRequest2.type = new messages_1.ProtocolRequestType(PrepareRenameRequest2.method);
|
|
})(PrepareRenameRequest = exports2.PrepareRenameRequest || (exports2.PrepareRenameRequest = {}));
|
|
var ExecuteCommandRequest2;
|
|
(function(ExecuteCommandRequest3) {
|
|
ExecuteCommandRequest3.type = new messages_1.ProtocolRequestType("workspace/executeCommand");
|
|
})(ExecuteCommandRequest2 = exports2.ExecuteCommandRequest || (exports2.ExecuteCommandRequest = {}));
|
|
var ApplyWorkspaceEditRequest;
|
|
(function(ApplyWorkspaceEditRequest2) {
|
|
ApplyWorkspaceEditRequest2.type = new messages_1.ProtocolRequestType("workspace/applyEdit");
|
|
})(ApplyWorkspaceEditRequest = exports2.ApplyWorkspaceEditRequest || (exports2.ApplyWorkspaceEditRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.callHierarchy.proposed.js
|
|
var require_protocol_callHierarchy_proposed = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var messages_1 = require_messages2();
|
|
var CallHierarchyPrepareRequest;
|
|
(function(CallHierarchyPrepareRequest2) {
|
|
CallHierarchyPrepareRequest2.method = "textDocument/prepareCallHierarchy";
|
|
CallHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest2.method);
|
|
})(CallHierarchyPrepareRequest = exports2.CallHierarchyPrepareRequest || (exports2.CallHierarchyPrepareRequest = {}));
|
|
var CallHierarchyIncomingCallsRequest;
|
|
(function(CallHierarchyIncomingCallsRequest2) {
|
|
CallHierarchyIncomingCallsRequest2.method = "callHierarchy/incomingCalls";
|
|
CallHierarchyIncomingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest2.method);
|
|
})(CallHierarchyIncomingCallsRequest = exports2.CallHierarchyIncomingCallsRequest || (exports2.CallHierarchyIncomingCallsRequest = {}));
|
|
var CallHierarchyOutgoingCallsRequest;
|
|
(function(CallHierarchyOutgoingCallsRequest2) {
|
|
CallHierarchyOutgoingCallsRequest2.method = "callHierarchy/outgoingCalls";
|
|
CallHierarchyOutgoingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest2.method);
|
|
})(CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyOutgoingCallsRequest || (exports2.CallHierarchyOutgoingCallsRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/protocol.sematicTokens.proposed.js
|
|
var require_protocol_sematicTokens_proposed = __commonJS((exports2) => {
|
|
"use strict";
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var messages_1 = require_messages2();
|
|
var SemanticTokenTypes;
|
|
(function(SemanticTokenTypes2) {
|
|
SemanticTokenTypes2["comment"] = "comment";
|
|
SemanticTokenTypes2["keyword"] = "keyword";
|
|
SemanticTokenTypes2["string"] = "string";
|
|
SemanticTokenTypes2["number"] = "number";
|
|
SemanticTokenTypes2["regexp"] = "regexp";
|
|
SemanticTokenTypes2["operator"] = "operator";
|
|
SemanticTokenTypes2["namespace"] = "namespace";
|
|
SemanticTokenTypes2["type"] = "type";
|
|
SemanticTokenTypes2["struct"] = "struct";
|
|
SemanticTokenTypes2["class"] = "class";
|
|
SemanticTokenTypes2["interface"] = "interface";
|
|
SemanticTokenTypes2["enum"] = "enum";
|
|
SemanticTokenTypes2["typeParameter"] = "typeParameter";
|
|
SemanticTokenTypes2["function"] = "function";
|
|
SemanticTokenTypes2["member"] = "member";
|
|
SemanticTokenTypes2["property"] = "property";
|
|
SemanticTokenTypes2["macro"] = "macro";
|
|
SemanticTokenTypes2["variable"] = "variable";
|
|
SemanticTokenTypes2["parameter"] = "parameter";
|
|
SemanticTokenTypes2["label"] = "label";
|
|
})(SemanticTokenTypes = exports2.SemanticTokenTypes || (exports2.SemanticTokenTypes = {}));
|
|
var SemanticTokenModifiers;
|
|
(function(SemanticTokenModifiers2) {
|
|
SemanticTokenModifiers2["documentation"] = "documentation";
|
|
SemanticTokenModifiers2["declaration"] = "declaration";
|
|
SemanticTokenModifiers2["definition"] = "definition";
|
|
SemanticTokenModifiers2["reference"] = "reference";
|
|
SemanticTokenModifiers2["static"] = "static";
|
|
SemanticTokenModifiers2["abstract"] = "abstract";
|
|
SemanticTokenModifiers2["deprecated"] = "deprecated";
|
|
SemanticTokenModifiers2["async"] = "async";
|
|
SemanticTokenModifiers2["volatile"] = "volatile";
|
|
SemanticTokenModifiers2["readonly"] = "readonly";
|
|
})(SemanticTokenModifiers = exports2.SemanticTokenModifiers || (exports2.SemanticTokenModifiers = {}));
|
|
var SemanticTokens;
|
|
(function(SemanticTokens2) {
|
|
function is(value) {
|
|
const candidate = value;
|
|
return candidate !== void 0 && (candidate.resultId === void 0 || typeof candidate.resultId === "string") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === "number");
|
|
}
|
|
SemanticTokens2.is = is;
|
|
})(SemanticTokens = exports2.SemanticTokens || (exports2.SemanticTokens = {}));
|
|
var SemanticTokensRequest;
|
|
(function(SemanticTokensRequest2) {
|
|
SemanticTokensRequest2.method = "textDocument/semanticTokens";
|
|
SemanticTokensRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRequest2.method);
|
|
})(SemanticTokensRequest = exports2.SemanticTokensRequest || (exports2.SemanticTokensRequest = {}));
|
|
var SemanticTokensEditsRequest;
|
|
(function(SemanticTokensEditsRequest2) {
|
|
SemanticTokensEditsRequest2.method = "textDocument/semanticTokens/edits";
|
|
SemanticTokensEditsRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensEditsRequest2.method);
|
|
})(SemanticTokensEditsRequest = exports2.SemanticTokensEditsRequest || (exports2.SemanticTokensEditsRequest = {}));
|
|
var SemanticTokensRangeRequest;
|
|
(function(SemanticTokensRangeRequest2) {
|
|
SemanticTokensRangeRequest2.method = "textDocument/semanticTokens/range";
|
|
SemanticTokensRangeRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest2.method);
|
|
})(SemanticTokensRangeRequest = exports2.SemanticTokensRangeRequest || (exports2.SemanticTokensRangeRequest = {}));
|
|
});
|
|
|
|
// node_modules/vscode-languageserver-protocol/lib/main.js
|
|
var require_main3 = __commonJS((exports2) => {
|
|
"use strict";
|
|
function __export2(m) {
|
|
for (var p in m)
|
|
if (!exports2.hasOwnProperty(p))
|
|
exports2[p] = m[p];
|
|
}
|
|
Object.defineProperty(exports2, "__esModule", {value: true});
|
|
var vscode_jsonrpc_1 = require_main();
|
|
exports2.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;
|
|
exports2.ResponseError = vscode_jsonrpc_1.ResponseError;
|
|
exports2.CancellationToken = vscode_jsonrpc_1.CancellationToken;
|
|
exports2.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;
|
|
exports2.Disposable = vscode_jsonrpc_1.Disposable;
|
|
exports2.Event = vscode_jsonrpc_1.Event;
|
|
exports2.Emitter = vscode_jsonrpc_1.Emitter;
|
|
exports2.Trace = vscode_jsonrpc_1.Trace;
|
|
exports2.TraceFormat = vscode_jsonrpc_1.TraceFormat;
|
|
exports2.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;
|
|
exports2.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;
|
|
exports2.RequestType = vscode_jsonrpc_1.RequestType;
|
|
exports2.RequestType0 = vscode_jsonrpc_1.RequestType0;
|
|
exports2.NotificationType = vscode_jsonrpc_1.NotificationType;
|
|
exports2.NotificationType0 = vscode_jsonrpc_1.NotificationType0;
|
|
exports2.MessageReader = vscode_jsonrpc_1.MessageReader;
|
|
exports2.MessageWriter = vscode_jsonrpc_1.MessageWriter;
|
|
exports2.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;
|
|
exports2.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;
|
|
exports2.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;
|
|
exports2.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;
|
|
exports2.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;
|
|
exports2.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;
|
|
exports2.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;
|
|
exports2.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;
|
|
exports2.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;
|
|
exports2.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;
|
|
exports2.ProgressType = vscode_jsonrpc_1.ProgressType;
|
|
__export2(require_main2());
|
|
__export2(require_protocol());
|
|
var callHierarchy = require_protocol_callHierarchy_proposed();
|
|
var st = require_protocol_sematicTokens_proposed();
|
|
var Proposed;
|
|
(function(Proposed2) {
|
|
let CallHierarchyPrepareRequest;
|
|
(function(CallHierarchyPrepareRequest2) {
|
|
CallHierarchyPrepareRequest2.method = callHierarchy.CallHierarchyPrepareRequest.method;
|
|
CallHierarchyPrepareRequest2.type = callHierarchy.CallHierarchyPrepareRequest.type;
|
|
})(CallHierarchyPrepareRequest = Proposed2.CallHierarchyPrepareRequest || (Proposed2.CallHierarchyPrepareRequest = {}));
|
|
let CallHierarchyIncomingCallsRequest;
|
|
(function(CallHierarchyIncomingCallsRequest2) {
|
|
CallHierarchyIncomingCallsRequest2.method = callHierarchy.CallHierarchyIncomingCallsRequest.method;
|
|
CallHierarchyIncomingCallsRequest2.type = callHierarchy.CallHierarchyIncomingCallsRequest.type;
|
|
})(CallHierarchyIncomingCallsRequest = Proposed2.CallHierarchyIncomingCallsRequest || (Proposed2.CallHierarchyIncomingCallsRequest = {}));
|
|
let CallHierarchyOutgoingCallsRequest;
|
|
(function(CallHierarchyOutgoingCallsRequest2) {
|
|
CallHierarchyOutgoingCallsRequest2.method = callHierarchy.CallHierarchyOutgoingCallsRequest.method;
|
|
CallHierarchyOutgoingCallsRequest2.type = callHierarchy.CallHierarchyOutgoingCallsRequest.type;
|
|
})(CallHierarchyOutgoingCallsRequest = Proposed2.CallHierarchyOutgoingCallsRequest || (Proposed2.CallHierarchyOutgoingCallsRequest = {}));
|
|
Proposed2.SemanticTokenTypes = st.SemanticTokenTypes;
|
|
Proposed2.SemanticTokenModifiers = st.SemanticTokenModifiers;
|
|
Proposed2.SemanticTokens = st.SemanticTokens;
|
|
let SemanticTokensRequest;
|
|
(function(SemanticTokensRequest2) {
|
|
SemanticTokensRequest2.method = st.SemanticTokensRequest.method;
|
|
SemanticTokensRequest2.type = st.SemanticTokensRequest.type;
|
|
})(SemanticTokensRequest = Proposed2.SemanticTokensRequest || (Proposed2.SemanticTokensRequest = {}));
|
|
let SemanticTokensEditsRequest;
|
|
(function(SemanticTokensEditsRequest2) {
|
|
SemanticTokensEditsRequest2.method = st.SemanticTokensEditsRequest.method;
|
|
SemanticTokensEditsRequest2.type = st.SemanticTokensEditsRequest.type;
|
|
})(SemanticTokensEditsRequest = Proposed2.SemanticTokensEditsRequest || (Proposed2.SemanticTokensEditsRequest = {}));
|
|
let SemanticTokensRangeRequest;
|
|
(function(SemanticTokensRangeRequest2) {
|
|
SemanticTokensRangeRequest2.method = st.SemanticTokensRangeRequest.method;
|
|
SemanticTokensRangeRequest2.type = st.SemanticTokensRangeRequest.type;
|
|
})(SemanticTokensRangeRequest = Proposed2.SemanticTokensRangeRequest || (Proposed2.SemanticTokensRangeRequest = {}));
|
|
})(Proposed = exports2.Proposed || (exports2.Proposed = {}));
|
|
function createProtocolConnection(reader, writer, logger, strategy) {
|
|
return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);
|
|
}
|
|
exports2.createProtocolConnection = createProtocolConnection;
|
|
});
|
|
|
|
// entry-ns:index.ts
|
|
__export(exports, {
|
|
activate: () => activate,
|
|
deactivate: () => deactivate
|
|
});
|
|
|
|
// src/index.ts
|
|
var import_path2 = __toModule(require("path"));
|
|
var import_fs2 = __toModule(require("fs"));
|
|
var import_coc3 = __toModule(require("coc.nvim"));
|
|
var import_vscode_languageserver_protocol = __toModule(require_main3());
|
|
|
|
// src/utils.ts
|
|
var import_fs = __toModule(require("fs"));
|
|
var import_path = __toModule(require("path"));
|
|
"use strict";
|
|
function exists(file) {
|
|
return new Promise((resolve, _reject) => {
|
|
import_fs.default.exists(file, (value) => {
|
|
resolve(value);
|
|
});
|
|
});
|
|
}
|
|
async function findEslint(rootPath) {
|
|
const platform = process.platform;
|
|
if (platform === "win32" && await exists(import_path.default.join(rootPath, "node_modules", ".bin", "eslint.cmd"))) {
|
|
return import_path.default.join(".", "node_modules", ".bin", "eslint.cmd");
|
|
} else if ((platform === "linux" || platform === "darwin") && await exists(import_path.default.join(rootPath, "node_modules", ".bin", "eslint"))) {
|
|
return import_path.default.join(".", "node_modules", ".bin", "eslint");
|
|
} else {
|
|
return "eslint";
|
|
}
|
|
}
|
|
var NodeType;
|
|
(function(NodeType2) {
|
|
NodeType2["text"] = "text";
|
|
NodeType2["separator"] = "separator";
|
|
NodeType2["brace"] = "brace";
|
|
NodeType2["bracket"] = "bracket";
|
|
NodeType2["questionMark"] = "questionMark";
|
|
NodeType2["star"] = "star";
|
|
NodeType2["globStar"] = "globStar";
|
|
})(NodeType || (NodeType = {}));
|
|
function escapeRegExpCharacters(value) {
|
|
return value.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g, "\\$&");
|
|
}
|
|
var PatternParser = class {
|
|
constructor(value, mode = "pattern") {
|
|
this.value = value;
|
|
this.index = 0;
|
|
this.mode = mode;
|
|
this.stopChar = mode === "pattern" ? void 0 : "}";
|
|
}
|
|
makeTextNode(start) {
|
|
return {type: NodeType.text, value: escapeRegExpCharacters(this.value.substring(start, this.index))};
|
|
}
|
|
next() {
|
|
let start = this.index;
|
|
let ch;
|
|
while ((ch = this.value[this.index]) !== this.stopChar) {
|
|
switch (ch) {
|
|
case "/":
|
|
if (start < this.index) {
|
|
return this.makeTextNode(start);
|
|
} else {
|
|
this.index++;
|
|
return {type: NodeType.separator};
|
|
}
|
|
case "?":
|
|
this.index++;
|
|
return {type: NodeType.questionMark};
|
|
case "*":
|
|
if (this.value[this.index + 1] === "*") {
|
|
this.index += 2;
|
|
return {type: NodeType.globStar};
|
|
} else {
|
|
this.index++;
|
|
return {type: NodeType.star};
|
|
}
|
|
case "{":
|
|
if (start < this.index) {
|
|
return this.makeTextNode(start);
|
|
} else {
|
|
const bracketParser = new PatternParser(this.value.substring(this.index + 1), "brace");
|
|
const alternatives = [];
|
|
let node;
|
|
while ((node = bracketParser.next()) !== void 0) {
|
|
if (node.type === NodeType.globStar || node.type === NodeType.separator) {
|
|
throw new Error(`Invalid glob pattern ${this.index}. Stopped at ${this.index}`);
|
|
}
|
|
alternatives.push(node);
|
|
}
|
|
this.index = this.index + bracketParser.index + 2;
|
|
return {type: NodeType.brace, alternatives};
|
|
}
|
|
case ",":
|
|
if (this.mode === "brace") {
|
|
if (start < this.index) {
|
|
let result = this.makeTextNode(start);
|
|
this.index++;
|
|
return result;
|
|
}
|
|
}
|
|
this.index++;
|
|
break;
|
|
case "[":
|
|
const buffer = [];
|
|
this.index++;
|
|
const firstIndex = this.index;
|
|
while (this.index < this.value.length) {
|
|
const ch2 = this.value[this.index];
|
|
if (this.index === firstIndex) {
|
|
switch (ch2) {
|
|
case "]":
|
|
buffer.push(ch2);
|
|
break;
|
|
case "!":
|
|
case "^":
|
|
buffer.push("^");
|
|
break;
|
|
default:
|
|
buffer.push(escapeRegExpCharacters(ch2));
|
|
break;
|
|
}
|
|
} else if (ch2 === "-") {
|
|
buffer.push(ch2);
|
|
} else if (ch2 === "]") {
|
|
this.index++;
|
|
return {type: NodeType.bracket, value: buffer.join("")};
|
|
} else {
|
|
buffer.push(escapeRegExpCharacters(ch2));
|
|
}
|
|
this.index++;
|
|
}
|
|
throw new Error(`Invalid glob pattern ${this.index}. Stopped at ${this.index}`);
|
|
default:
|
|
this.index++;
|
|
}
|
|
}
|
|
return start === this.index ? void 0 : this.makeTextNode(start);
|
|
}
|
|
};
|
|
function convert2RegExp(pattern) {
|
|
const separator = process.platform === "win32" ? "\\\\" : "\\/";
|
|
const fileChar = `[^${separator}]`;
|
|
function convertNode(node) {
|
|
switch (node.type) {
|
|
case NodeType.separator:
|
|
return separator;
|
|
case NodeType.text:
|
|
return node.value;
|
|
case NodeType.questionMark:
|
|
return fileChar;
|
|
case NodeType.star:
|
|
return `${fileChar}*?`;
|
|
case NodeType.globStar:
|
|
return `(?:${fileChar}|(?:(?:${fileChar}${separator})+${fileChar}))*?`;
|
|
case NodeType.bracket:
|
|
return `[${node.value}]`;
|
|
case NodeType.brace: {
|
|
let buffer = [];
|
|
for (const child of node.alternatives) {
|
|
buffer.push(convertNode(child));
|
|
}
|
|
return `(?:${buffer.join("|")})`;
|
|
}
|
|
}
|
|
}
|
|
try {
|
|
const buffer = ["^"];
|
|
let parser = new PatternParser(pattern);
|
|
let node;
|
|
while ((node = parser.next()) !== void 0) {
|
|
buffer.push(convertNode(node));
|
|
}
|
|
return buffer.length > 0 ? new RegExp(buffer.join("")) : void 0;
|
|
} catch (err) {
|
|
console.error(err);
|
|
return void 0;
|
|
}
|
|
}
|
|
function toOSPath(path3) {
|
|
if (process.platform === "win32") {
|
|
path3 = path3.replace(/^\/(\w)\//, "$1:\\");
|
|
return path3.replace(/\//g, "\\");
|
|
} else {
|
|
return path3;
|
|
}
|
|
}
|
|
function toPosixPath(path3) {
|
|
if (process.platform !== "win32") {
|
|
return path3;
|
|
}
|
|
return path3.replace(/\\/g, "/");
|
|
}
|
|
var Semaphore = class {
|
|
constructor(capacity = 1) {
|
|
if (capacity <= 0) {
|
|
throw new Error("Capacity must be greater than 0");
|
|
}
|
|
this._capacity = capacity;
|
|
this._active = 0;
|
|
this._waiting = [];
|
|
}
|
|
lock(thunk) {
|
|
return new Promise((resolve, reject) => {
|
|
this._waiting.push({thunk, resolve, reject});
|
|
this.runNext();
|
|
});
|
|
}
|
|
get active() {
|
|
return this._active;
|
|
}
|
|
runNext() {
|
|
if (this._waiting.length === 0 || this._active === this._capacity) {
|
|
return;
|
|
}
|
|
setImmediate(() => this.doRunNext());
|
|
}
|
|
doRunNext() {
|
|
if (this._waiting.length === 0 || this._active === this._capacity) {
|
|
return;
|
|
}
|
|
const next = this._waiting.shift();
|
|
this._active++;
|
|
if (this._active > this._capacity) {
|
|
throw new Error(`To many thunks active`);
|
|
}
|
|
try {
|
|
const result = next.thunk();
|
|
if (result instanceof Promise) {
|
|
result.then((value) => {
|
|
this._active--;
|
|
next.resolve(value);
|
|
this.runNext();
|
|
}, (err) => {
|
|
this._active--;
|
|
next.reject(err);
|
|
this.runNext();
|
|
});
|
|
} else {
|
|
this._active--;
|
|
next.resolve(result);
|
|
this.runNext();
|
|
}
|
|
} catch (err) {
|
|
this._active--;
|
|
next.reject(err);
|
|
this.runNext();
|
|
}
|
|
}
|
|
};
|
|
|
|
// src/task.ts
|
|
var import_coc = __toModule(require("coc.nvim"));
|
|
var import_coc2 = __toModule(require("coc.nvim"));
|
|
var errorRegex = /^(.+):(\d+):(\d+):\s*(.+?)\s\[(\w+)\/(.*)\]/;
|
|
var EslintTask2 = class {
|
|
constructor() {
|
|
this.disposables = [];
|
|
this.statusItem = import_coc.window.createStatusBarItem(1, {progress: true});
|
|
let task = this.task = import_coc.workspace.createTask("ESLINT");
|
|
this.disposables.push(import_coc.commands.registerCommand(EslintTask2.id, async () => {
|
|
let opts = await this.getOptions();
|
|
let started = await this.start(opts);
|
|
if (started) {
|
|
this.statusItem.text = "compiling";
|
|
this.statusItem.isProgress = true;
|
|
this.statusItem.show();
|
|
import_coc.workspace.nvim.call("setqflist", [[]], true);
|
|
}
|
|
}));
|
|
task.onExit((code) => {
|
|
if (code != 0) {
|
|
import_coc.window.showMessage(`Eslint found issues`, "warning");
|
|
}
|
|
this.onStop();
|
|
});
|
|
task.onStdout((lines) => {
|
|
for (let line of lines) {
|
|
this.onLine(line);
|
|
}
|
|
});
|
|
task.onStderr((lines) => {
|
|
import_coc.window.showMessage(`TSC error: ` + lines.join("\n"), "error");
|
|
});
|
|
this.disposables.push(import_coc2.Disposable.create(() => {
|
|
task.dispose();
|
|
}));
|
|
}
|
|
async start(options) {
|
|
return await this.task.start(options);
|
|
}
|
|
onStop() {
|
|
this.statusItem.hide();
|
|
}
|
|
onLine(line) {
|
|
let ms = line.match(errorRegex);
|
|
if (!ms)
|
|
return;
|
|
let fullpath = ms[1];
|
|
let uri = import_coc.Uri.file(fullpath).toString();
|
|
let doc = import_coc.workspace.getDocument(uri);
|
|
let bufnr = doc ? doc.bufnr : null;
|
|
let item = {
|
|
filename: fullpath,
|
|
lnum: Number(ms[2]),
|
|
col: Number(ms[3]),
|
|
text: `${ms[4]} [${ms[6]}]`,
|
|
type: /error/i.test(ms[5]) ? "E" : "W"
|
|
};
|
|
if (bufnr)
|
|
item.bufnr = bufnr;
|
|
import_coc.workspace.nvim.call("setqflist", [[item], "a"]);
|
|
}
|
|
async getOptions() {
|
|
let root = import_coc.Uri.parse(import_coc.workspace.workspaceFolder.uri).fsPath;
|
|
let cmd = await findEslint(root);
|
|
let config = import_coc.workspace.getConfiguration("eslint");
|
|
let args = config.get("lintTask.options", ["."]);
|
|
return {
|
|
cmd,
|
|
args: args.concat(["-f", "unix", "--no-color"]),
|
|
cwd: root
|
|
};
|
|
}
|
|
dispose() {
|
|
import_coc.disposeAll(this.disposables);
|
|
}
|
|
};
|
|
var EslintTask = EslintTask2;
|
|
EslintTask.id = "eslint.lintProject";
|
|
EslintTask.startTexts = ["Starting compilation in watch mode", "Starting incremental compilation"];
|
|
var task_default = EslintTask;
|
|
|
|
// src/index.ts
|
|
"use strict";
|
|
var ConfigurationTarget;
|
|
(function(ConfigurationTarget2) {
|
|
ConfigurationTarget2[ConfigurationTarget2["Global"] = 0] = "Global";
|
|
ConfigurationTarget2[ConfigurationTarget2["User"] = 1] = "User";
|
|
ConfigurationTarget2[ConfigurationTarget2["Workspace"] = 2] = "Workspace";
|
|
})(ConfigurationTarget || (ConfigurationTarget = {}));
|
|
var Is;
|
|
(function(Is2) {
|
|
const toString = Object.prototype.toString;
|
|
function boolean(value) {
|
|
return value === true || value === false;
|
|
}
|
|
Is2.boolean = boolean;
|
|
function string(value) {
|
|
return toString.call(value) === "[object String]";
|
|
}
|
|
Is2.string = string;
|
|
function objectLiteral(value) {
|
|
return value !== null && value !== void 0 && !Array.isArray(value) && typeof value === "object";
|
|
}
|
|
Is2.objectLiteral = objectLiteral;
|
|
})(Is || (Is = {}));
|
|
var ValidateItem;
|
|
(function(ValidateItem2) {
|
|
function is(item) {
|
|
const candidate = item;
|
|
return candidate && Is.string(candidate.language) && (Is.boolean(candidate.autoFix) || candidate.autoFix === void 0);
|
|
}
|
|
ValidateItem2.is = is;
|
|
})(ValidateItem || (ValidateItem = {}));
|
|
var LegacyDirectoryItem;
|
|
(function(LegacyDirectoryItem2) {
|
|
function is(item) {
|
|
const candidate = item;
|
|
return candidate && Is.string(candidate.directory) && Is.boolean(candidate.changeProcessCWD);
|
|
}
|
|
LegacyDirectoryItem2.is = is;
|
|
})(LegacyDirectoryItem || (LegacyDirectoryItem = {}));
|
|
var ModeEnum;
|
|
(function(ModeEnum2) {
|
|
ModeEnum2["auto"] = "auto";
|
|
ModeEnum2["location"] = "location";
|
|
})(ModeEnum || (ModeEnum = {}));
|
|
(function(ModeEnum2) {
|
|
function is(value) {
|
|
return value === ModeEnum2.auto || value === ModeEnum2.location;
|
|
}
|
|
ModeEnum2.is = is;
|
|
})(ModeEnum || (ModeEnum = {}));
|
|
var ModeItem;
|
|
(function(ModeItem2) {
|
|
function is(item) {
|
|
const candidate = item;
|
|
return candidate && ModeEnum.is(candidate.mode);
|
|
}
|
|
ModeItem2.is = is;
|
|
})(ModeItem || (ModeItem = {}));
|
|
var DirectoryItem;
|
|
(function(DirectoryItem2) {
|
|
function is(item) {
|
|
const candidate = item;
|
|
return candidate && Is.string(candidate.directory) && (Is.boolean(candidate["!cwd"]) || candidate["!cwd"] === void 0);
|
|
}
|
|
DirectoryItem2.is = is;
|
|
})(DirectoryItem || (DirectoryItem = {}));
|
|
var PatternItem;
|
|
(function(PatternItem2) {
|
|
function is(item) {
|
|
const candidate = item;
|
|
return candidate && Is.string(candidate.pattern) && (Is.boolean(candidate["!cwd"]) || candidate["!cwd"] === void 0);
|
|
}
|
|
PatternItem2.is = is;
|
|
})(PatternItem || (PatternItem = {}));
|
|
var CodeActionsOnSaveMode;
|
|
(function(CodeActionsOnSaveMode2) {
|
|
CodeActionsOnSaveMode2["all"] = "all";
|
|
CodeActionsOnSaveMode2["problems"] = "problems";
|
|
})(CodeActionsOnSaveMode || (CodeActionsOnSaveMode = {}));
|
|
(function(CodeActionsOnSaveMode2) {
|
|
function from(value) {
|
|
if (value === void 0 || value === null) {
|
|
return CodeActionsOnSaveMode2.all;
|
|
}
|
|
switch (value.toLowerCase()) {
|
|
case CodeActionsOnSaveMode2.problems:
|
|
return CodeActionsOnSaveMode2.problems;
|
|
default:
|
|
return CodeActionsOnSaveMode2.all;
|
|
}
|
|
}
|
|
CodeActionsOnSaveMode2.from = from;
|
|
})(CodeActionsOnSaveMode || (CodeActionsOnSaveMode = {}));
|
|
var Validate;
|
|
(function(Validate2) {
|
|
Validate2["on"] = "on";
|
|
Validate2["off"] = "off";
|
|
Validate2["probe"] = "probe";
|
|
})(Validate || (Validate = {}));
|
|
var ESLintSeverity;
|
|
(function(ESLintSeverity2) {
|
|
ESLintSeverity2["off"] = "off";
|
|
ESLintSeverity2["warn"] = "warn";
|
|
ESLintSeverity2["error"] = "error";
|
|
})(ESLintSeverity || (ESLintSeverity = {}));
|
|
(function(ESLintSeverity2) {
|
|
function from(value) {
|
|
if (value === void 0 || value === null) {
|
|
return ESLintSeverity2.off;
|
|
}
|
|
switch (value.toLowerCase()) {
|
|
case ESLintSeverity2.off:
|
|
return ESLintSeverity2.off;
|
|
case ESLintSeverity2.warn:
|
|
return ESLintSeverity2.warn;
|
|
case ESLintSeverity2.error:
|
|
return ESLintSeverity2.error;
|
|
default:
|
|
return ESLintSeverity2.off;
|
|
}
|
|
}
|
|
ESLintSeverity2.from = from;
|
|
})(ESLintSeverity || (ESLintSeverity = {}));
|
|
var ConfirmationSelection;
|
|
(function(ConfirmationSelection2) {
|
|
ConfirmationSelection2[ConfirmationSelection2["deny"] = 1] = "deny";
|
|
ConfirmationSelection2[ConfirmationSelection2["disable"] = 2] = "disable";
|
|
ConfirmationSelection2[ConfirmationSelection2["allow"] = 3] = "allow";
|
|
ConfirmationSelection2[ConfirmationSelection2["alwaysAllow"] = 4] = "alwaysAllow";
|
|
})(ConfirmationSelection || (ConfirmationSelection = {}));
|
|
var Status;
|
|
(function(Status2) {
|
|
Status2[Status2["ok"] = 1] = "ok";
|
|
Status2[Status2["warn"] = 2] = "warn";
|
|
Status2[Status2["error"] = 3] = "error";
|
|
Status2[Status2["confirmationPending"] = 4] = "confirmationPending";
|
|
Status2[Status2["executionDisabled"] = 5] = "executionDisabled";
|
|
Status2[Status2["executionDenied"] = 6] = "executionDenied";
|
|
})(Status || (Status = {}));
|
|
var StatusNotification;
|
|
(function(StatusNotification2) {
|
|
StatusNotification2.type = new import_coc3.NotificationType("eslint/status");
|
|
})(StatusNotification || (StatusNotification = {}));
|
|
var NoConfigRequest;
|
|
(function(NoConfigRequest2) {
|
|
NoConfigRequest2.type = new import_coc3.RequestType("eslint/noConfig");
|
|
})(NoConfigRequest || (NoConfigRequest = {}));
|
|
var NoESLintLibraryRequest;
|
|
(function(NoESLintLibraryRequest2) {
|
|
NoESLintLibraryRequest2.type = new import_coc3.RequestType("eslint/noLibrary");
|
|
})(NoESLintLibraryRequest || (NoESLintLibraryRequest = {}));
|
|
var OpenESLintDocRequest;
|
|
(function(OpenESLintDocRequest2) {
|
|
OpenESLintDocRequest2.type = new import_coc3.RequestType("eslint/openDoc");
|
|
})(OpenESLintDocRequest || (OpenESLintDocRequest = {}));
|
|
var ProbeFailedRequest;
|
|
(function(ProbeFailedRequest2) {
|
|
ProbeFailedRequest2.type = new import_coc3.RequestType("eslint/probeFailed");
|
|
})(ProbeFailedRequest || (ProbeFailedRequest = {}));
|
|
var ConfirmExecutionResult;
|
|
(function(ConfirmExecutionResult2) {
|
|
ConfirmExecutionResult2[ConfirmExecutionResult2["denied"] = 1] = "denied";
|
|
ConfirmExecutionResult2[ConfirmExecutionResult2["confirmationPending"] = 2] = "confirmationPending";
|
|
ConfirmExecutionResult2[ConfirmExecutionResult2["disabled"] = 3] = "disabled";
|
|
ConfirmExecutionResult2[ConfirmExecutionResult2["approved"] = 4] = "approved";
|
|
})(ConfirmExecutionResult || (ConfirmExecutionResult = {}));
|
|
(function(ConfirmExecutionResult2) {
|
|
function toStatus(value) {
|
|
switch (value) {
|
|
case ConfirmExecutionResult2.denied:
|
|
return 6;
|
|
case ConfirmExecutionResult2.confirmationPending:
|
|
return 4;
|
|
case ConfirmExecutionResult2.disabled:
|
|
return 5;
|
|
case ConfirmExecutionResult2.approved:
|
|
return 1;
|
|
}
|
|
}
|
|
ConfirmExecutionResult2.toStatus = toStatus;
|
|
})(ConfirmExecutionResult || (ConfirmExecutionResult = {}));
|
|
var ConfirmExecution;
|
|
(function(ConfirmExecution2) {
|
|
ConfirmExecution2.type = new import_coc3.RequestType("eslint/confirmESLintExecution");
|
|
})(ConfirmExecution || (ConfirmExecution = {}));
|
|
var ShowOutputChannel;
|
|
(function(ShowOutputChannel2) {
|
|
ShowOutputChannel2.type = new import_coc3.NotificationType0("eslint/showOutputChannel");
|
|
})(ShowOutputChannel || (ShowOutputChannel = {}));
|
|
var exitCalled = new import_coc3.NotificationType("eslint/exitCalled");
|
|
async function pickFolder(folders, placeHolder) {
|
|
if (folders.length === 1) {
|
|
return Promise.resolve(folders[0]);
|
|
}
|
|
const selected = await import_coc3.window.showQuickpick(folders.map((folder) => {
|
|
return folder.name;
|
|
}), placeHolder);
|
|
if (selected === -1) {
|
|
return void 0;
|
|
}
|
|
return folders[selected];
|
|
}
|
|
function createDefaultConfiguration() {
|
|
const folders = import_coc3.workspace.workspaceFolders;
|
|
if (!folders) {
|
|
import_coc3.window.showErrorMessage("An ESLint configuration can only be generated if VS Code is opened on a workspace folder.");
|
|
return;
|
|
}
|
|
const noConfigFolders = folders.filter((folder) => {
|
|
const configFiles = [".eslintrc.js", ".eslintrc.yaml", ".eslintrc.yml", ".eslintrc", ".eslintrc.json"];
|
|
for (const configFile of configFiles) {
|
|
if (import_fs2.default.existsSync(import_path2.default.join(import_coc3.Uri.parse(folder.uri).fsPath, configFile))) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
if (noConfigFolders.length === 0) {
|
|
if (folders.length === 1) {
|
|
import_coc3.window.showInformationMessage("The workspace already contains an ESLint configuration file.");
|
|
} else {
|
|
import_coc3.window.showInformationMessage("All workspace folders already contain an ESLint configuration file.");
|
|
}
|
|
return;
|
|
}
|
|
pickFolder(noConfigFolders, "Select a workspace folder to generate a ESLint configuration for").then(async (folder) => {
|
|
if (!folder) {
|
|
return;
|
|
}
|
|
const folderRootPath = import_coc3.Uri.parse(folder.uri).fsPath;
|
|
const terminal = await import_coc3.workspace.createTerminal({
|
|
name: `ESLint init`,
|
|
cwd: folderRootPath
|
|
});
|
|
const eslintCommand = await findEslint(folderRootPath);
|
|
terminal.sendText(`${eslintCommand} --init`);
|
|
terminal.show();
|
|
});
|
|
}
|
|
var onActivateCommands;
|
|
var probeFailed = new Set();
|
|
function computeValidate(textDocument) {
|
|
const config = import_coc3.workspace.getConfiguration("eslint", textDocument.uri);
|
|
if (!config.get("enable", true)) {
|
|
return Validate.off;
|
|
}
|
|
const languageId = textDocument.languageId;
|
|
const validate = config.get("validate");
|
|
if (Array.isArray(validate)) {
|
|
for (const item of validate) {
|
|
if (Is.string(item) && item === languageId) {
|
|
return Validate.on;
|
|
} else if (ValidateItem.is(item) && item.language === languageId) {
|
|
return Validate.on;
|
|
}
|
|
}
|
|
}
|
|
const uri = textDocument.uri.toString();
|
|
if (probeFailed.has(uri)) {
|
|
return Validate.off;
|
|
}
|
|
const probe = config.get("probe");
|
|
if (Array.isArray(probe)) {
|
|
for (const item of probe) {
|
|
if (item === languageId) {
|
|
return Validate.probe;
|
|
}
|
|
}
|
|
}
|
|
return Validate.off;
|
|
}
|
|
var eslintExecutionKey = "eslintLibraries";
|
|
var eslintExecutionState;
|
|
var eslintAlwaysAllowExecutionKey = "eslintAlwaysAllowExecution";
|
|
var eslintAlwaysAllowExecutionState = false;
|
|
var sessionState = new Map();
|
|
var disabledLibraries = new Set();
|
|
var resource2ResourceInfo = new Map();
|
|
var globalStatus;
|
|
var lastExecutionInfo;
|
|
var libraryPath2ExecutionInfo = new Map();
|
|
var workspaceFolder2ExecutionInfos = new Map();
|
|
function updateExecutionInfo(params, result) {
|
|
let value = libraryPath2ExecutionInfo.get(params.libraryPath);
|
|
if (value === void 0) {
|
|
value = {
|
|
params: {libraryPath: params.libraryPath, scope: params.scope},
|
|
result,
|
|
editorErrorUri: void 0,
|
|
codeActionProvider: void 0,
|
|
diagnostics: import_coc3.languages.createDiagnosticCollection()
|
|
};
|
|
libraryPath2ExecutionInfo.set(params.libraryPath, value);
|
|
} else {
|
|
value.result = result;
|
|
}
|
|
}
|
|
function updateStatusInfo(param) {
|
|
globalStatus = param.state;
|
|
let info = resource2ResourceInfo.get(param.uri);
|
|
if (info === void 0) {
|
|
info = {
|
|
executionInfo: void 0,
|
|
status: param.state
|
|
};
|
|
resource2ResourceInfo.set(param.uri, info);
|
|
} else {
|
|
info.status = param.state;
|
|
}
|
|
}
|
|
function getExecutionInfo(doc, strict) {
|
|
if (doc == void 0) {
|
|
return void 0;
|
|
}
|
|
const info = resource2ResourceInfo.get(doc.uri);
|
|
if (info !== void 0) {
|
|
return info.executionInfo;
|
|
}
|
|
if (!strict) {
|
|
const folder = import_coc3.workspace.getWorkspaceFolder(doc.uri);
|
|
if (folder !== void 0) {
|
|
const values = workspaceFolder2ExecutionInfos.get(folder.uri.toString());
|
|
return values && values[0];
|
|
}
|
|
}
|
|
return void 0;
|
|
}
|
|
function clearInfo(info) {
|
|
info.diagnostics.clear();
|
|
if (info.codeActionProvider !== void 0) {
|
|
info.codeActionProvider.dispose();
|
|
}
|
|
}
|
|
function clearDiagnosticState(params) {
|
|
const info = libraryPath2ExecutionInfo.get(params.libraryPath);
|
|
if (info === void 0) {
|
|
return;
|
|
}
|
|
clearInfo(info);
|
|
}
|
|
function clearAllDiagnosticState() {
|
|
for (const info of Array.from(libraryPath2ExecutionInfo.values())) {
|
|
clearInfo(info);
|
|
}
|
|
}
|
|
async function askForLibraryConfirmation(client, context, params, update) {
|
|
sessionState.set(params.libraryPath, params);
|
|
const libraryUri = import_coc3.Uri.file(params.libraryPath);
|
|
const folder = import_coc3.workspace.getWorkspaceFolder(libraryUri.toString());
|
|
let message;
|
|
if (folder !== void 0) {
|
|
let relativePath = libraryUri.toString().substr(folder.uri.toString().length + 1);
|
|
const mainPath = "/lib/api.js";
|
|
if (relativePath.endsWith(mainPath)) {
|
|
relativePath = relativePath.substr(0, relativePath.length - mainPath.length);
|
|
}
|
|
message = `The ESLint extension will use '${relativePath}' for validation, which is installed locally in folder '${folder.name}'. Do you allow the execution of this ESLint version including all plugins and configuration files it will load on your behalf?
|
|
|
|
Press 'Allow Everywhere' to remember the choice for all workspaces. Use 'Disable' to disable ESLint for this session.`;
|
|
} else {
|
|
message = params.scope === "global" ? `The ESLint extension will use a globally installed ESLint library for validation. Do you allow the execution of this ESLint version including all plugins and configuration files it will load on your behalf?
|
|
|
|
Press 'Always Allow' to remember the choice for all workspaces. Use 'Cancel' to disable ESLint for this session.` : `The ESLint extension will use a locally installed ESLint library for validation. Do you allow the execution of this ESLint version including all plugins and configuration files it will load on your behalf?
|
|
|
|
Press 'Always Allow' to remember the choice for all workspaces. Use 'Cancel' to disable ESLint for this session.`;
|
|
}
|
|
const messageItems = [
|
|
{title: "Allow Everywhere", value: 4},
|
|
{title: "Allow", value: 3},
|
|
{title: "Deny", value: 1},
|
|
{title: "Disable", value: 2}
|
|
];
|
|
const item = await import_coc3.window.showInformationMessage(message, ...messageItems);
|
|
if (item === void 0) {
|
|
return;
|
|
}
|
|
if (item.value === 2) {
|
|
disabledLibraries.add(params.libraryPath);
|
|
updateExecutionInfo(params, 3);
|
|
clearDiagnosticState(params);
|
|
} else {
|
|
disabledLibraries.delete(params.libraryPath);
|
|
if (item.value === 3 || item.value === 1) {
|
|
const value = item.value === 3 ? true : false;
|
|
eslintExecutionState.libs[params.libraryPath] = value;
|
|
context.globalState.update(eslintExecutionKey, eslintExecutionState);
|
|
updateExecutionInfo(params, value ? 4 : 1);
|
|
clearDiagnosticState(params);
|
|
} else if (item.value === 4) {
|
|
eslintAlwaysAllowExecutionState = true;
|
|
context.globalState.update(eslintAlwaysAllowExecutionKey, eslintAlwaysAllowExecutionState);
|
|
updateExecutionInfo(params, 4);
|
|
clearAllDiagnosticState();
|
|
}
|
|
}
|
|
update && update();
|
|
client && client.sendNotification(import_vscode_languageserver_protocol.DidChangeConfigurationNotification.type, {settings: {}});
|
|
}
|
|
async function resetLibraryConfirmations(client, context, update) {
|
|
const items = [
|
|
{label: "Reset ESLint library decisions for this workspace", kind: "session"},
|
|
{label: "Reset all ESLint library decisions", kind: "all"}
|
|
];
|
|
if (eslintAlwaysAllowExecutionState) {
|
|
items.splice(1, 0, {label: "Reset Always Allow all ESlint libraries decision", kind: "alwaysAllow"});
|
|
}
|
|
const selectedIdx = await import_coc3.window.showQuickpick(items.map((o) => o.label), "Clear library confirmations");
|
|
if (selectedIdx == -1) {
|
|
return;
|
|
}
|
|
let selected = items[selectedIdx];
|
|
switch (selected.kind) {
|
|
case "all":
|
|
eslintExecutionState.libs = {};
|
|
eslintAlwaysAllowExecutionState = false;
|
|
break;
|
|
case "alwaysAllow":
|
|
eslintAlwaysAllowExecutionState = false;
|
|
break;
|
|
case "session":
|
|
if (sessionState.size === 1) {
|
|
const param = sessionState.values().next().value;
|
|
await askForLibraryConfirmation(client, context, param, update);
|
|
return;
|
|
} else {
|
|
for (const lib of sessionState.keys()) {
|
|
delete eslintExecutionState.libs[lib];
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
context.globalState.update(eslintExecutionKey, eslintExecutionState);
|
|
context.globalState.update(eslintAlwaysAllowExecutionKey, eslintAlwaysAllowExecutionState);
|
|
disabledLibraries.clear();
|
|
libraryPath2ExecutionInfo.clear();
|
|
resource2ResourceInfo.clear();
|
|
workspaceFolder2ExecutionInfos.clear();
|
|
update && update();
|
|
client && client.sendNotification(import_vscode_languageserver_protocol.DidChangeConfigurationNotification.type, {settings: {}});
|
|
}
|
|
function activate(context) {
|
|
eslintExecutionState = context.globalState.get(eslintExecutionKey, {libs: {}});
|
|
eslintAlwaysAllowExecutionState = context.globalState.get(eslintAlwaysAllowExecutionKey, false);
|
|
function didOpenTextDocument(textDocument) {
|
|
if (activated) {
|
|
return;
|
|
}
|
|
if (computeValidate(textDocument) !== Validate.off) {
|
|
openListener.dispose();
|
|
configurationListener.dispose();
|
|
activated = true;
|
|
realActivate(context);
|
|
}
|
|
}
|
|
function configurationChanged() {
|
|
if (activated) {
|
|
return;
|
|
}
|
|
for (const textDocument of import_coc3.workspace.textDocuments) {
|
|
if (computeValidate(textDocument) !== Validate.off) {
|
|
openListener.dispose();
|
|
configurationListener.dispose();
|
|
activated = true;
|
|
realActivate(context);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
let activated = false;
|
|
const openListener = import_coc3.workspace.onDidOpenTextDocument(didOpenTextDocument);
|
|
const configurationListener = import_coc3.workspace.onDidChangeConfiguration(configurationChanged);
|
|
const notValidating = async () => {
|
|
let bufnr = await import_coc3.workspace.nvim.call("bufnr", ["%"]);
|
|
let doc = import_coc3.workspace.getDocument(bufnr);
|
|
const enabled = import_coc3.workspace.getConfiguration("eslint", doc ? doc.uri : void 0).get("enable", true);
|
|
if (!enabled) {
|
|
import_coc3.window.showInformationMessage(`ESLint is not running because the deprecated setting 'eslint.enable' is set to false. Remove the setting and use the extension disablement feature.`);
|
|
} else {
|
|
import_coc3.window.showInformationMessage("ESLint is not running. By default only TypeScript and JavaScript files are validated. If you want to validate other file types please specify them in the 'eslint.probe' setting.");
|
|
}
|
|
};
|
|
onActivateCommands = [
|
|
import_coc3.commands.registerCommand("eslint.executeAutofix", notValidating),
|
|
import_coc3.commands.registerCommand("eslint.showOutputChannel", notValidating),
|
|
import_coc3.commands.registerCommand("eslint.manageLibraryExecution", notValidating),
|
|
import_coc3.commands.registerCommand("eslint.resetLibraryExecution", () => {
|
|
resetLibraryConfirmations(void 0, context, void 0);
|
|
})
|
|
];
|
|
context.subscriptions.push(import_coc3.commands.registerCommand("eslint.createConfig", createDefaultConfiguration));
|
|
context.subscriptions.push(new task_default());
|
|
configurationChanged();
|
|
}
|
|
var CodeActionsOnSave;
|
|
(function(CodeActionsOnSave2) {
|
|
function isExplicitlyDisabled(setting) {
|
|
if (setting === void 0 || setting === null || Array.isArray(setting)) {
|
|
return false;
|
|
}
|
|
return setting["source.fixAll.eslint"] === false;
|
|
}
|
|
CodeActionsOnSave2.isExplicitlyDisabled = isExplicitlyDisabled;
|
|
function getSourceFixAll(setting) {
|
|
if (setting === null) {
|
|
return void 0;
|
|
}
|
|
if (Array.isArray(setting)) {
|
|
return setting.includes("source.fixAll") ? true : void 0;
|
|
} else {
|
|
return setting["source.fixAll"];
|
|
}
|
|
}
|
|
CodeActionsOnSave2.getSourceFixAll = getSourceFixAll;
|
|
function getSourceFixAllESLint(setting) {
|
|
if (setting === null) {
|
|
return void 0;
|
|
} else if (Array.isArray(setting)) {
|
|
return setting.includes("source.fixAll.eslint") ? true : void 0;
|
|
} else {
|
|
return setting["source.fixAll.eslint"];
|
|
}
|
|
}
|
|
CodeActionsOnSave2.getSourceFixAllESLint = getSourceFixAllESLint;
|
|
function setSourceFixAllESLint(setting, value) {
|
|
if (setting === null) {
|
|
return;
|
|
} else if (Array.isArray(setting)) {
|
|
const index = setting.indexOf("source.fixAll.eslint");
|
|
if (value === true) {
|
|
if (index === -1) {
|
|
setting.push("source.fixAll.eslint");
|
|
}
|
|
} else {
|
|
if (index >= 0) {
|
|
setting.splice(index, 1);
|
|
}
|
|
}
|
|
} else {
|
|
setting["source.fixAll.eslint"] = value;
|
|
}
|
|
}
|
|
CodeActionsOnSave2.setSourceFixAllESLint = setSourceFixAllESLint;
|
|
})(CodeActionsOnSave || (CodeActionsOnSave = {}));
|
|
function realActivate(context) {
|
|
const statusBarItem = import_coc3.window.createStatusBarItem(0);
|
|
context.subscriptions.push(statusBarItem);
|
|
let serverRunning;
|
|
const starting = "ESLint server is starting.";
|
|
const running = "ESLint server is running.";
|
|
const stopped = "ESLint server stopped.";
|
|
statusBarItem.text = "ESLint";
|
|
function updateStatusBar(status, isValidated) {
|
|
let text = "ESLint";
|
|
switch (status) {
|
|
case 1:
|
|
text = "";
|
|
break;
|
|
case 2:
|
|
text = "Eslint warning";
|
|
break;
|
|
case 3:
|
|
text = "Eslint error";
|
|
break;
|
|
case 6:
|
|
text = "Eslint denied";
|
|
break;
|
|
case 5:
|
|
text = "Eslint disabled";
|
|
break;
|
|
case 4:
|
|
text = "ESLint not approved or denied yet.";
|
|
break;
|
|
default:
|
|
text = "";
|
|
}
|
|
statusBarItem.text = serverRunning === void 0 ? starting : text;
|
|
const alwaysShow = import_coc3.workspace.getConfiguration("eslint").get("alwaysShowStatus", false);
|
|
if (alwaysShow || eslintAlwaysAllowExecutionState === true || status !== 1 || status === 1 && isValidated) {
|
|
statusBarItem.show();
|
|
} else {
|
|
statusBarItem.hide();
|
|
}
|
|
}
|
|
const flaggedLanguages = new Set(["javascript", "javascriptreact", "typescript", "typescriptreact"]);
|
|
async function updateStatusBarAndDiagnostics() {
|
|
let doc = await import_coc3.workspace.document;
|
|
function clearLastExecutionInfo() {
|
|
if (lastExecutionInfo === void 0) {
|
|
return;
|
|
}
|
|
if (lastExecutionInfo.codeActionProvider !== void 0) {
|
|
lastExecutionInfo.codeActionProvider.dispose();
|
|
lastExecutionInfo.codeActionProvider = void 0;
|
|
}
|
|
if (lastExecutionInfo.editorErrorUri !== void 0) {
|
|
lastExecutionInfo.diagnostics.delete(lastExecutionInfo.editorErrorUri.toString());
|
|
lastExecutionInfo.editorErrorUri = void 0;
|
|
}
|
|
lastExecutionInfo = void 0;
|
|
}
|
|
function handleEditor(doc2) {
|
|
var _a, _b;
|
|
const uri = doc2.uri;
|
|
const resourceInfo = resource2ResourceInfo.get(uri);
|
|
if (resourceInfo === void 0) {
|
|
return;
|
|
}
|
|
const info = resourceInfo.executionInfo;
|
|
if (info === void 0) {
|
|
return;
|
|
}
|
|
if (info.result === 2 && ((_a = info.editorErrorUri) == null ? void 0 : _a.toString()) !== uri.toString()) {
|
|
const range = (_b = doc2.getWordRangeAtPosition(import_coc3.Position.create(0, 0))) != null ? _b : import_coc3.Range.create(0, 0, 0, 0);
|
|
const diagnostic = import_coc3.Diagnostic.create(range, "ESLint is disabled since its execution has not been approved or denied yet. Use :CocCommand eslint.showOutputChannel to open the approval dialog.", import_coc3.DiagnosticSeverity.Warning);
|
|
diagnostic.source = "eslint";
|
|
const errorUri = doc2.uri;
|
|
info.diagnostics.set(errorUri, [diagnostic]);
|
|
if (info.editorErrorUri !== void 0) {
|
|
info.diagnostics.delete(info.editorErrorUri.toString());
|
|
}
|
|
info.editorErrorUri = import_coc3.Uri.parse(errorUri);
|
|
if (info.codeActionProvider !== void 0) {
|
|
info.codeActionProvider.dispose();
|
|
}
|
|
info.codeActionProvider = import_coc3.languages.registerCodeActionProvider([{pattern: import_coc3.Uri.parse(errorUri).fsPath}], {
|
|
provideCodeActions: (_document, _range, context2) => {
|
|
for (const diag of context2.diagnostics) {
|
|
if (diag === diagnostic) {
|
|
const result = {
|
|
title: "ESLint: Manage Library Execution",
|
|
kind: import_vscode_languageserver_protocol.CodeActionKind.QuickFix
|
|
};
|
|
result.isPreferred = true;
|
|
result.command = {
|
|
title: "Manage Library Execution",
|
|
command: "eslint.manageLibraryExecution",
|
|
arguments: [info.params]
|
|
};
|
|
return [result];
|
|
}
|
|
}
|
|
return [];
|
|
}
|
|
}, "eslint-library");
|
|
}
|
|
lastExecutionInfo = info;
|
|
}
|
|
function findApplicableStatus(editor) {
|
|
let candidates;
|
|
if (editor !== void 0) {
|
|
const resourceInfo = resource2ResourceInfo.get(editor.uri);
|
|
if (resourceInfo !== void 0) {
|
|
return [resourceInfo.status, true];
|
|
}
|
|
const workspaceFolder = import_coc3.workspace.getWorkspaceFolder(editor.uri);
|
|
if (workspaceFolder !== void 0) {
|
|
candidates = workspaceFolder2ExecutionInfos.get(workspaceFolder.uri.toString());
|
|
}
|
|
}
|
|
if (candidates === void 0) {
|
|
candidates = libraryPath2ExecutionInfo.values();
|
|
}
|
|
let result;
|
|
for (const info of candidates) {
|
|
if (result === void 0) {
|
|
result = info.result;
|
|
} else {
|
|
if (info.result === 2) {
|
|
result = info.result;
|
|
break;
|
|
} else if (info.result === 1 || info.result === 3) {
|
|
result = info.result;
|
|
}
|
|
}
|
|
}
|
|
return [result !== void 0 ? ConfirmExecutionResult.toStatus(result) : 1, false];
|
|
}
|
|
const executionInfo = getExecutionInfo(doc, true);
|
|
if (lastExecutionInfo !== executionInfo) {
|
|
clearLastExecutionInfo();
|
|
}
|
|
if (doc && doc.attached && flaggedLanguages.has(doc.filetype)) {
|
|
handleEditor(doc);
|
|
} else {
|
|
clearLastExecutionInfo();
|
|
}
|
|
const [status, isValidated] = findApplicableStatus(doc);
|
|
updateStatusBar(status, isValidated);
|
|
}
|
|
const serverModule = context.asAbsolutePath("lib/server.js");
|
|
const eslintConfig = import_coc3.workspace.getConfiguration("eslint");
|
|
const runtime = eslintConfig.get("runtime", void 0);
|
|
const debug = eslintConfig.get("debug");
|
|
const argv = eslintConfig.get("execArgv", []);
|
|
const nodeEnv = eslintConfig.get("nodeEnv", null);
|
|
let env;
|
|
if (debug) {
|
|
env = env || {};
|
|
env.DEBUG = "eslint:*,-eslint:code-path";
|
|
}
|
|
if (nodeEnv) {
|
|
env = env || {};
|
|
env.NODE_ENV = nodeEnv;
|
|
}
|
|
const serverOptions = {
|
|
run: {module: serverModule, transport: import_coc3.TransportKind.ipc, runtime, options: {cwd: import_coc3.workspace.cwd, env, execArgv: argv}},
|
|
debug: {module: serverModule, transport: import_coc3.TransportKind.ipc, runtime, options: {execArgv: argv.concat(["--nolazy", "--inspect=6011"]), cwd: process.cwd(), env}}
|
|
};
|
|
let defaultErrorHandler;
|
|
let serverCalledProcessExit = false;
|
|
const packageJsonFilter = {scheme: "file", pattern: "**/package.json"};
|
|
const configFileFilter = {scheme: "file", pattern: "**/.eslintr{c.js,c.yaml,c.yml,c,c.json}"};
|
|
const syncedDocuments = new Map();
|
|
const confirmationSemaphore = new Semaphore(1);
|
|
const supportedQuickFixKinds = new Set([import_vscode_languageserver_protocol.CodeActionKind.Source, import_vscode_languageserver_protocol.CodeActionKind.SourceFixAll, `${import_vscode_languageserver_protocol.CodeActionKind.SourceFixAll}.eslint`, import_vscode_languageserver_protocol.CodeActionKind.QuickFix]);
|
|
const clientOptions = {
|
|
documentSelector: [{scheme: "file"}, {scheme: "untitled"}],
|
|
diagnosticCollectionName: "eslint",
|
|
revealOutputChannelOn: import_coc3.RevealOutputChannelOn.Never,
|
|
initializationOptions: {},
|
|
progressOnInitialization: true,
|
|
synchronize: {
|
|
fileEvents: [
|
|
import_coc3.workspace.createFileSystemWatcher("**/.eslintr{c.js,c.yaml,c.yml,c,c.json}"),
|
|
import_coc3.workspace.createFileSystemWatcher("**/.eslintignore"),
|
|
import_coc3.workspace.createFileSystemWatcher("**/package.json")
|
|
]
|
|
},
|
|
initializationFailedHandler: (error) => {
|
|
client.error("Server initialization failed.", error);
|
|
client.outputChannel.show(true);
|
|
return false;
|
|
},
|
|
errorHandler: {
|
|
error: (error, message, count) => {
|
|
return defaultErrorHandler.error(error, message, count);
|
|
},
|
|
closed: () => {
|
|
if (serverCalledProcessExit) {
|
|
return import_coc3.CloseAction.DoNotRestart;
|
|
}
|
|
return defaultErrorHandler.closed();
|
|
}
|
|
},
|
|
middleware: {
|
|
didOpen: (document, next) => {
|
|
if (import_coc3.workspace.match([packageJsonFilter], document) || import_coc3.workspace.match([configFileFilter], document) || computeValidate(document) !== Validate.off) {
|
|
next(document);
|
|
syncedDocuments.set(document.uri, document);
|
|
return;
|
|
}
|
|
},
|
|
didChange: (event, next) => {
|
|
if (syncedDocuments.has(event.textDocument.uri)) {
|
|
next(event);
|
|
}
|
|
},
|
|
willSave: (event, next) => {
|
|
if (syncedDocuments.has(event.document.uri)) {
|
|
next(event);
|
|
}
|
|
},
|
|
willSaveWaitUntil: (event, next) => {
|
|
if (syncedDocuments.has(event.document.uri)) {
|
|
return next(event);
|
|
} else {
|
|
return Promise.resolve([]);
|
|
}
|
|
},
|
|
didSave: (document, next) => {
|
|
if (syncedDocuments.has(document.uri)) {
|
|
next(document);
|
|
}
|
|
},
|
|
didClose: (document, next) => {
|
|
const uri = document.uri;
|
|
if (syncedDocuments.has(uri)) {
|
|
syncedDocuments.delete(uri);
|
|
next(document);
|
|
}
|
|
},
|
|
provideCodeActions: (document, range, context2, token, next) => {
|
|
if (!syncedDocuments.has(document.uri.toString())) {
|
|
return [];
|
|
}
|
|
if (context2.only !== void 0 && !supportedQuickFixKinds.has(context2.only[0])) {
|
|
return [];
|
|
}
|
|
if (context2.only === void 0 && (!context2.diagnostics || context2.diagnostics.length === 0)) {
|
|
return [];
|
|
}
|
|
const eslintDiagnostics = [];
|
|
for (const diagnostic of context2.diagnostics) {
|
|
if (diagnostic.source === "eslint") {
|
|
eslintDiagnostics.push(diagnostic);
|
|
}
|
|
}
|
|
if (context2.only === void 0 && eslintDiagnostics.length === 0) {
|
|
return [];
|
|
}
|
|
const newContext = Object.assign({}, context2, {diagnostics: eslintDiagnostics});
|
|
return next(document, range, newContext, token);
|
|
},
|
|
workspace: {
|
|
didChangeWatchedFile: (event, next) => {
|
|
probeFailed.clear();
|
|
next(event);
|
|
},
|
|
didChangeConfiguration: (sections, next) => {
|
|
next(sections);
|
|
},
|
|
configuration: async (params, _token, _next) => {
|
|
if (params.items === void 0) {
|
|
return [];
|
|
}
|
|
const result = [];
|
|
for (const item of params.items) {
|
|
if (item.section || !item.scopeUri) {
|
|
result.push(null);
|
|
continue;
|
|
}
|
|
const resource = item.scopeUri;
|
|
const config = import_coc3.workspace.getConfiguration("eslint", resource);
|
|
const workspaceFolder = import_coc3.workspace.getWorkspaceFolder(resource);
|
|
const settings = {
|
|
validate: Validate.off,
|
|
packageManager: config.get("packageManager", "npm"),
|
|
codeActionOnSave: {
|
|
enable: false,
|
|
mode: CodeActionsOnSaveMode.all
|
|
},
|
|
format: false,
|
|
quiet: config.get("quiet", false),
|
|
onIgnoredFiles: ESLintSeverity.from(config.get("onIgnoredFiles", ESLintSeverity.off)),
|
|
options: config.get("options", {}),
|
|
run: config.get("run", "onType"),
|
|
nodePath: config.get("nodePath", null),
|
|
workingDirectory: void 0,
|
|
workspaceFolder: void 0,
|
|
codeAction: {
|
|
disableRuleComment: config.get("codeAction.disableRuleComment", {enable: true, location: "separateLine"}),
|
|
showDocumentation: config.get("codeAction.showDocumentation", {enable: true})
|
|
}
|
|
};
|
|
const document = syncedDocuments.get(item.scopeUri);
|
|
if (document === void 0) {
|
|
result.push(settings);
|
|
continue;
|
|
}
|
|
if (config.get("enabled", true)) {
|
|
settings.validate = computeValidate(document);
|
|
}
|
|
if (settings.validate !== Validate.off) {
|
|
settings.format = !!config.get("format.enable", false);
|
|
settings.codeActionOnSave.enable = !!config.get("autoFixOnSave", false);
|
|
settings.codeActionOnSave.mode = CodeActionsOnSaveMode.from(config.get("codeActionsOnSave.mode", CodeActionsOnSaveMode.all));
|
|
}
|
|
if (workspaceFolder !== void 0) {
|
|
settings.workspaceFolder = {
|
|
name: workspaceFolder.name,
|
|
uri: workspaceFolder.uri
|
|
};
|
|
}
|
|
const workingDirectories = config.get("workingDirectories", void 0);
|
|
if (Array.isArray(workingDirectories)) {
|
|
let workingDirectory = void 0;
|
|
const workspaceFolderPath = workspaceFolder && import_coc3.Uri.parse(workspaceFolder.uri).scheme === "file" ? import_coc3.Uri.parse(workspaceFolder.uri).fsPath : void 0;
|
|
for (const entry of workingDirectories) {
|
|
let directory;
|
|
let pattern;
|
|
let noCWD = false;
|
|
if (Is.string(entry)) {
|
|
directory = entry;
|
|
} else if (LegacyDirectoryItem.is(entry)) {
|
|
directory = entry.directory;
|
|
noCWD = !entry.changeProcessCWD;
|
|
} else if (DirectoryItem.is(entry)) {
|
|
directory = entry.directory;
|
|
if (entry["!cwd"] !== void 0) {
|
|
noCWD = entry["!cwd"];
|
|
}
|
|
} else if (PatternItem.is(entry)) {
|
|
pattern = entry.pattern;
|
|
if (entry["!cwd"] !== void 0) {
|
|
noCWD = entry["!cwd"];
|
|
}
|
|
} else if (ModeItem.is(entry)) {
|
|
workingDirectory = entry;
|
|
continue;
|
|
}
|
|
let itemValue;
|
|
if (directory !== void 0 || pattern !== void 0) {
|
|
const uri = import_coc3.Uri.parse(document.uri);
|
|
const filePath = uri.scheme === "file" ? uri.fsPath : void 0;
|
|
if (filePath !== void 0) {
|
|
if (directory !== void 0) {
|
|
directory = toOSPath(directory);
|
|
if (!import_path2.default.isAbsolute(directory) && workspaceFolderPath !== void 0) {
|
|
directory = import_path2.default.join(workspaceFolderPath, directory);
|
|
}
|
|
if (directory.charAt(directory.length - 1) !== import_path2.default.sep) {
|
|
directory = directory + import_path2.default.sep;
|
|
}
|
|
if (filePath.startsWith(directory)) {
|
|
itemValue = directory;
|
|
}
|
|
} else if (pattern !== void 0 && pattern.length > 0) {
|
|
if (!import_path2.default.posix.isAbsolute(pattern) && workspaceFolderPath !== void 0) {
|
|
pattern = import_path2.default.posix.join(toPosixPath(workspaceFolderPath), pattern);
|
|
}
|
|
if (pattern.charAt(pattern.length - 1) !== import_path2.default.posix.sep) {
|
|
pattern = pattern + import_path2.default.posix.sep;
|
|
}
|
|
const regExp = convert2RegExp(pattern);
|
|
if (regExp !== void 0) {
|
|
const match = regExp.exec(filePath);
|
|
if (match !== null && match.length > 0) {
|
|
itemValue = match[0];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (itemValue !== void 0) {
|
|
if (workingDirectory === void 0 || ModeItem.is(workingDirectory)) {
|
|
workingDirectory = {directory: itemValue, "!cwd": noCWD};
|
|
} else {
|
|
if (workingDirectory.directory.length < itemValue.length) {
|
|
workingDirectory.directory = itemValue;
|
|
workingDirectory["!cwd"] = noCWD;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
settings.workingDirectory = workingDirectory;
|
|
}
|
|
result.push(settings);
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
let client;
|
|
try {
|
|
client = new import_coc3.LanguageClient("ESLint", serverOptions, clientOptions);
|
|
} catch (err) {
|
|
import_coc3.window.showErrorMessage(`The ESLint extension couldn't be started. See the ESLint output channel for details.`);
|
|
return;
|
|
}
|
|
import_coc3.workspace.registerAutocmd({
|
|
request: true,
|
|
event: "BufWritePre",
|
|
arglist: [`+expand('<abuf>')`],
|
|
callback: async (bufnr) => {
|
|
let doc = import_coc3.workspace.getDocument(bufnr);
|
|
if (!doc || !doc.attached)
|
|
return;
|
|
if (computeValidate(doc.textDocument) == Validate.off)
|
|
return;
|
|
const config = import_coc3.workspace.getConfiguration("eslint", doc.uri);
|
|
if (config.get("autoFixOnSave", false)) {
|
|
const params = {
|
|
textDocument: {
|
|
uri: doc.uri
|
|
},
|
|
range: import_coc3.Range.create(0, 0, doc.textDocument.lineCount, 0),
|
|
context: {
|
|
only: [`${import_vscode_languageserver_protocol.CodeActionKind.SourceFixAll}.eslint`],
|
|
diagnostics: []
|
|
}
|
|
};
|
|
let res = await Promise.resolve(client.sendRequest(import_vscode_languageserver_protocol.CodeActionRequest.type, params));
|
|
if (res && Array.isArray(res)) {
|
|
if (import_vscode_languageserver_protocol.CodeAction.is(res[0])) {
|
|
await import_coc3.workspace.applyEdit(res[0].edit);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
import_coc3.workspace.onDidChangeConfiguration(() => {
|
|
probeFailed.clear();
|
|
for (const textDocument of syncedDocuments.values()) {
|
|
if (computeValidate(textDocument) === Validate.off) {
|
|
try {
|
|
const provider = client.getFeature(import_vscode_languageserver_protocol.DidCloseTextDocumentNotification.method).getProvider(textDocument);
|
|
provider == null ? void 0 : provider.send(textDocument);
|
|
} catch (err) {
|
|
}
|
|
}
|
|
}
|
|
for (const textDocument of import_coc3.workspace.textDocuments) {
|
|
if (!syncedDocuments.has(textDocument.uri.toString()) && computeValidate(textDocument) !== Validate.off) {
|
|
try {
|
|
const provider = client.getFeature(import_vscode_languageserver_protocol.DidOpenTextDocumentNotification.method).getProvider(textDocument);
|
|
provider == null ? void 0 : provider.send(textDocument);
|
|
} catch (err) {
|
|
}
|
|
}
|
|
}
|
|
});
|
|
defaultErrorHandler = client.createDefaultErrorHandler();
|
|
client.onDidChangeState((event) => {
|
|
if (event.newState === import_coc3.State.Starting) {
|
|
client.info("ESLint server is starting");
|
|
serverRunning = void 0;
|
|
} else if (event.newState === import_coc3.State.Running) {
|
|
client.info(running);
|
|
serverRunning = true;
|
|
} else {
|
|
client.info(stopped);
|
|
serverRunning = false;
|
|
}
|
|
updateStatusBar((globalStatus != null ? globalStatus : serverRunning === false) ? 3 : 1, true);
|
|
});
|
|
client.onReady().then(() => {
|
|
client.onNotification(ShowOutputChannel.type, () => {
|
|
client.outputChannel.show();
|
|
});
|
|
client.onNotification(StatusNotification.type, (params) => {
|
|
updateStatusInfo(params);
|
|
updateStatusBarAndDiagnostics();
|
|
});
|
|
client.onNotification(exitCalled, (params) => {
|
|
serverCalledProcessExit = true;
|
|
client.error(`Server process exited with code ${params[0]}. This usually indicates a misconfigured ESLint setup.`, params[1]);
|
|
import_coc3.window.showErrorMessage(`ESLint server shut down itself. See 'ESLint' output channel for details.`, {title: "Open Output", id: 1}).then((value) => {
|
|
if (value !== void 0 && value.id === 1) {
|
|
client.outputChannel.show();
|
|
}
|
|
});
|
|
});
|
|
client.onRequest(NoConfigRequest.type, (params) => {
|
|
const uri = import_coc3.Uri.parse(params.document.uri);
|
|
const workspaceFolder = import_coc3.workspace.getWorkspaceFolder(params.document.uri);
|
|
const fileLocation = uri.fsPath;
|
|
if (workspaceFolder) {
|
|
client.warn([
|
|
"",
|
|
`No ESLint configuration (e.g .eslintrc) found for file: ${fileLocation}`,
|
|
`File will not be validated. Consider running 'eslint --init' in the workspace folder ${workspaceFolder.name}`,
|
|
`Alternatively you can disable ESLint by executing the 'Disable ESLint' command.`
|
|
].join("\n"));
|
|
} else {
|
|
client.warn([
|
|
"",
|
|
`No ESLint configuration (e.g .eslintrc) found for file: ${fileLocation}`,
|
|
`File will not be validated. Alternatively you can disable ESLint by executing the 'Disable ESLint' command.`
|
|
].join("\n"));
|
|
}
|
|
let resourceInfo = resource2ResourceInfo.get(params.document.uri);
|
|
if (resourceInfo === void 0) {
|
|
resourceInfo = {
|
|
status: 2,
|
|
executionInfo: void 0
|
|
};
|
|
resource2ResourceInfo.set(params.document.uri, resourceInfo);
|
|
} else {
|
|
resourceInfo.status = 2;
|
|
}
|
|
updateStatusBarAndDiagnostics();
|
|
return {};
|
|
});
|
|
client.onRequest(NoESLintLibraryRequest.type, (params) => {
|
|
const key = "noESLintMessageShown";
|
|
const state = context.globalState.get(key, {});
|
|
const uri = import_coc3.Uri.parse(params.source.uri);
|
|
const workspaceFolder = import_coc3.workspace.getWorkspaceFolder(uri.toString());
|
|
const packageManager = import_coc3.workspace.getConfiguration("eslint", uri.toString()).get("packageManager", "npm");
|
|
const localInstall = {
|
|
npm: "npm install eslint",
|
|
pnpm: "pnpm install eslint",
|
|
yarn: "yarn add eslint"
|
|
};
|
|
const globalInstall = {
|
|
npm: "npm install -g eslint",
|
|
pnpm: "pnpm install -g eslint",
|
|
yarn: "yarn global add eslint"
|
|
};
|
|
const isPackageManagerNpm = packageManager === "npm";
|
|
const outputItem = {
|
|
title: "Go to output",
|
|
id: 1
|
|
};
|
|
if (workspaceFolder) {
|
|
client.info([
|
|
"",
|
|
`Failed to load the ESLint library for the document ${uri.fsPath}`,
|
|
"",
|
|
`To use ESLint please install eslint by running ${localInstall[packageManager]} in the workspace folder ${workspaceFolder.name}`,
|
|
`or globally using '${globalInstall[packageManager]}'. You need to reopen the workspace after installing eslint.`,
|
|
"",
|
|
isPackageManagerNpm ? "If you are using yarn or pnpm instead of npm set the setting `eslint.packageManager` to either `yarn` or `pnpm`" : null,
|
|
`Alternatively you can disable ESLint for the workspace folder ${workspaceFolder.name} by executing the 'Disable ESLint' command.`
|
|
].filter((str) => str !== null).join("\n"));
|
|
if (state.workspaces === void 0) {
|
|
state.workspaces = {};
|
|
}
|
|
if (!state.workspaces[workspaceFolder.uri.toString()]) {
|
|
state.workspaces[workspaceFolder.uri.toString()] = true;
|
|
context.globalState.update(key, state);
|
|
import_coc3.window.showInformationMessage(`Failed to load the ESLint library for the document ${uri.fsPath}. See the output for more information.`, outputItem).then((item) => {
|
|
if (item && item.id === 1) {
|
|
client.outputChannel.show(true);
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
client.info([
|
|
`Failed to load the ESLint library for the document ${uri.fsPath}`,
|
|
`To use ESLint for single JavaScript file install eslint globally using '${globalInstall[packageManager]}'.`,
|
|
isPackageManagerNpm ? "If you are using yarn or pnpm instead of npm set the setting `eslint.packageManager` to either `yarn` or `pnpm`" : null,
|
|
"You need to reopen VS Code after installing eslint."
|
|
].filter((str) => str !== null).join("\n"));
|
|
if (!state.global) {
|
|
state.global = true;
|
|
context.globalState.update(key, state);
|
|
import_coc3.window.showInformationMessage(`Failed to load the ESLint library for the document ${uri.fsPath}. See the output for more information.`, outputItem).then((item) => {
|
|
if (item && item.id === 1) {
|
|
client.outputChannel.show(true);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
return {};
|
|
});
|
|
client.onRequest(OpenESLintDocRequest.type, (params) => {
|
|
import_coc3.commands.executeCommand("vscode.open", import_coc3.Uri.parse(params.url));
|
|
return {};
|
|
});
|
|
client.onRequest(ProbeFailedRequest.type, (params) => {
|
|
var _a;
|
|
probeFailed.add(params.textDocument.uri);
|
|
const closeFeature = client.getFeature(import_vscode_languageserver_protocol.DidCloseTextDocumentNotification.method);
|
|
for (const document of import_coc3.workspace.textDocuments) {
|
|
if (document.uri.toString() === params.textDocument.uri) {
|
|
(_a = closeFeature.getProvider(document)) == null ? void 0 : _a.send(document);
|
|
}
|
|
}
|
|
});
|
|
client.onRequest(ConfirmExecution.type, async (params) => {
|
|
return confirmationSemaphore.lock(async () => {
|
|
try {
|
|
sessionState.set(params.libraryPath, params);
|
|
let result;
|
|
if (disabledLibraries.has(params.libraryPath)) {
|
|
result = 3;
|
|
} else {
|
|
const state = eslintExecutionState.libs[params.libraryPath];
|
|
if (state === true || state === false) {
|
|
clearDiagnosticState(params);
|
|
result = state ? 4 : 1;
|
|
} else if (eslintAlwaysAllowExecutionState === true) {
|
|
clearDiagnosticState(params);
|
|
result = 4;
|
|
}
|
|
}
|
|
result = result != null ? result : 2;
|
|
let executionInfo = libraryPath2ExecutionInfo.get(params.libraryPath);
|
|
if (executionInfo === void 0) {
|
|
executionInfo = {
|
|
params,
|
|
result,
|
|
codeActionProvider: void 0,
|
|
diagnostics: import_coc3.languages.createDiagnosticCollection(),
|
|
editorErrorUri: void 0
|
|
};
|
|
libraryPath2ExecutionInfo.set(params.libraryPath, executionInfo);
|
|
const workspaceFolder = import_coc3.workspace.getWorkspaceFolder(params.uri);
|
|
if (workspaceFolder !== void 0) {
|
|
const key = workspaceFolder.uri.toString();
|
|
let infos = workspaceFolder2ExecutionInfos.get(key);
|
|
if (infos === void 0) {
|
|
infos = [];
|
|
workspaceFolder2ExecutionInfos.set(key, infos);
|
|
}
|
|
infos.push(executionInfo);
|
|
}
|
|
} else {
|
|
executionInfo.result = result;
|
|
}
|
|
let resourceInfo = resource2ResourceInfo.get(params.uri);
|
|
if (resourceInfo === void 0) {
|
|
resourceInfo = {
|
|
status: ConfirmExecutionResult.toStatus(result),
|
|
executionInfo
|
|
};
|
|
resource2ResourceInfo.set(params.uri, resourceInfo);
|
|
} else {
|
|
resourceInfo.status = ConfirmExecutionResult.toStatus(result);
|
|
}
|
|
updateStatusBarAndDiagnostics();
|
|
return result;
|
|
} catch (err) {
|
|
return 1;
|
|
}
|
|
});
|
|
});
|
|
});
|
|
if (onActivateCommands) {
|
|
onActivateCommands.forEach((command) => command.dispose());
|
|
onActivateCommands = void 0;
|
|
}
|
|
context.subscriptions.push(client.start(), import_coc3.events.on("BufEnter", () => {
|
|
updateStatusBarAndDiagnostics();
|
|
}), import_coc3.workspace.registerTextDocumentContentProvider("eslint-error", {
|
|
provideTextDocumentContent: () => {
|
|
return [
|
|
"ESLint is disabled since its execution has not been approved or rejected yet.",
|
|
"",
|
|
"When validating a file using ESLint, the ESLint NPM library will load customization files and code from your workspace",
|
|
"and will execute it. If you do not trust the content in your workspace you should answer accordingly on the corresponding",
|
|
"approval dialog."
|
|
].join("\n");
|
|
}
|
|
}), import_coc3.workspace.onDidCloseTextDocument((document) => {
|
|
const uri = document.uri.toString();
|
|
resource2ResourceInfo.delete(uri);
|
|
}), import_coc3.commands.registerCommand("eslint.executeAutofix", async () => {
|
|
const doc = await import_coc3.workspace.document;
|
|
if (!doc || !doc.attached) {
|
|
return;
|
|
}
|
|
doc.forceSync();
|
|
const textDocument = {
|
|
uri: doc.uri,
|
|
version: doc.version
|
|
};
|
|
const params = {
|
|
command: "eslint.applyAllFixes",
|
|
arguments: [textDocument]
|
|
};
|
|
await client.onReady();
|
|
client.sendRequest(import_vscode_languageserver_protocol.ExecuteCommandRequest.type, params).then(void 0, () => {
|
|
import_coc3.window.showErrorMessage("Failed to apply ESLint fixes to the document. Please consider opening an issue with steps to reproduce.");
|
|
});
|
|
}), import_coc3.commands.registerCommand("eslint.showOutputChannel", async () => {
|
|
let doc = await import_coc3.workspace.document;
|
|
const executionInfo = getExecutionInfo(doc, false);
|
|
if (executionInfo !== void 0 && (executionInfo.result === 2 || executionInfo.result === 3)) {
|
|
await askForLibraryConfirmation(client, context, executionInfo.params, updateStatusBarAndDiagnostics);
|
|
return;
|
|
}
|
|
if (globalStatus === 1 || globalStatus === 2 || globalStatus === 3) {
|
|
client.outputChannel.show();
|
|
return;
|
|
}
|
|
if (globalStatus === 6) {
|
|
await resetLibraryConfirmations(client, context, updateStatusBarAndDiagnostics);
|
|
return;
|
|
}
|
|
let candidate;
|
|
let toRemove;
|
|
if (globalStatus === 4) {
|
|
if (libraryPath2ExecutionInfo.size === 1) {
|
|
candidate = libraryPath2ExecutionInfo.keys().next().value;
|
|
}
|
|
}
|
|
if (globalStatus === 5) {
|
|
if (disabledLibraries.size === 1) {
|
|
candidate = disabledLibraries.keys().next().value;
|
|
toRemove = disabledLibraries;
|
|
}
|
|
}
|
|
if (candidate !== void 0) {
|
|
if (sessionState.has(candidate)) {
|
|
if (toRemove !== void 0) {
|
|
toRemove.delete(candidate);
|
|
}
|
|
await askForLibraryConfirmation(client, context, sessionState.get(candidate), updateStatusBarAndDiagnostics);
|
|
return;
|
|
}
|
|
}
|
|
client.outputChannel.show();
|
|
}), import_coc3.commands.registerCommand("eslint.resetLibraryExecution", () => {
|
|
resetLibraryConfirmations(client, context, updateStatusBarAndDiagnostics);
|
|
}), import_coc3.commands.registerCommand("eslint.manageLibraryExecution", async (params) => {
|
|
if (params !== void 0) {
|
|
await askForLibraryConfirmation(client, context, params, updateStatusBarAndDiagnostics);
|
|
} else {
|
|
let doc = await import_coc3.workspace.document;
|
|
const info = getExecutionInfo(doc, false);
|
|
if (info !== void 0) {
|
|
await askForLibraryConfirmation(client, context, info.params, updateStatusBarAndDiagnostics);
|
|
} else {
|
|
import_coc3.window.showInformationMessage(doc && doc.attached ? "No ESLint library execution information found for current buffer." : "No ESLint library execution information found.");
|
|
}
|
|
}
|
|
}));
|
|
}
|
|
function deactivate() {
|
|
if (onActivateCommands) {
|
|
onActivateCommands.forEach((command) => command.dispose());
|
|
}
|
|
}
|
|
//# sourceMappingURL=index.js.map
|