Skip to content

Cross-crate call graphs stop at boundaries #56

Open

Description

@fmgoodman

Root cause:

httplink only matches REST URL paths between services

ApproachL

New pipeline pass that parses .proto services, finds generated XxxClient::method() calls, and links them to server-side impls via proto naming conventions (prost/tonic codegen is predictable)

Activity

  1. added
    parsing/qualityGraph extraction bugs, false positives, missing edges
    enhancementNew feature or request
    on Mar 20, 2026
  2. DeusData commented on Jun 12, 2026

    @DeusData
    Owner

    Late update on this one — two separate parts:

    1. In-workspace cross-crate calls: v0.8.0 added a Rust hybrid-LSP extraction path (current is v0.8.1), which materially improves call resolution across crates inside one indexed workspace. If your boundary cases were within a Cargo workspace, a retest on v0.8.1 would be very useful — please share what (if anything) still stops at the crate boundary.

    2. gRPC client→server linking (parsing .proto services and linking generated XxxClient::method() calls to server-side impls via tonic/prost naming conventions): not shipped yet — keeping this issue open to track it. The existing cross-service linker only matches REST URL paths today, as you diagnosed.

    A v0.8.1 result on part 1 would help sharpen exactly how much of this remains a proto-linker feature vs. already covered. Thanks!

  3. added
    awaiting-reporterWaiting on the reporter for info/repro; stale bot will warn then close
    on Jun 23, 2026
  4. DeusData commented on Jun 28, 2026

    @DeusData
    Owner

    This issue now has a first-class, durable reproduction in the cumulative bug-reproduction suite landing in #667 — a test that pins the exact failing behaviour, so it's tracked and guarded against silent regression. Where #667 also lands the root-cause fix, that's called out in the PR; otherwise the reproduction makes the eventual fix straightforward and verifiable.

    The reproduction goes live once #667 merges. (Posted from the release branch's QA pass.)

  5. added
    priority/backlogValuable contribution, lower scheduling urgency; review when maintainer capacity opens.
    on Jul 1, 2026
  6. added this to the 0.9.2-rc milestone on Jul 8, 2026
  7. DeusData commented on Jul 26, 2026

    @DeusData
    Owner

    Correcting our own bookkeeping here: this issue was labelled awaiting-reporter, which arms an automated stale/close cycle. That was wrong, and I have removed it — you do not owe us anything on this one.

    Where it actually stands: the reproduction promised in the last update did land. #667 merged on 2026-06-28 (36d83280) and the case now lives in-tree as tests/repro/repro_issue56.c, pinning cross-crate CALLS resolution against a real two-crate Cargo workspace fixture rather than the single-file LSP layer that the earlier rustlsp_extra_cargo_wires_workspace_member test covered.

    So the bug is confirmed, reproduced, guarded against silent regression — and still unfixed. The root cause documented in that test is that the tree-sitter-only Rust extractor has no Cargo metadata at extraction time, so a crate_a::helper() call site in crate_b has no registry entry to resolve against and no CALLS edge is minted.

    The next step is ours, not yours. Apologies for a label that suggested otherwise — and for the fact that it would have auto-closed this as not planned in three days. The stale workflow has been changed so it can no longer close issues at all; it now only flags them for a human to review.

    Thanks for the original report, and for your patience with it.

  8. added
    maintainer-notesInternal observations and improvement notes
    and removed
    awaiting-reporterWaiting on the reporter for info/repro; stale bot will warn then close
    on Jul 26, 2026
  9. DeusData commented on Aug 29, 2026

    @DeusData
    Owner

    Partial progress landed on main in 56dc82ec (PR #1850, "fix: preserve Cargo context in parallel Rust resolution").

    Deliberately leaving this open. That PR references this issue rather than claiming to close it, and the distinction is real: it fixes one mechanism by which cross-crate edges were lost — Cargo context not surviving parallel Rust resolution — but "call graphs stop at crate boundaries" is a broader symptom that may have other contributing causes.

    If you are in a position to re-test against main, it would be genuinely useful to know whether your case improves, stays the same, or improves partially. That distinguishes "this was the cause" from "this was a cause" better than anything I can determine from the code alone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmaintainer-notesInternal observations and improvement notesparsing/qualityGraph extraction bugs, false positives, missing edgespriority/backlogValuable contribution, lower scheduling urgency; review when maintainer capacity opens.

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions