Skip to content

Use absolute cross-references in docstrings - #566

Merged
llucax merged 4 commits into
frequenz-floss:v1.x.xfrom
llucax:absolute-crossrefs
Oct 26, 2026
Merged

llucax merged 4 commits into
frequenz-floss:v1.x.xfrom
llucax:absolute-crossrefs

Conversation

@llucax

@llucax llucax commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

This converts every relative cross-reference in the docstrings to an absolute reference to the target's public path, and removes relative_crossrefs: true from mkdocs.yml, as proposed in frequenz-floss/frequenz-repo-config-python#655.

Some links silently changed target (Receiver.ready() linking to BroadcastReceiver.receive, for example). Now it builds cleanly.

It also bumps mkdocstrings to 1.0.7, since pymdown-extensions 12.2 broke the docs build with 1.0.6 (mkdocstrings/mkdocstrings#829).

Since mkdocstrings-python 2.0.9, relative cross-references are expanded
from the path where an object is defined, not where it is documented.
All our public symbols are defined in private modules and re-exported
from a public package, so 28 of the current references can't be found
anymore and the strict documentation build fails, blocking the bump.

Counting the dots from the private module would fix the build, but it
ties the references to the private module layout, breaks them on older
mkdocstrings-python versions, and can make references to inherited
members silently link to the wrong class (`Receiver.ready()` would link
to `BroadcastReceiver.receive`, for example). Relative references are
also hard to read in an IDE, and only work in projects rendering our
inherited docstrings if they enable `relative_crossrefs` too.

All relative references are converted to absolute references to the
public path of their target, which don't depend on any of that. The
built documentation has the same links as before, with both
mkdocstrings-python 2.0.7 and 2.0.9, except for the few that moved
because of a reworded summary.

Some paragraphs are rewrapped to fit the longer references, and a few
summaries that got too long are reworded, moving the reference to the
body. References in docstrings of private classes, which are not
rendered, now point to the public symbol they were meant for, like the
`Receiver` method being overridden.

See frequenz-floss/frequenz-repo-config-python#655 for details.

Signed-off-by: Leandro Lucarella <luca-frequenz@llucax.com>
No docstring uses relative cross-references anymore, so the option is
removed to stop new ones from being added. Absolute references to public
paths are the convention from now on.

See frequenz-floss/frequenz-repo-config-python#655 for details.

Signed-off-by: Leandro Lucarella <luca-frequenz@llucax.com>
Signed-off-by: Leandro Lucarella <luca-frequenz@llucax.com>
pymdown-extensions 12.2 added a required `md` argument to
`pymdownx.highlight.Highlight.__init__()`, which mkdocstrings 1.0.6
subclasses without passing it. pymdown-extensions is only a transitive
dependency, so it floats to the new version and the docs build fails
with:

    TypeError: Highlight.__init__() missing 1 required positional argument: 'md'

mkdocstrings 1.0.7 passes `md` when the parent accepts it
(mkdocstrings/mkdocstrings#829). 1.0.8 is out too, but it changes the
code anchor IDs, so it is left for its own bump.

Signed-off-by: Leandro Lucarella <luca-frequenz@llucax.com>
@llucax llucax added the part:docs Affects the documentation label Oct 23, 2026
@github-actions github-actions Bot added part:tooling Affects the development tooling (CI, deployment, dependency management, etc.) part:channels Affects channels implementation part:synchronization Affects the synchronization of multiple sources (`select`, `merge`) part:core Affects the core types (`Sender`, `Receiver`, exceptions, etc.) part:utilities Affects the utility receivers (`Timer`, `Event`, `FileWatcher`) part:experimental Affects the experimental package labels Oct 23, 2026
@llucax
llucax marked this pull request as ready for review October 23, 2026 13:04
@llucax
llucax requested a review from a team as a code owner October 23, 2026 13:04
@llucax
llucax requested review from florian-wagner-frequenz and removed request for a team October 23, 2026 13:04
@llucax llucax self-assigned this Oct 23, 2026
@llucax llucax modified the milestones: v1.12.0, v1.13.0 Oct 23, 2026
@llucax
llucax enabled auto-merge October 23, 2026 13:12
@llucax
llucax added this pull request to the merge queue Oct 26, 2026
Merged via the queue into frequenz-floss:v1.x.x with commit 245dcb6 Oct 26, 2026
13 checks passed
@llucax
llucax deleted the absolute-crossrefs branch October 26, 2026 10:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

part:channels Affects channels implementation part:core Affects the core types (`Sender`, `Receiver`, exceptions, etc.) part:docs Affects the documentation part:experimental Affects the experimental package part:synchronization Affects the synchronization of multiple sources (`select`, `merge`) part:tooling Affects the development tooling (CI, deployment, dependency management, etc.) part:utilities Affects the utility receivers (`Timer`, `Event`, `FileWatcher`)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants