LSP bridge: goToDefinition/findReferences/workspaceSymbol/goToImplementation empty while hover/documentSymbol work — call hierarchy result inconsistent across sessions (independent repro of #44767 / #32499)

Resolved 💬 0 comments Opened Jul 8, 2026 by artiii Closed Jul 12, 2026

Preflight Checklist

  • [x] I have searched existing issues and this is a follow-up to two locked/closed duplicates that never got a landed fix (#44767, #32499)
  • [x] This is a single bug report
  • [x] I am using the latest version of Claude Code

Why a new issue

I wanted to comment on #44767 and its canonical duplicate #32499 with an independent repro, but both are locked (closed as duplicate / not_planned) so GitHub rejects new comments (403 Unable to create comment because issue is locked). Filing fresh since the underlying bug still reproduces and has a detail neither of those threads captured.

Environment

  • Claude Code: 2.1.204
  • OS: macOS 15.7.7 (Darwin 24.6.0), Apple Silicon
  • typescript-language-server: 5.3.0
  • Node: v22.13.1
  • Clean session — no LSP processes manually killed at any point (ruling out the separate "server is running" stuck-state bug family, e.g. claude-plugins-official#1359)

Bug description

Confirmed the pattern from #44767 in an independent environment.

Test file: a top-level TS function (function foo(voyage, transferStart) {...}) that:

  • imports a named const from another file in the project and uses it
  • declares 4 local consts, one reused 6 lines below its declaration
  • is called from exactly one other file, and itself calls 2 methods on an imported class instance

| Operation | Position | Result |
|---|---|---|
| documentSymbol | whole file | ✅ correct outline |
| hover (declaration) | local const decl | ✅ correct type |
| hover (usage, 4 lines below) | same const, later usage | ✅ same correct type |
| goToDefinition (same file) | usage → decl | ❌ "No definition found" |
| goToDefinition (cross-file import) | imported const usage | ❌ "No definition found" (hover on the same position correctly resolved it as (alias) const ... import ...) |
| findReferences | decl with 1 known usage | ❌ "No references found" |
| workspaceSymbol | exact function name | ❌ "No symbols found" |
| goToImplementation | imported class usage | ❌ "No definition found" |
| prepareCallHierarchy | function decl | ✅ resolved |
| incomingCalls | same position | ✅ found the real (only) call site, correct file+line |
| outgoingCalls | same position | ✅ found all 4 real internal calls, including one into @types/luxon (third file) |

Retried all empty results after 15s — identical, so not an indexing race.

New data point vs #44767's own repro

prepareCallHierarchy/incomingCalls/outgoingCalls are not reliably in the "broken" bucket together with goToDefinition/findReferences/workspaceSymbol/goToImplementation. In one session (same day, same machine, same Claude Code version) prepareCallHierarchy failed ("No call hierarchy item found") on a different file; in the session documented here it fully succeeded, including a correct cross-file incomingCalls/outgoingCalls result.

So the failure isn't cleanly "single-file/positional ops work, graph-based ops don't" — call hierarchy seems to intermittently fall on either side. This may be a useful clue for root-causing: it suggests a timing race rather than a structural gap, since the same request shape (a request that depends on the server having indexed/loaded the project) sometimes succeeds and sometimes doesn't, matching the "bridge reads the notification instead of waiting for the real response" hypothesis from #44767 more than a hardcoded "operation type X is unsupported" explanation.

Also worth flagging

#44767 was auto-closed as a duplicate of #32499, but #32499's repro has the opposite profile (hover/documentSymbol broken, workspaceSymbol working) from #44767's own repro (hover/documentSymbol working, workspaceSymbol broken) and from what's reproduced here. These may be distinct root causes that got merged by the auto-dedup bot — a fix aimed at one profile may not fix the other. Worth someone with repo access re-examining whether they should be split back out.

Expected behavior

goToDefinition, findReferences, workspaceSymbol, and goToImplementation should return correct results whenever the underlying language server would, matching what hover/documentSymbol already demonstrate is reachable through the same bridge.

View original on GitHub ↗