Problem
The LSP server only serves per-file diagnostics through pull diagnostics (textDocument/diagnostic); push (textDocument/publishDiagnostics) is only used for config file errors. Clients that do not implement pull diagnostics never receive file diagnostics at all: no errors appear on open, change, or close.
Affected clients include eglot before Dec 2025, Nova, Claude Code, and other lighter LSP clients. Prior discussion in the typescript-go repo: microsoft/typescript-go#2362. Client-side tracking for Claude Code: anthropics/claude-code#40282.
Proposal
When a client advertises textDocument.publishDiagnostics but not textDocument.diagnostic, push per-file diagnostics for open files: publish on open, debounced republish on change, clear on close. Triggers that would send workspace/diagnostic/refresh (watched file changes, config changes, ATA updates) recompute server-side instead, since push-only clients cannot re-pull. Pull-capable clients are unaffected, and the existing disablePushDiagnostics initialization option also disables the new path.
Implemented in #63921 (carried over from microsoft/typescript-go#4297 after the repository move).
Problem
The LSP server only serves per-file diagnostics through pull diagnostics (
textDocument/diagnostic); push (textDocument/publishDiagnostics) is only used for config file errors. Clients that do not implement pull diagnostics never receive file diagnostics at all: no errors appear on open, change, or close.Affected clients include eglot before Dec 2025, Nova, Claude Code, and other lighter LSP clients. Prior discussion in the typescript-go repo: microsoft/typescript-go#2362. Client-side tracking for Claude Code: anthropics/claude-code#40282.
Proposal
When a client advertises
textDocument.publishDiagnosticsbut nottextDocument.diagnostic, push per-file diagnostics for open files: publish on open, debounced republish on change, clear on close. Triggers that would sendworkspace/diagnostic/refresh(watched file changes, config changes, ATA updates) recompute server-side instead, since push-only clients cannot re-pull. Pull-capable clients are unaffected, and the existingdisablePushDiagnosticsinitialization option also disables the new path.Implemented in #63921 (carried over from microsoft/typescript-go#4297 after the repository move).