@@ -605,7 +605,9 @@ def _infer(
605
605
DEPRECATED_ARGUMENT_DEFAULT = "DEPRECATED_ARGUMENT_DEFAULT"
606
606
607
607
608
- class Arguments (_base_nodes .AssignTypeNode ):
608
+ class Arguments (
609
+ _base_nodes .AssignTypeNode
610
+ ): # pylint: disable=too-many-instance-attributes
609
611
"""Class representing an :class:`ast.arguments` node.
610
612
611
613
An :class:`Arguments` node represents that arguments in a
@@ -704,7 +706,20 @@ class Arguments(_base_nodes.AssignTypeNode):
704
706
kwargannotation : NodeNG | None
705
707
"""The type annotation for the variable length keyword arguments."""
706
708
707
- def __init__ (self , vararg : str | None , kwarg : str | None , parent : NodeNG ) -> None :
709
+ vararg_node : NodeNG | None
710
+ """The node for variable length arguments"""
711
+
712
+ kwarg_node : NodeNG | None
713
+ """The node for keyword arguments"""
714
+
715
+ def __init__ (
716
+ self ,
717
+ vararg : str | None ,
718
+ kwarg : str | None ,
719
+ parent : NodeNG ,
720
+ vararg_node : NodeNG | None = None ,
721
+ kwarg_node : NodeNG | None = None ,
722
+ ) -> None :
708
723
"""Almost all attributes can be None for living objects where introspection failed."""
709
724
super ().__init__ (
710
725
parent = parent ,
@@ -720,6 +735,9 @@ def __init__(self, vararg: str | None, kwarg: str | None, parent: NodeNG) -> Non
720
735
self .kwarg = kwarg
721
736
"""The name of the variable length keyword arguments."""
722
737
738
+ self .vararg_node = vararg_node
739
+ self .kwarg_node = kwarg_node
740
+
723
741
# pylint: disable=too-many-arguments
724
742
def postinit (
725
743
self ,
@@ -788,22 +806,11 @@ def arguments(self):
788
806
* Keyword only arguments (e.g **kwargs)
789
807
"""
790
808
retval = list (itertools .chain ((self .posonlyargs or ()), (self .args or ())))
791
- if self .vararg :
792
- retval .append (
793
- AssignName (
794
- self .vararg ,
795
- - 1 ,
796
- - 1 ,
797
- self ,
798
- end_lineno = - 1 ,
799
- end_col_offset = - 1 ,
800
- )
801
- )
809
+ if self .vararg_node :
810
+ retval .append (self .vararg_node )
802
811
retval += self .kwonlyargs or ()
803
- if self .kwarg :
804
- retval .append (
805
- AssignName (self .kwarg , - 1 , - 1 , self , end_lineno = - 1 , end_col_offset = - 1 )
806
- )
812
+ if self .kwarg_node :
813
+ retval .append (self .kwarg_node )
807
814
808
815
return retval
809
816
@@ -935,7 +942,9 @@ def default_value(self, argname):
935
942
:raises NoDefault: If there is no default value defined for the
936
943
given argument.
937
944
"""
938
- args = [arg for arg in self .arguments if arg .lineno >= 0 ]
945
+ args = [
946
+ arg for arg in self .arguments if arg .name not in [self .vararg , self .kwarg ]
947
+ ]
939
948
940
949
index = _find_arg (argname , self .kwonlyargs )[0 ]
941
950
if index is not None and self .kw_defaults [index ] is not None :
@@ -984,7 +993,7 @@ def find_argname(self, argname, rec=DEPRECATED_ARGUMENT_DEFAULT):
984
993
)
985
994
if self .arguments :
986
995
index , argument = _find_arg (argname , self .arguments )
987
- if argument and argument .lineno >= 0 :
996
+ if argument and argument .name not in [ self . vararg , self . kwarg ] :
988
997
return index , argument
989
998
return None , None
990
999
0 commit comments