Skip to content

Commit

Permalink
pythongh-104683: Argument Clinic: Refactor the module and class resolver
Browse files Browse the repository at this point in the history
  • Loading branch information
erlend-aasland committed Aug 27, 2023
1 parent fecb9fa commit 74a7029
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 18 deletions.
4 changes: 2 additions & 2 deletions Lib/test/test_clinic.py
Expand Up @@ -2324,10 +2324,10 @@ def test_invalid_legacy_converter(self):
self.expect_failure(block, err, lineno=1)

def test_parent_class_or_module_does_not_exist(self):
err = "Parent class or module 'z' does not exist"
err = "Parent class or module 'baz' does not exist"
block = """
module m
z.func
baz.func
"""
self.expect_failure(block, err, lineno=1)

Expand Down
26 changes: 10 additions & 16 deletions Tools/clinic/clinic.py
Expand Up @@ -2554,7 +2554,7 @@ def parse(self, input: str) -> str:
return printer.f.getvalue()

def _module_and_class(
self, fields: Iterable[str]
self, fields: Sequence[str]
) -> tuple[Module | Clinic, Class | None]:
"""
fields should be an iterable of field names.
Expand All @@ -2563,26 +2563,20 @@ def _module_and_class(
this function is only ever used to find the parent of where
a new class/module should go.
"""
parent: Clinic | Module | Class
child: Module | Class | None
module: Clinic | Module
parent: Clinic | Module | Class = self
module: Clinic | Module = self
cls: Class | None = None
so_far: list[str] = []

parent = module = self

for field in fields:
so_far.append(field)
for idx, field in enumerate(fields):
if not isinstance(parent, Class):
child = parent.modules.get(field)
if child:
parent = module = child
if field in parent.modules:
parent = module = parent.modules[field]
continue
child = parent.classes.get(field)
if not child:
fullname = ".".join(so_far)
if field in parent.classes:
parent = cls = parent.classes[field]
else:
fullname = ".".join(fields[idx:])
fail(f"Parent class or module {fullname!r} does not exist.")
cls = parent = child

return module, cls

Expand Down

0 comments on commit 74a7029

Please sign in to comment.