@@ -324,9 +324,9 @@ def version_splitter(s: str) -> tuple[int, ...]:
324324 c -> -1
325325 (This permits Python-style version strings such as "1.4b3".)
326326 """
327- version = []
327+ version : list [ int ] = []
328328 accumulator : list [str ] = []
329- def flush ():
329+ def flush () -> None :
330330 if not accumulator :
331331 raise ValueError ('Unsupported version string: ' + repr (s ))
332332 version .append (int ('' .join (accumulator )))
@@ -4201,8 +4201,10 @@ def dedent(self, line):
42014201 return line [indent :]
42024202
42034203
4204+ StateKeeper = Callable [[str | None ], None ]
4205+
42044206class DSLParser :
4205- def __init__ (self , clinic ) :
4207+ def __init__ (self , clinic : Clinic ) -> None :
42064208 self .clinic = clinic
42074209
42084210 self .directives = {}
@@ -4219,9 +4221,9 @@ def __init__(self, clinic):
42194221
42204222 self .reset ()
42214223
4222- def reset (self ):
4224+ def reset (self ) -> None :
42234225 self .function = None
4224- self .state = self .state_dsl_start
4226+ self .state : StateKeeper = self .state_dsl_start
42254227 self .parameter_indent = None
42264228 self .keyword_only = False
42274229 self .positional_only = False
@@ -4234,12 +4236,12 @@ def reset(self):
42344236 self .parameter_continuation = ''
42354237 self .preserve_output = False
42364238
4237- def directive_version (self , required ) :
4239+ def directive_version (self , required : str ) -> None :
42384240 global version
42394241 if version_comparitor (version , required ) < 0 :
42404242 fail ("Insufficient Clinic version!\n Version: " + version + "\n Required: " + required )
42414243
4242- def directive_module (self , name ) :
4244+ def directive_module (self , name : str ) -> None :
42434245 fields = name .split ('.' )[:- 1 ]
42444246 module , cls = self .clinic ._module_and_class (fields )
42454247 if cls :
@@ -4252,9 +4254,13 @@ def directive_module(self, name):
42524254 module .modules [name ] = m
42534255 self .block .signatures .append (m )
42544256
4255- def directive_class (self , name , typedef , type_object ):
4257+ def directive_class (
4258+ self ,
4259+ name : str ,
4260+ typedef : str ,
4261+ type_object : str
4262+ ) -> None :
42564263 fields = name .split ('.' )
4257- parent = self
42584264 name = fields .pop ()
42594265 module , cls = self .clinic ._module_and_class (fields )
42604266
@@ -4266,7 +4272,7 @@ def directive_class(self, name, typedef, type_object):
42664272 parent .classes [name ] = c
42674273 self .block .signatures .append (c )
42684274
4269- def directive_set (self , name , value ) :
4275+ def directive_set (self , name : str , value : str ) -> None :
42704276 if name not in ("line_prefix" , "line_suffix" ):
42714277 fail ("unknown variable" , repr (name ))
42724278
@@ -4277,7 +4283,12 @@ def directive_set(self, name, value):
42774283
42784284 self .clinic .__dict__ [name ] = value
42794285
4280- def directive_destination (self , name , command , * args ):
4286+ def directive_destination (
4287+ self ,
4288+ name : str ,
4289+ command : str ,
4290+ * args
4291+ ) -> None :
42814292 if command == 'new' :
42824293 self .clinic .add_destination (name , * args )
42834294 return
@@ -4287,7 +4298,11 @@ def directive_destination(self, name, command, *args):
42874298 fail ("unknown destination command" , repr (command ))
42884299
42894300
4290- def directive_output (self , command_or_name , destination = '' ):
4301+ def directive_output (
4302+ self ,
4303+ command_or_name : str ,
4304+ destination : str = ''
4305+ ) -> None :
42914306 fd = self .clinic .destination_buffers
42924307
42934308 if command_or_name == "preset" :
@@ -4325,34 +4340,34 @@ def directive_output(self, command_or_name, destination=''):
43254340 fail ("Invalid command / destination name " + repr (command_or_name ) + ", must be one of:\n preset push pop print everything " + " " .join (fd ))
43264341 fd [command_or_name ] = d
43274342
4328- def directive_dump (self , name ) :
4343+ def directive_dump (self , name : str ) -> None :
43294344 self .block .output .append (self .clinic .get_destination (name ).dump ())
43304345
4331- def directive_printout (self , * args ) :
4346+ def directive_printout (self , * args : str ) -> None :
43324347 self .block .output .append (' ' .join (args ))
43334348 self .block .output .append ('\n ' )
43344349
4335- def directive_preserve (self ):
4350+ def directive_preserve (self ) -> None :
43364351 if self .preserve_output :
43374352 fail ("Can't have preserve twice in one block!" )
43384353 self .preserve_output = True
43394354
4340- def at_classmethod (self ):
4355+ def at_classmethod (self ) -> None :
43414356 if self .kind is not CALLABLE :
43424357 fail ("Can't set @classmethod, function is not a normal callable" )
43434358 self .kind = CLASS_METHOD
43444359
4345- def at_staticmethod (self ):
4360+ def at_staticmethod (self ) -> None :
43464361 if self .kind is not CALLABLE :
43474362 fail ("Can't set @staticmethod, function is not a normal callable" )
43484363 self .kind = STATIC_METHOD
43494364
4350- def at_coexist (self ):
4365+ def at_coexist (self ) -> None :
43514366 if self .coexist :
43524367 fail ("Called @coexist twice!" )
43534368 self .coexist = True
43544369
4355- def parse (self , block ) :
4370+ def parse (self , block : Block ) -> None :
43564371 self .reset ()
43574372 self .block = block
43584373 self .saved_output = self .block .output
@@ -4388,10 +4403,14 @@ def ignore_line(line):
43884403 return False
43894404
43904405 @staticmethod
4391- def calculate_indent (line ) :
4406+ def calculate_indent (line : str ) -> int :
43924407 return len (line ) - len (line .strip ())
43934408
4394- def next (self , state , line = None ):
4409+ def next (
4410+ self ,
4411+ state : StateKeeper ,
4412+ line : str | None = None
4413+ ) -> None :
43954414 # real_print(self.state.__name__, "->", state.__name__, ", line=", line)
43964415 self .state = state
43974416 if line is not None :
0 commit comments