@@ -364,59 +364,6 @@ impl Default for MemberLookupPolicy {
364364 }
365365}
366366
367- fn member_lookup_cycle_initial<'db>(
368- _db: &'db dyn Db,
369- id: salsa::Id,
370- _self: Type<'db>,
371- _name: Name,
372- _policy: MemberLookupPolicy,
373- ) -> PlaceAndQualifiers<'db> {
374- Place::bound(Type::divergent(id)).into()
375- }
376-
377- fn member_lookup_cycle_recover<'db>(
378- db: &'db dyn Db,
379- cycle: &salsa::Cycle,
380- previous_member: &PlaceAndQualifiers<'db>,
381- member: PlaceAndQualifiers<'db>,
382- _self_type: Type<'db>,
383- _name: Name,
384- _policy: MemberLookupPolicy,
385- ) -> PlaceAndQualifiers<'db> {
386- member.cycle_normalized(db, *previous_member, cycle)
387- }
388-
389- fn class_lookup_cycle_initial<'db>(
390- _db: &'db dyn Db,
391- id: salsa::Id,
392- _self: Type<'db>,
393- _name: Name,
394- _policy: MemberLookupPolicy,
395- ) -> PlaceAndQualifiers<'db> {
396- Place::bound(Type::divergent(id)).into()
397- }
398-
399- fn class_lookup_cycle_recover<'db>(
400- db: &'db dyn Db,
401- cycle: &salsa::Cycle,
402- previous_member: &PlaceAndQualifiers<'db>,
403- member: PlaceAndQualifiers<'db>,
404- _self_type: Type<'db>,
405- _name: Name,
406- _policy: MemberLookupPolicy,
407- ) -> PlaceAndQualifiers<'db> {
408- member.cycle_normalized(db, *previous_member, cycle)
409- }
410-
411- fn variance_cycle_initial<'db, T>(
412- _db: &'db dyn Db,
413- _id: salsa::Id,
414- _self: T,
415- _typevar: BoundTypeVarInstance<'db>,
416- ) -> TypeVarVariance {
417- TypeVarVariance::Bivariant
418- }
419-
420367/// Meta data for `Type::Todo`, which represents a known limitation in ty.
421368#[cfg(debug_assertions)]
422369#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, get_size2::GetSize)]
@@ -2470,7 +2417,13 @@ impl<'db> Type<'db> {
24702417 self.class_member_with_policy(db, name, MemberLookupPolicy::default())
24712418 }
24722419
2473- #[salsa::tracked(cycle_fn=class_lookup_cycle_recover, cycle_initial=class_lookup_cycle_initial, heap_size=ruff_memory_usage::heap_size)]
2420+ #[salsa::tracked(
2421+ cycle_initial=|_, id, _, _, _| Place::bound(Type::divergent(id)).into(),
2422+ cycle_fn=|db, cycle, previous: &PlaceAndQualifiers<'db>, member: PlaceAndQualifiers<'db>, _, _, _| {
2423+ member.cycle_normalized(db, *previous, cycle)
2424+ },
2425+ heap_size=ruff_memory_usage::heap_size
2426+ )]
24742427 fn class_member_with_policy(
24752428 self,
24762429 db: &'db dyn Db,
@@ -3020,7 +2973,13 @@ impl<'db> Type<'db> {
30202973
30212974 /// Similar to [`Type::member`], but allows the caller to specify what policy should be used
30222975 /// when looking up attributes. See [`MemberLookupPolicy`] for more information.
3023- #[salsa::tracked(cycle_fn=member_lookup_cycle_recover, cycle_initial=member_lookup_cycle_initial, heap_size=ruff_memory_usage::heap_size)]
2976+ #[salsa::tracked(
2977+ cycle_initial=|_, id, _, _, _| Place::bound(Type::divergent(id)).into(),
2978+ cycle_fn=|db, cycle, previous: &PlaceAndQualifiers<'db>, member: PlaceAndQualifiers<'db>, _, _, _| {
2979+ member.cycle_normalized(db, *previous, cycle)
2980+ },
2981+ heap_size=ruff_memory_usage::heap_size
2982+ )]
30242983 pub(crate) fn member_lookup_with_policy(
30252984 self,
30262985 db: &'db dyn Db,
@@ -5919,7 +5878,13 @@ impl<'db> Type<'db> {
59195878 /// Note that this does not specialize generic classes, functions, or type aliases! That is a
59205879 /// different operation that is performed explicitly (via a subscript operation), or implicitly
59215880 /// via a call to the generic object.
5922- #[salsa::tracked(heap_size=ruff_memory_usage::heap_size, cycle_fn=apply_specialization_cycle_recover, cycle_initial=apply_specialization_cycle_initial)]
5881+ #[salsa::tracked(
5882+ cycle_initial=|_, id, _, _| Type::divergent(id),
5883+ cycle_fn=|db, cycle, previous: &Type<'db>, value: Type<'db>, _, _| {
5884+ value.cycle_normalized(db, *previous, cycle)
5885+ },
5886+ heap_size=ruff_memory_usage::heap_size
5887+ )]
59235888 pub(crate) fn apply_specialization(
59245889 self,
59255890 db: &'db dyn Db,
@@ -6517,7 +6482,13 @@ impl<'db> Type<'db> {
65176482 }
65186483
65196484 #[allow(clippy::used_underscore_binding)]
6520- #[salsa::tracked(heap_size=ruff_memory_usage::heap_size, cycle_fn=expand_eagerly_cycle_recover, cycle_initial=expand_eagerly_cycle_initial)]
6485+ #[salsa::tracked(
6486+ cycle_initial=|_, id, _, ()| Type::divergent(id),
6487+ cycle_fn=|db, cycle, previous: &Type<'db>, value: Type<'db>, _, ()| {
6488+ value.cycle_normalized(db, *previous, cycle)
6489+ },
6490+ heap_size=ruff_memory_usage::heap_size
6491+ )]
65216492 fn expand_eagerly_(self, db: &'db dyn Db, _unit: ()) -> Type<'db> {
65226493 self.apply_type_mapping(db, &TypeMapping::EagerExpansion, TypeContext::default())
65236494 }
@@ -6850,46 +6821,6 @@ impl<'db> VarianceInferable<'db> for Type<'db> {
68506821 }
68516822}
68526823
6853- fn apply_specialization_cycle_recover<'db>(
6854- db: &'db dyn Db,
6855- cycle: &salsa::Cycle,
6856- previous_value: &Type<'db>,
6857- value: Type<'db>,
6858- _self: Type<'db>,
6859- _specialization: Specialization<'db>,
6860- ) -> Type<'db> {
6861- value.cycle_normalized(db, *previous_value, cycle)
6862- }
6863-
6864- fn apply_specialization_cycle_initial<'db>(
6865- _db: &'db dyn Db,
6866- id: salsa::Id,
6867- _self: Type<'db>,
6868- _specialization: Specialization<'db>,
6869- ) -> Type<'db> {
6870- Type::divergent(id)
6871- }
6872-
6873- fn expand_eagerly_cycle_initial<'db>(
6874- _db: &'db dyn Db,
6875- id: salsa::Id,
6876- _self: Type<'db>,
6877- _unit: (),
6878- ) -> Type<'db> {
6879- Type::divergent(id)
6880- }
6881-
6882- fn expand_eagerly_cycle_recover<'db>(
6883- db: &'db dyn Db,
6884- cycle: &salsa::Cycle,
6885- previous_value: &Type<'db>,
6886- value: Type<'db>,
6887- _self: Type<'db>,
6888- _unit: (),
6889- ) -> Type<'db> {
6890- value.cycle_normalized(db, *previous_value, cycle)
6891- }
6892-
68936824#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, get_size2::GetSize)]
68946825pub enum PromoteLiteralsMode {
68956826 On,
@@ -8190,7 +8121,7 @@ impl<'db> TypeVarInstance<'db> {
81908121 Some(TypeVarBoundOrConstraints::Constraints(constraints))
81918122 }
81928123
8193- #[salsa::tracked(cycle_fn=lazy_default_cycle_recover, cycle_initial=lazy_default_cycle_initial , heap_size=ruff_memory_usage::heap_size)]
8124+ #[salsa::tracked(cycle_initial=|_, id, _| Some(Type::divergent(id)), cycle_fn=lazy_default_cycle_recover , heap_size=ruff_memory_usage::heap_size)]
81948125 fn lazy_default(self, db: &'db dyn Db) -> Option<Type<'db>> {
81958126 fn convert_type_to_paramspec_value<'db>(db: &'db dyn Db, ty: Type<'db>) -> Type<'db> {
81968127 let parameters = match ty {
@@ -8328,15 +8259,6 @@ fn lazy_default_cycle_recover<'db>(
83288259 }
83298260}
83308261
8331- #[allow(clippy::unnecessary_wraps)]
8332- fn lazy_default_cycle_initial<'db>(
8333- _db: &'db dyn Db,
8334- id: salsa::Id,
8335- _self: TypeVarInstance<'db>,
8336- ) -> Option<Type<'db>> {
8337- Some(Type::divergent(id))
8338- }
8339-
83408262/// Where a type variable is bound and usable.
83418263#[derive(
83428264 Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, salsa::Update, get_size2::GetSize,
@@ -11541,7 +11463,13 @@ impl<'db> PEP695TypeAliasType<'db> {
1154111463
1154211464 /// The RHS type of a PEP-695 style type alias with *no* specialization applied.
1154311465 /// Returns `Divergent` if the type alias is defined cyclically.
11544- #[salsa::tracked(cycle_fn=value_type_cycle_recover, cycle_initial=value_type_cycle_initial, heap_size=ruff_memory_usage::heap_size)]
11466+ #[salsa::tracked(
11467+ cycle_initial=|_, id, _| Type::divergent(id),
11468+ cycle_fn=|db, cycle, previous: &Type<'db>, value: Type<'db>, _| {
11469+ value.cycle_normalized(db, *previous, cycle)
11470+ },
11471+ heap_size=ruff_memory_usage::heap_size
11472+ )]
1154511473 fn raw_value_type(self, db: &'db dyn Db) -> Type<'db> {
1154611474 let scope = self.rhs_scope(db);
1154711475 let module = parsed_module(db, scope.file(db)).load(db);
@@ -11591,7 +11519,7 @@ impl<'db> PEP695TypeAliasType<'db> {
1159111519 self.specialization(db).is_some()
1159211520 }
1159311521
11594- #[salsa::tracked(cycle_initial=generic_context_cycle_initial , heap_size=ruff_memory_usage::heap_size)]
11522+ #[salsa::tracked(cycle_initial=|_, _, _| None , heap_size=ruff_memory_usage::heap_size)]
1159511523 pub(crate) fn generic_context(self, db: &'db dyn Db) -> Option<GenericContext<'db>> {
1159611524 let scope = self.rhs_scope(db);
1159711525 let file = scope.file(db);
@@ -11614,32 +11542,6 @@ impl<'db> PEP695TypeAliasType<'db> {
1161411542 }
1161511543}
1161611544
11617- fn generic_context_cycle_initial<'db>(
11618- _db: &'db dyn Db,
11619- _id: salsa::Id,
11620- _self: PEP695TypeAliasType<'db>,
11621- ) -> Option<GenericContext<'db>> {
11622- None
11623- }
11624-
11625- fn value_type_cycle_initial<'db>(
11626- _db: &'db dyn Db,
11627- id: salsa::Id,
11628- _self: PEP695TypeAliasType<'db>,
11629- ) -> Type<'db> {
11630- Type::divergent(id)
11631- }
11632-
11633- fn value_type_cycle_recover<'db>(
11634- db: &'db dyn Db,
11635- cycle: &salsa::Cycle,
11636- previous_value: &Type<'db>,
11637- value: Type<'db>,
11638- _self: PEP695TypeAliasType<'db>,
11639- ) -> Type<'db> {
11640- value.cycle_normalized(db, *previous_value, cycle)
11641- }
11642-
1164311545/// A PEP 695 `types.TypeAliasType` created by manually calling the constructor.
1164411546///
1164511547/// # Ordering
0 commit comments