]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-106368: Improve coverage reports for argument clinic (#107693)
authorAlex Waygood <Alex.Waygood@Gmail.com>
Sun, 6 Aug 2023 19:40:55 +0000 (20:40 +0100)
committerGitHub <noreply@github.com>
Sun, 6 Aug 2023 19:40:55 +0000 (20:40 +0100)
.coveragerc
Tools/clinic/clinic.py
Tools/clinic/cpp.py

index 18bf2f40fe523fe8b778910599a13b6a560c1137..b5d94317e8aa8b0a06f1c2ff2e96e31c091ed992 100644 (file)
@@ -7,6 +7,11 @@ exclude_lines =
     # Don't complain if non-runnable code isn't run:
     if 0:
     if __name__ == .__main__.:
+    raise AssertionError\(
+
+    # Empty bodies in protocols or abstract methods
+    ^\s*def [a-zA-Z0-9_]+\(.*\)(\s*->.*)?:\s*\.\.\.(\s*#.*)?$
+    ^\s*\.\.\.(\s*#.*)?$
 
     .*# pragma: no cover
     .*# pragma: no branch
index 423cdfb939c16140b513e7dd758ff39621ba2a3b..47b5f5ae32f58161f0d871aaeba1e836437b4596 100755 (executable)
@@ -469,7 +469,7 @@ class Language(metaclass=abc.ABCMeta):
     checksum_line = ""
 
     def __init__(self, filename: str) -> None:
-        pass
+        ...
 
     @abc.abstractmethod
     def render(
@@ -477,10 +477,10 @@ class Language(metaclass=abc.ABCMeta):
             clinic: Clinic | None,
             signatures: Iterable[Module | Class | Function]
     ) -> str:
-        pass
+        ...
 
     def parse_line(self, line: str) -> None:
-        pass
+        ...
 
     def validate(self) -> None:
         def assert_only_one(
@@ -2862,6 +2862,9 @@ class CConverter(metaclass=CConverterAutoRegister):
                     f"Note: accessing self.function inside converter_init is disallowed!"
                 )
             return super().__getattr__(attr)
+    # this branch is just here for coverage reporting
+    else:  # pragma: no cover
+        pass
 
     def converter_init(self) -> None:
         pass
@@ -3990,7 +3993,7 @@ def correct_name_for_self(
         return "void *", "null"
     if f.kind in (CLASS_METHOD, METHOD_NEW):
         return "PyTypeObject *", "type"
-    raise RuntimeError("Unhandled type of function f: " + repr(f.kind))
+    raise AssertionError(f"Unhandled type of function f: {f.kind!r}")
 
 def required_type_for_self_for_parser(
         f: Function
index 876105120c97f2bb84afe82fb59e71c1b6598a9e..3d9c61ac678965bf23245dd4bebbaefb8a439541 100644 (file)
@@ -178,11 +178,17 @@ class Monitor:
         if self.verbose:
             print(self.status())
 
-if __name__ == '__main__':
-    for filename in sys.argv[1:]:
+
+def _main(filenames: list[str] | None = None) -> None:
+    filenames = filenames or sys.argv[1:]
+    for filename in filenames:
         with open(filename) as f:
             cpp = Monitor(filename, verbose=True)
             print()
             print(filename)
             for line_number, line in enumerate(f.read().split('\n'), 1):
                 cpp.writeline(line)
+
+
+if __name__ == '__main__':
+    _main()