Skip to content

Commit ac76a9d

Browse files
elazarggvanrossum
authored andcommitted
Remove Argument.initialization_statement (#4074)
1 parent a8f494c commit ac76a9d

File tree

11 files changed

+41
-111
lines changed

11 files changed

+41
-111
lines changed

mypy/nodes.py

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -395,33 +395,14 @@ class Argument(Node):
395395
type_annotation = None # type: Optional[mypy.types.Type]
396396
initializer = None # type: Optional[Expression]
397397
kind = None # type: int # must be an ARG_* constant
398-
initialization_statement = None # type: Optional[AssignmentStmt]
399398

400399
def __init__(self, variable: 'Var', type_annotation: 'Optional[mypy.types.Type]',
401-
initializer: Optional[Expression], kind: int,
402-
initialization_statement: 'Optional[AssignmentStmt]' = None) -> None:
400+
initializer: Optional[Expression], kind: int) -> None:
403401
self.variable = variable
404-
405402
self.type_annotation = type_annotation
406403
self.initializer = initializer
407-
408-
self.initialization_statement = initialization_statement
409-
if not self.initialization_statement:
410-
self.initialization_statement = self._initialization_statement()
411-
412404
self.kind = kind
413405

414-
def _initialization_statement(self) -> 'Optional[AssignmentStmt]':
415-
"""Convert the initializer into an assignment statement.
416-
"""
417-
if not self.initializer:
418-
return None
419-
420-
rvalue = self.initializer
421-
lvalue = NameExpr(self.variable.name())
422-
assign = AssignmentStmt([lvalue], rvalue)
423-
return assign
424-
425406
def set_line(self, target: Union[Context, int], column: Optional[int] = None) -> None:
426407
super().set_line(target, column)
427408

@@ -430,10 +411,6 @@ def set_line(self, target: Union[Context, int], column: Optional[int] = None) ->
430411

431412
self.variable.set_line(self.line, self.column)
432413

433-
if self.initialization_statement:
434-
self.initialization_statement.set_line(self.line, self.column)
435-
self.initialization_statement.lvalues[0].set_line(self.line, self.column)
436-
437414

438415
class FuncItem(FuncBase):
439416
arguments = [] # type: List[Argument]

mypy/semanal.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -618,10 +618,6 @@ def analyze_function(self, defn: FuncItem) -> None:
618618
self.enter()
619619
for arg in defn.arguments:
620620
self.add_local(arg.variable, defn)
621-
for arg in defn.arguments:
622-
if arg.initialization_statement:
623-
lvalue = arg.initialization_statement.lvalues[0]
624-
lvalue.accept(self)
625621

626622
# The first argument of a non-static, non-class method is like 'self'
627623
# (though the name could be different), having the enclosing class's

