Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit27a68be

Browse files
gh-104050: Add basic type hints to Argument Clinic DSL parser (#104704)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
1 parent19dd5aa commit27a68be

File tree

1 file changed

+40
-21
lines changed

1 file changed

+40
-21
lines changed

‎Tools/clinic/clinic.py‎

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
defflush():
329+
defflush()->None:
330330
ifnotaccumulator:
331331
raiseValueError('Unsupported version string: '+repr(s))
332332
version.append(int(''.join(accumulator)))
@@ -4201,8 +4201,10 @@ def dedent(self, line):
42014201
returnline[indent:]
42024202

42034203

4204+
StateKeeper=Callable[[str|None],None]
4205+
42044206
classDSLParser:
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-
defreset(self):
4224+
defreset(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-
defdirective_version(self,required):
4239+
defdirective_version(self,required:str)->None:
42384240
globalversion
42394241
ifversion_comparitor(version,required)<0:
42404242
fail("Insufficient Clinic version!\n Version: "+version+"\n Required: "+required)
42414243

4242-
defdirective_module(self,name):
4244+
defdirective_module(self,name:str)->None:
42434245
fields=name.split('.')[:-1]
42444246
module,cls=self.clinic._module_and_class(fields)
42454247
ifcls:
@@ -4252,9 +4254,13 @@ def directive_module(self, name):
42524254
module.modules[name]=m
42534255
self.block.signatures.append(m)
42544256

4255-
defdirective_class(self,name,typedef,type_object):
4257+
defdirective_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-
defdirective_set(self,name,value):
4275+
defdirective_set(self,name:str,value:str)->None:
42704276
ifnamenotin ("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-
defdirective_destination(self,name,command,*args):
4286+
defdirective_destination(
4287+
self,
4288+
name:str,
4289+
command:str,
4290+
*args
4291+
)->None:
42814292
ifcommand=='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-
defdirective_output(self,command_or_name,destination=''):
4301+
defdirective_output(
4302+
self,
4303+
command_or_name:str,
4304+
destination:str=''
4305+
)->None:
42914306
fd=self.clinic.destination_buffers
42924307

42934308
ifcommand_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-
defdirective_dump(self,name):
4343+
defdirective_dump(self,name:str)->None:
43294344
self.block.output.append(self.clinic.get_destination(name).dump())
43304345

4331-
defdirective_printout(self,*args):
4346+
defdirective_printout(self,*args:str)->None:
43324347
self.block.output.append(' '.join(args))
43334348
self.block.output.append('\n')
43344349

4335-
defdirective_preserve(self):
4350+
defdirective_preserve(self)->None:
43364351
ifself.preserve_output:
43374352
fail("Can't have preserve twice in one block!")
43384353
self.preserve_output=True
43394354

4340-
defat_classmethod(self):
4355+
defat_classmethod(self)->None:
43414356
ifself.kindisnotCALLABLE:
43424357
fail("Can't set @classmethod, function is not a normal callable")
43434358
self.kind=CLASS_METHOD
43444359

4345-
defat_staticmethod(self):
4360+
defat_staticmethod(self)->None:
43464361
ifself.kindisnotCALLABLE:
43474362
fail("Can't set @staticmethod, function is not a normal callable")
43484363
self.kind=STATIC_METHOD
43494364

4350-
defat_coexist(self):
4365+
defat_coexist(self)->None:
43514366
ifself.coexist:
43524367
fail("Called @coexist twice!")
43534368
self.coexist=True
43544369

4355-
defparse(self,block):
4370+
defparse(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
returnFalse
43894404

43904405
@staticmethod
4391-
defcalculate_indent(line):
4406+
defcalculate_indent(line:str)->int:
43924407
returnlen(line)-len(line.strip())
43934408

4394-
defnext(self,state,line=None):
4409+
defnext(
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
iflineisnotNone:

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp