Unnamed repository; edit this file 'description' to name the repository.
No complete unit RetType in resugar async assoc item
Example --- ```rust use core::future::Future; trait DesugaredAsyncTrait { fn foo(&self) -> impl Future<Output = ()> + Send; } impl DesugaredAsyncTrait for () { $0 } ``` **Before this PR** ```rust use core::future::Future; trait DesugaredAsyncTrait { fn foo(&self) -> impl Future<Output = ()> + Send; } impl DesugaredAsyncTrait for () { async fn foo(&self) -> () { $0 } } ``` **After this PR** ```rust use core::future::Future; trait DesugaredAsyncTrait { fn foo(&self) -> impl Future<Output = ()> + Send; } impl DesugaredAsyncTrait for () { async fn foo(&self) { $0 } } ```
A4-Tacks 5 months ago
parent 2cbf358 · commit 5955a29
-rw-r--r--crates/ide-completion/src/completions/item_list/trait_impl.rs37
1 files changed, 36 insertions, 1 deletions
diff --git a/crates/ide-completion/src/completions/item_list/trait_impl.rs b/crates/ide-completion/src/completions/item_list/trait_impl.rs
index cdd77e79b5..4072f05a41 100644
--- a/crates/ide-completion/src/completions/item_list/trait_impl.rs
+++ b/crates/ide-completion/src/completions/item_list/trait_impl.rs
@@ -344,7 +344,13 @@ fn get_transformed_fn(
}
_ => None,
})?;
- ted::replace(ty.syntax(), output.syntax());
+ if let ast::Type::TupleType(ty) = &output
+ && ty.fields().next().is_none()
+ {
+ ted::remove(fn_.ret_type()?.syntax());
+ } else {
+ ted::replace(ty.syntax(), output.syntax());
+ }
}
_ => (),
}
@@ -1619,6 +1625,35 @@ impl DesugaredAsyncTrait for () {
}
"#,
);
+
+ check_edit(
+ "async fn foo",
+ r#"
+//- minicore: future, send, sized
+use core::future::Future;
+
+trait DesugaredAsyncTrait {
+ fn foo(&self) -> impl Future<Output = ()> + Send;
+}
+
+impl DesugaredAsyncTrait for () {
+ $0
+}
+"#,
+ r#"
+use core::future::Future;
+
+trait DesugaredAsyncTrait {
+ fn foo(&self) -> impl Future<Output = ()> + Send;
+}
+
+impl DesugaredAsyncTrait for () {
+ async fn foo(&self) {
+ $0
+}
+}
+"#,
+ );
}
#[test]