mirror of
https://github.com/colbymchenry/codegraph.git
synced 2026-10-24 06:53:52 +08:00
Both C++ extractors name a function by the first qualified identifier found breadth-first in its declarator, which is how an out-of-line `Foo::bar` is named. The walk skipped only the parameter list and the trailing return type, so a qualified name in the clauses after them became the name of a function whose own name is plain. nlohmann/json's constructor `basic_json(CompatibleType&& val) noexcept(noexcept( JSONSerializer<U>::to_json(…)))` was indexed as a method `JSONSerializer::to_json` that doesn't exist, with no node for the constructor; `throw(std::bad_alloc)` named a method `std::bad_alloc`, and a trailing `requires std::integral<T>` a function `std::integral<T>`. The walk now also skips `noexcept`, `throw_specifier` and `requires_clause`, in the TS extractor and the kernel alike; the parity fixture covers all three. Measured on main226ac930with fresh indexes, and byte-identical again after syncing ontoe97012eb: json 42, abseil 28 and protobuf 1 phantom nodes become the real functions at the same lines; fmt, leveldb, rocksdb, redis and three controls in other languages are byte-identical. Kernel parity sweeps on json, fmt, abseil, leveldb and rocksdb find no file with diffs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>