mypy/strconv.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,27 +58,24 @@ def func_helper(self, o: 'mypy.nodes.FuncItem') -> List[object]:
5858
array with information specific to methods, global functions or
5959
anonymous functions.
6060
"""
61-
args = [] # type: List[mypy.nodes.Var]
62-
init = [] # type: List[Optional[mypy.nodes.AssignmentStmt]]
61+
args = [] # type: List[Union[mypy.nodes.Var, Tuple[str, List[mypy.nodes.Node]]]]
6362
extra = [] # type: List[Tuple[str, List[mypy.nodes.Var]]]
64-
for i, arg in enumerate(o.arguments):
63+
for arg in o.arguments:
6564
kind = arg.kind # type: int
6665
if kind in (mypy.nodes.ARG_POS, mypy.nodes.ARG_NAMED):
67-
args.append(o.arguments[i].variable)
66+
args.append(arg.variable)
6867
elif kind in (mypy.nodes.ARG_OPT, mypy.nodes.ARG_NAMED_OPT):
69-
args.append(o.arguments[i].variable)
70-
init.append(o.arguments[i].initialization_statement)
68+
assert arg.initializer is not None
69+
args.append(('default', [arg.variable, arg.initializer]))
7170
elif kind == mypy.nodes.ARG_STAR:
72-
extra.append(('VarArg', [o.arguments[i].variable]))
71+
extra.append(('VarArg', [arg.variable]))
7372
elif kind == mypy.nodes.ARG_STAR2:
74-
extra.append(('DictVarArg', [o.arguments[i].variable]))
73+
extra.append(('DictVarArg', [arg.variable]))
7574
a = [] # type: List[Any]
7675
if args:
7776
a.append(('Args', args))
7877
if o.type:
7978
a.append(o.type)
80-
if init:
81-
a.append(('Init', init))
8279
if o.is_generator:
8380
a.append('Generator')
8481
a.extend(extra)

mypy/stubgen.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -455,13 +455,12 @@ def visit_func_def(self, o: FuncDef) -> None:
455455
annotation = ": {}".format(self.print_annotation(annotated_type))
456456
else:
457457
annotation = ""
458-
init_stmt = arg_.initialization_statement
459-
if init_stmt:
458+
if arg_.initializer:
460459
initializer = '...'
461460
if kind in (ARG_NAMED, ARG_NAMED_OPT) and '*' not in args:
462461
args.append('*')
463462
if not annotation:
464-
typename = self.get_str_type_of_node(init_stmt.rvalue, True)
463+
typename = self.get_str_type_of_node(arg_.initializer, True)
465464
annotation = ': {} = ...'.format(typename)
466465
else:
467466
annotation += '={}'.format(initializer)

mypy/traverser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def visit_block(self, block: Block) -> None:
3535

3636
def visit_func(self, o: FuncItem) -> None:
3737
for arg in o.arguments:
38-
init = arg.initialization_statement
38+
init = arg.initializer
3939
if init is not None:
4040
init.accept(self)
4141

mypy/treetransform.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -76,26 +76,11 @@ def visit_import_all(self, node: ImportAll) -> ImportAll:
7676
return ImportAll(node.id, node.relative)
7777

7878
def copy_argument(self, argument: Argument) -> Argument:
79-
init_stmt = None # type: Optional[AssignmentStmt]
80-
81-
if argument.initialization_statement:
82-
init_lvalue = cast(
83-
NameExpr,
84-
self.expr(argument.initialization_statement.lvalues[0]),
85-
)
86-
init_lvalue.set_line(argument.line)
87-
init_stmt = AssignmentStmt(
88-
[init_lvalue],
89-
self.expr(argument.initialization_statement.rvalue),
90-
self.optional_type(argument.initialization_statement.type),
91-
)
92-
9379
arg = Argument(
9480
self.visit_var(argument.variable),
9581
argument.type_annotation,
9682
argument.initializer,
9783
argument.kind,
98-
init_stmt,
9984
)
10085

10186
# Refresh lines of the inner things

test-data/unit/parse-python2.test

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -271,10 +271,8 @@ MypyFile:1(
271271
FuncDef:1(
272272
f
273273
Args(
274-
Var(__tuple_arg_1))
275-
Init(
276-
AssignmentStmt:1(
277-
NameExpr(__tuple_arg_1)
274+
default(
275+
Var(__tuple_arg_1)
278276
TupleExpr:1(
279277
IntExpr(1)
280278
IntExpr(2))))

test-data/unit/parse.test

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,28 +1088,23 @@ MypyFile:1(
10881088
FuncDef:1(
10891089
f
10901090
Args(
1091-
Var(x))
1092-
Init(
1093-
AssignmentStmt:1(
1094-
NameExpr(x)
1091+
default(
1092+
Var(x)
10951093
IntExpr(1)))
10961094
Block:1(
10971095
PassStmt:2()))
10981096
FuncDef:3(
10991097
g
11001098
Args(
11011099
Var(x)
1102-
Var(y)
1103-
Var(z))
1104-
Init(
1105-
AssignmentStmt:3(
1106-
NameExpr(y)
1100+
default(
1101+
Var(y)
11071102
OpExpr:3(
11081103
+
11091104
IntExpr(1)
11101105
IntExpr(2)))
1111-
AssignmentStmt:3(
1112-
NameExpr(z)
1106+
default(
1107+
Var(z)
11131108
TupleExpr:3(
11141109
IntExpr(1)
11151110
IntExpr(2))))
@@ -1451,10 +1446,8 @@ MypyFile:1(
14511446
ExpressionStmt:1(
14521447
LambdaExpr:1(
14531448
Args(
1454-
Var(x))
1455-
Init(
1456-
AssignmentStmt:1(
1457-
NameExpr(x)
1449+
default(
1450+
Var(x)
14581451
IntExpr(2)))
14591452
Block:1(
14601453
ReturnStmt:1(
@@ -2307,10 +2300,8 @@ MypyFile:1(
23072300
MaxPos(1)
23082301
Args(
23092302
Var(x)
2310-
Var(y))
2311-
Init(
2312-
AssignmentStmt:1(
2313-
NameExpr(y)
2303+
default(
2304+
Var(y)
23142305
IntExpr(1)))
23152306
Block:1(
23162307
PassStmt:1())))
@@ -2324,12 +2315,10 @@ MypyFile:1(
23242315
MaxPos(1)
23252316
Args(
23262317
Var(x)
2327-
Var(y))
2328-
def (x: A?, *, y: B? =) -> None?
2329-
Init(
2330-
AssignmentStmt:1(
2331-
NameExpr(y)
2318+
default(
2319+
Var(y)
23322320
IntExpr(1)))
2321+
def (x: A?, *, y: B? =) -> None?
23332322
Block:1(
23342323
PassStmt:1())))
23352324

@@ -2341,12 +2330,10 @@ MypyFile:1(
23412330
f
23422331
MaxPos(0)
23432332
Args(
2344-
Var(y))
2345-
def (*, y: B? =) -> None?
2346-
Init(
2347-
AssignmentStmt:1(
2348-
NameExpr(y)
2333+
default(
2334+
Var(y)
23492335
IntExpr(1)))
2336+
def (*, y: B? =) -> None?
23502337
Block:1(
23512338
PassStmt:1())))
23522339

@@ -3029,10 +3016,8 @@ MypyFile:1(
30293016
MaxPos(1)
30303017
Args(
30313018
Var(x)
3032-
Var(y))
3033-
Init(
3034-
AssignmentStmt:1(
3035-
NameExpr(y)
3019+
default(
3020+
Var(y)
30363021
NameExpr(None)))
30373022
VarArg(
30383023
Var(args))

test-data/unit/semanal-basic.test

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -184,14 +184,11 @@ MypyFile:1(
184184
FuncDef:1(
185185
f
186186
Args(
187-
Var(x)
188-
Var(y))
189-
Init(
190-
AssignmentStmt:1(
191-
NameExpr(x [l])
187+
default(
188+
Var(x)
192189
NameExpr(f [__main__.f]))
193-
AssignmentStmt:1(
194-
NameExpr(y [l])
190+
default(
191+
Var(y)
195192
NameExpr(object [builtins.object])))
196193
Block:1(
197194
ExpressionStmt:2(

test-data/unit/semanal-classes.test

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -547,12 +547,10 @@ MypyFile:1(
547547
f
548548
Args(
549549
Var(self)
550-
Var(x))
551-
def (self: __main__.A, x: builtins.int =)
552-
Init(
553-
AssignmentStmt:4(
554-
NameExpr(x [l])
550+
default(
551+
Var(x)
555552
NameExpr(X [__main__.A.X])))
553+
def (self: __main__.A, x: builtins.int =)
556554
Block:4(
557555
PassStmt:4()))))
558556

0 commit comments

Comments
 (0)