Skip to content

Style deprecation notices in the API reference - #306

Merged
llucax merged 3 commits into
frequenz-floss:v0.x.xfrom
llucax:deprecated-admonitions
Sep 22, 2026
Merged

llucax merged 3 commits into
frequenz-floss:v0.x.xfrom
llucax:deprecated-admonitions

Conversation

@llucax

@llucax llucax commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

Preparation for the client-common 0.4.1 update, so deprecation notices already look right by the time it adds more of them. This is the repository where the change is immediately visible.

First, the styling: a CSS rule for the deprecated admonition class (gravestone icon, its own colour, otherwise like a warning), and the griffe-warnings-deprecated extension wired into the mkdocstrings handler so symbols decorated with typing_extensions.deprecated get an admonition generated for them. The extension's kind is set to deprecated rather than the default warning, so what it emits is markup-identical to a hand-written Deprecated: admonition, and one rule styles both.

Then a third commit fixes the admonitions themselves. All 35 were written as Deprecated: Deprecated in v0.18.0, and a custom title replaces the word "Deprecated" in the rendered output, so every one of them came out labelled "Deprecated in v0.18.0". That loses the word the styling keys on and reads differently from the generated ones. The title is gone and the version is in the text, as the deprecations guide asks.

Style the `deprecated` admonition class like a warning, but with the
`material/grave-stone` icon and its own colour, so deprecation notices
read as deprecation notices and not as generic warnings.

That class is what a hand-written `Deprecated:` admonition in
a docstring produces, and also what the griffe extension added next
will emit, so a single rule covers both sources.

Signed-off-by: Leandro Lucarella <luca-frequenz@llucax.com>
Wire the `griffe-warnings-deprecated` extension into the mkdocstrings
handler options, so every symbol decorated with
`typing_extensions.deprecated` gets a "Deprecated" admonition in the
API reference with no docstring edit at all.

The extension's `kind` is set to `deprecated` rather than the default
`warning`, so it emits `class="deprecated"`, which is exactly what
a hand-written `Deprecated:` admonition produces. The CSS rule added
in the previous commit then styles both, and the two are visually
indistinguishable. That matters because the decorator cannot reach
everything: module-level aliases, a single function argument, enum
members and whole modules still need the admonition written by hand.

Signed-off-by: Leandro Lucarella <luca-frequenz@llucax.com>
@llucax
llucax requested review from a team as code owners September 21, 2026 12:52
@llucax
llucax requested review from ahmet-erdem-frequenz and florian-wagner-frequenz and removed request for a team September 21, 2026 12:52
@github-actions github-actions Bot added part:docs Affects the documentation part:tooling Affects the development tooling (CI, deployment, dependency management, etc.) labels Sep 21, 2026
All 35 deprecation notices were written as `Deprecated: Deprecated in
v0.18.0`. A custom title replaces the word "Deprecated" in the rendered
output, so every one of them came out labelled "Deprecated in v0.18.0",
losing the very word the styling added in this branch keys on, and reading
differently from the admonitions the griffe extension generates.

Drop the title and state the version in the admonition text instead, which
is what the deprecations guide asks for.

Signed-off-by: Leandro Lucarella <luca-frequenz@llucax.com>
@llucax llucax added the cmd:skip-release-notes It is not necessary to update release notes for this PR label Sep 21, 2026
@llucax

llucax commented Sep 21, 2026

Copy link
Copy Markdown
Contributor Author

Updated: pushed 22ce99e and rewrote the description.

The PR originally only added the styling. It turned out the styling alone would not have shown up properly here: all 35 notices were written as Deprecated: Deprecated in v0.18.0, and a custom title replaces the word "Deprecated" in the rendered output, so they were coming out labelled "Deprecated in v0.18.0" rather than "Deprecated".

The new commit drops the title and states the version in the admonition text instead, per the deprecations guide. All 35 now render with the same label the generated admonitions use.

nox is green (408 tests, mypy, pylint, flake8/pydoclint, black). Because it touches src/, cmd:skip-release-notes is applied; only docstrings change.

@llucax
llucax enabled auto-merge September 21, 2026 17:08
@llucax llucax self-assigned this Sep 21, 2026
@llucax
llucax added this pull request to the merge queue Sep 22, 2026
Merged via the queue into frequenz-floss:v0.x.x with commit 3505334 Sep 22, 2026
12 of 13 checks passed
@llucax
llucax deleted the deprecated-admonitions branch September 22, 2026 08:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cmd:skip-release-notes It is not necessary to update release notes for this PR part:docs Affects the documentation part:tooling Affects the development tooling (CI, deployment, dependency management, etc.)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants