Skip to content

Commit

Permalink
shrink mypy whitelist for sphinx.builders (#11396)
Browse files Browse the repository at this point in the history
Co-authored-by: Adam Turner <9087854+aa-turner@users.noreply.github.com>
  • Loading branch information
danieleades and AA-Turner committed Jul 23, 2023
1 parent edd9ea0 commit d564a8b
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 23 deletions.
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,6 @@ disallow_any_generics = true

[[tool.mypy.overrides]]
module = [
"sphinx.builders",
"sphinx.builders.html",
"sphinx.builders.latex",
"sphinx.builders.linkcheck",
Expand Down
23 changes: 11 additions & 12 deletions sphinx/builders/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,6 @@
# side effect: registers roles and directives
from sphinx import directives # noqa: F401 isort:skip
from sphinx import roles # noqa: F401 isort:skip
try:
import multiprocessing
except ImportError:
multiprocessing = None

if TYPE_CHECKING:
from sphinx.application import Sphinx
Expand All @@ -60,7 +56,7 @@ class Builder:

#: default translator class for the builder. This can be overridden by
#: :py:meth:`~sphinx.application.Sphinx.set_translator`.
default_translator_class: type[nodes.NodeVisitor] = None
default_translator_class: type[nodes.NodeVisitor]
# doctree versioning method
versioning_method = 'none'
versioning_compare = False
Expand Down Expand Up @@ -135,15 +131,15 @@ def create_template_bridge(self) -> None:
from sphinx.jinja2glue import BuiltinTemplateLoader
self.templates = BuiltinTemplateLoader()

def get_target_uri(self, docname: str, typ: str = None) -> str:
def get_target_uri(self, docname: str, typ: str | None = None) -> str:
"""Return the target URI for a document name.
*typ* can be used to qualify the link characteristic for individual
builders.
"""
raise NotImplementedError

def get_relative_uri(self, from_: str, to: str, typ: str = None) -> str:
def get_relative_uri(self, from_: str, to: str, typ: str | None = None) -> str:
"""Return a relative URI between two source filenames.
May raise environment.NoUri if there's no way to return a sensible URI.
Expand Down Expand Up @@ -296,7 +292,10 @@ def build_update(self) -> None:
len(to_build))

def build(
self, docnames: Iterable[str], summary: str | None = None, method: str = 'update',
self,
docnames: Iterable[str] | None,
summary: str | None = None,
method: str = 'update',
) -> None:
"""Main build method.
Expand Down Expand Up @@ -509,15 +508,15 @@ def write_doctree(
) -> None:
"""Write the doctree to a file."""
# make it picklable
doctree.reporter = None
doctree.transformer = None
doctree.reporter = None # type: ignore[assignment]
doctree.transformer = None # type: ignore[assignment]

# Create a copy of settings object before modification because it is
# shared with other documents.
doctree.settings = doctree.settings.copy()
doctree.settings.warning_stream = None
doctree.settings.env = None
doctree.settings.record_dependencies = None
doctree.settings.record_dependencies = None # type: ignore[assignment]

doctree_filename = path.join(self.doctreedir, docname + '.doctree')
ensuredir(path.dirname(doctree_filename))
Expand All @@ -532,7 +531,7 @@ def write_doctree(

def write(
self,
build_docnames: Iterable[str],
build_docnames: Iterable[str] | None,
updated_docnames: Sequence[str],
method: str = 'update',
) -> None:
Expand Down
5 changes: 4 additions & 1 deletion sphinx/builders/gettext.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,10 @@ def _extract_from_template(self) -> None:
raise ThemeError(f'{template}: {exc!r}') from exc

def build(
self, docnames: Iterable[str], summary: str | None = None, method: str = 'update',
self,
docnames: Iterable[str] | None,
summary: str | None = None,
method: str = 'update',
) -> None:
self._extract_from_template()
super().build(docnames, summary, method)
Expand Down
5 changes: 1 addition & 4 deletions sphinx/builders/html/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ class StandaloneHTMLBuilder(Builder):
format = 'html'
epilog = __('The HTML pages are in %(outdir)s.')

default_translator_class = HTML5Translator
copysource = True
allow_parallel = True
out_suffix = '.html'
Expand Down Expand Up @@ -372,10 +373,6 @@ def add_js_file(self, filename: str, **kwargs: Any) -> None:

self.script_files.append(JavaScript(filename, **kwargs))

@property
def default_translator_class(self) -> type[nodes.NodeVisitor]: # type: ignore
return HTML5Translator

@property
def math_renderer_name(self) -> str:
name = self.get_builder_config('math_renderer', 'html')
Expand Down
10 changes: 7 additions & 3 deletions sphinx/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,12 +327,16 @@ def add_translation_handlers(
) from exc

def get_translator_class(self, builder: Builder) -> type[nodes.NodeVisitor]:
return self.translators.get(builder.name,
builder.default_translator_class)
try:
return self.translators[builder.name]
except KeyError:
try:
return builder.default_translator_class
except AttributeError as err:
raise AttributeError(f'translator not found for {builder.name}') from err

def create_translator(self, builder: Builder, *args: Any) -> nodes.NodeVisitor:
translator_class = self.get_translator_class(builder)
assert translator_class, "translator not found for %s" % builder.name
translator = translator_class(*args)

# transplant handlers for custom nodes to translator instance
Expand Down
5 changes: 3 additions & 2 deletions sphinx/transforms/post_transforms/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,8 +236,9 @@ def run(self, **kwargs: Any) -> None:
def has_visitor(translator: type[nodes.NodeVisitor], node: type[Element]) -> bool:
return hasattr(translator, "visit_%s" % node.__name__)

translator = self.app.builder.get_translator_class()
if translator is None:
try:
translator = self.app.builder.get_translator_class()
except AttributeError:
# do nothing if no translator class is specified (e.g., on a dummy builder)
return

Expand Down

0 comments on commit d564a8b

Please sign in to comment.