[Python-checkins] gh-104050: Improve Argument Clinic type annotation coverage (#106810)
erlend-aasland
webhook-mailer at python.org
Mon Jul 17 07:47:12 EDT 2023
https://github.com/python/cpython/commit/036bb7365607ab7e5cf901f1ac4256f9ae1be82c
commit: 036bb7365607ab7e5cf901f1ac4256f9ae1be82c
branch: main
author: Erlend E. Aasland <erlend at python.org>
committer: erlend-aasland <erlend.aasland at protonmail.com>
date: 2023-07-17T13:47:08+02:00
summary:
gh-104050: Improve Argument Clinic type annotation coverage (#106810)
Add various missing annotations in the following classes:
- BlockPrinter
- CConverter
- CLanguage
- FormatCounterFormatter
- Language
- _TextAccumulator
Co-authored-by: Alex Waygood <Alex.Waygood at Gmail.com>
files:
M Tools/clinic/clinic.py
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index 9b7069e9b8fcb..311f0a1a56a03 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -109,7 +109,7 @@ class _TextAccumulator(NamedTuple):
def _text_accumulator() -> _TextAccumulator:
text: list[str] = []
- def output():
+ def output() -> str:
s = ''.join(text)
text.clear()
return s
@@ -433,10 +433,10 @@ class FormatCounterFormatter(string.Formatter):
the counts dict would now look like
{'a': 2, 'b': 1, 'c': 1}
"""
- def __init__(self):
- self.counts = collections.Counter()
+ def __init__(self) -> None:
+ self.counts = collections.Counter[str]()
- def get_value(self, key, args, kwargs):
+ def get_value(self, key: str, args, kwargs) -> str: # type: ignore[override]
self.counts[key] += 1
return ''
@@ -447,18 +447,25 @@ class Language(metaclass=abc.ABCMeta):
stop_line = ""
checksum_line = ""
- def __init__(self, filename):
+ def __init__(self, filename: str) -> None:
pass
@abc.abstractmethod
- def render(self, clinic, signatures):
+ def render(
+ self,
+ clinic: Clinic | None,
+ signatures: Iterable[Module | Class | Function]
+ ) -> str:
pass
- def parse_line(self, line):
+ def parse_line(self, line: str) -> None:
pass
- def validate(self):
- def assert_only_one(attr, *additional_fields):
+ def validate(self) -> None:
+ def assert_only_one(
+ attr: str,
+ *additional_fields: str
+ ) -> None:
"""
Ensures that the string found at getattr(self, attr)
contains exactly one formatter replacement string for
@@ -485,10 +492,10 @@ def assert_only_one(attr, *additional_fields):
"""
fields = ['dsl_name']
fields.extend(additional_fields)
- line = getattr(self, attr)
+ line: str = getattr(self, attr)
fcf = FormatCounterFormatter()
fcf.format(line)
- def local_fail(should_be_there_but_isnt):
+ def local_fail(should_be_there_but_isnt: bool) -> None:
if should_be_there_but_isnt:
fail("{} {} must contain {{{}}} exactly once!".format(
self.__class__.__name__, attr, name))
@@ -749,10 +756,10 @@ class CLanguage(Language):
stop_line = "[{dsl_name} start generated code]*/"
checksum_line = "/*[{dsl_name} end generated code: {arguments}]*/"
- def __init__(self, filename):
+ def __init__(self, filename: str) -> None:
super().__init__(filename)
self.cpp = cpp.Monitor(filename)
- self.cpp.fail = fail
+ self.cpp.fail = fail # type: ignore[method-assign]
def parse_line(self, line: str) -> None:
self.cpp.writeline(line)
@@ -935,6 +942,7 @@ def parser_body(
add(field)
return linear_format(output(), parser_declarations=declarations)
+ parsearg: str | None
if not parameters:
parser_code: list[str] | None
if not requires_defining_class:
@@ -1880,7 +1888,12 @@ class BlockPrinter:
language: Language
f: io.StringIO = dc.field(default_factory=io.StringIO)
- def print_block(self, block, *, core_includes=False):
+ def print_block(
+ self,
+ block: Block,
+ *,
+ core_includes: bool = False
+ ) -> None:
input = block.input
output = block.output
dsl_name = block.dsl_name
@@ -1931,7 +1944,7 @@ def print_block(self, block, *, core_includes=False):
write(self.language.checksum_line.format(dsl_name=dsl_name, arguments=arguments))
write("\n")
- def write(self, text):
+ def write(self, text: str) -> None:
self.f.write(text)
@@ -2755,7 +2768,7 @@ class CConverter(metaclass=CConverterAutoRegister):
# If not None, should be a string representing a pointer to a
# PyTypeObject (e.g. "&PyUnicode_Type").
# Only used by the 'O!' format unit (and the "object" converter).
- subclass_of = None
+ subclass_of: str | None = None
# Do we want an adjacent '_length' variable for this variable?
# Only used by format units ending with '#'.
@@ -2948,7 +2961,7 @@ def simple_declaration(self, by_reference=False, *, in_parser=False):
prototype.append(name)
return "".join(prototype)
- def declaration(self, *, in_parser=False):
+ def declaration(self, *, in_parser=False) -> str:
"""
The C statement to declare this variable.
"""
@@ -3006,7 +3019,7 @@ def pre_render(self):
"""
pass
- def parse_arg(self, argname, displayname):
+ def parse_arg(self, argname: str, displayname: str):
if self.format_unit == 'O&':
return """
if (!{converter}({argname}, &{paramname})) {{{{
More information about the Python-checkins
mailing list