Unnamed repository; edit this file 'description' to name the repository.
Fix not applicable on param in let-stmt for add_explicit_type
Example --- ```rust fn f() { let f: fn(i32) = |y$0| {}; } ``` **Before this PR**: Assist not applicable **After this PR**: ```rust fn f() { let f: fn(i32) = |y: i32| {}; } ```
A4-Tacks 6 months ago
parent f8fdf54 · commit ea9ba34
-rw-r--r--crates/ide-assists/src/handlers/add_explicit_type.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/crates/ide-assists/src/handlers/add_explicit_type.rs b/crates/ide-assists/src/handlers/add_explicit_type.rs
index 35a65cc309..0dd01b67e8 100644
--- a/crates/ide-assists/src/handlers/add_explicit_type.rs
+++ b/crates/ide-assists/src/handlers/add_explicit_type.rs
@@ -1,3 +1,4 @@
+use either::Either;
use hir::HirDisplay;
use ide_db::syntax_helpers::node_ext::walk_ty;
use syntax::ast::{self, AstNode, LetStmt, Param};
@@ -20,7 +21,8 @@ use crate::{AssistContext, AssistId, Assists};
// }
// ```
pub(crate) fn add_explicit_type(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
- let (ascribed_ty, expr, pat) = if let Some(let_stmt) = ctx.find_node_at_offset::<LetStmt>() {
+ let syntax_node = ctx.find_node_at_offset::<Either<LetStmt, Param>>()?;
+ let (ascribed_ty, expr, pat) = if let Either::Left(let_stmt) = syntax_node {
let cursor_in_range = {
let eq_range = let_stmt.eq_token()?.text_range();
ctx.offset() < eq_range.start()
@@ -31,7 +33,7 @@ pub(crate) fn add_explicit_type(acc: &mut Assists, ctx: &AssistContext<'_>) -> O
}
(let_stmt.ty(), let_stmt.initializer(), let_stmt.pat()?)
- } else if let Some(param) = ctx.find_node_at_offset::<Param>() {
+ } else if let Either::Right(param) = syntax_node {
if param.syntax().ancestors().nth(2).and_then(ast::ClosureExpr::cast).is_none() {
cov_mark::hit!(add_explicit_type_not_applicable_in_fn_param);
return None;
@@ -300,6 +302,20 @@ fn f() {
}
"#,
);
+
+ check_assist(
+ add_explicit_type,
+ r#"
+fn f() {
+ let f: fn(i32) = |y$0| {};
+}
+"#,
+ r#"
+fn f() {
+ let f: fn(i32) = |y: i32| {};
+}
+"#,
+ );
}
#[test]