summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/mypy.yml7
-rw-r--r--Tools/peg_generator/mypy.ini6
-rw-r--r--Tools/peg_generator/pegen/build.py7
-rw-r--r--Tools/peg_generator/pegen/keywordgen.py1
-rw-r--r--Tools/peg_generator/pegen/parser.py11
-rw-r--r--Tools/requirements-dev.txt2
6 files changed, 23 insertions, 11 deletions
diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml
index 75264c8..82714c2 100644
--- a/.github/workflows/mypy.yml
+++ b/.github/workflows/mypy.yml
@@ -9,6 +9,7 @@ on:
paths:
- "Tools/clinic/**"
- "Tools/cases_generator/**"
+ - "Tools/peg_generator/**"
- "Tools/requirements-dev.txt"
- ".github/workflows/mypy.yml"
workflow_dispatch:
@@ -29,7 +30,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 1732372..186e633 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
@@ -24,3 +25,6 @@ show_error_codes = True
[mypy-pegen.grammar_parser]
strict_optional = False
+
+[mypy-setuptools.*]
+ignore_missing_imports = True
diff --git a/Tools/peg_generator/pegen/build.py b/Tools/peg_generator/pegen/build.py
index e41330f..81efcad 100644
--- a/Tools/peg_generator/pegen/build.py
+++ b/Tools/peg_generator/pegen/build.py
@@ -5,7 +5,7 @@ import sys
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 @@ from pegen.tokenizer import Tokenizer
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
diff --git a/Tools/peg_generator/pegen/keywordgen.py b/Tools/peg_generator/pegen/keywordgen.py
index bbf1326..82d717b 100644
--- a/Tools/peg_generator/pegen/keywordgen.py
+++ b/Tools/peg_generator/pegen/keywordgen.py
@@ -35,6 +35,7 @@ iskeyword = frozenset(kwlist).__contains__
issoftkeyword = frozenset(softkwlist).__contains__
'''.lstrip()
+
def main() -> None:
parser = argparse.ArgumentParser(
description="Generate the Lib/keywords.py file from the grammar."
diff --git a/Tools/peg_generator/pegen/parser.py b/Tools/peg_generator/pegen/parser.py
index 034e8e6..eab48ef 100644
--- a/Tools/peg_generator/pegen/parser.py
+++ b/Tools/peg_generator/pegen/parser.py
@@ -10,7 +10,6 @@ from typing import Any, Callable, ClassVar, Dict, Optional, Tuple, Type, TypeVar
from pegen.tokenizer import Mark, Tokenizer, exact_token_types
T = TypeVar("T")
-P = TypeVar("P", bound="Parser")
F = TypeVar("F", bound=Callable[..., Any])
@@ -21,7 +20,7 @@ def logger(method: F) -> F:
"""
method_name = method.__name__
- def logger_wrapper(self: P, *args: object) -> T:
+ def logger_wrapper(self: "Parser", *args: object) -> Any:
if not self._verbose:
return method(self, *args)
argsr = ",".join(repr(arg) for arg in args)
@@ -41,7 +40,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: "Parser", *args: object) -> Any:
mark = self._mark()
key = mark, method_name, args
# Fast path: cache hit, and not verbose.
@@ -74,11 +73,13 @@ def memoize(method: F) -> F:
return cast(F, memoize_wrapper)
-def memoize_left_rec(method: Callable[[P], Optional[T]]) -> Callable[[P], Optional[T]]:
+def memoize_left_rec(
+ method: Callable[["Parser"], Optional[T]]
+) -> Callable[["Parser"], Optional[T]]:
"""Memoize a left-recursive symbol method."""
method_name = method.__name__
- def memoize_left_rec_wrapper(self: P) -> Optional[T]:
+ def memoize_left_rec_wrapper(self: "Parser") -> Optional[T]:
mark = self._mark()
key = mark, method_name, ()
# Fast path: cache hit, and not verbose.
diff --git a/Tools/requirements-dev.txt b/Tools/requirements-dev.txt
index 111773f..b814169 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