]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-108455: peg_generator: enable mypy's `--warn-unreachable` setting and `redundant...
authorAlex Waygood <Alex.Waygood@Gmail.com>
Fri, 8 Sep 2023 21:05:40 +0000 (22:05 +0100)
committerGitHub <noreply@github.com>
Fri, 8 Sep 2023 21:05:40 +0000 (22:05 +0100)
Tools/peg_generator/mypy.ini
Tools/peg_generator/pegen/ast_dump.py
Tools/peg_generator/pegen/grammar.py

index 8820d77b36f646936ecd617585d6c45c2ed01d2e..f38f21bed004b28c732cb8ddac6440c566b3de9e 100644 (file)
@@ -8,8 +8,16 @@ python_version = 3.10
 
 # Be strict...
 strict = True
-enable_error_code = truthy-bool,ignore-without-code
+warn_unreachable = True
+enable_error_code = truthy-bool,ignore-without-code,redundant-expr
 
-# except for a few settings that can't yet be enabled:
+# This causes *many* false positives on the peg_generator
+# due to pegen.grammar.GrammarVisitor returning Any from visit() and generic_visit().
+# It would be possible to workaround the false positives using asserts,
+# but it would be pretty tedious, and probably isn't worth it.
 warn_return_any = False
-warn_unreachable = False
+
+# Not all of the strictest settings can be enabled
+# on generated Python code yet:
+[mypy-pegen.grammar_parser.*]
+disable_error_code = redundant-expr
index 2c57d0932fda3771477fb39055f61ba3f2a9427f..07f8799c114f5d68c5c6a83fab1b4f617c7b9c2e 100644 (file)
@@ -66,6 +66,4 @@ def ast_dump(
 
     if all(cls.__name__ != "AST" for cls in node.__class__.__mro__):
         raise TypeError("expected AST, got %r" % node.__class__.__name__)
-    if indent is not None and not isinstance(indent, str):
-        indent = " " * indent
     return _format(node)[0]
index fcf868eb1753e5b38624e4c5e22eeedeea4d5dd4..065894e7fe66abc18918c332bcb1404b64c1485d 100644 (file)
@@ -112,8 +112,7 @@ class Leaf:
         return self.value
 
     def __iter__(self) -> Iterable[str]:
-        if False:
-            yield
+        yield from ()
 
 
 class NameLeaf(Leaf):
@@ -335,8 +334,7 @@ class Cut:
         return f"~"
 
     def __iter__(self) -> Iterator[Tuple[str, str]]:
-        if False:
-            yield
+        yield from ()
 
     def __eq__(self, other: object) -> bool:
         if not isinstance(other, Cut):