diff --git a/CHANGES b/CHANGES index 0274739413e..af7b50cf1ff 100644 --- a/CHANGES +++ b/CHANGES @@ -23,6 +23,7 @@ Incompatible changes * #11373: Removed deprecated ``sphinx.util.get_matching_files()`` function. * #11378: Remove deprecated ``sphinx.util.docutils.is_html5_writer_available()`` function. +* #11379: Make the ``env`` argument to ``Builder`` subclasses required. Deprecated ---------- diff --git a/sphinx/application.py b/sphinx/application.py index 58e61f7ec39..67b32269303 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -335,8 +335,6 @@ def create_builder(self, name: str) -> Builder: return self.registry.create_builder(self, name, self.env) def _init_builder(self) -> None: - if not hasattr(self.builder, "env"): - self.builder.set_environment(self.env) self.builder.init() self.events.emit('builder-inited') diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index 20e0c0af117..852f252596e 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -5,7 +5,6 @@ import codecs import pickle import time -import warnings from os import path from typing import TYPE_CHECKING, Any, Iterable, Sequence @@ -14,7 +13,6 @@ from docutils.utils import DependencyList from sphinx.config import Config -from sphinx.deprecation import RemovedInSphinx70Warning from sphinx.environment import CONFIG_CHANGED_REASON, CONFIG_OK, BuildEnvironment from sphinx.environment.adapters.asset import ImageAdapter from sphinx.errors import SphinxError @@ -79,7 +77,7 @@ class Builder: #: The builder supports data URIs or not. supported_data_uri_images = False - def __init__(self, app: Sphinx, env: BuildEnvironment = None) -> None: + def __init__(self, app: Sphinx, env: BuildEnvironment) -> None: self.srcdir = app.srcdir self.confdir = app.confdir self.outdir = app.outdir @@ -87,15 +85,9 @@ def __init__(self, app: Sphinx, env: BuildEnvironment = None) -> None: ensuredir(self.doctreedir) self.app: Sphinx = app - if env is not None: - self.env: BuildEnvironment = env - self.env.set_versioning_method(self.versioning_method, - self.versioning_compare) - else: - # ... is passed by SphinxComponentRegistry.create_builder to not show two warnings. - warnings.warn("The 'env' argument to Builder will be required from Sphinx 7.", - RemovedInSphinx70Warning, stacklevel=2) - self.env = None + self.env: BuildEnvironment = env + self.env.set_versioning_method(self.versioning_method, + self.versioning_compare) self.events: EventManager = app.events self.config: Config = app.config self.tags: Tags = app.tags @@ -115,15 +107,6 @@ def __init__(self, app: Sphinx, env: BuildEnvironment = None) -> None: self.parallel_ok = False self.finish_tasks: Any = None - def set_environment(self, env: BuildEnvironment) -> None: - """Store BuildEnvironment object.""" - warnings.warn("Builder.set_environment is deprecated, pass env to " - "'Builder.__init__()' instead.", - RemovedInSphinx70Warning, stacklevel=2) - self.env = env - self.env.set_versioning_method(self.versioning_method, - self.versioning_compare) - def get_translator_class(self, *args: Any) -> type[nodes.NodeVisitor]: """Return a class of translator.""" return self.app.registry.get_translator_class(self) diff --git a/sphinx/registry.py b/sphinx/registry.py index a3134bd2a4d..eba9f755610 100644 --- a/sphinx/registry.py +++ b/sphinx/registry.py @@ -4,7 +4,6 @@ import sys import traceback -import warnings from importlib import import_module from types import MethodType from typing import TYPE_CHECKING, Any, Callable, Iterator @@ -23,7 +22,6 @@ from sphinx.builders import Builder from sphinx.config import Config -from sphinx.deprecation import RemovedInSphinx70Warning from sphinx.domains import Domain, Index, ObjType from sphinx.domains.std import GenericObject, Target from sphinx.environment import BuildEnvironment @@ -156,18 +154,7 @@ def create_builder(self, app: Sphinx, name: str, if name not in self.builders: raise SphinxError(__('Builder name %s not registered') % name) - try: - return self.builders[name](app, env) - except TypeError: - warnings.warn( - f"The custom builder {name} defines a custom __init__ method without the " - f"'env'argument. Report this bug to the developers of your custom builder, " - f"this is likely not a issue with Sphinx. The 'env' argument will be required " - f"from Sphinx 7.", RemovedInSphinx70Warning, stacklevel=2) - builder = self.builders[name](app) - if env is not None: - builder.set_environment(env) - return builder + return self.builders[name](app, env) def add_domain(self, domain: type[Domain], override: bool = False) -> None: logger.debug('[app] adding domain: %r', domain)