Skip to content

Commit

Permalink
Make the env argument to Builder subclasses required (#11379)
Browse files Browse the repository at this point in the history
  • Loading branch information
AA-Turner committed Apr 28, 2023
1 parent d22e660 commit a464c58
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 37 deletions.
1 change: 1 addition & 0 deletions CHANGES
Expand Up @@ -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
----------
Expand Down
2 changes: 0 additions & 2 deletions sphinx/application.py
Expand Up @@ -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')

Expand Down
25 changes: 4 additions & 21 deletions sphinx/builders/__init__.py
Expand Up @@ -5,7 +5,6 @@
import codecs
import pickle
import time
import warnings
from os import path
from typing import TYPE_CHECKING, Any, Iterable, Sequence

Expand All @@ -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
Expand Down Expand Up @@ -79,23 +77,17 @@ 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
self.doctreedir = app.doctreedir
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
Expand All @@ -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)
Expand Down
15 changes: 1 addition & 14 deletions sphinx/registry.py
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit a464c58

Please sign in to comment.