`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
+7
-1
@@ -696,8 +696,14 @@ export class QueryBuilder {
|
||||
const { kinds, languages, limit = 100, offset = 0 } = options;
|
||||
|
||||
// Add prefix wildcard for better matching (e.g., "auth" matches "AuthService", "authenticate")
|
||||
// Escape special FTS5 characters and add prefix wildcard
|
||||
// Escape special FTS5 characters and add prefix wildcard.
|
||||
//
|
||||
// `::` is a qualifier separator in Rust/C++/Ruby, not a token char,
|
||||
// so treat it as whitespace before the strip step. Otherwise queries
|
||||
// like `stage_apply::run` collapse to `stage_applyrun` (the colons
|
||||
// are stripped without splitting) and find nothing. See #173.
|
||||
const ftsQuery = query
|
||||
.replace(/::/g, ' ') // Rust/C++/Ruby qualifier separator
|
||||
.replace(/['"*():^]/g, '') // Remove FTS5 special chars
|
||||
.split(/\s+/)
|
||||
.filter(term => term.length > 0)
|
||||
|
||||
Reference in New Issue
Block a user