Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--Cargo.lock16
-rw-r--r--Cargo.toml8
-rw-r--r--crates/hir-ty/src/chalk_db.rs8
-rw-r--r--crates/hir-ty/src/tests/simple.rs39
4 files changed, 59 insertions, 12 deletions
diff --git a/Cargo.lock b/Cargo.lock
index c57953ba65..30853cb799 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -191,9 +191,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "chalk-derive"
-version = "0.99.0"
+version = "0.100.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "572583d9b97f9d277e5c7607f8239a30e2e04d3ed3b47c87d1cb2152ae724073"
+checksum = "ab2d131019373f0d0d1f2af0abd4f719739f6583c1b33965112455f643a910af"
dependencies = [
"proc-macro2",
"quote",
@@ -203,9 +203,9 @@ dependencies = [
[[package]]
name = "chalk-ir"
-version = "0.99.0"
+version = "0.100.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e60e0ef9c81dce1336a9ed3c76f08775f5b623151d96d85ba45f7b10de76d1c7"
+checksum = "4f114996bda14c0213f014a4ef31a7867dcf5f539a3900477fc6b20138e7a17b"
dependencies = [
"bitflags 2.7.0",
"chalk-derive",
@@ -213,9 +213,9 @@ dependencies = [
[[package]]
name = "chalk-recursive"
-version = "0.99.0"
+version = "0.100.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a06350d614e22b03a69b8105e3541614450a7ea48bc58ecc6c6bd92731a3995"
+checksum = "551e956e031c09057c7b21f17d48d91de99c9b6b6e34bceaf5e7202d71021268"
dependencies = [
"chalk-derive",
"chalk-ir",
@@ -226,9 +226,9 @@ dependencies = [
[[package]]
name = "chalk-solve"
-version = "0.99.0"
+version = "0.100.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e428761e9b55bee516bfe2457caed8b6d1b86353f92ae825bbe438a36ce91e8"
+checksum = "cd7ca50181156ce649efe8e5dd00580f573651554e4dcd11afa4e2ac93f53324"
dependencies = [
"chalk-derive",
"chalk-ir",
diff --git a/Cargo.toml b/Cargo.toml
index 1132acb647..33a9a5695a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -105,10 +105,10 @@ arrayvec = "0.7.4"
bitflags = "2.4.1"
cargo_metadata = "0.18.1"
camino = "1.1.6"
-chalk-solve = { version = "0.99.0", default-features = false }
-chalk-ir = "0.99.0"
-chalk-recursive = { version = "0.99.0", default-features = false }
-chalk-derive = "0.99.0"
+chalk-solve = { version = "0.100.0", default-features = false }
+chalk-ir = "0.100.0"
+chalk-recursive = { version = "0.100.0", default-features = false }
+chalk-derive = "0.100.0"
crossbeam-channel = "0.5.8"
dissimilar = "1.0.7"
dot = "0.1.4"
diff --git a/crates/hir-ty/src/chalk_db.rs b/crates/hir-ty/src/chalk_db.rs
index c8ff6cba3d..67fb73696f 100644
--- a/crates/hir-ty/src/chalk_db.rs
+++ b/crates/hir-ty/src/chalk_db.rs
@@ -708,6 +708,9 @@ fn well_known_trait_from_lang_item(item: LangItem) -> Option<WellKnownTrait> {
LangItem::Fn => WellKnownTrait::Fn,
LangItem::FnMut => WellKnownTrait::FnMut,
LangItem::FnOnce => WellKnownTrait::FnOnce,
+ LangItem::AsyncFn => WellKnownTrait::AsyncFn,
+ LangItem::AsyncFnMut => WellKnownTrait::AsyncFnMut,
+ LangItem::AsyncFnOnce => WellKnownTrait::AsyncFnOnce,
LangItem::Coroutine => WellKnownTrait::Coroutine,
LangItem::Sized => WellKnownTrait::Sized,
LangItem::Unpin => WellKnownTrait::Unpin,
@@ -715,6 +718,7 @@ fn well_known_trait_from_lang_item(item: LangItem) -> Option<WellKnownTrait> {
LangItem::Tuple => WellKnownTrait::Tuple,
LangItem::PointeeTrait => WellKnownTrait::Pointee,
LangItem::FnPtrTrait => WellKnownTrait::FnPtr,
+ LangItem::Future => WellKnownTrait::Future,
_ => return None,
})
}
@@ -730,6 +734,9 @@ fn lang_item_from_well_known_trait(trait_: WellKnownTrait) -> LangItem {
WellKnownTrait::Fn => LangItem::Fn,
WellKnownTrait::FnMut => LangItem::FnMut,
WellKnownTrait::FnOnce => LangItem::FnOnce,
+ WellKnownTrait::AsyncFn => LangItem::AsyncFn,
+ WellKnownTrait::AsyncFnMut => LangItem::AsyncFnMut,
+ WellKnownTrait::AsyncFnOnce => LangItem::AsyncFnOnce,
WellKnownTrait::Coroutine => LangItem::Coroutine,
WellKnownTrait::Sized => LangItem::Sized,
WellKnownTrait::Tuple => LangItem::Tuple,
@@ -737,6 +744,7 @@ fn lang_item_from_well_known_trait(trait_: WellKnownTrait) -> LangItem {
WellKnownTrait::Unsize => LangItem::Unsize,
WellKnownTrait::Pointee => LangItem::PointeeTrait,
WellKnownTrait::FnPtr => LangItem::FnPtrTrait,
+ WellKnownTrait::Future => LangItem::Future,
}
}
diff --git a/crates/hir-ty/src/tests/simple.rs b/crates/hir-ty/src/tests/simple.rs
index 50a1ecd006..4c5cca2165 100644
--- a/crates/hir-ty/src/tests/simple.rs
+++ b/crates/hir-ty/src/tests/simple.rs
@@ -3861,3 +3861,42 @@ fn main() {
"#]],
);
}
+
+#[test]
+fn regression_19196() {
+ check_infer(
+ r#"
+//- minicore: async_fn
+fn async_closure<F: AsyncFnOnce(i32)>(f: F) {}
+fn closure<F: FnOnce(i32)>(f: F) {}
+
+fn main() {
+ async_closure(async |arg| {
+ arg;
+ });
+ closure(|arg| {
+ arg;
+ });
+}
+"#,
+ expect![[r#"
+ 38..39 'f': F
+ 44..46 '{}': ()
+ 74..75 'f': F
+ 80..82 '{}': ()
+ 94..191 '{ ... }); }': ()
+ 100..113 'async_closure': fn async_closure<impl AsyncFnOnce(i32) -> impl Future<Output = ()>>(impl AsyncFnOnce(i32) -> impl Future<Output = ()>)
+ 100..147 'async_... })': ()
+ 114..146 'async ... }': impl AsyncFnOnce(i32) -> impl Future<Output = ()>
+ 121..124 'arg': i32
+ 126..146 '{ ... }': ()
+ 136..139 'arg': i32
+ 153..160 'closure': fn closure<impl FnOnce(i32)>(impl FnOnce(i32))
+ 153..188 'closur... })': ()
+ 161..187 '|arg| ... }': impl FnOnce(i32)
+ 162..165 'arg': i32
+ 167..187 '{ ... }': ()
+ 177..180 'arg': i32
+ "#]],
+ );
+}