tree-sitter-dart keeps a comment as a named node wherever it is written,
so in a member chain broken over lines (`tester //`, then `.state(…)` on
the next line: the empty `//` keeps dart format from joining the lines)
the comment, not `tester`, is the sibling right before the `.state`
selector. Both extractors (the TS walker and the native kernel) read
that sibling as the receiver or the callee:
- A call with a comment between the member and its arguments
(`box.grow /* by */ (3)`) was lost, and recorded as a read of
`box.grow`.
- A getter read (`box //` + `.area`) or a static access (`Config //` +
`.instance`) written after a comment was lost.
- A call after a comment kept only its bare name. Since #2376 the
resolver reads such a chain link back past comments, so those calls
already linked correctly; they now carry the receiver in the name.
Every sibling step along a member chain now skips `comment` and
`documentation_comment` nodes: the callee before an argument part,
dartReceiverOf / receiver_of, dartCalleeOfArgPart, the type in front of
a constructor's type arguments, and the member read's receiver and next
selector. The misparsed-generic-call gate keeps reading raw siblings,
and now rejects a comment against the `<` (`ref.read /* c */<Repo>(p)`),
so that shape stays a comparison instead of losing its read.
Validated with the kernel loaded on felangel/bloc @b9be1e2,
rrousselGit/riverpod @4ba1be2 and flutter/samples @63411527. No edge is
added or removed: the 14 comment-split chains there are all in riverpod,
and its 5 calls among them gain their receiver and stay unlinked.
Kernel/wasm parity has 0 diffs on all three.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>