@@ -285,7 +285,7 @@ fn peel_parens(mut expr: ast::Expr) -> ast::Expr {
285
285
/// In general that's true for any expression, but in some cases that would produce invalid code.
286
286
fn valid_target_expr ( node : SyntaxNode ) -> Option < ast:: Expr > {
287
287
match node. kind ( ) {
288
- SyntaxKind :: PATH_EXPR | SyntaxKind :: LOOP_EXPR => None ,
288
+ SyntaxKind :: PATH_EXPR | SyntaxKind :: LOOP_EXPR | SyntaxKind :: LET_EXPR => None ,
289
289
SyntaxKind :: BREAK_EXPR => ast:: BreakExpr :: cast ( node) . and_then ( |e| e. expr ( ) ) ,
290
290
SyntaxKind :: RETURN_EXPR => ast:: ReturnExpr :: cast ( node) . and_then ( |e| e. expr ( ) ) ,
291
291
SyntaxKind :: BLOCK_EXPR => {
@@ -1403,6 +1403,25 @@ fn main() {
1403
1403
) ;
1404
1404
}
1405
1405
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
+
1406
1425
#[ test]
1407
1426
fn extract_var_for_cast ( ) {
1408
1427
check_assist_by_label (
@@ -1738,6 +1757,14 @@ fn main() {
1738
1757
check_assist_not_applicable ( extract_variable, "fn main() { loop { $0break$0; }; }" ) ;
1739
1758
}
1740
1759
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
+
1741
1768
#[ test]
1742
1769
fn extract_var_unit_expr_not_applicable ( ) {
1743
1770
check_assist_not_applicable (
0 commit comments