shrink mypy whitelist for `sphinx.builders` (#11396)

Co-authored-by: Adam Turner <9087854+aa-turner@users.noreply.github.com>
This commit is contained in:
danieleades 2023-07-23 18:21:29 +01:00 committed by GitHub
parent edd9ea0a39
commit d564a8ba11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 26 additions and 23 deletions

View File

@ -307,7 +307,6 @@ disallow_any_generics = true
[[tool.mypy.overrides]]
module = [
"sphinx.builders",
"sphinx.builders.html",
"sphinx.builders.latex",
"sphinx.builders.linkcheck",

View File

@ -32,10 +32,6 @@ from sphinx.util.typing import NoneType
# 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
@ -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
@ -135,7 +131,7 @@ class Builder:
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
@ -143,7 +139,7 @@ class Builder:
"""
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.
@ -296,7 +292,10 @@ class Builder:
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.
@ -509,15 +508,15 @@ class Builder:
) -> 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))
@ -532,7 +531,7 @@ class Builder:
def write(
self,
build_docnames: Iterable[str],
build_docnames: Iterable[str] | None,
updated_docnames: Sequence[str],
method: str = 'update',
) -> None:

View File

@ -254,7 +254,10 @@ class MessageCatalogBuilder(I18nBuilder):
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)

View File

@ -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'
@ -372,10 +373,6 @@ class StandaloneHTMLBuilder(Builder):
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')

View File

@ -327,12 +327,16 @@ class SphinxComponentRegistry:
) 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

View File

@ -236,8 +236,9 @@ class SigElementFallbackTransform(SphinxPostTransform):
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