Skip to content

Commit 166f444

Browse files
authored
Update astroid nodes import (#2833)
1 parent 0367141 commit 166f444

31 files changed

+412
-487
lines changed

astroid/brain/brain_attrs.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@
88
Without this hook pylint reports unsupported-assignment-operation
99
for attrs classes
1010
"""
11+
from astroid import nodes
1112
from astroid.brain.helpers import is_class_var
1213
from astroid.manager import AstroidManager
13-
from astroid.nodes.node_classes import AnnAssign, Assign, AssignName, Call, Unknown
14-
from astroid.nodes.scoped_nodes import ClassDef
1514
from astroid.util import safe_infer
1615

1716
ATTRIB_NAMES = frozenset(
@@ -51,7 +50,7 @@ def is_decorated_with_attrs(node, decorator_names=ATTRS_NAMES) -> bool:
5150
if not node.decorators:
5251
return False
5352
for decorator_attribute in node.decorators.nodes:
54-
if isinstance(decorator_attribute, Call): # decorator with arguments
53+
if isinstance(decorator_attribute, nodes.Call): # decorator with arguments
5554
decorator_attribute = decorator_attribute.func
5655
if decorator_attribute.as_string() in decorator_names:
5756
return True
@@ -62,26 +61,26 @@ def is_decorated_with_attrs(node, decorator_names=ATTRS_NAMES) -> bool:
6261
return False
6362

6463

65-
def attr_attributes_transform(node: ClassDef) -> None:
64+
def attr_attributes_transform(node: nodes.ClassDef) -> None:
6665
"""Given that the ClassNode has an attr decorator,
6766
rewrite class attributes as instance attributes
6867
"""
6968
# Astroid can't infer this attribute properly
7069
# Prevents https://github.com/pylint-dev/pylint/issues/1884
71-
node.locals["__attrs_attrs__"] = [Unknown(parent=node)]
70+
node.locals["__attrs_attrs__"] = [nodes.Unknown(parent=node)]
7271

7372
use_bare_annotations = is_decorated_with_attrs(node, NEW_ATTRS_NAMES)
7473
for cdef_body_node in node.body:
75-
if not isinstance(cdef_body_node, (Assign, AnnAssign)):
74+
if not isinstance(cdef_body_node, (nodes.Assign, nodes.AnnAssign)):
7675
continue
77-
if isinstance(cdef_body_node.value, Call):
76+
if isinstance(cdef_body_node.value, nodes.Call):
7877
if cdef_body_node.value.func.as_string() not in ATTRIB_NAMES:
7978
continue
8079
elif not use_bare_annotations:
8180
continue
8281

8382
# Skip attributes that are explicitly annotated as class variables
84-
if isinstance(cdef_body_node, AnnAssign) and is_class_var(
83+
if isinstance(cdef_body_node, nodes.AnnAssign) and is_class_var(
8584
cdef_body_node.annotation
8685
):
8786
continue
@@ -92,12 +91,12 @@ def attr_attributes_transform(node: ClassDef) -> None:
9291
else [cdef_body_node.target]
9392
)
9493
for target in targets:
95-
rhs_node = Unknown(
94+
rhs_node = nodes.Unknown(
9695
lineno=cdef_body_node.lineno,
9796
col_offset=cdef_body_node.col_offset,
9897
parent=cdef_body_node,
9998
)
100-
if isinstance(target, AssignName):
99+
if isinstance(target, nodes.AssignName):
101100
# Could be a subscript if the code analysed is
102101
# i = Optional[str] = ""
103102
# See https://github.com/pylint-dev/pylint/issues/4439
@@ -107,5 +106,5 @@ def attr_attributes_transform(node: ClassDef) -> None:
107106

108107
def register(manager: AstroidManager) -> None:
109108
manager.register_transform(
110-
ClassDef, attr_attributes_transform, is_decorated_with_attrs
109+
nodes.ClassDef, attr_attributes_transform, is_decorated_with_attrs
111110
)

astroid/brain/brain_functools.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
from astroid.inference_tip import inference_tip
1818
from astroid.interpreter import objectmodel
1919
from astroid.manager import AstroidManager
20-
from astroid.nodes.node_classes import AssignName, Attribute, Call, Name
21-
from astroid.nodes.scoped_nodes import FunctionDef
2220
from astroid.typing import InferenceResult, SuccessfulInferenceResult
2321
from astroid.util import UninferableBase, safe_infer
2422

@@ -92,7 +90,7 @@ def _functools_partial_inference(
9290
raise UseInferenceDefault from exc
9391
if isinstance(inferred_wrapped_function, UninferableBase):
9492
raise UseInferenceDefault("Cannot infer the wrapped function")
95-
if not isinstance(inferred_wrapped_function, FunctionDef):
93+
if not isinstance(inferred_wrapped_function, nodes.FunctionDef):
9694
raise UseInferenceDefault("The wrapped function is not a function")
9795

9896
# Determine if the passed keywords into the callsite are supported
@@ -106,7 +104,9 @@ def _functools_partial_inference(
106104
inferred_wrapped_function.args.kwonlyargs or (),
107105
)
108106
parameter_names = {
109-
param.name for param in function_parameters if isinstance(param, AssignName)
107+
param.name
108+
for param in function_parameters
109+
if isinstance(param, nodes.AssignName)
110110
}
111111
if set(call.keyword_arguments) - parameter_names:
112112
raise UseInferenceDefault("wrapped function received unknown parameters")
@@ -135,23 +135,25 @@ def _looks_like_lru_cache(node) -> bool:
135135
if not node.decorators:
136136
return False
137137
for decorator in node.decorators.nodes:
138-
if not isinstance(decorator, (Attribute, Call)):
138+
if not isinstance(decorator, (nodes.Attribute, nodes.Call)):
139139
continue
140140
if _looks_like_functools_member(decorator, "lru_cache"):
141141
return True
142142
return False
143143

144144

145-
def _looks_like_functools_member(node: Attribute | Call, member: str) -> bool:
145+
def _looks_like_functools_member(
146+
node: nodes.Attribute | nodes.Call, member: str
147+
) -> bool:
146148
"""Check if the given Call node is the wanted member of functools."""
147-
if isinstance(node, Attribute):
149+
if isinstance(node, nodes.Attribute):
148150
return node.attrname == member
149-
if isinstance(node.func, Name):
151+
if isinstance(node.func, nodes.Name):
150152
return node.func.name == member
151-
if isinstance(node.func, Attribute):
153+
if isinstance(node.func, nodes.Attribute):
152154
return (
153155
node.func.attrname == member
154-
and isinstance(node.func.expr, Name)
156+
and isinstance(node.func.expr, nodes.Name)
155157
and node.func.expr.name == "functools"
156158
)
157159
return False
@@ -161,10 +163,12 @@ def _looks_like_functools_member(node: Attribute | Call, member: str) -> bool:
161163

162164

163165
def register(manager: AstroidManager) -> None:
164-
manager.register_transform(FunctionDef, _transform_lru_cache, _looks_like_lru_cache)
166+
manager.register_transform(
167+
nodes.FunctionDef, _transform_lru_cache, _looks_like_lru_cache
168+
)
165169

166170
manager.register_transform(
167-
Call,
171+
nodes.Call,
168172
inference_tip(_functools_partial_inference),
169173
_looks_like_partial,
170174
)

astroid/brain/brain_namedtuple_enum.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from textwrap import dedent
1313
from typing import Final
1414

15-
import astroid
1615
from astroid import arguments, bases, nodes, util
1716
from astroid.builder import AstroidBuilder, _extract_single_node, extract_node
1817
from astroid.context import InferenceContext
@@ -651,7 +650,7 @@ def _get_namedtuple_fields(node: nodes.Call) -> str:
651650
return field_names
652651

653652

654-
def _is_enum_subclass(cls: astroid.ClassDef) -> bool:
653+
def _is_enum_subclass(cls: nodes.ClassDef) -> bool:
655654
"""Return whether cls is a subclass of an Enum."""
656655
return cls.is_subtype_of("enum.Enum")
657656

astroid/brain/brain_numpy_core_function_base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66

77
import functools
88

9+
from astroid import nodes
910
from astroid.brain.brain_numpy_utils import (
1011
attribute_name_looks_like_numpy_member,
1112
infer_numpy_attribute,
1213
)
1314
from astroid.inference_tip import inference_tip
1415
from astroid.manager import AstroidManager
15-
from astroid.nodes.node_classes import Attribute
1616

1717
METHODS_TO_BE_INFERRED = {
1818
"linspace": """def linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0):
@@ -26,7 +26,7 @@
2626

