From: Erlend E. Aasland Date: Mon, 17 Jul 2023 00:04:10 +0000 (+0200) Subject: gh-104050: Argument Clinic: Annotate Clinic.parse() (#106760) X-Git-Tag: v3.13.0a1~1371 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=383dcbebcda576e3a3fd18c9246364f67bb65df5;p=thirdparty%2FPython%2Fcpython.git gh-104050: Argument Clinic: Annotate Clinic.parse() (#106760) Co-authored-by: Alex Waygood --- diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 861a6507eae7..9b7069e9b8fc 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -42,6 +42,7 @@ from typing import ( Literal, NamedTuple, NoReturn, + Protocol, TypeGuard, overload, ) @@ -2055,7 +2056,12 @@ def write_file(filename: str, new_contents: str) -> None: ClassDict = dict[str, "Class"] DestinationDict = dict[str, Destination] ModuleDict = dict[str, "Module"] -ParserDict = dict[str, "DSLParser"] + + +class Parser(Protocol): + def __init__(self, clinic: Clinic) -> None: ... + def parse(self, block: Block) -> None: ... + clinic = None class Clinic: @@ -2113,7 +2119,7 @@ impl_definition block ) -> None: # maps strings to Parser objects. # (instantiated from the "parsers" global.) - self.parsers: ParserDict = {} + self.parsers: dict[str, Parser] = {} self.language: CLanguage = language if printer: fail("Custom printers are broken right now") @@ -2205,7 +2211,7 @@ impl_definition block d = self.get_destination(name) return d.buffers[item] - def parse(self, input): + def parse(self, input: str) -> str: printer = self.printer self.block_parser = BlockParser(input, self.language, verify=self.verify) for block in self.block_parser: @@ -5521,7 +5527,10 @@ class DSLParser: # "clinic", handles the Clinic DSL # "python", handles running Python code # -parsers = {'clinic' : DSLParser, 'python': PythonParser} +parsers: dict[str, Callable[[Clinic], Parser]] = { + 'clinic': DSLParser, + 'python': PythonParser, +} clinic = None