Skip to content

Commit aa6c7e4

Browse files
committed
refactor: Remove useless branch in resolve method, add tests for it
1 parent 58eb9f4 commit aa6c7e4

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

src/_griffe/models.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -774,17 +774,12 @@ def resolve(self, name: str) -> str:
774774
return self.members[name].target_path # type: ignore[union-attr]
775775
return self.members[name].path
776776

777-
# Name was imported.
778-
if name in self.imports:
779-
return self.imports[name]
780-
781777
# Name unknown and no more parent scope.
782778
if self.parent is None:
783779
# could be a built-in
784780
raise NameResolutionError(f"{name} could not be resolved in the scope of {self.path}")
785781

786782
# Name is parent, non-module object.
787-
# NOTE: possibly useless branch.
788783
if name == self.parent.name and not self.parent.is_module:
789784
return self.parent.path
790785

tests/test_models.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
Docstring,
1313
GriffeLoader,
1414
Module,
15+
NameResolutionError,
1516
module_vtree,
1617
temporary_inspected_module,
1718
temporary_pypackage,
@@ -443,3 +444,52 @@ class Derived(Base):
443444
derived_params = [p.name for p in module["Derived"].parameters]
444445
assert base_params == ["self", "a"]
445446
assert derived_params == ["self", "a", "d"]
447+
448+
449+
def test_name_resolution() -> None:
450+
"""Name are correctly resolved in the scope of an object."""
451+
code = """
452+
module_attribute = 0
453+
454+
class Class:
455+
import imported
456+
457+
class_attribute = 0
458+
459+
def __init__(self):
460+
self.instance_attribute = 0
461+
462+
def method(self):
463+
local_variable = 0
464+
"""
465+
with temporary_visited_module(code) as module:
466+
assert module.resolve("module_attribute") == "module.module_attribute"
467+
assert module.resolve("Class") == "module.Class"
468+
469+
assert module["module_attribute"].resolve("Class") == "module.Class"
470+
with pytest.raises(NameResolutionError):
471+
module["module_attribute"].resolve("class_attribute")
472+
473+
assert module["Class"].resolve("module_attribute") == "module.module_attribute"
474+
assert module["Class"].resolve("imported") == "imported"
475+
assert module["Class"].resolve("class_attribute") == "module.Class.class_attribute"
476+
assert module["Class"].resolve("instance_attribute") == "module.Class.instance_attribute"
477+
assert module["Class"].resolve("method") == "module.Class.method"
478+
479+
assert module["Class.class_attribute"].resolve("module_attribute") == "module.module_attribute"
480+
assert module["Class.class_attribute"].resolve("Class") == "module.Class"
481+
assert module["Class.class_attribute"].resolve("imported") == "imported"
482+
assert module["Class.class_attribute"].resolve("instance_attribute") == "module.Class.instance_attribute"
483+
assert module["Class.class_attribute"].resolve("method") == "module.Class.method"
484+
485+
assert module["Class.instance_attribute"].resolve("module_attribute") == "module.module_attribute"
486+
assert module["Class.instance_attribute"].resolve("Class") == "module.Class"
487+
assert module["Class.instance_attribute"].resolve("imported") == "imported"
488+
assert module["Class.instance_attribute"].resolve("class_attribute") == "module.Class.class_attribute"
489+
assert module["Class.instance_attribute"].resolve("method") == "module.Class.method"
490+
491+
assert module["Class.method"].resolve("module_attribute") == "module.module_attribute"
492+
assert module["Class.method"].resolve("Class") == "module.Class"
493+
assert module["Class.method"].resolve("imported") == "imported"
494+
assert module["Class.method"].resolve("class_attribute") == "module.Class.class_attribute"
495+
assert module["Class.method"].resolve("instance_attribute") == "module.Class.instance_attribute"

0 commit comments

Comments
 (0)