2727
def register(manager: AstroidManager) -> None:
2828
manager.register_transform(
29-
Attribute,
29+
nodes.Attribute,
3030
inference_tip(functools.partial(infer_numpy_attribute, METHODS_TO_BE_INFERRED)),
3131
functools.partial(
3232
attribute_name_looks_like_numpy_member,

astroid/brain/brain_numpy_core_multiarray.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from astroid.builder import parse
1818
from astroid.inference_tip import inference_tip
1919
from astroid.manager import AstroidManager
20-
from astroid.nodes.node_classes import Attribute, Name
2120

2221

2322
def numpy_core_multiarray_transform() -> nodes.Module:
@@ -96,12 +95,12 @@ def register(manager: AstroidManager) -> None:
9695
method_names = frozenset(METHODS_TO_BE_INFERRED.keys())
9796

9897
manager.register_transform(
99-
Attribute,
98+
nodes.Attribute,
10099
inference_tip(functools.partial(infer_numpy_attribute, METHODS_TO_BE_INFERRED)),
101100
functools.partial(attribute_name_looks_like_numpy_member, method_names),
102101
)
103102
manager.register_transform(
104-
Name,
103+
nodes.Name,
105104
inference_tip(functools.partial(infer_numpy_name, METHODS_TO_BE_INFERRED)),
106105
functools.partial(member_name_looks_like_numpy_member, method_names),
107106
)

astroid/brain/brain_numpy_core_numeric.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from astroid.builder import parse
1616
from astroid.inference_tip import inference_tip
1717
from astroid.manager import AstroidManager
18-
from astroid.nodes.node_classes import Attribute
1918

2019

2120
def numpy_core_numeric_transform() -> nodes.Module:
@@ -42,7 +41,7 @@ def register(manager: AstroidManager) -> None:
4241
)
4342

4443
manager.register_transform(
45-
Attribute,
44+
nodes.Attribute,
4645
inference_tip(functools.partial(infer_numpy_attribute, METHODS_TO_BE_INFERRED)),
4746
functools.partial(
4847
attribute_name_looks_like_numpy_member,

astroid/brain/brain_numpy_ndarray.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
"""Astroid hooks for numpy ndarray class."""
66
from __future__ import annotations
77

8+
from astroid import nodes
89
from astroid.brain.brain_numpy_utils import numpy_supports_type_hints
910
from astroid.builder import extract_node
1011
from astroid.context import InferenceContext
1112
from astroid.inference_tip import inference_tip
1213
from astroid.manager import AstroidManager
13-
from astroid.nodes.node_classes import Attribute
1414

1515

1616
def infer_numpy_ndarray(node, context: InferenceContext | None = None):
@@ -151,13 +151,13 @@ def __class_getitem__(cls, value):
151151
return node.infer(context=context)
152152

153153

154-
def _looks_like_numpy_ndarray(node: Attribute) -> bool:
154+
def _looks_like_numpy_ndarray(node: nodes.Attribute) -> bool:
155155
return node.attrname == "ndarray"
156156

157157

158158
def register(manager: AstroidManager) -> None:
159159
manager.register_transform(
160-
Attribute,
160+
nodes.Attribute,
161161
inference_tip(infer_numpy_ndarray),
162162
_looks_like_numpy_ndarray,
163163
)

astroid/brain/brain_numpy_utils.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
from __future__ import annotations
88

9+
from astroid import nodes
910
from astroid.builder import extract_node
1011
from astroid.context import InferenceContext
11-
from astroid.nodes.node_classes import Attribute, Import, Name
1212

1313
# Class subscript is available in numpy starting with version 1.20.0
1414
NUMPY_VERSION_TYPE_HINTS_SUPPORT = ("1", "20", "0")
@@ -35,20 +35,22 @@ def _get_numpy_version() -> tuple[str, str, str]:
3535

3636

3737
def infer_numpy_name(
38-
sources: dict[str, str], node: Name, context: InferenceContext | None = None
38+
sources: dict[str, str], node: nodes.Name, context: InferenceContext | None = None
3939
):
4040
extracted_node = extract_node(sources[node.name])
4141
return extracted_node.infer(context=context)
4242

4343

4444
def infer_numpy_attribute(
45-
sources: dict[str, str], node: Attribute, context: InferenceContext | None = None
45+
sources: dict[str, str],
46+
node: nodes.Attribute,
47+
context: InferenceContext | None = None,
4648
):
4749
extracted_node = extract_node(sources[node.attrname])
4850
return extracted_node.infer(context=context)
4951

5052

51-
def _is_a_numpy_module(node: Name) -> bool:
53+
def _is_a_numpy_module(node: nodes.Name) -> bool:
5254
"""
5355
Returns True if the node is a representation of a numpy module.
5456
@@ -62,7 +64,7 @@ def _is_a_numpy_module(node: Name) -> bool:
6264
"""
6365
module_nickname = node.name
6466
potential_import_target = [
65-
x for x in node.lookup(module_nickname)[1] if isinstance(x, Import)
67+
x for x in node.lookup(module_nickname)[1] if isinstance(x, nodes.Import)
6668
]
6769
return any(
6870
("numpy", module_nickname) in target.names or ("numpy", None) in target.names
@@ -71,7 +73,7 @@ def _is_a_numpy_module(node: Name) -> bool:
7173

7274

7375
def member_name_looks_like_numpy_member(
74-
member_names: frozenset[str], node: Name
76+
member_names: frozenset[str], node: nodes.Name
7577
) -> bool:
7678
"""
7779
Returns True if the Name node's name matches a member name from numpy
@@ -80,13 +82,13 @@ def member_name_looks_like_numpy_member(
8082

8183

8284
def attribute_name_looks_like_numpy_member(
83-
member_names: frozenset[str], node: Attribute
85+
member_names: frozenset[str], node: nodes.Attribute
8486
) -> bool:
8587
"""
8688
Returns True if the Attribute node's name matches a member name from numpy
8789
"""
8890
return (
8991
node.attrname in member_names
90-
and isinstance(node.expr, Name)
92+
and isinstance(node.expr, nodes.Name)
9193
and _is_a_numpy_module(node.expr)
9294
)

astroid/brain/brain_random.py

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,18 @@
66

77
import random
88

9+
from astroid import nodes
910
from astroid.context import InferenceContext
1011
from astroid.exceptions import UseInferenceDefault
1112
from astroid.inference_tip import inference_tip
1213
from astroid.manager import AstroidManager
13-
from astroid.nodes.node_classes import (
14-
Attribute,
15-
Call,
16-
Const,
17-
EvaluatedObject,
18-
List,
19-
Name,
20-
Set,
21-
Tuple,
22-
)
2314
from astroid.util import safe_infer
2415

25-
ACCEPTED_ITERABLES_FOR_SAMPLE = (List, Set, Tuple)
16+
ACCEPTED_ITERABLES_FOR_SAMPLE = (nodes.List, nodes.Set, nodes.Tuple)
2617

2718

2819
def _clone_node_with_lineno(node, parent, lineno):
29-
if isinstance(node, EvaluatedObject):
20+
if isinstance(node, nodes.EvaluatedObject):
3021
node = node.original
3122
cls = node.__class__
3223
other_fields = node._other_fields
@@ -52,7 +43,7 @@ def infer_random_sample(node, context: InferenceContext | None = None):
5243
raise UseInferenceDefault
5344

5445
inferred_length = safe_infer(node.args[1], context=context)
55-
if not isinstance(inferred_length, Const):
46+
if not isinstance(inferred_length, nodes.Const):
5647
raise UseInferenceDefault
5748
if not isinstance(inferred_length.value, int):
5849
raise UseInferenceDefault
@@ -73,7 +64,7 @@ def infer_random_sample(node, context: InferenceContext | None = None):
7364
except ValueError as exc:
7465
raise UseInferenceDefault from exc
7566

76-
new_node = List(
67+
new_node = nodes.List(
7768
lineno=node.lineno,
7869
col_offset=node.col_offset,
7970
parent=node.scope(),
@@ -90,14 +81,14 @@ def infer_random_sample(node, context: InferenceContext | None = None):
9081

9182
def _looks_like_random_sample(node) -> bool:
9283
func = node.func
93-
if isinstance(func, Attribute):
84+
if isinstance(func, nodes.Attribute):
9485
return func.attrname == "sample"
95-
if isinstance(func, Name):
86+
if isinstance(func, nodes.Name):
9687
return func.name == "sample"
9788
return False
9889

9990

10091
def register(manager: AstroidManager) -> None:
10192
manager.register_transform(
102-
Call, inference_tip(infer_random_sample), _looks_like_random_sample
93+
nodes.Call, inference_tip(infer_random_sample), _looks_like_random_sample
10394
)

0 commit comments

Comments
 (0)