8000 gh-104050: Add basic type hints to Argument Clinic DSL parser (#104704) · python/cpython@27a68be · GitHub
[go: up one dir, main page]

Skip to content

Commit 27a68be

Browse files
gh-104050: Add basic type hints to Argument Clinic DSL parser (#104704)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
1 parent 19dd5aa commit 27a68be

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-
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+
42044206
class 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

Comments
 (0)
0