Skip to content

Commit a464c58

Browse files
authored
Make the env argument to Builder subclasses required (#11379)
1 parent d22e660 commit a464c58

File tree

4 files changed

+6
-37
lines changed

4 files changed

+6
-37
lines changed

CHANGES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Incompatible changes
2323
* #11373: Removed deprecated ``sphinx.util.get_matching_files()`` function.
2424
* #11378: Remove deprecated ``sphinx.util.docutils.is_html5_writer_available()``
2525
function.
26+
* #11379: Make the ``env`` argument to ``Builder`` subclasses required.
2627

2728
Deprecated
2829
----------

sphinx/application.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,6 @@ def create_builder(self, name: str) -> Builder:
335335
return self.registry.create_builder(self, name, self.env)
336336

337337
def _init_builder(self) -> None:
338-
if not hasattr(self.builder, "env"):
339-
self.builder.set_environment(self.env)
340338
self.builder.init()
341339
self.events.emit('builder-inited')
342340

sphinx/builders/__init__.py

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import codecs
66
import pickle
77
import time
8-
import warnings
98
from os import path
109
from typing import TYPE_CHECKING, Any, Iterable, Sequence
1110

@@ -14,7 +13,6 @@
1413
from docutils.utils import DependencyList
1514

1615
from sphinx.config import Config
17-
from sphinx.deprecation import RemovedInSphinx70Warning
1816
from sphinx.environment import CONFIG_CHANGED_REASON, CONFIG_OK, BuildEnvironment
1917
from sphinx.environment.adapters.asset import ImageAdapter
2018
from sphinx.errors import SphinxError
@@ -79,23 +77,17 @@ class Builder:
7977
#: The builder supports data URIs or not.
8078
supported_data_uri_images = False
8179

82-
def __init__(self, app: Sphinx, env: BuildEnvironment = None) -> None:
80+
def __init__(self, app: Sphinx, env: BuildEnvironment) -> None:
8381
self.srcdir = app.srcdir
8482
self.confdir = app.confdir
8583
self.outdir = app.outdir
8684
self.doctreedir = app.doctreedir
8785
ensuredir(self.doctreedir)
8886

8987
self.app: Sphinx = app
90-
if env is not None:
91-
self.env: BuildEnvironment = env
92-
self.env.set_versioning_method(self.versioning_method,
93-
self.versioning_compare)
94-
else:
95-
# ... is passed by SphinxComponentRegistry.create_builder to not show two warnings.
96-
warnings.warn("The 'env' argument to Builder will be required from Sphinx 7.",
97-
RemovedInSphinx70Warning, stacklevel=2)
98-
self.env = None
88+
self.env: BuildEnvironment = env
89+
self.env.set_versioning_method(self.versioning_method,
90+
self.versioning_compare)
9991
self.events: EventManager = app.events
10092
self.config: Config = app.config
10193
self.tags: Tags = app.tags
@@ -115,15 +107,6 @@ def __init__(self, app: Sphinx, env: BuildEnvironment = None) -> None:
115107
self.parallel_ok = False
116108
self.finish_tasks: Any = None
117109

118-
def set_environment(self, env: BuildEnvironment) -> None:
119-
"""Store BuildEnvironment object."""
120-
warnings.warn("Builder.set_environment is deprecated, pass env to "
121-
"'Builder.__init__()' instead.",
122-
RemovedInSphinx70Warning, stacklevel=2)
123-
self.env = env
124-
self.env.set_versioning_method(self.versioning_method,
125-
self.versioning_compare)
126-
127110
def get_translator_class(self, *args: Any) -> type[nodes.NodeVisitor]:
128111
"""Return a class of translator."""
129112
return self.app.registry.get_translator_class(self)

sphinx/registry.py

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import sys
66
import traceback
7-
import warnings
87
from importlib import import_module
98
from types import MethodType
109
from typing import TYPE_CHECKING, Any, Callable, Iterator
@@ -23,7 +22,6 @@
2322

2423
from sphinx.builders import Builder
2524
from sphinx.config import Config
26-
from sphinx.deprecation import RemovedInSphinx70Warning
2725
from sphinx.domains import Domain, Index, ObjType
2826
from sphinx.domains.std import GenericObject, Target
2927
from sphinx.environment import BuildEnvironment
@@ -156,18 +154,7 @@ def create_builder(self, app: Sphinx, name: str,
156154
if name not in self.builders:
157155
raise SphinxError(__('Builder name %s not registered') % name)
158156

159-
try:
160-
return self.builders[name](app, env)
161-
except TypeError:
162-
warnings.warn(
163-
f"The custom builder {name} defines a custom __init__ method without the "
164-
f"'env'argument. Report this bug to the developers of your custom builder, "
165-
f"this is likely not a issue with Sphinx. The 'env' argument will be required "
166-
f"from Sphinx 7.", RemovedInSphinx70Warning, stacklevel=2)
167-
builder = self.builders[name](app)
168-
if env is not None:
169-
builder.set_environment(env)
170-
return builder
157+
return self.builders[name](app, env)
171158

172159
def add_domain(self, domain: type[Domain], override: bool = False) -> None:
173160
logger.debug('[app] adding domain: %r', domain)

0 commit comments

Comments
 (0)