@@ -1455,13 +1455,13 @@ def visit_call(self, node: nodes.Call) -> None:
1455
1455
"""
1456
1456
1457
1457
def _dp (s , val = None ):
1458
- if "Attribute.__init__ l.13" not in str ( node ):
1459
- # print("Not in init")
1460
- return
1461
- if val is None :
1462
- print (f" { s } " , flush = True )
1463
- else :
1464
- print (f" { s } : { val } " , flush = True )
1458
+ return
1459
+ ## if "Attribute.__init__" not in str(node):
1460
+ ## return
1461
+ ## if val is None:
1462
+ ## print(f" {s}", flush=True)
1463
+ ## else:
1464
+ ## print(f" {s}: {val}", flush=True)
1465
1465
1466
1466
_dp ("-" * 25 )
1467
1467
_dp ("visit call, node" , node )
@@ -1477,24 +1477,44 @@ def _dp(s, val=None):
1477
1477
1478
1478
_dp ("Data dump for __init__ call" )
1479
1479
call_site = astroid .arguments .CallSite .from_call (node )
1480
- num_positional_args = len (call_site .positional_arguments )
1480
+ _dp ("call_site" , call_site )
1481
+ # _dp("call_site args", call_site.arguments)
1482
+ # _dp("call site positional args:", call_site.positional_arguments)
1483
+ # _dp("call site keyword args:", call_site.keyword_arguments)
1484
+ # _dp("call site invalid args", call_site.has_invalid_arguments())
1485
+ # _dp("call site inv keywords", call_site.has_invalid_keywords())
1486
+ _dp ("node args" , node .args )
1481
1487
_dp ("node frame" , node .frame ())
1482
- _dp ("isinst" , isinstance (node .frame (), nodes .ClassDef ))
1483
- _dp ("funcdef" , isinstance (called , nodes .FunctionDef ))
1488
+ # _dp("isinst", isinstance(node.frame(), nodes.ClassDef))
1489
+ # _dp("funcdef", isinstance(called, nodes.FunctionDef))
1484
1490
_dp ("called" , called )
1491
+ _dp ("bound method init in called" , "BoundMethod __init__ of builtins.object" in str (called ))
1492
+ _dp ("called.args" , called .args )
1485
1493
_dp ("frame body" , node .frame ().body )
1486
- _dp ("called in frame body" , called in node .frame ().body )
1487
- _dp ("npa" , num_positional_args )
1488
- _dp ("dec names" , called .decoratornames ())
1494
+ # _dp("called in frame body", called in node.frame().body)
1495
+ # _dp("dec names", called.decoratornames())
1496
+
1497
+ def _call_site_has_args (cs ):
1498
+ "True if any args passed."
1499
+ has_args = (
1500
+ False
1501
+ or len (cs .positional_arguments ) > 0
1502
+ or len (cs .keyword_arguments .items ()) > 0
1503
+ or cs .starargs is not None
1504
+ or cs .kwargs is not None
1505
+ )
1506
+ return has_args
1489
1507
1490
1508
if called .args .args is None :
1491
- _dp ("called.args.args is None" )
1492
- _dp ("called.name" , called .name )
1493
1509
if called .name == "isinstance" :
1494
1510
# Verify whether second argument of isinstance is a valid type
1495
1511
self ._check_isinstance_args (node , callable_name )
1496
1512
# Built-in functions have no argument information.
1497
- _dp ("Returning now" )
1513
+ # Check built-in __init__ ... a user-defined __init__ function
1514
+ # is handled elsewhere.
1515
+ if "BoundMethod __init__ of builtins.object" in str (called ):
1516
+ if _call_site_has_args (call_site ):
1517
+ self .add_message ("too-many-function-args" , node = node , args = ("__init__" ,))
1498
1518
return
1499
1519
1500
1520
if len (called .argnames ()) != len (set (called .argnames ())):
0 commit comments