Skip to content

Commit 2f53112

Browse files
pythongh-104683: Argument Clinic: Extract parse_names() helper
Reduce duplicate code in state_modulename_name()
1 parent 13c36dc commit 2f53112

1 file changed

Lines changed: 22 additions & 29 deletions

File tree

‎Tools/clinic/clinic.py‎

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1674,18 +1674,8 @@ def render_function(
16741674
full_name = f.full_name
16751675
template_dict = {'full_name': full_name}
16761676
template_dict['name'] = f.displayname
1677-
1678-
if f.c_basename:
1679-
c_basename = f.c_basename
1680-
else:
1681-
fields = full_name.split(".")
1682-
if fields[-1] == '__new__':
1683-
fields.pop()
1684-
c_basename = "_".join(fields)
1685-
1686-
template_dict['c_basename'] = c_basename
1687-
1688-
template_dict['methoddef_name'] = c_basename.upper() + "_METHODDEF"
1677+
template_dict['c_basename'] = f.c_basename
1678+
template_dict['methoddef_name'] = f.c_basename.upper() + "_METHODDEF"
16891679

16901680
template_dict['docstring'] = self.docstring_for_c_string(f)
16911681

@@ -2653,7 +2643,7 @@ class Function:
26532643
name: str
26542644
module: Module | Clinic
26552645
cls: Class | None
2656-
c_basename: str | None
2646+
c_basename: str
26572647
full_name: str
26582648
return_converter: CReturnConverter
26592649
kind: FunctionKind
@@ -4840,6 +4830,22 @@ def state_dsl_start(self, line: str) -> None:
48404830

48414831
self.next(self.state_modulename_name, line)
48424832

4833+
@staticmethod
4834+
def parse_names(line: str) -> tuple[str, str]:
4835+
left, _, right = line.partition(' as ')
4836+
full_name = left.strip()
4837+
c_basename = right.strip()
4838+
if not c_basename:
4839+
fields = full_name.split(".")
4840+
if fields[-1] == '__new__':
4841+
fields.pop()
4842+
c_basename = "_".join(fields)
4843+
if not is_legal_py_identifier(full_name):
4844+
fail(f"Illegal function name: {full_name!r}")
4845+
if not is_legal_c_identifier(c_basename):
4846+
fail(f"Illegal C basename: {c_basename!r}")
4847+
return full_name, c_basename
4848+
48434849
def state_modulename_name(self, line: str) -> None:
48444850
# looking for declaration, which establishes the leftmost column
48454851
# line should be
@@ -4862,15 +4868,10 @@ def state_modulename_name(self, line: str) -> None:
48624868

48634869
# are we cloning?
48644870
before, equals, existing = line.rpartition('=')
4865-
c_basename: str | None
48664871
if equals:
4867-
full_name, _, c_basename = before.partition(' as ')
4868-
full_name = full_name.strip()
4869-
c_basename = c_basename.strip()
4872+
full_name, c_basename = self.parse_names(before)
48704873
existing = existing.strip()
4871-
if (is_legal_py_identifier(full_name) and
4872-
(not c_basename or is_legal_c_identifier(c_basename)) and
4873-
is_legal_py_identifier(existing)):
4874+
if is_legal_py_identifier(existing):
48744875
# we're cloning!
48754876
fields = [x.strip() for x in existing.split('.')]
48764877
function_name = fields.pop()
@@ -4915,15 +4916,7 @@ def state_modulename_name(self, line: str) -> None:
49154916

49164917
line, _, returns = line.partition('->')
49174918
returns = returns.strip()
4918-
4919-
full_name, _, c_basename = line.partition(' as ')
4920-
full_name = full_name.strip()
4921-
c_basename = c_basename.strip() or None
4922-
4923-
if not is_legal_py_identifier(full_name):
4924-
fail(f"Illegal function name: {full_name!r}")
4925-
if c_basename and not is_legal_c_identifier(c_basename):
4926-
fail(f"Illegal C basename: {c_basename!r}")
4919+
full_name, c_basename = self.parse_names(line)
49274920

49284921
return_converter = None
49294922
if returns:

0 commit comments

Comments
 (0)