`codegraph_callees stage_apply::run` (and `_node`, `_impact`, ...) returned "not found" against a repo with 7-9 sibling Rust modules, each exporting `pub async fn run`. Two underlying issues: 1. The FTS5 query builder stripped `:` as a special char without splitting on `::`, so `stage_apply::run` collapsed to the literal `stage_applyrun` which matches nothing. Treat `::` as whitespace before the strip step so both halves become FTS tokens. 2. `matchesSymbol` only understood `Parent.child` qualifiers and relied on `qualifiedName` carrying the module path. Rust file- level functions don't have their module name in `qualifiedName` (it's encoded in the file path instead), so even dot-style lookups failed. Accept `::`, `.`, `/` as separators; multi-level forms compose; Rust `crate::`/`super::`/`self::` prefixes get stripped before path matching. Fall back to file-path containment when the qualified-name suffix doesn't match — `stage_apply::run` matches a `run` in any file whose path has a `stage_apply` segment. Also tightens the no-match branch: qualified lookups no longer fall through to a fuzzy text match. `stage_apply::nonexistent_fn` returns `null` instead of silently resolving to an unrelated `rollback` in the same file. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
e176062c56
commit
83f36dc170
@@ -37,6 +37,29 @@ and adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
[#168](https://github.com/colbymchenry/codegraph/issues/168). Thanks to
|
||||
[@starkleek](https://github.com/starkleek) for the report and to
|
||||
[@Bortlesboat](https://github.com/Bortlesboat) for the initial PR.
|
||||
- **MCP / search**: module-qualified symbol lookups now resolve. The
|
||||
MCP tools (`codegraph_node`, `codegraph_callees`, `codegraph_impact`,
|
||||
…) accept `module::symbol` (Rust / C++ / Ruby), `Module.symbol`
|
||||
(TS / JS / Python), and `module/symbol` (path-style) — multi-level
|
||||
forms (`crate::configurator::stage_apply::run`) and Rust path
|
||||
prefixes (`crate`, `super`, `self`) are handled. Two underlying
|
||||
fixes:
|
||||
- The FTS5 query builder now treats `::` as a token separator
|
||||
instead of stripping it to nothing, so `stage_apply::run` no
|
||||
longer collapses to the unsearchable `stage_applyrun`.
|
||||
- `matchesSymbol` falls back to a file-path containment check when
|
||||
`qualifiedName` doesn't carry the module hierarchy (Rust file-
|
||||
level functions, Python free functions in a package): a `run`
|
||||
in `src/configurator/stage_apply.rs` now matches
|
||||
`stage_apply::run` because `stage_apply` appears as a path
|
||||
segment.
|
||||
- Qualified lookups that don't match the qualifier no longer fall
|
||||
through to fuzzy text matches — `stage_apply::nonexistent_fn`
|
||||
returns `null` instead of resolving to an unrelated `rollback`
|
||||
in the same file.
|
||||
Closes [#173](https://github.com/colbymchenry/codegraph/issues/173).
|
||||
Thanks to [@joselhurtado](https://github.com/joselhurtado) for the
|
||||
detailed reproduction.
|
||||
|
||||
[0.7.10]: https://github.com/colbymchenry/codegraph/releases/tag/v0.7.10
|
||||
|
||||
|
||||
Reference in New Issue
Block a user