From 83a00c0ac8b043d44a2cb1ecd7e7946aca8415b8 Mon Sep 17 00:00:00 2001 From: Shunsuke Shibayama <45118249+mtshiba@users.noreply.github.com> Date: Wed, 29 Oct 2025 23:56:12 +0900 Subject: [PATCH] [ty] follow the breaking API changes made in salsa-rs/salsa#1015 (#21117) --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- crates/ty_python_semantic/src/dunder_all.rs | 6 +++++- crates/ty_python_semantic/src/place.rs | 6 +++++- .../src/semantic_index/re_exports.rs | 2 +- crates/ty_python_semantic/src/types.rs | 15 ++++++++++++++- crates/ty_python_semantic/src/types/class.rs | 19 +++++++++++++++++-- crates/ty_python_semantic/src/types/enums.rs | 1 + .../ty_python_semantic/src/types/function.rs | 2 ++ .../ty_python_semantic/src/types/generics.rs | 1 + crates/ty_python_semantic/src/types/infer.rs | 17 +++++++++++++++-- .../ty_python_semantic/src/types/instance.rs | 7 ++++++- crates/ty_python_semantic/src/types/narrow.rs | 2 ++ .../src/types/protocol_class.rs | 1 + crates/ty_python_semantic/src/types/tuple.rs | 6 +++++- fuzz/Cargo.toml | 2 +- 16 files changed, 80 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 216e3f115a..070f471e4e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3563,7 +3563,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "salsa" version = "0.24.0" -source = "git+https://github.com/salsa-rs/salsa.git?rev=25b3ef146cfa2615f4ec82760bd0c22b454d0a12#25b3ef146cfa2615f4ec82760bd0c22b454d0a12" +source = "git+https://github.com/salsa-rs/salsa.git?rev=cdd0b85516a52c18b8a6d17a2279a96ed6c3e198#cdd0b85516a52c18b8a6d17a2279a96ed6c3e198" dependencies = [ "boxcar", "compact_str", @@ -3587,12 +3587,12 @@ dependencies = [ [[package]] name = "salsa-macro-rules" version = "0.24.0" -source = "git+https://github.com/salsa-rs/salsa.git?rev=25b3ef146cfa2615f4ec82760bd0c22b454d0a12#25b3ef146cfa2615f4ec82760bd0c22b454d0a12" +source = "git+https://github.com/salsa-rs/salsa.git?rev=cdd0b85516a52c18b8a6d17a2279a96ed6c3e198#cdd0b85516a52c18b8a6d17a2279a96ed6c3e198" [[package]] name = "salsa-macros" version = "0.24.0" -source = "git+https://github.com/salsa-rs/salsa.git?rev=25b3ef146cfa2615f4ec82760bd0c22b454d0a12#25b3ef146cfa2615f4ec82760bd0c22b454d0a12" +source = "git+https://github.com/salsa-rs/salsa.git?rev=cdd0b85516a52c18b8a6d17a2279a96ed6c3e198#cdd0b85516a52c18b8a6d17a2279a96ed6c3e198" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 301efbd180..1cce423668 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -146,7 +146,7 @@ regex-automata = { version = "0.4.9" } rustc-hash = { version = "2.0.0" } rustc-stable-hash = { version = "0.1.2" } # When updating salsa, make sure to also update the revision in `fuzz/Cargo.toml` -salsa = { git = "https://github.com/salsa-rs/salsa.git", rev = "25b3ef146cfa2615f4ec82760bd0c22b454d0a12", default-features = false, features = [ +salsa = { git = "https://github.com/salsa-rs/salsa.git", rev = "cdd0b85516a52c18b8a6d17a2279a96ed6c3e198", default-features = false, features = [ "compact_str", "macros", "salsa_unstable", diff --git a/crates/ty_python_semantic/src/dunder_all.rs b/crates/ty_python_semantic/src/dunder_all.rs index 7273bc975b..17f1706b7e 100644 --- a/crates/ty_python_semantic/src/dunder_all.rs +++ b/crates/ty_python_semantic/src/dunder_all.rs @@ -10,7 +10,11 @@ use crate::semantic_index::{SemanticIndex, semantic_index}; use crate::types::{Truthiness, Type, TypeContext, infer_expression_types}; use crate::{Db, ModuleName, resolve_module}; -fn dunder_all_names_cycle_initial(_db: &dyn Db, _file: File) -> Option> { +fn dunder_all_names_cycle_initial( + _db: &dyn Db, + _id: salsa::Id, + _file: File, +) -> Option> { None } diff --git a/crates/ty_python_semantic/src/place.rs b/crates/ty_python_semantic/src/place.rs index 99804ae5c8..3989942b04 100644 --- a/crates/ty_python_semantic/src/place.rs +++ b/crates/ty_python_semantic/src/place.rs @@ -697,6 +697,7 @@ impl<'db> From> for PlaceAndQualifiers<'db> { fn place_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _scope: ScopeId<'db>, _place_id: ScopedPlaceId, _requires_explicit_reexport: RequiresExplicitReExport, @@ -1528,7 +1529,10 @@ mod implicit_globals { .collect() } - fn module_type_symbols_initial(_db: &dyn Db) -> smallvec::SmallVec<[ast::name::Name; 8]> { + fn module_type_symbols_initial( + _db: &dyn Db, + _id: salsa::Id, + ) -> smallvec::SmallVec<[ast::name::Name; 8]> { smallvec::SmallVec::default() } diff --git a/crates/ty_python_semantic/src/semantic_index/re_exports.rs b/crates/ty_python_semantic/src/semantic_index/re_exports.rs index 52f26ef4a0..f1d741bd12 100644 --- a/crates/ty_python_semantic/src/semantic_index/re_exports.rs +++ b/crates/ty_python_semantic/src/semantic_index/re_exports.rs @@ -30,7 +30,7 @@ use rustc_hash::FxHashMap; use crate::{Db, module_name::ModuleName, resolve_module}; -fn exports_cycle_initial(_db: &dyn Db, _file: File) -> Box<[Name]> { +fn exports_cycle_initial(_db: &dyn Db, _id: salsa::Id, _file: File) -> Box<[Name]> { Box::default() } diff --git a/crates/ty_python_semantic/src/types.rs b/crates/ty_python_semantic/src/types.rs index 14cfb64ed4..78844ef0c3 100644 --- a/crates/ty_python_semantic/src/types.rs +++ b/crates/ty_python_semantic/src/types.rs @@ -371,6 +371,7 @@ impl Default for MemberLookupPolicy { fn member_lookup_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: Type<'db>, _name: Name, _policy: MemberLookupPolicy, @@ -380,6 +381,7 @@ fn member_lookup_cycle_initial<'db>( fn class_lookup_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: Type<'db>, _name: Name, _policy: MemberLookupPolicy, @@ -389,6 +391,7 @@ fn class_lookup_cycle_initial<'db>( fn variance_cycle_initial<'db, T>( _db: &'db dyn Db, + _id: salsa::Id, _self: T, _typevar: BoundTypeVarInstance<'db>, ) -> TypeVarVariance { @@ -7420,6 +7423,7 @@ impl<'db> VarianceInferable<'db> for Type<'db> { #[allow(clippy::trivially_copy_pass_by_ref)] fn is_redundant_with_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _subtype: Type<'db>, _supertype: Type<'db>, ) -> bool { @@ -7428,6 +7432,7 @@ fn is_redundant_with_cycle_initial<'db>( fn apply_specialization_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: Type<'db>, _specialization: Specialization<'db>, ) -> Type<'db> { @@ -8498,6 +8503,7 @@ impl<'db> TypeVarInstance<'db> { fn lazy_bound_or_constraints_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: TypeVarInstance<'db>, ) -> Option> { None @@ -8505,6 +8511,7 @@ fn lazy_bound_or_constraints_cycle_initial<'db>( fn lazy_default_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: TypeVarInstance<'db>, ) -> Option> { None @@ -10032,6 +10039,7 @@ fn walk_bound_method_type<'db, V: visitor::TypeVisitor<'db> + ?Sized>( fn into_callable_type_cycle_initial<'db>( db: &'db dyn Db, + _id: salsa::Id, _self: BoundMethodType<'db>, ) -> CallableType<'db> { CallableType::bottom(db) @@ -11007,12 +11015,17 @@ impl<'db> PEP695TypeAliasType<'db> { fn generic_context_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: PEP695TypeAliasType<'db>, ) -> Option> { None } -fn value_type_cycle_initial<'db>(_db: &'db dyn Db, _self: PEP695TypeAliasType<'db>) -> Type<'db> { +fn value_type_cycle_initial<'db>( + _db: &'db dyn Db, + _id: salsa::Id, + _self: PEP695TypeAliasType<'db>, +) -> Type<'db> { Type::Never } diff --git a/crates/ty_python_semantic/src/types/class.rs b/crates/ty_python_semantic/src/types/class.rs index a2a3da8dfd..d7f50ce716 100644 --- a/crates/ty_python_semantic/src/types/class.rs +++ b/crates/ty_python_semantic/src/types/class.rs @@ -71,6 +71,7 @@ use rustc_hash::FxHashSet; fn explicit_bases_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: ClassLiteral<'db>, ) -> Box<[Type<'db>]> { Box::default() @@ -78,6 +79,7 @@ fn explicit_bases_cycle_initial<'db>( fn inheritance_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: ClassLiteral<'db>, ) -> Option { None @@ -85,6 +87,7 @@ fn inheritance_cycle_initial<'db>( fn implicit_attribute_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _class_body_scope: ScopeId<'db>, _name: String, _target_method_decorator: MethodDecorator, @@ -94,6 +97,7 @@ fn implicit_attribute_initial<'db>( fn try_mro_cycle_initial<'db>( db: &'db dyn Db, + _id: salsa::Id, self_: ClassLiteral<'db>, specialization: Option>, ) -> Result, MroError<'db>> { @@ -104,13 +108,18 @@ fn try_mro_cycle_initial<'db>( } #[allow(clippy::unnecessary_wraps)] -fn is_typed_dict_cycle_initial<'db>(_db: &'db dyn Db, _self: ClassLiteral<'db>) -> bool { +fn is_typed_dict_cycle_initial<'db>( + _db: &'db dyn Db, + _id: salsa::Id, + _self: ClassLiteral<'db>, +) -> bool { false } #[allow(clippy::unnecessary_wraps)] fn try_metaclass_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self_: ClassLiteral<'db>, ) -> Result<(Type<'db>, Option>), MetaclassError<'db>> { Err(MetaclassError { @@ -169,6 +178,7 @@ impl<'db> CodeGeneratorKind<'db> { fn code_generator_of_class_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _class: ClassLiteral<'db>, _specialization: Option>, ) -> Option> { @@ -1181,7 +1191,11 @@ impl<'db> ClassType<'db> { } } -fn into_callable_cycle_initial<'db>(_db: &'db dyn Db, _self: ClassType<'db>) -> Type<'db> { +fn into_callable_cycle_initial<'db>( + _db: &'db dyn Db, + _id: salsa::Id, + _self: ClassType<'db>, +) -> Type<'db> { Type::Never } @@ -1334,6 +1348,7 @@ impl get_size2::GetSize for ClassLiteral<'_> {} fn generic_context_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: ClassLiteral<'db>, ) -> Option> { None diff --git a/crates/ty_python_semantic/src/types/enums.rs b/crates/ty_python_semantic/src/types/enums.rs index daffbaebbb..671b919929 100644 --- a/crates/ty_python_semantic/src/types/enums.rs +++ b/crates/ty_python_semantic/src/types/enums.rs @@ -39,6 +39,7 @@ impl EnumMetadata<'_> { #[allow(clippy::unnecessary_wraps)] fn enum_metadata_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _class: ClassLiteral<'db>, ) -> Option> { Some(EnumMetadata::empty()) diff --git a/crates/ty_python_semantic/src/types/function.rs b/crates/ty_python_semantic/src/types/function.rs index 459edb6c25..36b826435a 100644 --- a/crates/ty_python_semantic/src/types/function.rs +++ b/crates/ty_python_semantic/src/types/function.rs @@ -1195,6 +1195,7 @@ fn is_mode_with_nontrivial_return_type<'db>(db: &'db dyn Db, mode: Type<'db>) -> fn signature_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _function: FunctionType<'db>, ) -> CallableSignature<'db> { CallableSignature::single(Signature::bottom()) @@ -1202,6 +1203,7 @@ fn signature_cycle_initial<'db>( fn last_definition_signature_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _function: FunctionType<'db>, ) -> Signature<'db> { Signature::bottom() diff --git a/crates/ty_python_semantic/src/types/generics.rs b/crates/ty_python_semantic/src/types/generics.rs index 931ec28756..59216ca607 100644 --- a/crates/ty_python_semantic/src/types/generics.rs +++ b/crates/ty_python_semantic/src/types/generics.rs @@ -627,6 +627,7 @@ impl<'db> GenericContext<'db> { fn inferable_typevars_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _self: GenericContext<'db>, ) -> FxHashSet> { FxHashSet::default() diff --git a/crates/ty_python_semantic/src/types/infer.rs b/crates/ty_python_semantic/src/types/infer.rs index d244597e16..78e91f5883 100644 --- a/crates/ty_python_semantic/src/types/infer.rs +++ b/crates/ty_python_semantic/src/types/infer.rs @@ -81,7 +81,11 @@ pub(crate) fn infer_scope_types<'db>(db: &'db dyn Db, scope: ScopeId<'db>) -> Sc TypeInferenceBuilder::new(db, InferenceRegion::Scope(scope), index, &module).finish_scope() } -fn scope_cycle_initial<'db>(_db: &'db dyn Db, scope: ScopeId<'db>) -> ScopeInference<'db> { +fn scope_cycle_initial<'db>( + _db: &'db dyn Db, + _id: salsa::Id, + scope: ScopeId<'db>, +) -> ScopeInference<'db> { ScopeInference::cycle_initial(scope) } @@ -126,6 +130,7 @@ fn definition_cycle_recover<'db>( fn definition_cycle_initial<'db>( db: &'db dyn Db, + _id: salsa::Id, definition: Definition<'db>, ) -> DefinitionInference<'db> { DefinitionInference::cycle_initial(definition.scope(db)) @@ -158,6 +163,7 @@ pub(crate) fn infer_deferred_types<'db>( fn deferred_cycle_initial<'db>( db: &'db dyn Db, + _id: salsa::Id, definition: Definition<'db>, ) -> DefinitionInference<'db> { DefinitionInference::cycle_initial(definition.scope(db)) @@ -240,6 +246,7 @@ fn expression_cycle_recover<'db>( fn expression_cycle_initial<'db>( db: &'db dyn Db, + _id: salsa::Id, input: InferExpression<'db>, ) -> ExpressionInference<'db> { ExpressionInference::cycle_initial(input.expression(db).scope(db)) @@ -287,6 +294,7 @@ fn infer_expression_type_impl<'db>(db: &'db dyn Db, input: InferExpression<'db>) fn single_expression_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _input: InferExpression<'db>, ) -> Type<'db> { Type::Never @@ -399,6 +407,7 @@ pub(crate) fn static_expression_truthiness<'db>( fn static_expression_truthiness_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _expression: Expression<'db>, ) -> Truthiness { Truthiness::Ambiguous @@ -422,7 +431,11 @@ pub(super) fn infer_unpack_types<'db>(db: &'db dyn Db, unpack: Unpack<'db>) -> U unpacker.finish() } -fn unpack_cycle_initial<'db>(_db: &'db dyn Db, _unpack: Unpack<'db>) -> UnpackResult<'db> { +fn unpack_cycle_initial<'db>( + _db: &'db dyn Db, + _id: salsa::Id, + _unpack: Unpack<'db>, +) -> UnpackResult<'db> { UnpackResult::cycle_initial(Type::Never) } diff --git a/crates/ty_python_semantic/src/types/instance.rs b/crates/ty_python_semantic/src/types/instance.rs index 9c69023c63..f6c7b8406d 100644 --- a/crates/ty_python_semantic/src/types/instance.rs +++ b/crates/ty_python_semantic/src/types/instance.rs @@ -666,7 +666,12 @@ impl<'db> ProtocolInstanceType<'db> { .is_always_satisfied(db) } - fn initial<'db>(_db: &'db dyn Db, _value: ProtocolInstanceType<'db>, _: ()) -> bool { + fn initial<'db>( + _db: &'db dyn Db, + _id: salsa::Id, + _value: ProtocolInstanceType<'db>, + _: (), + ) -> bool { true } diff --git a/crates/ty_python_semantic/src/types/narrow.rs b/crates/ty_python_semantic/src/types/narrow.rs index b797eb4764..736272cb4a 100644 --- a/crates/ty_python_semantic/src/types/narrow.rs +++ b/crates/ty_python_semantic/src/types/narrow.rs @@ -120,6 +120,7 @@ fn all_negative_narrowing_constraints_for_pattern<'db>( fn constraints_for_expression_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _expression: Expression<'db>, ) -> Option> { None @@ -127,6 +128,7 @@ fn constraints_for_expression_cycle_initial<'db>( fn negative_constraints_for_expression_cycle_initial<'db>( _db: &'db dyn Db, + _id: salsa::Id, _expression: Expression<'db>, ) -> Option> { None diff --git a/crates/ty_python_semantic/src/types/protocol_class.rs b/crates/ty_python_semantic/src/types/protocol_class.rs index 46a1142d4c..822bb548f7 100644 --- a/crates/ty_python_semantic/src/types/protocol_class.rs +++ b/crates/ty_python_semantic/src/types/protocol_class.rs @@ -866,6 +866,7 @@ fn cached_protocol_interface<'db>( #[allow(clippy::trivially_copy_pass_by_ref)] fn proto_interface_cycle_initial<'db>( db: &'db dyn Db, + _id: salsa::Id, _class: ClassType<'db>, ) -> ProtocolInterface<'db> { ProtocolInterface::empty(db) diff --git a/crates/ty_python_semantic/src/types/tuple.rs b/crates/ty_python_semantic/src/types/tuple.rs index cfb2febce4..8f989ce04f 100644 --- a/crates/ty_python_semantic/src/types/tuple.rs +++ b/crates/ty_python_semantic/src/types/tuple.rs @@ -290,7 +290,11 @@ impl<'db> TupleType<'db> { } } -fn to_class_type_cycle_initial<'db>(db: &'db dyn Db, self_: TupleType<'db>) -> ClassType<'db> { +fn to_class_type_cycle_initial<'db>( + db: &'db dyn Db, + _id: salsa::Id, + self_: TupleType<'db>, +) -> ClassType<'db> { let tuple_class = KnownClass::Tuple .try_to_class_literal(db) .expect("Typeshed should always have a `tuple` class in `builtins.pyi`"); diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 82c9ae3be6..359e59d1e1 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -30,7 +30,7 @@ ty_python_semantic = { path = "../crates/ty_python_semantic" } ty_vendored = { path = "../crates/ty_vendored" } libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer", default-features = false } -salsa = { git = "https://github.com/salsa-rs/salsa.git", rev = "25b3ef146cfa2615f4ec82760bd0c22b454d0a12", default-features = false, features = [ +salsa = { git = "https://github.com/salsa-rs/salsa.git", rev = "cdd0b85516a52c18b8a6d17a2279a96ed6c3e198", default-features = false, features = [ "compact_str", "macros", "salsa_unstable",