UNPKG

@gdquest/codemirror-lsp

Version:

Enables Codemirror to interact with a local lsp, ie. a LSP that isn't socket-based, but rather work by function calls.

8 lines (7 loc) 31 kB
{ "version": 3, "sources": ["../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js", "../src/index.mts", "../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs", "../src/jsonRpc/index.mts", "../src/lsp/conversion.mts"], "sourcesContent": ["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n", "import { linter, type Diagnostic, setDiagnostics } from \"@codemirror/lint\";\nimport { type Extension } from \"@codemirror/state\";\nimport { type EditorView, ViewPlugin, type ViewUpdate } from \"@codemirror/view\";\nimport { EventEmitter } from \"eventemitter3\";\n\n// import { generateLspAutocomplete } from \"./autocompletion.mts\";\nimport { JsonRpc } from \"./jsonRpc/index.mts\";\nimport {\n type TextDocumentPublishDiagnosticsRequest,\n getCharacterFromPosition,\n getDiagnosticSeverity,\n} from \"./lsp/conversion.mts\";\n\n// Export\nexport * from \"./lsp/conversion.mts\";\n\nexport type ServerResponseCallback = (jsonRpc: string) => void;\n\nexport interface LspConfigData {\n emitServerCommand: ServerResponseCallback;\n}\nexport interface LspConfig {\n autocompletion?: boolean;\n onClientCommand: (jsonRpc: string) => void;\n getData: (data: LspConfigData) => void;\n}\n\nexport function createLsp(config: LspConfig): Extension {\n const lspBus = new EventEmitter();\n\n let lspView: EditorView | null = null;\n let nextVersionId = 0;\n const { autocompletion = true, onClientCommand, getData } = config;\n const jsonRpcClient = new JsonRpc();\n\n class LspPlugin {\n view: EditorView;\n\n constructor(view: EditorView) {\n this.view = view;\n }\n\n update(update: ViewUpdate): void {}\n }\n ViewPlugin.fromClass(LspPlugin);\n\n const lspLinter = linter(async (view) => {\n lspView = view;\n lspBus.emit(\"view\", view);\n\n const diagnostics: Diagnostic[] = [];\n const localVersion = nextVersionId;\n nextVersionId += 1;\n\n jsonRpcClient.notify({\n method: \"textDocument/didChange\",\n params: {\n textDocument: {\n uri: \"file:///whatever\",\n version: localVersion,\n },\n contentChanges: [\n {\n text: view.state.doc.toString(),\n },\n ],\n },\n });\n\n return diagnostics;\n }, {});\n\n jsonRpcClient.on(\"request\", (request) => {\n onClientCommand(request);\n });\n\n const onNotification = (notification: any): void => {\n switch (notification.method) {\n case \"textDocument/publishDiagnostics\":\n onPublishDiagnostics(notification);\n break;\n }\n };\n\n jsonRpcClient.on(\"notification\", onNotification);\n\n const onPublishDiagnostics = (\n notification: TextDocumentPublishDiagnosticsRequest\n ): void => {\n console.log(\"onPublishDiagnostics\", notification, lspView);\n if (lspView == null) {\n return;\n }\n\n const diagnostics: Diagnostic[] = notification.params.diagnostics.map(\n (diagnostic) => {\n return {\n from: getCharacterFromPosition(\n lspView?.state.doc.toString() ?? \"\",\n diagnostic.range.start\n ),\n to: getCharacterFromPosition(\n lspView?.state.doc.toString() ?? \"\",\n diagnostic.range.end\n ),\n severity: getDiagnosticSeverity(diagnostic.severity),\n source: diagnostic.source,\n message: diagnostic.message,\n };\n }\n );\n\n console.log(\"diagnostics\", diagnostics);\n const transitionSpec = setDiagnostics(lspView.state, diagnostics);\n const transaction = lspView.state.update(transitionSpec);\n lspView.dispatch(transaction);\n };\n\n const emitServerCommand = (jsonRpc: string): void => {\n const json = JSON.parse(jsonRpc);\n if (typeof json === \"string\") {\n throw new Error(\"JSON is string\");\n }\n\n if (Array.isArray(json)) {\n const elements = [];\n for (const el of json) {\n if (\"method\" in el) {\n jsonRpcClient.emit(\"notification\", el);\n } else {\n elements.push(el);\n }\n }\n\n jsonRpcClient.emit(\"batch\", elements);\n return;\n }\n if (\"error\" in json) {\n jsonRpcClient.emit(\"error\", json);\n return;\n }\n if (\"result\" in json) {\n jsonRpcClient.emit(\"response\", json);\n return;\n }\n if (\"method\" in json) {\n jsonRpcClient.emit(\"notification\", json);\n return;\n }\n\n throw new Error(\"unknown error\");\n };\n\n getData({ emitServerCommand });\n\n return [\n lspLinter,\n ...(autocompletion\n ? [\n // generateLspAutocomplete({\n // client: jsonRpcClient,\n // bus: lspBus,\n // }),\n ]\n : []),\n ];\n}\n", "import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n", "import EventEmitter from \"eventemitter3\";\n\nimport { type ServerErrors } from \"./serverErrors.mts\";\n\nconst ResponseErrors = {\n PARSE_ERROR: -32700,\n INVALID_REQUEST: -32600,\n METHOD_NOT_FOUND: -32601,\n INVALID_PARAMS: -32602,\n INTERNAL_ERROR: -32603,\n} as const;\ntype ResponseErrorKeys = keyof typeof ResponseErrors;\ntype ResponseErrorValues =\n | (typeof ResponseErrors)[ResponseErrorKeys]\n | ServerErrors;\n\nexport interface Request {\n jsonrpc: \"2.0\";\n method: string;\n params: any;\n id?: string | number | null;\n}\n\ninterface Response {\n jsonrpc: \"2.0\";\n id?: string | number | null;\n}\n\nexport interface ResponseSuccess extends Response {\n result: any;\n}\n\nexport interface ResponseError extends Response {\n error: {\n code: ResponseErrorValues;\n message: string;\n data?: any;\n };\n}\n\nexport type Responses = ResponseSuccess | ResponseError;\n\ntype PartialRequest = Omit<Request, \"jsonrpc\" | \"\">;\n\nexport class JsonRpcError extends Error {\n code: number | string = 0;\n response: ResponseError | null = null;\n\n constructor(\n message?: string,\n options?: ErrorOptions & { code: number | string; response: ResponseError }\n ) {\n const { cause, code, response } = options ?? {};\n\n super(message, { cause });\n\n if (code != null) {\n this.code = code;\n }\n\n if (response != null) {\n this.response = response;\n }\n }\n}\n\nexport class JsonRpc extends EventEmitter {\n _requests = new Map<number, Request>();\n _lastId = 0;\n\n send(request: PartialRequest): Promise<ResponseSuccess>;\n send(request: PartialRequest[]): Promise<Responses[]>;\n async send(\n request: PartialRequest | PartialRequest[]\n ): Promise<ResponseSuccess | Responses[]> {\n return await new Promise<ResponseSuccess | Responses[]>(\n (resolve, reject) => {\n if (Array.isArray(request)) {\n this._processBatch(request, resolve);\n } else {\n this._process(request, resolve, reject);\n }\n }\n );\n }\n\n notify(request: PartialRequest): void;\n notify(request: PartialRequest[]): void;\n notify(request: PartialRequest | PartialRequest[]): void {\n if (Array.isArray(request)) {\n new Promise((resolve) => {\n this._processBatch(request, resolve);\n }).catch((err) => {\n console.error(\"Error while processing batch:\", err);\n });\n return;\n }\n new Promise((resolve, reject) => {\n this._process(request, resolve, reject);\n }).catch((err) => {\n console.error(\"Error while running process:\", err);\n });\n }\n\n _process(\n request: PartialRequest,\n resolve: Parameters<\n ConstructorParameters<typeof Promise<ResponseSuccess>>[0]\n >[0],\n reject: Parameters<\n ConstructorParameters<typeof Promise<ResponseError>>[0]\n >[1]\n ): void {\n const id = this._lastId;\n this._lastId += 1;\n\n const formattedRequest = {\n jsonrpc: \"2.0\" as const,\n id,\n ...request,\n };\n\n const removeListeners = (): void => {\n this.off(\"response\", onResponse);\n this.off(\"error\", onError);\n };\n\n const onResponse = (response: ResponseSuccess): void => {\n if (response.id === id) {\n resolve(response);\n removeListeners();\n }\n };\n\n const onError = (response: ResponseError): void => {\n if (response.id === id) {\n const error = new JsonRpcError(response.error.message, {\n code: response.error.code,\n response,\n });\n reject(error);\n removeListeners();\n }\n };\n\n this.on(\"response\", onResponse);\n this.on(\"error\", onError);\n\n this.emit(\"request\", JSON.stringify(formattedRequest));\n }\n\n _processBatch(\n request: PartialRequest[],\n resolve: Parameters<\n ConstructorParameters<typeof Promise<Responses[]>>[0]\n >[0]\n ): void {\n const requests: Request[] = request.map((request) => {\n const formattedRequest = {\n jsonrpc: \"2.0\" as const,\n id: this._lastId,\n ...request,\n };\n this._lastId += 1;\n return formattedRequest;\n });\n\n const onBatch = (responses: Responses[]): void => {\n const receivedResponses = [];\n\n for (const response of responses) {\n for (const request of requests) {\n if (request.id === response.id) {\n receivedResponses.push(response);\n }\n }\n }\n\n if (receivedResponses.length > 0) {\n resolve(receivedResponses);\n this.off(\"batch\", onBatch);\n }\n };\n\n this.on(\"batch\", onBatch);\n\n this.emit(\"request\", requests);\n }\n}\n", "import { type Request } from \"../jsonRpc/index.mts\";\n\nexport interface Position {\n character: number;\n line: number;\n}\n\nexport interface Range {\n start: Position;\n end: Position;\n}\n\nexport interface TextDocumentPublishDiagnosticsDiagnostic {\n code: number;\n message: string;\n range: Range;\n severity: number;\n source: string;\n}\n\nexport interface TextDocumentPublishDiagnosticsRequest extends Request {\n method: \"textDocument/publishDiagnostics\";\n params: {\n diagnostics: TextDocumentPublishDiagnosticsDiagnostic[];\n };\n}\n\nexport function getCharacterFromPosition(\n text: string,\n position: Position\n): number {\n let currentLine = 0;\n let currentColumn = 0;\n\n for (let ci = 0; ci < text.length; ci++) {\n const char = text[ci];\n if (char === \"\\n\") {\n currentLine += 1;\n currentColumn = 0;\n } else {\n currentColumn += 1;\n }\n\n if (position.line < currentLine) {\n return 0;\n }\n\n if (currentLine === position.line && currentColumn === position.character) {\n return ci + 1;\n }\n }\n\n return text.length;\n}\n\nexport function getPositionFromCharacter(\n text: string,\n character: number\n): Position {\n let currentLine = 0;\n let currentColumn = 0;\n\n for (let i = 1; i < text.length; i++) {\n const char = text[i - 1];\n if (char === \"\\n\") {\n currentLine += 1;\n currentColumn = 0;\n } else {\n currentColumn += 1;\n }\n\n if (i === character) {\n return {\n line: currentLine,\n character: currentColumn,\n };\n }\n }\n\n return {\n line: currentLine,\n character: currentColumn,\n };\n}\n\nexport function getDiagnosticSeverity(\n severity: number\n): \"error\" | \"warning\" | \"info\" {\n switch (severity) {\n case 1:\n return \"error\";\n case 2:\n return \"warning\";\n case 3:\n case 4:\n default:\n return \"info\";\n }\n}\n"], "mappings": "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", "names": ["require_eventemitter3", "__commonJSMin", "exports", "module", "has", "prefix", "Events", "EE", "fn", "context", "once", "addListener", "emitter", "event", "listener", "evt", "clearEvent", "EventEmitter", "names", "events", "name", "handlers", "i", "l", "ee", "listeners", "a1", "a2", "a3", "a4", "a5", "len", "args", "length", "j", "linter", "setDiagnostics", "ViewPlugin", "import_index", "eventemitter3_default", "EventEmitter", "JsonRpcError", "message", "options", "cause", "code", "response", "JsonRpc", "eventemitter3_default", "request", "resolve", "reject", "err", "id", "formattedRequest", "removeListeners", "onResponse", "onError", "error", "requests", "onBatch", "responses", "receivedResponses", "getCharacterFromPosition", "text", "position", "currentLine", "currentColumn", "ci", "getPositionFromCharacter", "character", "i", "getDiagnosticSeverity", "severity", "createLsp", "config", "lspBus", "EventEmitter", "lspView", "nextVersionId", "autocompletion", "onClientCommand", "getData", "jsonRpcClient", "JsonRpc", "LspPlugin", "view", "update", "ViewPlugin", "lspLinter", "linter", "diagnostics", "localVersion", "request", "onNotification", "notification", "onPublishDiagnostics", "diagnostic", "getCharacterFromPosition", "getDiagnosticSeverity", "transitionSpec", "setDiagnostics", "transaction", "jsonRpc", "json", "elements", "el"] }