diff --git a/astroid/brain/brain_pathlib.py b/astroid/brain/brain_pathlib.py index d1d1bda7f..bd6ab727a 100644 --- a/astroid/brain/brain_pathlib.py +++ b/astroid/brain/brain_pathlib.py @@ -21,7 +21,8 @@ def _looks_like_parents_subscript(node: nodes.Subscript) -> bool: if not ( - isinstance(node.value, nodes.Attribute) and node.value.attrname == "parents" + (isinstance(node.value, nodes.Attribute) and node.value.attrname == "parents") + or isinstance(node.value, nodes.Name) ): return False diff --git a/tests/brain/test_pathlib.py b/tests/brain/test_pathlib.py index 2335e28ad..f618af260 100644 --- a/tests/brain/test_pathlib.py +++ b/tests/brain/test_pathlib.py @@ -26,7 +26,7 @@ def test_inference_parents() -> None: if PY313: assert inferred[0].qname() == "builtins.tuple" else: - assert inferred[0].qname() == "pathlib._PathParents" + assert inferred[0].qname().lstrip(".").endswith("_PathParents") def test_inference_parents_subscript_index() -> None: @@ -49,6 +49,27 @@ def test_inference_parents_subscript_index() -> None: assert inferred[0].qname() == "pathlib.Path" +def test_inference_parents_assigned_to_variable() -> None: + """Test inference of ``pathlib.Path.parents`` when assigned to a variable.""" + name_node = astroid.extract_node( + """ + from pathlib import Path + + cwd = Path.cwd() + parents = cwd.parents + parents[0] #@ + """ + ) + + inferred = name_node.inferred() + assert len(inferred) == 1 + assert isinstance(inferred[0], bases.Instance) + if PY313: + assert inferred[0].qname() == "pathlib._local.Path" + else: + assert inferred[0].qname() == "pathlib.Path" + + def test_inference_parents_subscript_slice() -> None: """Test inference of ``pathlib.Path.parents``, accessed by slice.""" name_node = astroid.extract_node(