diff options
| author | Daniƫl van Noord <13665637+DanielNoord@users.noreply.github.com> | 2023-04-03 20:00:43 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-03 20:00:43 +0200 |
| commit | ec1540d7905ec8f5e9383d928a6bfd89860b94a3 (patch) | |
| tree | 3bf5c3aa61f6c502cfb24f2eacfdb409f69ee757 | |
| parent | 8a588e386b6f31c1223c119f40ca40346f90dd8e (diff) | |
| download | astroid-git-ec1540d7905ec8f5e9383d928a6bfd89860b94a3.tar.gz | |
Fix constructors of ``AssignName`` (#2077)
Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
| -rw-r--r-- | ChangeLog | 1 | ||||
| -rw-r--r-- | astroid/interpreter/objectmodel.py | 14 | ||||
| -rw-r--r-- | astroid/nodes/node_classes.py | 30 | ||||
| -rw-r--r-- | astroid/raw_building.py | 36 | ||||
| -rw-r--r-- | tests/test_nodes.py | 7 | ||||
| -rw-r--r-- | tests/test_transforms.py | 18 |
6 files changed, 75 insertions, 31 deletions
@@ -11,6 +11,7 @@ Release date: TBA Closes #1780 * Improved signature of the ``__init__`` and ``__postinit__`` methods of the following nodes: + - ``nodes.AssignName`` - ``nodes.BinOp`` - ``nodes.Delete`` - ``nodes.DelName`` diff --git a/astroid/interpreter/objectmodel.py b/astroid/interpreter/objectmodel.py index 9fdf6f41..ad4db3f4 100644 --- a/astroid/interpreter/objectmodel.py +++ b/astroid/interpreter/objectmodel.py @@ -403,12 +403,22 @@ class FunctionModel(ObjectModel): we get a new object which has two parameters, *self* and *type*. """ nonlocal func + arguments = astroid.Arguments(parent=func.args.parent) + positional_or_keyword_params = func.args.args.copy() - positional_or_keyword_params.append(astroid.AssignName(name="type")) + positional_or_keyword_params.append( + astroid.AssignName( + name="type", + lineno=0, + col_offset=0, + parent=arguments, + end_lineno=None, + end_col_offset=None, + ) + ) positional_only_params = func.args.posonlyargs.copy() - arguments = astroid.Arguments(parent=func.args.parent) arguments.postinit( args=positional_or_keyword_params, posonlyargs=positional_only_params, diff --git a/astroid/nodes/node_classes.py b/astroid/nodes/node_classes.py index 087e3734..2d0400ff 100644 --- a/astroid/nodes/node_classes.py +++ b/astroid/nodes/node_classes.py @@ -408,33 +408,17 @@ class AssignName(_base_nodes.NoChildrenNode, LookupMixIn, _base_nodes.ParentAssi infer_lhs: ClassVar[InferLHS[AssignName]] - @decorators.deprecate_default_argument_values(name="str") def __init__( self, - name: str | None = None, - lineno: int | None = None, - col_offset: int | None = None, - parent: NodeNG | None = None, + name: str, + lineno: int, + col_offset: int, + parent: NodeNG, *, - end_lineno: int | None = None, - end_col_offset: int | None = None, + end_lineno: int | None, + end_col_offset: int | None, ) -> None: - """ - :param name: The name that is assigned to. - - :param lineno: The line that this node appears on in the source code. - - :param col_offset: The column that this node appears on in the - source code. - - :param parent: The parent node in the syntax tree. - - :param end_lineno: The last line this node appears on in the source code. - - :param end_col_offset: The end column this node appears on in the - source code. Note: This is after the last symbol. - """ - self.name: str | None = name + self.name = name """The name that is assigned to.""" super().__init__( diff --git a/astroid/raw_building.py b/astroid/raw_building.py index 8b949b4c..383a243b 100644 --- a/astroid/raw_building.py +++ b/astroid/raw_building.py @@ -128,7 +128,19 @@ def build_function( # (in contrast to when there are no arguments and args == []). We pass # this to the builder to indicate this. if args is not None: - arguments = [nodes.AssignName(name=arg, parent=argsnode) for arg in args] + # We set the lineno and col_offset to 0 because we don't have any + # information about the location of the function definition. + arguments = [ + nodes.AssignName( + name=arg, + parent=argsnode, + lineno=0, + col_offset=0, + end_lineno=None, + end_col_offset=None, + ) + for arg in args + ] else: arguments = None @@ -150,16 +162,34 @@ def build_function( else: kwonlydefault_nodes = None + # We set the lineno and col_offset to 0 because we don't have any + # information about the location of the kwonly and posonlyargs. argsnode.postinit( args=arguments, defaults=default_nodes, kwonlyargs=[ - nodes.AssignName(name=arg, parent=argsnode) for arg in kwonlyargs or () + nodes.AssignName( + name=arg, + parent=argsnode, + lineno=0, + col_offset=0, + end_lineno=None, + end_col_offset=None, + ) + for arg in kwonlyargs or () ], kw_defaults=kwonlydefault_nodes, annotations=[], posonlyargs=[ - nodes.AssignName(name=arg, parent=argsnode) for arg in posonlyargs or () + nodes.AssignName( + name=arg, + parent=argsnode, + lineno=0, + col_offset=0, + end_lineno=None, + end_col_offset=None, + ) + for arg in posonlyargs or () ], ) func.postinit( diff --git a/tests/test_nodes.py b/tests/test_nodes.py index b51bd926..9d5f3ba0 100644 --- a/tests/test_nodes.py +++ b/tests/test_nodes.py @@ -1018,7 +1018,12 @@ class AliasesTest(unittest.TestCase): def test_assname(node: AssignName) -> AssignName | None: if node.name == "foo": return nodes.AssignName( - "bar", node.lineno, node.col_offset, node.parent + "bar", + node.lineno, + node.col_offset, + node.parent, + end_lineno=node.end_lineno, + end_col_offset=node.end_col_offset, ) return None diff --git a/tests/test_transforms.py b/tests/test_transforms.py index 8494694d..8eb4cdea 100644 --- a/tests/test_transforms.py +++ b/tests/test_transforms.py @@ -88,7 +88,14 @@ class TestTransforms(unittest.TestCase): def test_transform_patches_locals(self) -> None: def transform_function(node: FunctionDef) -> None: assign = nodes.Assign() - name = nodes.AssignName(name="value") + name = nodes.AssignName( + name="value", + lineno=0, + col_offset=0, + parent=assign, + end_lineno=None, + end_col_offset=None, + ) assign.targets = [name] assign.value = nodes.const_factory(42) node.body.append(assign) @@ -183,7 +190,14 @@ class TestTransforms(unittest.TestCase): def test_transforms_are_called_for_builtin_modules(self) -> None: # Test that transforms are called for builtin modules. def transform_function(node: FunctionDef) -> FunctionDef: - name = nodes.AssignName(name="value") + name = nodes.AssignName( + name="value", + lineno=0, + col_offset=0, + parent=node.args, + end_lineno=None, + end_col_offset=None, + ) node.args.args = [name] return node |
