summaryrefslogtreecommitdiffhomepage
path: root/js/src/lsp/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/lsp/index.ts')
-rw-r--r--js/src/lsp/index.ts131
1 files changed, 0 insertions, 131 deletions
diff --git a/js/src/lsp/index.ts b/js/src/lsp/index.ts
deleted file mode 100644
index e3344a934..000000000
--- a/js/src/lsp/index.ts
+++ /dev/null
@@ -1,131 +0,0 @@
-import { App } from "../app/app";
-import { Log } from "../util/log";
-import { LSPClient } from "./client";
-import path from "path";
-
-export namespace LSP {
- const log = Log.create({ service: "lsp" });
-
- const state = App.state(
- "lsp",
- async () => {
- log.info("initializing");
- const clients = new Map<string, LSPClient.Info>();
-
- return {
- clients,
- };
- },
- async (state) => {
- for (const client of state.clients.values()) {
- await client.shutdown();
- }
- },
- );
-
- export async function file(input: string) {
- const extension = path.parse(input).ext;
- const s = await state();
- const matches = AUTO.filter((x) => x.extensions.includes(extension));
- for (const match of matches) {
- const existing = s.clients.get(match.id);
- if (existing) continue;
- const client = await LSPClient.create({
- cmd: match.command,
- serverID: match.id,
- });
- s.clients.set(match.id, client);
- }
- await run(async (client) => {
- const wait = client.waitForDiagnostics({ path: input });
- await client.notify.open({ path: input });
- return wait;
- });
- }
-
- export async function diagnostics() {
- const results: Record<string, LSPClient.Diagnostic[]> = {};
- for (const result of await run(async (client) => client.diagnostics)) {
- for (const [path, diagnostics] of result.entries()) {
- const arr = results[path] || [];
- arr.push(...diagnostics);
- results[path] = arr;
- }
- }
- return results;
- }
-
- export async function hover(input: {
- file: string;
- line: number;
- character: number;
- }) {
- return run((client) => {
- return client.connection.sendRequest("textDocument/hover", {
- textDocument: {
- uri: `file://${input.file}`,
- },
- position: {
- line: input.line,
- character: input.character,
- },
- });
- });
- }
-
- async function run<T>(
- input: (client: LSPClient.Info) => Promise<T>,
- ): Promise<T[]> {
- const clients = await state().then((x) => [...x.clients.values()]);
- const tasks = clients.map((x) => input(x));
- return Promise.all(tasks);
- }
-
- const AUTO: {
- id: string;
- command: string[];
- extensions: string[];
- install?: () => Promise<void>;
- }[] = [
- {
- id: "typescript",
- command: ["bun", "x", "typescript-language-server", "--stdio"],
- extensions: [
- ".ts",
- ".tsx",
- ".js",
- ".jsx",
- ".mjs",
- ".cjs",
- ".mts",
- ".cts",
- ".mtsx",
- ".ctsx",
- ],
- },
- /*
- {
- id: "golang",
- command: ["gopls"],
- extensions: [".go"],
- },
- */
- ];
-
- export namespace Diagnostic {
- export function pretty(diagnostic: LSPClient.Diagnostic) {
- const severityMap = {
- 1: "ERROR",
- 2: "WARN",
- 3: "INFO",
- 4: "HINT",
- };
-
- const severity = severityMap[diagnostic.severity || 1];
- const line = diagnostic.range.start.line + 1;
- const col = diagnostic.range.start.character + 1;
-
- return `${severity} [${line}:${col}] ${diagnostic.message}`;
- }
- }
-}