-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Description
Description
ESLint LSP diagnostics are not being surfaced to the LLM during a session. According to the LSP docs, the built-in ESLint LSP server should automatically activate when eslint is a project dependency and .js files are present. However, when the LLM reads a file with known ESLint errors, no diagnostic information is included in the tool results.
Reproduction
- Clone https://github.com/mayurj747/lint-demo
- Run
npm install - Start an OpenCode session and ask the LLM to read
index.js - Observe that no ESLint diagnostics are attached to the file read output
The file has 5 known ESLint errors (no-unused-vars, no-constant-condition, eqeqeq, no-undef) which are correctly reported when running npx eslint index.js directly.
Debug diagnostics
Running the debug command with --log-level DEBUG shows the ESLint LSP server spawns and initializes successfully, sends textDocument/didOpen, but the diagnostics subscription times out after ~3 seconds and returns an empty {}:
❯ opencode debug lsp diagnostics index.js --print-logs --log-level DEBUG
INFO 2026-02-12T06:23:21 +361ms service=default version=1.1.57 args=["debug","lsp","diagnostics","index.js","--print-logs","--log-level","DEBUG"] opencode
INFO 2026-02-12T06:23:21 +1ms service=default directory=/Users/mbency/projects/lint-demo creating instance
INFO 2026-02-12T06:23:21 +0ms service=project directory=/Users/mbency/projects/lint-demo fromDirectory
INFO 2026-02-12T06:23:21 +65ms service=default directory=/Users/mbency/projects/lint-demo bootstrapping
INFO 2026-02-12T06:23:21 +3ms service=config path=/Users/mbency/.config/opencode/config.json loading
INFO 2026-02-12T06:23:21 +0ms service=config path=/Users/mbency/.config/opencode/opencode.json loading
INFO 2026-02-12T06:23:21 +0ms service=config path=/Users/mbency/.config/opencode/opencode.jsonc loading
INFO 2026-02-12T06:23:21 +0ms service=config path=/Users/mbency/projects/lint-demo/opencode.json loading
INFO 2026-02-12T06:23:21 +6ms service=plugin name=CodexAuthPlugin loading internal plugin
INFO 2026-02-12T06:23:21 +0ms service=plugin name=CopilotAuthPlugin loading internal plugin
INFO 2026-02-12T06:23:21 +0ms service=plugin name=gitlabAuthPlugin loading internal plugin
INFO 2026-02-12T06:23:21 +1ms service=plugin path=opencode-anthropic-auth@0.0.13 loading plugin
INFO 2026-02-12T06:23:21 +37ms service=bus type=* subscribing
INFO 2026-02-12T06:23:21 +0ms service=bus type=session.updated subscribing
INFO 2026-02-12T06:23:21 +0ms service=bus type=message.updated subscribing
INFO 2026-02-12T06:23:21 +0ms service=bus type=message.part.updated subscribing
INFO 2026-02-12T06:23:21 +0ms service=bus type=session.updated subscribing
INFO 2026-02-12T06:23:21 +0ms service=bus type=message.updated subscribing
INFO 2026-02-12T06:23:21 +0ms service=bus type=message.part.updated subscribing
INFO 2026-02-12T06:23:21 +0ms service=bus type=session.diff subscribing
INFO 2026-02-12T06:23:21 +0ms service=format init
INFO 2026-02-12T06:23:21 +0ms service=bus type=file.edited subscribing
INFO 2026-02-12T06:23:21 +0ms service=lsp serverIds=deno, typescript, vue, eslint, oxlint, biome, gopls, ruby-lsp, pyright, elixir-ls, zls, csharp, fsharp, sourcekit-lsp, rust, clangd, svelte, astro, jdtls, kotlin-ls, yaml-ls, lua-ls, php intelephense, prisma, dart, ocaml-lsp, bash, terraform, texlab, dockerfile, gleam, clojure-lsp, nixd, tinymist, haskell-language-server enabled LSP servers
INFO 2026-02-12T06:23:21 +1ms service=file.watcher init
INFO 2026-02-12T06:23:21 +1ms service=scheduler id=snapshot.cleanup run
INFO 2026-02-12T06:23:21 +0ms service=scheduler id=tool.truncation.cleanup run
INFO 2026-02-12T06:23:21 +0ms service=bus type=command.executed subscribing
INFO 2026-02-12T06:23:21 +1ms service=file.watcher platform=darwin backend=fs-events watcher backend
INFO 2026-02-12T06:23:21 +173ms service=lsp file=index.js touching file
INFO 2026-02-12T06:23:21 +8ms service=vcs branch=main initialized
INFO 2026-02-12T06:23:21 +0ms service=bus type=file.watcher.updated subscribing
INFO 2026-02-12T06:23:21 +4ms service=lsp.server typescript server
INFO 2026-02-12T06:23:21 +3ms service=lsp.server spawning eslint server
INFO 2026-02-12T06:23:21 +3ms service=lsp serverID=eslint spawned lsp server
INFO 2026-02-12T06:23:21 +0ms service=lsp.client serverID=eslint starting client
INFO 2026-02-12T06:23:21 +4ms service=lsp.client serverID=eslint sending initialize
INFO 2026-02-12T06:23:22 +79ms service=lsp.client serverID=eslint initialized
INFO 2026-02-12T06:23:22 +0ms service=bus type=lsp.updated publishing
INFO 2026-02-12T06:23:22 +1ms service=lsp.server oxlint not found, please install oxlint
INFO 2026-02-12T06:23:22 +1ms service=lsp.client serverID=eslint path=/Users/mbency/projects/lint-demo/index.js waiting for diagnostics
INFO 2026-02-12T06:23:22 +0ms service=bus type=lsp.client.diagnostics subscribing
INFO 2026-02-12T06:23:22 +0ms service=lsp.client serverID=eslint path=/Users/mbency/projects/lint-demo/index.js workspace/didChangeWatchedFiles
INFO 2026-02-12T06:23:22 +0ms service=lsp.client serverID=eslint path=/Users/mbency/projects/lint-demo/index.js textDocument/didOpen
INFO 2026-02-12T06:23:22 +10ms service=snapshot prune=7.days cleanup
INFO 2026-02-12T06:23:25 +2992ms service=bus type=lsp.client.diagnostics unsubscribing
{}
INFO 2026-02-12T06:23:26 +1014ms service=default directory=/Users/mbency/projects/lint-demo disposing instance
INFO 2026-02-12T06:23:26 +0ms service=state key=/Users/mbency/projects/lint-demo waiting for state disposal to complete
INFO 2026-02-12T06:23:26 +1ms service=lsp.client serverID=eslint shutting down
INFO 2026-02-12T06:23:26 +1ms service=lsp.client serverID=eslint shutdown
INFO 2026-02-12T06:23:26 +0ms service=bus type=file.watcher.updated unsubscribing
INFO 2026-02-12T06:23:26 +1ms service=state key=/Users/mbency/projects/lint-demo state disposal completed
Notable observations:
- The ESLint server does spawn and initialize successfully
textDocument/didOpenis sent forindex.js- The client waits for diagnostics (
waiting for diagnostics) but thelsp.client.diagnosticssubscription unsubscribes after ~3 seconds with no diagnostics received - The debug command returns
{}(empty) - OpenCode version: 1.1.57
Additional context
- The project has
eslintas adevDependencyinpackage.jsonand aneslint.config.jsflat config - Running ESLint manually via bash works correctly and reports all 5 errors
- The LLM receives only raw file contents with no diagnostic annotations when using the Read tool
Expected behavior
ESLint LSP diagnostics should be available to the LLM when files are read, as described in the LSP documentation.