diff options
| author | Luke Parker <[email protected]> | 2025-12-16 13:26:59 +1000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-15 21:26:59 -0600 |
| commit | ef78fd8bae991cc7d816dba8e2f37916cc6dd441 (patch) | |
| tree | 364141158b662891ab6a88285fd61348d79764a7 | |
| parent | 72ebaeb8f7e5ac86b9b2d876658ff3fff4638b25 (diff) | |
| download | opencode-ef78fd8bae991cc7d816dba8e2f37916cc6dd441.tar.gz opencode-ef78fd8bae991cc7d816dba8e2f37916cc6dd441.zip | |
fix: debounce LSP diagnostics to get complete results (#5600)
| -rw-r--r-- | packages/opencode/src/lsp/client.ts | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/packages/opencode/src/lsp/client.ts b/packages/opencode/src/lsp/client.ts index f06c2c938..b66bb9933 100644 --- a/packages/opencode/src/lsp/client.ts +++ b/packages/opencode/src/lsp/client.ts @@ -13,6 +13,8 @@ import { withTimeout } from "../util/timeout" import { Instance } from "../project/instance" import { Filesystem } from "../util/filesystem" +const DIAGNOSTICS_DEBOUNCE_MS = 150 + export namespace LSPClient { const log = Log.create({ service: "lsp.client" }) @@ -188,13 +190,18 @@ export namespace LSPClient { ) log.info("waiting for diagnostics", { path: normalizedPath }) let unsub: () => void + let debounceTimer: ReturnType<typeof setTimeout> | undefined return await withTimeout( new Promise<void>((resolve) => { unsub = Bus.subscribe(Event.Diagnostics, (event) => { if (event.properties.path === normalizedPath && event.properties.serverID === result.serverID) { - log.info("got diagnostics", { path: normalizedPath }) - unsub?.() - resolve() + // Debounce to allow LSP to send follow-up diagnostics (e.g., semantic after syntax) + if (debounceTimer) clearTimeout(debounceTimer) + debounceTimer = setTimeout(() => { + log.info("got diagnostics", { path: normalizedPath }) + unsub?.() + resolve() + }, DIAGNOSTICS_DEBOUNCE_MS) } }) }), @@ -202,6 +209,7 @@ export namespace LSPClient { ) .catch(() => {}) .finally(() => { + if (debounceTimer) clearTimeout(debounceTimer) unsub?.() }) }, |
