@@ -170,6 +170,24 @@ fn definition_expression_type<'db>(
170
170
}
171
171
}
172
172
173
+ /// A [`TypeTransformer`] that is used in `apply_type_mapping` methods.
174
+ pub ( crate ) type ApplyTypeMappingVisitor < ' db > = TypeTransformer < ' db , TypeMapping < ' db , ' db > > ;
175
+
176
+ /// A [`PairVisitor`] that is used in `has_relation_to` methods.
177
+ pub ( crate ) type HasRelationToVisitor < ' db > = PairVisitor < ' db , TypeRelation > ;
178
+
179
+ /// A [`PairVisitor`] that is used in `is_disjoint_from` methods.
180
+ pub ( crate ) type IsDisjointVisitor < ' db > = PairVisitor < ' db , IsDisjoint > ;
181
+ pub ( crate ) struct IsDisjoint ;
182
+
183
+ /// A [`PairVisitor`] that is used in `is_equivalent` methods.
184
+ pub ( crate ) type IsEquivalentVisitor < ' db > = PairVisitor < ' db , IsEquivalent > ;
185
+ pub ( crate ) struct IsEquivalent ;
186
+
187
+ /// A [`TypeTransformer`] that is used in `normalized` methods.
188
+ pub ( crate ) type NormalizedVisitor < ' db > = TypeTransformer < ' db , Normalized > ;
189
+ pub ( crate ) struct Normalized ;
190
+
173
191
/// The descriptor protocol distinguishes two kinds of descriptors. Non-data descriptors
174
192
/// define a `__get__` method, while data descriptors additionally define a `__set__`
175
193
/// method or a `__delete__` method. This enum is used to categorize attributes into two
@@ -419,7 +437,7 @@ impl<'db> PropertyInstanceType<'db> {
419
437
Self :: new ( db, getter, setter)
420
438
}
421
439
422
- fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
440
+ fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
423
441
Self :: new (
424
442
db,
425
443
self . getter ( db) . map ( |ty| ty. normalized_impl ( db, visitor) ) ,
@@ -1068,7 +1086,7 @@ impl<'db> Type<'db> {
1068
1086
}
1069
1087
1070
1088
#[ must_use]
1071
- pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
1089
+ pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
1072
1090
match self {
1073
1091
Type :: Union ( union) => {
1074
1092
visitor. visit ( self , || Type :: Union ( union. normalized_impl ( db, visitor) ) )
@@ -1326,7 +1344,7 @@ impl<'db> Type<'db> {
1326
1344
db : & ' db dyn Db ,
1327
1345
target : Type < ' db > ,
1328
1346
relation : TypeRelation ,
1329
- visitor : & PairVisitor < ' db > ,
1347
+ visitor : & HasRelationToVisitor < ' db > ,
1330
1348
) -> bool {
1331
1349
// Subtyping implies assignability, so if subtyping is reflexive and the two types are
1332
1350
// equal, it is both a subtype and assignable. Assignability is always reflexive.
@@ -1762,7 +1780,7 @@ impl<'db> Type<'db> {
1762
1780
self ,
1763
1781
db : & ' db dyn Db ,
1764
1782
other : Type < ' db > ,
1765
- visitor : & PairVisitor < ' db > ,
1783
+ visitor : & IsEquivalentVisitor < ' db > ,
1766
1784
) -> bool {
1767
1785
if self == other {
1768
1786
return true ;
@@ -1848,13 +1866,13 @@ impl<'db> Type<'db> {
1848
1866
self ,
1849
1867
db : & ' db dyn Db ,
1850
1868
other : Type < ' db > ,
1851
- visitor : & PairVisitor < ' db > ,
1869
+ visitor : & IsDisjointVisitor < ' db > ,
1852
1870
) -> bool {
1853
1871
fn any_protocol_members_absent_or_disjoint < ' db > (
1854
1872
db : & ' db dyn Db ,
1855
1873
protocol : ProtocolInstanceType < ' db > ,
1856
1874
other : Type < ' db > ,
1857
- visitor : & PairVisitor < ' db > ,
1875
+ visitor : & IsDisjointVisitor < ' db > ,
1858
1876
) -> bool {
1859
1877
protocol. interface ( db) . members ( db) . any ( |member| {
1860
1878
other
@@ -5743,7 +5761,7 @@ impl<'db> Type<'db> {
5743
5761
self ,
5744
5762
db : & ' db dyn Db ,
5745
5763
type_mapping : & TypeMapping < ' a , ' db > ,
5746
- visitor : & TypeTransformer < ' db > ,
5764
+ visitor : & ApplyTypeMappingVisitor < ' db > ,
5747
5765
) -> Type < ' db > {
5748
5766
match self {
5749
5767
Type :: TypeVar ( bound_typevar) => match type_mapping {
@@ -6265,7 +6283,7 @@ impl<'db> TypeMapping<'_, 'db> {
6265
6283
}
6266
6284
}
6267
6285
6268
- fn normalized_impl ( & self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
6286
+ fn normalized_impl ( & self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
6269
6287
match self {
6270
6288
TypeMapping :: Specialization ( specialization) => {
6271
6289
TypeMapping :: Specialization ( specialization. normalized_impl ( db, visitor) )
@@ -6351,7 +6369,7 @@ fn walk_known_instance_type<'db, V: visitor::TypeVisitor<'db> + ?Sized>(
6351
6369
}
6352
6370
6353
6371
impl < ' db > KnownInstanceType < ' db > {
6354
- fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
6372
+ fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
6355
6373
match self {
6356
6374
Self :: SubscriptedProtocol ( context) => {
6357
6375
Self :: SubscriptedProtocol ( context. normalized_impl ( db, visitor) )
@@ -6777,7 +6795,7 @@ pub struct FieldInstance<'db> {
6777
6795
impl get_size2:: GetSize for FieldInstance < ' _ > { }
6778
6796
6779
6797
impl < ' db > FieldInstance < ' db > {
6780
- pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
6798
+ pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
6781
6799
FieldInstance :: new (
6782
6800
db,
6783
6801
self . default_type ( db) . normalized_impl ( db, visitor) ,
@@ -6901,7 +6919,7 @@ impl<'db> TypeVarInstance<'db> {
6901
6919
}
6902
6920
}
6903
6921
6904
- pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
6922
+ pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
6905
6923
Self :: new (
6906
6924
db,
6907
6925
self . name ( db) ,
@@ -6997,7 +7015,7 @@ impl<'db> BoundTypeVarInstance<'db> {
6997
7015
. map ( |ty| ty. apply_type_mapping ( db, & TypeMapping :: BindLegacyTypevars ( binding_context) ) )
6998
7016
}
6999
7017
7000
- pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
7018
+ pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
7001
7019
Self :: new (
7002
7020
db,
7003
7021
self . typevar ( db) . normalized_impl ( db, visitor) ,
@@ -7056,7 +7074,7 @@ fn walk_type_var_bounds<'db, V: visitor::TypeVisitor<'db> + ?Sized>(
7056
7074
}
7057
7075
7058
7076
impl < ' db > TypeVarBoundOrConstraints < ' db > {
7059
- fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
7077
+ fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
7060
7078
match self {
7061
7079
TypeVarBoundOrConstraints :: UpperBound ( bound) => {
7062
7080
TypeVarBoundOrConstraints :: UpperBound ( bound. normalized_impl ( db, visitor) )
@@ -8094,7 +8112,7 @@ impl<'db> BoundMethodType<'db> {
8094
8112
)
8095
8113
}
8096
8114
8097
- fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
8115
+ fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
8098
8116
Self :: new (
8099
8117
db,
8100
8118
self . function ( db) . normalized_impl ( db, visitor) ,
@@ -8211,7 +8229,7 @@ impl<'db> CallableType<'db> {
8211
8229
/// Return a "normalized" version of this `Callable` type.
8212
8230
///
8213
8231
/// See [`Type::normalized`] for more details.
8214
- fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
8232
+ fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
8215
8233
CallableType :: new (
8216
8234
db,
8217
8235
self . signatures ( db) . normalized_impl ( db, visitor) ,
@@ -8375,7 +8393,7 @@ impl<'db> MethodWrapperKind<'db> {
8375
8393
}
8376
8394
}
8377
8395
8378
- fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
8396
+ fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
8379
8397
match self {
8380
8398
MethodWrapperKind :: FunctionTypeDunderGet ( function) => {
8381
8399
MethodWrapperKind :: FunctionTypeDunderGet ( function. normalized_impl ( db, visitor) )
@@ -8559,7 +8577,7 @@ impl<'db> PEP695TypeAliasType<'db> {
8559
8577
definition_expression_type ( db, definition, & type_alias_stmt_node. value )
8560
8578
}
8561
8579
8562
- fn normalized_impl ( self , _db : & ' db dyn Db , _visitor : & TypeTransformer < ' db > ) -> Self {
8580
+ fn normalized_impl ( self , _db : & ' db dyn Db , _visitor : & NormalizedVisitor < ' db > ) -> Self {
8563
8581
self
8564
8582
}
8565
8583
}
@@ -8601,7 +8619,7 @@ fn walk_bare_type_alias<'db, V: visitor::TypeVisitor<'db> + ?Sized>(
8601
8619
}
8602
8620
8603
8621
impl < ' db > BareTypeAliasType < ' db > {
8604
- fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
8622
+ fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
8605
8623
Self :: new (
8606
8624
db,
8607
8625
self . name ( db) ,
@@ -8637,7 +8655,7 @@ fn walk_type_alias_type<'db, V: visitor::TypeVisitor<'db> + ?Sized>(
8637
8655
}
8638
8656
8639
8657
impl < ' db > TypeAliasType < ' db > {
8640
- pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
8658
+ pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
8641
8659
match self {
8642
8660
TypeAliasType :: PEP695 ( type_alias) => {
8643
8661
TypeAliasType :: PEP695 ( type_alias. normalized_impl ( db, visitor) )
@@ -8866,7 +8884,7 @@ impl<'db> UnionType<'db> {
8866
8884
self . normalized_impl ( db, & TypeTransformer :: default ( ) )
8867
8885
}
8868
8886
8869
- pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
8887
+ pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
8870
8888
let mut new_elements: Vec < Type < ' db > > = self
8871
8889
. elements ( db)
8872
8890
. iter ( )
@@ -8940,11 +8958,11 @@ impl<'db> IntersectionType<'db> {
8940
8958
self . normalized_impl ( db, & TypeTransformer :: default ( ) )
8941
8959
}
8942
8960
8943
- pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
8961
+ pub ( crate ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
8944
8962
fn normalized_set < ' db > (
8945
8963
db : & ' db dyn Db ,
8946
8964
elements : & FxOrderSet < Type < ' db > > ,
8947
- visitor : & TypeTransformer < ' db > ,
8965
+ visitor : & NormalizedVisitor < ' db > ,
8948
8966
) -> FxOrderSet < Type < ' db > > {
8949
8967
let mut elements: FxOrderSet < Type < ' db > > = elements
8950
8968
. iter ( )
@@ -9194,7 +9212,7 @@ impl<'db> TypedDictType<'db> {
9194
9212
self ,
9195
9213
db : & ' db dyn Db ,
9196
9214
type_mapping : & TypeMapping < ' a , ' db > ,
9197
- visitor : & TypeTransformer < ' db > ,
9215
+ visitor : & ApplyTypeMappingVisitor < ' db > ,
9198
9216
) -> Self {
9199
9217
Self {
9200
9218
defining_class : self
@@ -9266,7 +9284,7 @@ pub enum SuperOwnerKind<'db> {
9266
9284
}
9267
9285
9268
9286
impl < ' db > SuperOwnerKind < ' db > {
9269
- fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
9287
+ fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
9270
9288
match self {
9271
9289
SuperOwnerKind :: Dynamic ( dynamic) => SuperOwnerKind :: Dynamic ( dynamic. normalized ( ) ) ,
9272
9290
SuperOwnerKind :: Class ( class) => {
@@ -9538,7 +9556,7 @@ impl<'db> BoundSuperType<'db> {
9538
9556
}
9539
9557
}
9540
9558
9541
- pub ( super ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & TypeTransformer < ' db > ) -> Self {
9559
+ pub ( super ) fn normalized_impl ( self , db : & ' db dyn Db , visitor : & NormalizedVisitor < ' db > ) -> Self {
9542
9560
Self :: new (
9543
9561
db,
9544
9562
self . pivot_class ( db) . normalized_impl ( db, visitor) ,
0 commit comments