claude-code - 💡(How to fix) Fix [BUG] LSP goToDefinition silently drops results in git-ignored paths

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Error Message

Error Messages/Logs

Root Cause

Root Cause

Code Example

// .claude/settings.json or similar
{
  "lsp": {
    "gitIgnoreFilter": {
      "goToDefinition": false,
      "goToImplementation": false,
      "findReferences": true,
      "workspaceSymbol": true
    }
  }
}

---

// Current: unconditionally filters all these operations through git-ignore check
if (M && Array.isArray(M) && (
    H.operation === "findReferences" ||
    H.operation === "goToDefinition" ||
    H.operation === "goToImplementation" ||
    H.operation === "workspaceSymbol"
)) {
  // ... runs git check-ignore, drops ignored paths
}

---
RAW_BUFFERClick to expand / collapse

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • I am using the latest version of Claude Code

What's Wrong?

Summary

The LSP tool's goToDefinition (and goToImplementation) operations silently filter out results that point to files in git-ignored directories (e.g., .venv/, node_modules/). This makes it impossible to navigate to definitions in external packages.

I have copied most of the text for this issue from the original one at https://github.com/anthropics/claude-code/issues/32373 . While it was closed, the issue is still present at least for the Typescript LSP plugin.

Root Cause

In the LSP tool's call handler, results from goToDefinition, findReferences, goToImplementation, and workspaceSymbol are passed through a filter that:

Extracts file URIs from the LSP response Runs git check-ignore on those paths Removes any locations where git check-ignore returns exit code 0 Since .venv/ is typically git-ignored (both by project .gitignore and by .venv/.gitignore auto-generated by venv/uv which contains *), all definitions in external packages are silently dropped.

Suggested Fix

Add a configuration option to control the git check-ignore filtering behavior per LSP operation. For example, a setting like:

// .claude/settings.json or similar
{
  "lsp": {
    "gitIgnoreFilter": {
      "goToDefinition": false,
      "goToImplementation": false,
      "findReferences": true,
      "workspaceSymbol": true
    }
  }
}

The default could remain as-is for backwards compatibility, but users working with external dependencies should be able to opt out of the filter for navigation operations like goToDefinition and goToImplementation, which return a small number of precise results (usually 1) where filtering adds no value.

The relevant code path (from compiled binary analysis):

// Current: unconditionally filters all these operations through git-ignore check
if (M && Array.isArray(M) && (
    H.operation === "findReferences" ||
    H.operation === "goToDefinition" ||
    H.operation === "goToImplementation" ||
    H.operation === "workspaceSymbol"
)) {
  // ... runs git check-ignore, drops ignored paths
}

What Should Happen?

The LSP should be allowed to navigate to external modules, even if they are in gitignored directories.

Error Messages/Logs

Steps to Reproduce

Repro 1: Typescript LSP simarmol/lsp-repro

Follow the instructions in the repo.

Claude Model

Not sure / Multiple models

Is this a regression?

No, this never worked

Last Working Version

No response

Claude Code Version

2.1.140

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

No response

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

claude-code - 💡(How to fix) Fix [BUG] LSP goToDefinition silently drops results in git-ignored paths