tree-sitter-ruby wraps `class C < Base` in a `superclass` node whose
child is a `constant` (or `scope_resolution` for `A::B`).
collect_bases_from_field matched neither, so the superclass fell through
to the raw-text fallback and base_classes stored "< Base" — operator
included. A base spelled that way never resolves, so Ruby subclasses
produced zero INHERITS edges, and the Rails chain
(User < ApplicationRecord < ActiveRecord::Base) never linked up.
Accept both node kinds. The accompanying inherit_ruby rows fail 5/5
without this change, each on the "<" substring that is the bug's
signature.
Refs #1701
Assisted-by: OpenCode:anthropic/claude-opus-5
Signed-off-by: Ben Fairless <ben@oaf.org.au>
Remove leftover getenv(CBM_DBG_*) debug fprintf blocks in extract_calls.c/pass_calls.c (cppcheck always-true). Convert parse_lisp_imports to a stack-based walk (no recursion → no NOLINT, avoids deep-nesting overflow). Apply Homebrew clang-format to all touched sources. Local suite 5562/0, lint-ci clean.
Reproduce-first coverage of class-inheritance (base_classes) and import extraction across the 9 hybrid-LSP languages (~300 table-driven cases). Live RED reproductions: TS/TSX store the extends/implements keyword instead of the base type; PHP never populates base_classes and its use-imports parse the wrong node type; Kotlin does not parse the : supertype list; Python loses Generic[T] (paren/bracket leak); C++ drops qualified bases (std::vector) and leaks ':'; Rust misses several impl-Trait-for-T forms; C# import aliases (using F = X) and Python wildcard/__future__ imports are missed. C# inheritance and Go/TS/JS/Java/Kotlin/Rust import extraction pass as regression guards. Suite is RED until the extractors are fixed; 12 failing reproductions, no other suite affected.