From 8cfe604de7826a360bfc3635f6f68473827b4cd1 Mon Sep 17 00:00:00 2001 From: Evan Reichard Date: Sun, 24 May 2026 11:57:01 -0400 Subject: [PATCH] fix(daemon): clear diagnostics and reload TypeScript projects on watcher events Evicting the entire entry on derived watcher events was overly aggressive. Instead, clear cached diagnostics and send a reloadProjects command to the TypeScript language server so it picks up workspace changes without losing state. --- src/daemon.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/daemon.ts b/src/daemon.ts index 2fec016..49cf3fe 100644 --- a/src/daemon.ts +++ b/src/daemon.ts @@ -191,11 +191,15 @@ function forwardEvents(entry: ClientEntry, events: FileEvent[]): void { if (process.env.LSP_DEBUG) { log(`watcher fire`, entry.server.id, JSON.stringify(events)); } + for (const uri of entry.opened.keys()) entry.client.clearDiagnostics(uri); entry.client.sendNotification("workspace/didChangeWatchedFiles", { changes: events, }); - if (entry.usesDerivedWatchers) { - evict(entry, "derived watcher event"); + if (entry.usesDerivedWatchers && entry.server.id === "typescript-language-server") { + void entry.client.sendRequest("workspace/executeCommand", { + command: "typescript.tsserverRequest", + arguments: ["reloadProjects"], + }).catch((err) => log("typescript reloadProjects failed", (err as Error).message)); } } catch (err) { log(`watcher send failed`, entry.server.id, (err as Error).message);