fix: Expand relative cross-references against the object the docstring was written on - #342
devtechedge wants to merge 1 commit into
Conversation
…g was written on With inherited members enabled, docstrings of base class members are rendered in the docs of the inheriting class, where the current object is a Griffe alias living under the inheriting class. Leading-dot relative cross-references found in such docstrings were therefore expanded against the consumer's tree instead of the dependency's tree, resolving to wrong targets or failing strict builds. Anchor the dot-walk on the docstring's parent (the defining object) when it is reachable, falling back to the current object otherwise.
|
Hello - gentle follow-up on the inherited relative-crossref fix whenever the queue allows. With This anchors the dot-walk on A regression in Quality checks are green across platforms; several Happy to special-case re-export aliases differently, or gate expansion on the consumer's No rush - still ready whenever it fits. |
With
inherited_membersenabled, the docstring of a base class member is rendered in the docs of the inheriting class. InAutorefsHook.expand_identifier, leading-dot relative cross-references found in such docstrings walk up fromcurrent_object, which for an inherited member is a Griffe alias living under the inheriting class. A reference written onpkga.sub.Base.MAPPINGtherefore expands topkgb.Thingin the docs of a package that subclassesBase, instead ofpkga.Thing, silently linking to a wrong target or aborting strict builds when the consumer hasrelative_crossrefsdisabled.This change anchors the dot-walk on the docstring's parent, the object the docstring was actually written on, when that object is reachable, and falls back to the current object otherwise. This mirrors how
get_contextalready usesdocstring.parentfor source location. The reproducer and root-cause analysis in #341 describe exactly this behavior, including the frequenz-sdk build failure against frequenz-quantities.A regression test in
tests/test_rendering.pybuilds two in-memory modules with cross-module inheritance and asserts a....Thingreference in an inherited member's docstring expands topkga.Thing; it fails on main and passes with this change. A control assertion also checks that non-inherited objects still expand identically.Re-export aliases are anchored uniformly by this change: since
docstring.parentof a re-export alias points at the private defining object, relative references there now expand against it. If different treatment is preferred for re-exports, happy to follow maintainer guidance. Whether the consumer'srelative_crossrefssetting should gate expansion of a dependency's docstring at all is out of scope for this PR.Fixes #341