From f03fae03e54b150b368bc02ca4e2f5753f34671d Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Mon, 11 Aug 2025 21:36:05 -0400 Subject: [PATCH] switch back to didUpdate instead of closing and opening file --- packages/opencode/src/cli/cmd/debug/lsp.ts | 4 +++ packages/opencode/src/lsp/client.ts | 29 ++++++++++++++-------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/packages/opencode/src/cli/cmd/debug/lsp.ts b/packages/opencode/src/cli/cmd/debug/lsp.ts index ac1bac7c..91b13df4 100644 --- a/packages/opencode/src/cli/cmd/debug/lsp.ts +++ b/packages/opencode/src/cli/cmd/debug/lsp.ts @@ -2,6 +2,7 @@ import { LSP } from "../../../lsp" import { bootstrap } from "../../bootstrap" import { cmd } from "../cmd" import { Log } from "../../../util/log" +import { appendFile } from "fs/promises" export const LSPCommand = cmd({ command: "lsp", @@ -17,6 +18,9 @@ const DiagnosticsCommand = cmd({ await bootstrap({ cwd: process.cwd() }, async () => { await LSP.touchFile(args.file, true) console.log(await LSP.diagnostics()) + await appendFile(args.file, `\nconst x: number = "foo"`) + await LSP.touchFile(args.file, true) + console.log(await LSP.diagnostics()) }) }, }) diff --git a/packages/opencode/src/lsp/client.ts b/packages/opencode/src/lsp/client.ts index c63e0259..509e982e 100644 --- a/packages/opencode/src/lsp/client.ts +++ b/packages/opencode/src/lsp/client.ts @@ -126,19 +126,26 @@ export namespace LSPClient { input.path = path.isAbsolute(input.path) ? input.path : path.resolve(app.path.cwd, input.path) const file = Bun.file(input.path) const text = await file.text() - const version = files[input.path] - if (version !== undefined) { - diagnostics.delete(input.path) - await connection.sendNotification("textDocument/didClose", { - textDocument: { - uri: `file://` + input.path, - }, - }) - } - log.info("textDocument/didOpen", input) - diagnostics.delete(input.path) const extension = path.extname(input.path) const languageId = LANGUAGE_EXTENSIONS[extension] ?? "plaintext" + + const version = files[input.path] + if (version !== undefined) { + const next = version + 1 + files[input.path] = next + log.info("textDocument/didChange", { path: input.path, version: next }) + await connection.sendNotification("textDocument/didChange", { + textDocument: { + uri: `file://` + input.path, + version: next, + }, + contentChanges: [{ text }], + }) + return + } + + log.info("textDocument/didOpen", input) + diagnostics.delete(input.path) await connection.sendNotification("textDocument/didOpen", { textDocument: { uri: `file://` + input.path,