extract_function
: use appropriate return type for async fns
This commit is contained in:
parent
9d787e1bfe
commit
03c5dd1252
@ -692,7 +692,14 @@ fn analyze_container(&self, sema: &Semantics<RootDatabase>) -> Option<ContainerI
|
|||||||
(constness, expr.clone(), infer_expr_opt(expr))
|
(constness, expr.clone(), infer_expr_opt(expr))
|
||||||
},
|
},
|
||||||
ast::Fn(fn_) => {
|
ast::Fn(fn_) => {
|
||||||
(fn_.const_token().is_some(), fn_.body().map(ast::Expr::BlockExpr), Some(sema.to_def(&fn_)?.ret_type(sema.db)))
|
let func = sema.to_def(&fn_)?;
|
||||||
|
let mut ret_ty = func.ret_type(sema.db);
|
||||||
|
if func.is_async(sema.db) {
|
||||||
|
if let Some(async_ret) = func.async_ret_type(sema.db) {
|
||||||
|
ret_ty = async_ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(fn_.const_token().is_some(), fn_.body().map(ast::Expr::BlockExpr), Some(ret_ty))
|
||||||
},
|
},
|
||||||
ast::Static(statik) => {
|
ast::Static(statik) => {
|
||||||
(true, statik.body(), Some(sema.to_def(&statik)?.ty(sema.db)))
|
(true, statik.body(), Some(sema.to_def(&statik)?.ty(sema.db)))
|
||||||
@ -4026,6 +4033,7 @@ fn extract_with_await() {
|
|||||||
check_assist(
|
check_assist(
|
||||||
extract_function,
|
extract_function,
|
||||||
r#"
|
r#"
|
||||||
|
//- minicore: future
|
||||||
fn main() {
|
fn main() {
|
||||||
$0some_function().await;$0
|
$0some_function().await;$0
|
||||||
}
|
}
|
||||||
@ -4055,6 +4063,7 @@ fn extract_with_await_and_result_not_producing_match_expr() {
|
|||||||
check_assist(
|
check_assist(
|
||||||
extract_function,
|
extract_function,
|
||||||
r#"
|
r#"
|
||||||
|
//- minicore: future, result
|
||||||
async fn foo() -> Result<(), ()> {
|
async fn foo() -> Result<(), ()> {
|
||||||
$0async {}.await;
|
$0async {}.await;
|
||||||
Err(())?$0
|
Err(())?$0
|
||||||
@ -4065,7 +4074,7 @@ async fn foo() -> Result<(), ()> {
|
|||||||
fun_name().await?
|
fun_name().await?
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn $0fun_name() -> _ {
|
async fn $0fun_name() -> Result<(), ()> {
|
||||||
async {}.await;
|
async {}.await;
|
||||||
Err(())?
|
Err(())?
|
||||||
}
|
}
|
||||||
@ -4078,6 +4087,7 @@ fn extract_with_await_and_result_producing_match_expr() {
|
|||||||
check_assist(
|
check_assist(
|
||||||
extract_function,
|
extract_function,
|
||||||
r#"
|
r#"
|
||||||
|
//- minicore: future
|
||||||
async fn foo() -> i32 {
|
async fn foo() -> i32 {
|
||||||
loop {
|
loop {
|
||||||
let n = 1;$0
|
let n = 1;$0
|
||||||
@ -4119,6 +4129,7 @@ fn extract_with_await_in_args() {
|
|||||||
check_assist(
|
check_assist(
|
||||||
extract_function,
|
extract_function,
|
||||||
r#"
|
r#"
|
||||||
|
//- minicore: future
|
||||||
fn main() {
|
fn main() {
|
||||||
$0function_call("a", some_function().await);$0
|
$0function_call("a", some_function().await);$0
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user