optimistically boot lsp servers

This commit is contained in:
Dax Raad
2025-06-30 16:45:13 -04:00
parent c573270e66
commit 9ad1687f04
4 changed files with 85 additions and 9 deletions

View File

@@ -185,7 +185,7 @@ export namespace LSPClient {
log.info("shutting down")
connection.end()
connection.dispose()
server.process.kill("SIGKILL")
server.process.kill("SIGTERM")
},
}

View File

@@ -3,6 +3,7 @@ import { Log } from "../util/log"
import { LSPClient } from "./client"
import path from "path"
import { LSPServer } from "./server"
import { Ripgrep } from "../file/ripgrep"
export namespace LSP {
const log = Log.create({ service: "lsp" })
@@ -25,6 +26,23 @@ export namespace LSP {
},
)
export async function init() {
log.info("init")
const app = App.info()
const result = Object.values(LSPServer).map(async (x) => {
for (const extension of x.extensions) {
const [file] = await Ripgrep.files({
cwd: app.path.cwd,
glob: "*" + extension,
})
if (!file) continue
await LSP.touchFile(file, true)
break
}
})
return Promise.all(result)
}
export async function touchFile(input: string, waitForDiagnostics?: boolean) {
const extension = path.parse(input).ext
const s = await state()
@@ -32,14 +50,12 @@ export namespace LSP {
x.extensions.includes(extension),
)
for (const match of matches) {
if (s.skip.has(match.id)) continue
const existing = s.clients.get(match.id)
if (existing) continue
if (s.skip.has(match.id)) continue
s.skip.add(match.id)
const handle = await match.spawn(App.info())
if (!handle) {
s.skip.add(match.id)
continue
}
if (!handle) continue
const client = await LSPClient.create(match.id, handle).catch(() => {})
if (!client) {
s.skip.add(match.id)
@@ -86,6 +102,14 @@ export namespace LSP {
})
}
export async function workspaceSymbol(query: string) {
return run((client) =>
client.connection.sendRequest("workspace/symbol", {
query,
}),
)
}
async function run<T>(
input: (client: LSPClient.Info) => Promise<T>,
): Promise<T[]> {