@@ -2439,26 +2439,35 @@ class TypeVarLikeExpr(SymbolNode, Expression):
2439
2439
Note that they are constructed by the semantic analyzer.
2440
2440
"""
2441
2441
2442
- __slots__ = ("_name" , "_fullname" , "upper_bound" , "variance" )
2442
+ __slots__ = ("_name" , "_fullname" , "upper_bound" , "default" , " variance" )
2443
2443
2444
2444
_name : str
2445
2445
_fullname : str
2446
2446
# Upper bound: only subtypes of upper_bound are valid as values. By default
2447
2447
# this is 'object', meaning no restriction.
2448
2448
upper_bound : mypy .types .Type
2449
+ # Default: used to resolve the TypeVar if the default is not explicitly given.
2450
+ # By default this is 'AnyType(TypeOfAny.from_omitted_generics)'. See PEP 696.
2451
+ default : mypy .types .Type
2449
2452
# Variance of the type variable. Invariant is the default.
2450
2453
# TypeVar(..., covariant=True) defines a covariant type variable.
2451
2454
# TypeVar(..., contravariant=True) defines a contravariant type
2452
2455
# variable.
2453
2456
variance : int
2454
2457
2455
2458
def __init__ (
2456
- self , name : str , fullname : str , upper_bound : mypy .types .Type , variance : int = INVARIANT
2459
+ self ,
2460
+ name : str ,
2461
+ fullname : str ,
2462
+ upper_bound : mypy .types .Type ,
2463
+ default : mypy .types .Type ,
2464
+ variance : int = INVARIANT ,
2457
2465
) -> None :
2458
2466
super ().__init__ ()
2459
2467
self ._name = name
2460
2468
self ._fullname = fullname
2461
2469
self .upper_bound = upper_bound
2470
+ self .default = default
2462
2471
self .variance = variance
2463
2472
2464
2473
@property
@@ -2496,9 +2505,10 @@ def __init__(
2496
2505
fullname : str ,
2497
2506
values : list [mypy .types .Type ],
2498
2507
upper_bound : mypy .types .Type ,
2508
+ default : mypy .types .Type ,
2499
2509
variance : int = INVARIANT ,
2500
2510
) -> None :
2501
- super ().__init__ (name , fullname , upper_bound , variance )
2511
+ super ().__init__ (name , fullname , upper_bound , default , variance )
2502
2512
self .values = values
2503
2513
2504
2514
def accept (self , visitor : ExpressionVisitor [T ]) -> T :
@@ -2511,6 +2521,7 @@ def serialize(self) -> JsonDict:
2511
2521
"fullname" : self ._fullname ,
2512
2522
"values" : [t .serialize () for t in self .values ],
2513
2523
"upper_bound" : self .upper_bound .serialize (),
2524
+ "default" : self .default .serialize (),
2514
2525
"variance" : self .variance ,
2515
2526
}
2516
2527
@@ -2522,6 +2533,7 @@ def deserialize(cls, data: JsonDict) -> TypeVarExpr:
2522
2533
data ["fullname" ],
2523
2534
[mypy .types .deserialize_type (v ) for v in data ["values" ]],
2524
2535
mypy .types .deserialize_type (data ["upper_bound" ]),
2536
+ mypy .types .deserialize_type (data ["default" ]),
2525
2537
data ["variance" ],
2526
2538
)
2527
2539
@@ -2540,6 +2552,7 @@ def serialize(self) -> JsonDict:
2540
2552
"name" : self ._name ,
2541
2553
"fullname" : self ._fullname ,
2542
2554
"upper_bound" : self .upper_bound .serialize (),
2555
+ "default" : self .default .serialize (),
2543
2556
"variance" : self .variance ,
2544
2557
}
2545
2558
@@ -2550,6 +2563,7 @@ def deserialize(cls, data: JsonDict) -> ParamSpecExpr:
2550
2563
data ["name" ],
2551
2564
data ["fullname" ],
2552
2565
mypy .types .deserialize_type (data ["upper_bound" ]),
2566
+ mypy .types .deserialize_type (data ["default" ]),
2553
2567
data ["variance" ],
2554
2568
)
2555
2569
@@ -2569,9 +2583,10 @@ def __init__(
2569
2583
fullname : str ,
2570
2584
upper_bound : mypy .types .Type ,
2571
2585
tuple_fallback : mypy .types .Instance ,
2586
+ default : mypy .types .Type ,
2572
2587
variance : int = INVARIANT ,
2573
2588
) -> None :
2574
- super ().__init__ (name , fullname , upper_bound , variance )
2589
+ super ().__init__ (name , fullname , upper_bound , default , variance )
2575
2590
self .tuple_fallback = tuple_fallback
2576
2591
2577
2592
def accept (self , visitor : ExpressionVisitor [T ]) -> T :
@@ -2584,6 +2599,7 @@ def serialize(self) -> JsonDict:
2584
2599
"fullname" : self ._fullname ,
2585
2600
"upper_bound" : self .upper_bound .serialize (),
2586
2601
"tuple_fallback" : self .tuple_fallback .serialize (),
2602
+ "default" : self .default .serialize (),
2587
2603
"variance" : self .variance ,
2588
2604
}
2589
2605
@@ -2595,6 +2611,7 @@ def deserialize(cls, data: JsonDict) -> TypeVarTupleExpr:
2595
2611
data ["fullname" ],
2596
2612
mypy .types .deserialize_type (data ["upper_bound" ]),
2597
2613
mypy .types .Instance .deserialize (data ["tuple_fallback" ]),
2614
+ mypy .types .deserialize_type (data ["default" ]),
2598
2615
data ["variance" ],
2599
2616
)
2600
2617
0 commit comments