Skip to content

Commit 5a3230b

Browse files
committed
Refactor to fix coverage
1 parent 4c647ea commit 5a3230b

File tree

1 file changed

+48
-21
lines changed

1 file changed

+48
-21
lines changed

Tools/clinic/clinic.py

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4618,7 +4618,7 @@ def parse(self, block: Block) -> None:
46184618
fail(f'Tab characters are illegal in the Clinic DSL: {line!r}',
46194619
line_number=block_start)
46204620
try:
4621-
function = self.handle_line(function, line)
4621+
function = self.handle_line(function=function, line=line)
46224622
except ClinicError as exc:
46234623
exc.lineno = line_number
46244624
raise
@@ -4631,7 +4631,16 @@ def parse(self, block: Block) -> None:
46314631
fail("'preserve' only works for blocks that don't produce any output!")
46324632
block.output = self.saved_output
46334633

4634-
def handle_line(self, function: Function | None, line: str) -> Function | None:
4634+
def handle_line(
4635+
self,
4636+
/,
4637+
*,
4638+
function: Function | None,
4639+
line: str,
4640+
new_state: DSLParserState | None = None
4641+
) -> Function | None:
4642+
if new_state:
4643+
self.state = new_state
46354644
match function:
46364645
case None:
46374646
match self.state:
@@ -4697,10 +4706,13 @@ def handle_dsl_start(self, line: str) -> Function | None:
46974706
fail(str(e))
46984707
return None
46994708

4700-
self.state = DSLParserState.MODULENAME_NAME
4701-
return self.handle_modulename_name(line)
4709+
return self.handle_line(
4710+
function=None,
4711+
line=line,
4712+
new_state=DSLParserState.MODULENAME_NAME
4713+
)
47024714

4703-
def handle_modulename_name(self, line: str) -> Function | None:
4715+
def handle_modulename_name(self, line: str) -> Function:
47044716
# looking for declaration, which establishes the leftmost column
47054717
# line should be
47064718
# modulename.fnname [as c_basename] [-> return annotation]
@@ -4898,13 +4910,16 @@ def handle_parameters_start(self, function: Function, line: str) -> Function:
48984910
if self.valid_line(line):
48994911
# if this line is not indented, we have no parameters
49004912
if not self.indent.infer(line):
4901-
self.state = DSLParserState.FUNCTION_DOCSTRING
4902-
self.handle_function_docstring(function=function, line=line)
4913+
self.handle_line(
4914+
function=function,
4915+
line=line,
4916+
new_state=DSLParserState.FUNCTION_DOCSTRING
4917+
)
49034918
else:
49044919
self.parameter_continuation = ''
4905-
self.state = DSLParserState.PARAMETER
4906-
self.handle_parameter(function=function, line=line)
4907-
4920+
self.handle_line(
4921+
function=function, line=line, new_state=DSLParserState.PARAMETER
4922+
)
49084923
return function
49094924

49104925
def to_required(self, function: Function) -> None:
@@ -4928,13 +4943,19 @@ def handle_parameter(self, function: Function, line: str) -> Function:
49284943
indent = self.indent.infer(line)
49294944
if indent == -1:
49304945
# we outdented, must be to definition column
4931-
self.state = DSLParserState.FUNCTION_DOCSTRING
4932-
return self.handle_function_docstring(function=function, line=line)
4946+
self.handle_line(
4947+
function=function, line=line, new_state=DSLParserState.FUNCTION_DOCSTRING
4948+
)
4949+
return function
49334950

49344951
if indent == 1:
49354952
# we indented, must be to new parameter docstring column
4936-
self.state = DSLParserState.PARAMETER_DOCSTRING_START
4937-
return self.handle_parameter_docstring_start(function=function, line=line)
4953+
self.handle_line(
4954+
function=function,
4955+
line=line,
4956+
new_state=DSLParserState.PARAMETER_DOCSTRING_START
4957+
)
4958+
return function
49384959

49394960
line = line.rstrip()
49404961
if line.endswith('\\'):
@@ -5330,8 +5351,10 @@ def handle_parameter_docstring_start(
53305351
assert self.indent.margin is not None, "self.margin.infer() has not yet been called to set the margin"
53315352
self.parameter_docstring_indent = len(self.indent.margin)
53325353
assert self.indent.depth == 3
5333-
self.state = DSLParserState.PARAMETER_DOCSTRING
5334-
return self.handle_parameter_docstring(function=function, line=line)
5354+
self.handle_line(
5355+
function=function, line=line, new_state=DSLParserState.PARAMETER_DOCSTRING
5356+
)
5357+
return function
53355358

53365359
def docstring_append(self, obj: Function | Parameter, line: str) -> None:
53375360
"""Add a rstripped line to the current docstring."""
@@ -5362,11 +5385,15 @@ def handle_parameter_docstring(
53625385
assert self.indent.depth < 3
53635386
if self.indent.depth == 2:
53645387
# back to a parameter
5365-
self.state = DSLParserState.PARAMETER
5366-
return self.handle_parameter(function=function, line=line)
5367-
assert self.indent.depth == 1
5368-
self.state = DSLParserState.FUNCTION_DOCSTRING
5369-
return self.handle_function_docstring(function=function, line=line)
5388+
self.handle_line(
5389+
function=function, line=line, new_state=DSLParserState.PARAMETER
5390+
)
5391+
else:
5392+
assert self.indent.depth == 1
5393+
self.handle_line(
5394+
function=function, line=line, new_state=DSLParserState.FUNCTION_DOCSTRING
5395+
)
5396+
return function
53705397

53715398
assert function.parameters
53725399
last_param = next(reversed(function.parameters.values()))

0 commit comments

Comments
 (0)