Skip to content

Commit 84bb405

Browse files
authored
Merge pull request #20700 from A4-Tacks/extract-var-let-expr
Fix extract_variable on LetExpr
2 parents a943034 + 3610cb1 commit 84bb405

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

crates/ide-assists/src/handlers/extract_variable.rs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ fn peel_parens(mut expr: ast::Expr) -> ast::Expr {
285285
/// In general that's true for any expression, but in some cases that would produce invalid code.
286286
fn valid_target_expr(node: SyntaxNode) -> Option<ast::Expr> {
287287
match node.kind() {
288-
SyntaxKind::PATH_EXPR | SyntaxKind::LOOP_EXPR => None,
288+
SyntaxKind::PATH_EXPR | SyntaxKind::LOOP_EXPR | SyntaxKind::LET_EXPR => None,
289289
SyntaxKind::BREAK_EXPR => ast::BreakExpr::cast(node).and_then(|e| e.expr()),
290290
SyntaxKind::RETURN_EXPR => ast::ReturnExpr::cast(node).and_then(|e| e.expr()),
291291
SyntaxKind::BLOCK_EXPR => {
@@ -1403,6 +1403,25 @@ fn main() {
14031403
);
14041404
}
14051405

1406+
#[test]
1407+
fn extract_var_let_expr() {
1408+
check_assist_by_label(
1409+
extract_variable,
1410+
r#"
1411+
fn main() {
1412+
if $0let$0 Some(x) = Some(2+2) {}
1413+
}
1414+
"#,
1415+
r#"
1416+
fn main() {
1417+
let $0var_name = Some(2+2);
1418+
if let Some(x) = var_name {}
1419+
}
1420+
"#,
1421+
"Extract into variable",
1422+
);
1423+
}
1424+
14061425
#[test]
14071426
fn extract_var_for_cast() {
14081427
check_assist_by_label(
@@ -1738,6 +1757,14 @@ fn main() {
17381757
check_assist_not_applicable(extract_variable, "fn main() { loop { $0break$0; }; }");
17391758
}
17401759

1760+
#[test]
1761+
fn extract_var_for_let_expr_not_applicable() {
1762+
check_assist_not_applicable(
1763+
extract_variable,
1764+
"fn main() { if $0let Some(x) = Some(2+2) {} }",
1765+
);
1766+
}
1767+
17411768
#[test]
17421769
fn extract_var_unit_expr_not_applicable() {
17431770
check_assist_not_applicable(

0 commit comments

Comments
 (0)