diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e8050e..d1c9638 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.0.2](https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.2) - 2026-01-24 + +[Compare with 1.0.1](https://github.com/mkdocstrings/mkdocstrings/compare/1.0.1...1.0.2) + +### Code Refactoring + +- Use global instances for handlers and autorefs ([9f79141](https://github.com/mkdocstrings/mkdocstrings/commit/9f79141d7eb35aba0c89a43795df0ee22a25a61e) by Timothée Mazzucotelli). + ## [1.0.1](https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.1) - 2026-01-19 [Compare with 1.0.0](https://github.com/mkdocstrings/mkdocstrings/compare/1.0.0...1.0.1) diff --git a/src/mkdocstrings/_internal/extension.py b/src/mkdocstrings/_internal/extension.py index b9174ae..d20e57a 100644 --- a/src/mkdocstrings/_internal/extension.py +++ b/src/mkdocstrings/_internal/extension.py @@ -407,6 +407,10 @@ def __init__(self, config_file_path: str | None = None) -> None: self.config_file_path = config_file_path +_AUTOREFS = None +_HANDLERS = None + + def makeExtension( # noqa: N802 *, default_handler: str | None = None, @@ -423,40 +427,65 @@ def makeExtension( # noqa: N802 We only support this function being used by Zensical. Consider this function private API. """ - mdx, mdx_config = _split_configs(markdown_extensions or []) - tool_config = _ToolConfig(config_file_path=config_file_path) - - autorefs = AutorefsPlugin() - autorefs.config = AutorefsConfig() - autorefs.config.resolve_closest = True - autorefs.config.link_titles = "auto" - autorefs.config.strip_title_tags = "auto" - autorefs.scan_toc = True - autorefs._link_titles = "external" - autorefs._strip_title_tags = False - - mdx.append(AutorefsExtension(autorefs)) - - handlers_instance = Handlers( - theme="material", - default=default_handler or _default_config["default_handler"], - inventory_project=inventory_project or "Project", - inventory_version=inventory_version or "0.0.0", - handlers_config=handlers or _default_config["handlers"], - custom_templates=custom_templates or _default_config["custom_templates"], - mdx=mdx, - mdx_config=mdx_config, - locale=locale or _default_config["locale"], - tool_config=tool_config, - ) + global _AUTOREFS # noqa: PLW0603 + if _AUTOREFS is None: + _AUTOREFS = AutorefsPlugin() + _AUTOREFS.config = AutorefsConfig() + _AUTOREFS.config.resolve_closest = True + _AUTOREFS.config.link_titles = "auto" + _AUTOREFS.config.strip_title_tags = "auto" + _AUTOREFS.scan_toc = True + _AUTOREFS._link_titles = "external" + _AUTOREFS._strip_title_tags = False + + global _HANDLERS # noqa: PLW0603 + if _HANDLERS is None: + mdx, mdx_config = _split_configs(markdown_extensions or []) + tool_config = _ToolConfig(config_file_path=config_file_path) + mdx.append(AutorefsExtension(_AUTOREFS)) + _HANDLERS = Handlers( + theme="material", + default=default_handler or _default_config["default_handler"], + inventory_project=inventory_project or "Project", + inventory_version=inventory_version or "0.0.0", + handlers_config=handlers or _default_config["handlers"], + custom_templates=custom_templates or _default_config["custom_templates"], + mdx=mdx, + mdx_config=mdx_config, + locale=locale or _default_config["locale"], + tool_config=tool_config, + ) - handlers_instance._download_inventories() - register = autorefs.register_url - for identifier, url in handlers_instance._yield_inventory_items(): - register(identifier, url) + _HANDLERS._download_inventories() + register = _AUTOREFS.register_url + for identifier, url in _HANDLERS._yield_inventory_items(): + register(identifier, url) return MkdocstringsExtension( - handlers=handlers_instance, - autorefs=autorefs, + handlers=_HANDLERS, + autorefs=_AUTOREFS, autorefs_extension=True, ) + + +def _reset() -> None: + global _AUTOREFS, _HANDLERS # noqa: PLW0603 + _AUTOREFS = None + _HANDLERS = None + + +def _get_autorefs() -> dict[str, Any]: + if _AUTOREFS: + return { + "primary": _AUTOREFS._primary_url_map, + "secondary": _AUTOREFS._secondary_url_map, + "inventory": _AUTOREFS._abs_url_map, + "titles": _AUTOREFS._title_map, + } + return {} + + +def _get_inventory() -> bytes: + if _HANDLERS: + return _HANDLERS.inventory.format_sphinx() + return b""