File tree Expand file tree Collapse file tree 2 files changed +29
-3
lines changed
Expand file tree Collapse file tree 2 files changed +29
-3
lines changed Original file line number Diff line number Diff line change @@ -2075,9 +2075,22 @@ def resolve(self, name: str) -> str:
20752075 Returns:
20762076 The resolved name.
20772077 """
2078- # We're in an `__init__` method and name is a parameter name.
2079- if self .parent and self .name == "__init__" and name in self .parameters :
2080- return f"{ self .parent .path } ({ name } )"
2078+ # We're in an `__init__` method...
2079+ if self .parent and self .name == "__init__" :
2080+ # ...and name is a parameter name: resolve to the parameter.
2081+ if name in self .parameters :
2082+ return f"{ self .parent .path } ({ name } )"
2083+
2084+ # Kind of a special case: we avoid resolving to instance-attributes from a function scope.
2085+ # See issue https://github.com/mkdocstrings/griffe/issues/367.
2086+ resolved = super ().resolve (name )
2087+ try :
2088+ obj = self .modules_collection .get_member (resolved )
2089+ except KeyError :
2090+ return resolved
2091+ if obj .is_attribute and "instance-attribute" in obj .labels :
2092+ raise NameResolutionError (name )
2093+ return resolved
20812094 return super ().resolve (name )
20822095
20832096 def as_dict (self , ** kwargs : Any ) -> dict [str , Any ]:
Original file line number Diff line number Diff line change @@ -526,3 +526,16 @@ def test_delete_parameters() -> None:
526526 del parameters [0 ]
527527 assert "x" not in parameters
528528 assert len (parameters ) == 0
529+
530+
531+ def test_not_resolving_attribute_value_to_itself () -> None :
532+ """Attribute values with same name don't resolve to themselves."""
533+ with temporary_visited_module (
534+ """
535+ class A:
536+ def __init__(self):
537+ x = "something"
538+ self.x = x
539+ """ ,
540+ ) as module :
541+ assert module ["A.x" ].value .canonical_path == "x" # Not `module.A.x`.
You can’t perform that action at this time.
0 commit comments