mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-10-28 07:03:20 +08:00
The recursion detector flagged any call whose short name matched the enclosing def as self-recursion, so super().save() inside save, axios.get() inside get, and console.error() inside error were all false positives feeding is_recursive, recursion_in_loop and unguarded_recursion. Add is_self_receiver() and AND it into the short-name comparison: a qualified callee only counts when its whole receiver chain (everything before the last '.') names the same object — self/this/cls/@self, or the enclosing def's own receiver identifier parsed from CBMDefinition.receiver (Go: s in 'func (s *Store) save()'). Bare names keep the prior behavior. Matching the full chain keeps self.obj.recur() (a field's same-named method) out, and the dynamic receiver whitelist keeps Go s.save() detected. Distilled from PR #699 with two corrections: the receiver chain is matched via the last dot instead of the first segment (self.obj.recur was still a false positive), and the enclosing-receiver whitelist so Go method self-recursion is not lost. Closes #599 Co-authored-by: Gen Li <lg320531124@users.noreply.github.com> Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>