@@ -604,7 +604,9 @@ def _infer(
604
604
DEPRECATED_ARGUMENT_DEFAULT = "DEPRECATED_ARGUMENT_DEFAULT"
605
605
606
606
607
- class Arguments (_base_nodes .AssignTypeNode ):
607
+ class Arguments (
608
+ _base_nodes .AssignTypeNode
609
+ ): # pylint: disable=too-many-instance-attributes
608
610
"""Class representing an :class:`ast.arguments` node.
609
611
610
612
An :class:`Arguments` node represents that arguments in a
@@ -703,7 +705,20 @@ class Arguments(_base_nodes.AssignTypeNode):
703
705
kwargannotation : NodeNG | None
704
706
"""The type annotation for the variable length keyword arguments."""
705
707
706
- def __init__ (self , vararg : str | None , kwarg : str | None , parent : NodeNG ) -> None :
708
+ vararg_node : NodeNG | None
709
+ """The node for variable length arguments"""
710
+
711
+ kwarg_node : NodeNG | None
712
+ """The node for keyword arguments"""
713
+
714
+ def __init__ (
715
+ self ,
716
+ vararg : str | None ,
717
+ kwarg : str | None ,
718
+ parent : NodeNG ,
719
+ vararg_node : NodeNG | None = None ,
720
+ kwarg_node : NodeNG | None = None ,
721
+ ) -> None :
707
722
"""Almost all attributes can be None for living objects where introspection failed."""
708
723
super ().__init__ (
709
724
parent = parent ,
@@ -719,6 +734,9 @@ def __init__(self, vararg: str | None, kwarg: str | None, parent: NodeNG) -> Non
719
734
self .kwarg = kwarg
720
735
"""The name of the variable length keyword arguments."""
721
736
737
+ self .vararg_node = vararg_node
738
+ self .kwarg_node = kwarg_node
739
+
722
740
# pylint: disable=too-many-arguments
723
741
def postinit (
724
742
self ,
@@ -787,7 +805,9 @@ def arguments(self):
787
805
* Keyword only arguments (e.g **kwargs)
788
806
"""
789
807
retval = list (itertools .chain ((self .posonlyargs or ()), (self .args or ())))
790
- if self .vararg :
808
+ if self .vararg_node :
809
+ retval .append (self .vararg_node )
810
+ elif self .vararg :
791
811
retval .append (
792
812
AssignName (
793
813
self .vararg ,
@@ -799,7 +819,9 @@ def arguments(self):
799
819
)
800
820
)
801
821
retval += self .kwonlyargs or ()
802
- if self .kwarg :
822
+ if self .kwarg_node :
823
+ retval .append (self .kwarg_node )
824
+ elif self .kwarg :
803
825
retval .append (
804
826
AssignName (self .kwarg , - 1 , - 1 , self , end_lineno = - 1 , end_col_offset = - 1 )
805
827
)
@@ -934,7 +956,9 @@ def default_value(self, argname):
934
956
:raises NoDefault: If there is no default value defined for the
935
957
given argument.
936
958
"""
937
- args = [arg for arg in self .arguments if arg .lineno >= 0 ]
959
+ args = [
960
+ arg for arg in self .arguments if arg .name not in [self .vararg , self .kwarg ]
961
+ ]
938
962
939
963
index = _find_arg (argname , self .kwonlyargs )[0 ]
940
964
if index is not None and self .kw_defaults [index ] is not None :
@@ -983,7 +1007,7 @@ def find_argname(self, argname, rec=DEPRECATED_ARGUMENT_DEFAULT):
983
1007
)
984
1008
if self .arguments :
985
1009
index , argument = _find_arg (argname , self .arguments )
986
- if argument and argument .lineno >= 0 :
1010
+ if argument and argument .name not in [ self . vararg , self . kwarg ] :
987
1011
return index , argument
988
1012
return None , None
989
1013
0 commit comments