Skip to content

Commit

Permalink
Move mypy test module exclusions to per-module ignores
Browse files Browse the repository at this point in the history
  • Loading branch information
AA-Turner committed Jan 23, 2025
1 parent a1c77f1 commit 5c5e916
Show file tree
Hide file tree
Showing 12 changed files with 93 additions and 91 deletions.
100 changes: 49 additions & 51 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -146,58 +146,7 @@ files = [
]
exclude = [
"tests/roots",
# tests/
"^tests/test_quickstart\\.py$",
"^tests/test_search\\.py$",
# tests/test_builders
"^tests/test_builders/test_build_epub\\.py$",
"^tests/test_builders/test_build_gettext\\.py$",
"^tests/test_builders/test_build_latex\\.py$",
"^tests/test_builders/test_build_texinfo\\.py$",
# tests/test_config
"^tests/test_config/test_config\\.py$",
# tests/test_directives
"^tests/test_directives/test_directive_only\\.py$",
"^tests/test_directives/test_directive_other\\.py$",
"^tests/test_directives/test_directive_patch\\.py$",
# tests/test_domains
"^tests/test_domains/test_domain_c\\.py$",
"^tests/test_domains/test_domain_cpp\\.py$",
"^tests/test_domains/test_domain_js\\.py$",
"^tests/test_domains/test_domain_py\\.py$",
"^tests/test_domains/test_domain_py_fields\\.py$",
"^tests/test_domains/test_domain_py_pyfunction\\.py$",
"^tests/test_domains/test_domain_py_pyobject\\.py$",
"^tests/test_domains/test_domain_rst\\.py$",
"^tests/test_domains/test_domain_std\\.py$",
# tests/test_environment
"^tests/test_environment/test_environment_toctree\\.py$",
# tests/test_extensions
"^tests/test_extensions/test_ext_apidoc\\.py$",
"^tests/test_extensions/test_ext_autodoc\\.py$",
"^tests/test_extensions/test_ext_autodoc_events\\.py$",
"^tests/test_extensions/test_ext_autodoc_mock\\.py$",
"^tests/test_extensions/test_ext_autosummary\\.py$",
"^tests/test_extensions/test_ext_doctest\\.py$",
"^tests/test_extensions/test_ext_inheritance_diagram\\.py$",
"^tests/test_extensions/test_ext_intersphinx\\.py$",
"^tests/test_extensions/test_ext_napoleon_docstring\\.py$",
# tests/test_intl
"^tests/test_intl/test_intl\\.py$",
# tests/test_pycode
"^tests/test_pycode/test_pycode\\.py$",
"^tests/test_pycode/test_pycode_ast\\.py$",
# tests/test_transforms
"^tests/test_transforms/test_transforms_post_transforms\\.py$",
# tests/test_util
"^tests/test_util/test_util_fileutil\\.py$",
"^tests/test_util/test_util_i18n\\.py$",
"^tests/test_util/test_util_inspect\\.py$",
"^tests/test_util/test_util_logging\\.py$",
"^tests/test_util/test_util_nodes\\.py$",
"^tests/test_util/test_util_rst\\.py$",
"^tests/test_util/test_util_template\\.py$",
"^tests/test_util/test_util_typing\\.py$",
"^tests/test_util/typing_test_data\\.py$",
]
python_version = "3.11"
Expand Down Expand Up @@ -231,6 +180,7 @@ strict_optional = false
module = [
"imagesize",
"pypi_attestations",
"pyximport",
"sigstore.models",
"sigstore.verify",
"sigstore.verify.policy",
Expand All @@ -249,14 +199,18 @@ module = [
"tests.test_events",
"tests.test_highlighting",
"tests.test_project",
"tests.test_quickstart",
"tests.test_roles",
"tests.test_search",
"tests.test_versioning",
# tests/test__cli
"tests.test__cli.test__cli_util_errors",
# tests/test_builders
"tests.test_builders.test_build",
"tests.test_builders.test_build_changes",
"tests.test_builders.test_build_dirhtml",
"tests.test_builders.test_build_epub",
"tests.test_builders.test_build_gettext",
"tests.test_builders.test_build_html",
"tests.test_builders.test_build_html_5_output",
"tests.test_builders.test_build_html_assets",
Expand All @@ -269,66 +223,95 @@ module = [
"tests.test_builders.test_build_html_numfig",
"tests.test_builders.test_build_html_tocdepth",
"tests.test_builders.test_build_html_toctree",
"tests.test_builders.test_build_latex",
"tests.test_builders.test_build_linkcheck",
"tests.test_builders.test_build_manpage",
"tests.test_builders.test_build_texinfo",
"tests.test_builders.test_build_text",
"tests.test_builders.test_build_warnings",
"tests.test_builders.test_incremental_reading",
# tests/test_config
"tests.test_config.test_config",
"tests.test_config.test_copyright",
# tests/test_directives
"tests.test_directives.test_directive_code",
"tests.test_directives.test_directive_object_description",
"tests.test_directives.test_directive_only",
"tests.test_directives.test_directive_option",
"tests.test_directives.test_directive_other",
"tests.test_directives.test_directive_patch",
"tests.test_directives.test_directives_no_typesetting",
# tests/test_domains
"tests.test_domains.test_domain_c",
"tests.test_domains.test_domain_cpp",
"tests.test_domains.test_domain_js",
"tests.test_domains.test_domain_py",
"tests.test_domains.test_domain_py_canonical",
"tests.test_domains.test_domain_py_fields",
"tests.test_domains.test_domain_py_pyfunction",
"tests.test_domains.test_domain_py_pyobject",
"tests.test_domains.test_domain_rst",
"tests.test_domains.test_domain_std",
# tests/test_environment
"tests.test_environment.test_environment",
"tests.test_environment.test_environment_indexentries",
"tests.test_environment.test_environment_record_dependencies",
"tests.test_environment.test_environment_toctree",
# tests/test_extensions
"tests.test_extensions.test_ext_apidoc",
"tests.test_extensions.test_ext_autodoc",
"tests.test_extensions.test_ext_autodoc_autoattribute",
"tests.test_extensions.test_ext_autodoc_autoclass",
"tests.test_extensions.test_ext_autodoc_autodata",
"tests.test_extensions.test_ext_autodoc_autofunction",
"tests.test_extensions.test_ext_autodoc_automodule",
"tests.test_extensions.test_ext_autodoc_autoproperty",
"tests.test_extensions.test_ext_autodoc_configs",
"tests.test_extensions.test_ext_autodoc_events",
"tests.test_extensions.test_ext_autodoc_mock",
"tests.test_extensions.test_ext_autodoc_preserve_defaults",
"tests.test_extensions.test_ext_autodoc_private_members",
"tests.test_extensions.test_ext_autosectionlabel",
"tests.test_extensions.test_ext_autosummary",
"tests.test_extensions.test_ext_autosummary_imports",
"tests.test_extensions.test_ext_coverage",
"tests.test_extensions.test_ext_doctest",
"tests.test_extensions.test_ext_duration",
"tests.test_extensions.test_ext_extlinks",
"tests.test_extensions.test_ext_githubpages",
"tests.test_extensions.test_ext_graphviz",
"tests.test_extensions.test_ext_ifconfig",
"tests.test_extensions.test_ext_imgconverter",
"tests.test_extensions.test_ext_imgmockconverter",
"tests.test_extensions.test_ext_inheritance_diagram",
"tests.test_extensions.test_ext_intersphinx",
"tests.test_extensions.test_ext_intersphinx_cache",
"tests.test_extensions.test_ext_math",
"tests.test_extensions.test_ext_napoleon",
"tests.test_extensions.test_ext_napoleon_docstring",
"tests.test_extensions.test_ext_todo",
"tests.test_extensions.test_ext_viewcode",
"tests.test_extensions.test_extension",
# tests/test_intl
"tests.test_intl.test_catalogs",
"tests.test_intl.test_intl",
"tests.test_intl.test_locale",
# tests/test_markup
"tests.test_markup.test_markup",
"tests.test_markup.test_metadata",
"tests.test_markup.test_parser",
"tests.test_markup.test_smartquotes",
# tests/test_pycode
"tests.test_pycode.test_pycode",
"tests.test_pycode.test_pycode_ast",
"tests.test_pycode.test_pycode_parser",
# tests/test_theming
"tests.test_theming.test_html_theme",
"tests.test_theming.test_templating",
"tests.test_theming.test_theming",
# tests/test_transforms
"tests.test_transforms.test_transforms_move_module_targets",
"tests.test_transforms.test_transforms_post_transforms",
"tests.test_transforms.test_transforms_post_transforms_code",
"tests.test_transforms.test_transforms_post_transforms_images",
"tests.test_transforms.test_transforms_reorder_nodes",
Expand All @@ -338,18 +321,33 @@ module = [
"tests.test_util.test_util_docstrings",
"tests.test_util.test_util_docutils",
"tests.test_util.test_util_docutils_sphinx_directive",
"tests.test_util.test_util_fileutil",
"tests.test_util.test_util_i18n",
"tests.test_util.test_util_images",
"tests.test_util.test_util_importer",
"tests.test_util.test_util_inspect",
"tests.test_util.test_util_inventory",
"tests.test_util.test_util_lines",
"tests.test_util.test_util_logging",
"tests.test_util.test_util_matching",
"tests.test_util.test_util_nodes",
"tests.test_util.test_util_rst",
"tests.test_util.test_util_template",
"tests.test_util.test_util_typing",
"tests.test_util.test_util_uri",
# tests/test_writers
"tests.test_writers.test_api_translator",
"tests.test_writers.test_docutilsconf",
"tests.test_writers.test_writer_latex",
]
check_untyped_defs = false
disable_error_code = [
"annotation-unchecked",
]
disallow_incomplete_defs = false
disallow_untyped_calls = false
disallow_untyped_defs = false
warn_unused_ignores = false

[tool.pytest.ini_options]
minversion = "6.0"
Expand Down
4 changes: 2 additions & 2 deletions tests/test_config/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ def check(
assert v.__class__ is u.__class__
for u_i, v_i in zip(u, v, strict=True):
counter[type(u)] += 1
check(u_i, v_i, counter=counter, guard=guard | {id(u), id(v)})
check(u_i, v_i, counter=counter, guard=guard | {id(u), id(v)}) # type: ignore[arg-type]

return counter

Expand Down Expand Up @@ -280,7 +280,7 @@ def check(
assert v.__class__ is u.__class__
for u_i, v_i in zip(u, v, strict=True):
counter[type(u)] += 1
check(u[u_i], v[v_i], counter=counter, guard=guard | {id(u), id(v)})
check(u[u_i], v[v_i], counter=counter, guard=guard | {id(u), id(v)}) # type: ignore[arg-type]
return counter

counters = check(actual.x, x, counter=Counter())
Expand Down
2 changes: 1 addition & 1 deletion tests/test_extensions/test_ext_autodoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ def process_signature(*args):

app.connect('autodoc-process-signature', process_signature)

def func(x: int, y: int) -> int:
def func(x: int, y: int) -> int: # type: ignore[empty-body]
pass

directive = make_directive_bridge(app.env)
Expand Down
4 changes: 2 additions & 2 deletions tests/test_extensions/test_ext_autosummary.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ def test_escaping(app):

@pytest.mark.sphinx('html', testroot='ext-autosummary')
def test_autosummary_generate_content_for_module(app):
import autosummary_dummy_module
import autosummary_dummy_module # type: ignore[import-not-found]

template = Mock()

Expand Down Expand Up @@ -457,7 +457,7 @@ def test_autosummary_generate_content_for_module_imported_members(app):

@pytest.mark.sphinx('html', testroot='ext-autosummary')
def test_autosummary_generate_content_for_module_imported_members_inherited_module(app):
import autosummary_dummy_inherited_module
import autosummary_dummy_inherited_module # type: ignore[import-not-found]

template = Mock()

Expand Down
2 changes: 1 addition & 1 deletion tests/test_extensions/test_ext_doctest.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def cleanup_call():
cleanup_called += 1


recorded_calls = Counter()
recorded_calls: Counter[tuple[str, str, int]] = Counter()


@pytest.mark.sphinx('doctest', testroot='ext-doctest-skipif')
Expand Down
2 changes: 1 addition & 1 deletion tests/test_extensions/test_ext_inheritance_diagram.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ def test_import_classes(rootdir):
saved_path = sys.path.copy()
sys.path.insert(0, str(rootdir / 'test-ext-inheritance_diagram'))
try:
from example.sphinx import DummyClass
from example.sphinx import DummyClass # type: ignore[import-not-found]

# got exception for unknown class or module
with pytest.raises(InheritanceException):
Expand Down
2 changes: 1 addition & 1 deletion tests/test_extensions/test_ext_intersphinx.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
from tests.utils import http_server


class FakeList(list): # NoQA: FURB189
class FakeList(list[str]):
def __iter__(self) -> NoReturn:
raise NotImplementedError

Expand Down
4 changes: 3 additions & 1 deletion tests/test_intl/test_intl.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from sphinx.util.nodes import NodeMatcher

if TYPE_CHECKING:
from collections.abc import Iterator
from io import StringIO
from pathlib import Path

Expand Down Expand Up @@ -825,7 +826,7 @@ def sleep(self, ds: float) -> None:


@pytest.fixture
def mock_time_and_i18n() -> tuple[pytest.MonkeyPatch, _MockClock]:
def mock_time_and_i18n() -> Iterator[tuple[pytest.MonkeyPatch, _MockClock]]:
from sphinx.util.i18n import CatalogInfo

# save the 'original' definition
Expand All @@ -838,6 +839,7 @@ def mock_write_mo(self, locale, use_fuzzy=False):

# see: https://github.com/pytest-dev/pytest/issues/363
with pytest.MonkeyPatch.context() as mock:
clock: _MockClock
if os.name == 'posix':
clock = _MockUnixClock()
else:
Expand Down
8 changes: 5 additions & 3 deletions tests/test_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from tests.utils import TESTS_ROOT

if TYPE_CHECKING:
from collections.abc import Iterator
from collections.abc import Iterable, Iterator
from pathlib import Path
from typing import Any

Expand Down Expand Up @@ -53,12 +53,14 @@ def __str__(self) -> str:


class DummyDomain:
def __init__(self, name: str, data: dict) -> None:
def __init__(
self, name: str, data: Iterable[tuple[str, str, str, str, str, int]]
) -> None:
self.name = name
self.data = data
self.object_types: dict[str, ObjType] = {}

def get_objects(self) -> list[tuple[str, str, str, str, str, int]]:
def get_objects(self) -> Iterable[tuple[str, str, str, str, str, int]]:
return self.data


Expand Down
4 changes: 2 additions & 2 deletions tests/test_transforms/test_transforms_post_transforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ def mark_node(self, node: nodes.Node) -> NoReturn:
visitor_methods = {f'visit_{tp.__name__}' for tp in desc_sig_elements_list}
visitor_methods.update(f'visit_{name}' for name in add_visitor_method_for)
class_dict = dict.fromkeys(visitor_methods, BaseCustomTranslatorClass.mark_node)
return type('CustomTranslatorClass', (BaseCustomTranslatorClass,), class_dict) # type: ignore[return-value]
return type('CustomTranslatorClass', (BaseCustomTranslatorClass,), class_dict)

@pytest.mark.parametrize(
'add_visitor_method_for',
Expand Down Expand Up @@ -266,7 +266,7 @@ def test_custom_implementation(
strict=True,
):
assert_node(node, node_type)
assert not node.hasattr('_sig_node_type')
assert not hasattr(node, '_sig_node_type')
assert mess == f'mark: {node_type.__name__!r}'
else:
# desc_sig_* nodes are converted into inline nodes
Expand Down
2 changes: 1 addition & 1 deletion tests/test_util/test_util_inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -890,7 +890,7 @@ def test_isattributedescriptor():
try:
# _testcapi module cannot be importable in some distro
# refs: https://github.com/sphinx-doc/sphinx/issues/9868
import _testcapi
import _testcapi # type: ignore[import-not-found]

# instancemethod (C-API)
testinstancemethod = _testcapi.instancemethod(str.__repr__)
Expand Down
Loading

0 comments on commit 5c5e916

Please sign in to comment.