Browse Source

switch back to didUpdate instead of closing and opening file

Dax Raad 6 months ago
parent
commit
f03fae03e5
2 changed files with 15 additions and 4 deletions
  1. 4 0
      packages/opencode/src/cli/cmd/debug/lsp.ts
  2. 11 4
      packages/opencode/src/lsp/client.ts

+ 4 - 0
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())
     })
   },
 })

+ 11 - 4
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 extension = path.extname(input.path)
+          const languageId = LANGUAGE_EXTENSIONS[extension] ?? "plaintext"
+
           const version = files[input.path]
           if (version !== undefined) {
-            diagnostics.delete(input.path)
-            await connection.sendNotification("textDocument/didClose", {
+            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)
-          const extension = path.extname(input.path)
-          const languageId = LANGUAGE_EXTENSIONS[extension] ?? "plaintext"
           await connection.sendNotification("textDocument/didOpen", {
             textDocument: {
               uri: `file://` + input.path,