Skip to content

Commit f49fb29

Browse files
committed
refactor: Save and forward titles to autorefs
This will be useful for the backlinks feature. Additionally, use autorefs `current_page` as a `Page` object, not a string (URL).
1 parent 8d1dd75 commit f49fb29

2 files changed

Lines changed: 50 additions & 46 deletions

File tree

src/mkdocstrings/_internal/extension.py

Lines changed: 48 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -240,54 +240,56 @@ def _process_headings(self, handler: BaseHandler, element: Element) -> None:
240240
# If we were in an inner handler layer, we wouldn't do any of this
241241
# and would just let headings bubble up to the outer handler layer.
242242

243-
page = self._autorefs.current_page
244-
if page is not None:
245-
for heading in headings:
246-
rendered_id = heading.attrib["id"]
247-
self._autorefs.register_anchor(page, rendered_id, primary=True)
248-
249-
# Register all identifiers for this object
250-
# both in the autorefs plugin and in the inventory.
251-
aliases: tuple[str, ...]
252-
# YORE: Bump 1: Replace block with line 16.
253-
if hasattr(handler, "get_anchors"):
254-
warn(
255-
"The `get_anchors` method is deprecated. "
256-
"Declare a `get_aliases` method instead, accepting a string (identifier) "
257-
"instead of a collected object.",
258-
DeprecationWarning,
259-
stacklevel=1,
260-
)
261-
try:
262-
data_object = handler.collect(rendered_id, getattr(handler, "fallback_config", {}))
263-
except CollectionError:
264-
aliases = ()
265-
else:
266-
aliases = handler.get_anchors(data_object)
243+
if (page := self._autorefs.current_page) is None:
244+
return
245+
246+
for heading in headings:
247+
rendered_id = heading.attrib["id"]
248+
# The title is registered to be used as tooltip by autorefs.
249+
self._autorefs.register_anchor(page, rendered_id, title=heading.text, primary=True)
250+
251+
# Register all identifiers for this object
252+
# both in the autorefs plugin and in the inventory.
253+
aliases: tuple[str, ...]
254+
# YORE: Bump 1: Replace block with line 16.
255+
if hasattr(handler, "get_anchors"):
256+
warn(
257+
"The `get_anchors` method is deprecated. "
258+
"Declare a `get_aliases` method instead, accepting a string (identifier) "
259+
"instead of a collected object.",
260+
DeprecationWarning,
261+
stacklevel=1,
262+
)
263+
try:
264+
data_object = handler.collect(rendered_id, getattr(handler, "fallback_config", {}))
265+
except CollectionError:
266+
aliases = ()
267267
else:
268-
aliases = handler.get_aliases(rendered_id)
269-
268+
aliases = handler.get_anchors(data_object)
269+
else:
270+
aliases = handler.get_aliases(rendered_id)
271+
272+
for alias in aliases:
273+
if alias != rendered_id:
274+
self._autorefs.register_anchor(page, alias, rendered_id, primary=False)
275+
276+
if "data-role" in heading.attrib:
277+
self._handlers.inventory.register(
278+
name=rendered_id,
279+
domain=handler.domain,
280+
role=heading.attrib["data-role"],
281+
priority=1, # Register with standard priority.
282+
uri=f"{page.url}#{rendered_id}",
283+
)
270284
for alias in aliases:
271-
if alias != rendered_id:
272-
self._autorefs.register_anchor(page, alias, rendered_id, primary=False)
273-
274-
if "data-role" in heading.attrib:
275-
self._handlers.inventory.register(
276-
name=rendered_id,
277-
domain=handler.domain,
278-
role=heading.attrib["data-role"],
279-
priority=1, # Register with standard priority.
280-
uri=f"{page}#{rendered_id}",
281-
)
282-
for alias in aliases:
283-
if alias not in self._handlers.inventory:
284-
self._handlers.inventory.register(
285-
name=alias,
286-
domain=handler.domain,
287-
role=heading.attrib["data-role"],
288-
priority=2, # Register with lower priority.
289-
uri=f"{page}#{rendered_id}",
290-
)
285+
if alias not in self._handlers.inventory:
286+
self._handlers.inventory.register(
287+
name=alias,
288+
domain=handler.domain,
289+
role=heading.attrib["data-role"],
290+
priority=2, # Register with lower priority.
291+
uri=f"{page.url}#{rendered_id}",
292+
)
291293

292294

293295
class _HeadingsPostProcessor(Treeprocessor):

src/mkdocstrings/_internal/handlers/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,8 @@ def do_heading(
473473
el.set("data-toc-label", toc_label)
474474
if role:
475475
el.set("data-role", role)
476+
if content:
477+
el.text = str(content).strip()
476478
self._headings.append(el)
477479

478480
if hidden:

0 commit comments

Comments
 (0)