diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index a83a90c69529f23..b45137cefd95936 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -28,7 +28,11 @@ jobs: mypy: strategy: matrix: - target: ["Tools/cases_generator", "Tools/clinic"] + target: [ + "Tools/cases_generator", + "Tools/clinic", + "Tools/peg_generator", + ] name: Run mypy on ${{ matrix.target }} runs-on: ubuntu-latest timeout-minutes: 10 diff --git a/Tools/peg_generator/mypy.ini b/Tools/peg_generator/mypy.ini index 17323722c85ad03..0f232ffa878dca9 100644 --- a/Tools/peg_generator/mypy.ini +++ b/Tools/peg_generator/mypy.ini @@ -1,5 +1,6 @@ [mypy] -files = pegen +files = Tools/peg_generator/pegen +pretty = True follow_imports = error no_implicit_optional = True diff --git a/Tools/peg_generator/pegen/build.py b/Tools/peg_generator/pegen/build.py index e41330fade94e3b..b58eb2a42534b71 100644 --- a/Tools/peg_generator/pegen/build.py +++ b/Tools/peg_generator/pegen/build.py @@ -5,7 +5,7 @@ import sysconfig import tempfile import tokenize -from typing import IO, Dict, List, Optional, Set, Tuple +from typing import IO, Any, Dict, List, Optional, Set, Tuple from pegen.c_generator import CParserGenerator from pegen.grammar import Grammar @@ -18,6 +18,7 @@ MOD_DIR = pathlib.Path(__file__).resolve().parent TokenDefinitions = Tuple[Dict[int, str], Dict[str, int], Set[str]] +Incomplete = Any # TODO: install `types-setuptools` and remove this alias def get_extra_flags(compiler_flags: str, compiler_py_flags_nodist: str) -> List[str]: @@ -28,7 +29,7 @@ def get_extra_flags(compiler_flags: str, compiler_py_flags_nodist: str) -> List[ return f"{flags} {py_flags_nodist}".split() -def fixup_build_ext(cmd): +def fixup_build_ext(cmd: Incomplete) -> None: """Function needed to make build_ext tests pass. When Python was built with --enable-shared on Unix, -L. is not enough to @@ -74,7 +75,7 @@ def compile_c_extension( keep_asserts: bool = True, disable_optimization: bool = False, library_dir: Optional[str] = None, -) -> str: +) -> pathlib.Path: """Compile the generated source for a parser generator into an extension module. The extension module will be generated in the same directory as the provided path @@ -89,12 +90,12 @@ def compile_c_extension( static library of the common parser sources (this is useful in case you are creating multiple extensions). """ - import setuptools.logging + import setuptools.logging # type: ignore[import] from setuptools import Extension, Distribution - from setuptools._distutils.dep_util import newer_group - from setuptools._distutils.ccompiler import new_compiler - from setuptools._distutils.sysconfig import customize_compiler + from setuptools._distutils.dep_util import newer_group # type: ignore[import] + from setuptools._distutils.ccompiler import new_compiler # type: ignore[import] + from setuptools._distutils.sysconfig import customize_compiler # type: ignore[import] if verbose: setuptools.logging.set_threshold(setuptools.logging.logging.DEBUG) diff --git a/Tools/peg_generator/pegen/parser.py b/Tools/peg_generator/pegen/parser.py index 034e8e6017a22d1..f1ec504f4cd8799 100644 --- a/Tools/peg_generator/pegen/parser.py +++ b/Tools/peg_generator/pegen/parser.py @@ -21,7 +21,7 @@ def logger(method: F) -> F: """ method_name = method.__name__ - def logger_wrapper(self: P, *args: object) -> T: + def logger_wrapper(self: P, *args: object) -> Any: if not self._verbose: return method(self, *args) argsr = ",".join(repr(arg) for arg in args) @@ -41,7 +41,7 @@ def memoize(method: F) -> F: """Memoize a symbol method.""" method_name = method.__name__ - def memoize_wrapper(self: P, *args: object) -> T: + def memoize_wrapper(self: P, *args: object) -> Any: mark = self._mark() key = mark, method_name, args # Fast path: cache hit, and not verbose. diff --git a/Tools/requirements-dev.txt b/Tools/requirements-dev.txt index 111773f4f47378f..b814169974bd08f 100644 --- a/Tools/requirements-dev.txt +++ b/Tools/requirements-dev.txt @@ -1,3 +1,3 @@ # Requirements file for external linters and checks we run on -# Tools/clinic and Tools/cases_generator/ in CI +# Tools/clinic, Tools/cases_generator/, and Tools/peg_generator/ in CI mypy==1.5.1