set up mypy for incremental adoption of 'strict optional'

This commit is contained in:
daniel.eades 2022-07-19 08:31:03 +01:00 committed by Daniel Eades
parent f8b84348f3
commit 63edba0388
8 changed files with 83 additions and 12 deletions

View File

@ -31,10 +31,76 @@ ignore_missing_imports = True
follow_imports = skip
check_untyped_defs = True
warn_unused_ignores = True
strict_optional = False
strict_optional = True
no_implicit_optional = True
warn_redundant_casts = True
[mypy-sphinx.application]
strict_optional = False
[mypy-sphinx.builders]
strict_optional = False
[mypy-sphinx.builders.gettext]
strict_optional = False
[mypy-sphinx.builders.html]
strict_optional = False
[mypy-sphinx.builders.latex.*]
strict_optional = False
[mypy-sphinx.builders.linkcheck]
strict_optional = False
[mypy-sphinx.builders.singlehtml]
strict_optional = False
[mypy-sphinx.cmd.*]
strict_optional = False
[mypy-sphinx.directives]
strict_optional = False
[mypy-sphinx.directives.code]
strict_optional = False
[mypy-sphinx.domains.*]
strict_optional = False
[mypy-sphinx.environment.*]
strict_optional = False
[mypy-sphinx.ext.*]
strict_optional = False
[mypy-sphinx.locale]
strict_optional = False
[mypy-sphinx.pycode.parser]
strict_optional = False
[mypy-sphinx.registry.*]
strict_optional = False
[mypy-sphinx.search]
strict_optional = False
[mypy-sphinx.setup_command]
strict_optional = False
[mypy-sphinx.testing.util]
strict_optional = False
[mypy-sphinx.transforms.*]
strict_optional = False
[mypy-sphinx.util.*]
strict_optional = False
[mypy-sphinx.writers.*]
strict_optional = False
[tool:pytest]
filterwarnings =
all

View File

@ -1,6 +1,6 @@
"""Additional docutils nodes."""
from typing import TYPE_CHECKING, Any, Dict, List, Sequence
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence
import docutils
from docutils import nodes
@ -27,7 +27,7 @@ class document(nodes.document):
in your extensions. It will be removed without deprecation period.
"""
def set_id(self, node: Element, msgnode: Element = None,
def set_id(self, node: Element, msgnode: Optional[Element] = None,
suggested_prefix: str = '') -> str:
if docutils.__version_info__ >= (0, 16):
ret = super().set_id(node, msgnode, suggested_prefix) # type: ignore

View File

@ -1023,7 +1023,7 @@ class StandaloneHTMLBuilder(Builder):
return quote(docname) + self.link_suffix
def handle_page(self, pagename: str, addctx: Dict, templatename: str = 'page.html',
outfilename: str = None, event_arg: Any = None) -> None:
outfilename: Optional[str] = None, event_arg: Any = None) -> None:
ctx = self.globalcontext.copy()
# current_page_name is backwards compatibility
ctx['pagename'] = ctx['current_page_name'] = pagename

View File

@ -424,7 +424,7 @@ def correct_copyright_year(app: "Sphinx", config: Config) -> None:
config[k] = copyright_year_re.sub(replace, config[k])
def check_confval_types(app: "Sphinx", config: Config) -> None:
def check_confval_types(app: Optional["Sphinx"], config: Config) -> None:
"""Check all values for deviation from the default value's type, since
that can result in TypeErrors all over the place NB.
"""

View File

@ -182,7 +182,7 @@ def read_doc(app: "Sphinx", env: BuildEnvironment, filename: str) -> nodes.docum
writer=SphinxDummyWriter(),
source_class=SphinxFileInput,
destination=NullOutput())
pub.process_programmatic_settings(None, env.settings, None)
pub.process_programmatic_settings(None, env.settings, None) # type: ignore[arg-type]
pub.set_source(source_path=filename)
pub.publish()
return pub.document

View File

@ -3,7 +3,7 @@
import pathlib
from os import path
from pprint import pformat
from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, List, Tuple, Union
from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, List, Optional, Tuple, Union
from jinja2 import BaseLoader, FileSystemLoader, TemplateNotFound
from jinja2.environment import Environment
@ -142,7 +142,12 @@ class BuiltinTemplateLoader(TemplateBridge, BaseLoader):
# TemplateBridge interface
def init(self, builder: "Builder", theme: Theme = None, dirs: List[str] = None) -> None:
def init(
self,
builder: "Builder",
theme: Optional[Theme] = None,
dirs: Optional[List[str]] = None
) -> None:
# create a chain of paths to search
if theme:
# the theme's own dir and its bases' dirs

View File

@ -5,7 +5,7 @@ import sys
from collections import namedtuple
from io import StringIO
from subprocess import PIPE
from typing import Any, Callable, Dict, Generator, Tuple
from typing import Any, Callable, Dict, Generator, Optional, Tuple
import pytest
@ -28,7 +28,7 @@ def pytest_configure(config):
@pytest.fixture(scope='session')
def rootdir() -> str:
def rootdir() -> Optional[str]:
return None

View File

@ -2,7 +2,7 @@ import builtins
import os
import shutil
import sys
from typing import IO, Any, Callable, List
from typing import IO, Any, Callable, List, Optional
FILESYSTEMENCODING = sys.getfilesystemencoding() or sys.getdefaultencoding()
@ -69,7 +69,7 @@ class path(str):
"""
return os.path.ismount(self)
def rmtree(self, ignore_errors: bool = False, onerror: Callable = None) -> None:
def rmtree(self, ignore_errors: bool = False, onerror: Optional[Callable] = None) -> None:
"""
Removes the file or directory and any files or directories it may
contain.