mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-25 11:17:13 +00:00
Merge pull request #20700 from A4-Tacks/extract-var-let-expr
Fix extract_variable on LetExpr
This commit is contained in:
commit
84bb4051bf
@ -285,7 +285,7 @@ fn peel_parens(mut expr: ast::Expr) -> ast::Expr {
|
||||
/// In general that's true for any expression, but in some cases that would produce invalid code.
|
||||
fn valid_target_expr(node: SyntaxNode) -> Option<ast::Expr> {
|
||||
match node.kind() {
|
||||
SyntaxKind::PATH_EXPR | SyntaxKind::LOOP_EXPR => None,
|
||||
SyntaxKind::PATH_EXPR | SyntaxKind::LOOP_EXPR | SyntaxKind::LET_EXPR => None,
|
||||
SyntaxKind::BREAK_EXPR => ast::BreakExpr::cast(node).and_then(|e| e.expr()),
|
||||
SyntaxKind::RETURN_EXPR => ast::ReturnExpr::cast(node).and_then(|e| e.expr()),
|
||||
SyntaxKind::BLOCK_EXPR => {
|
||||
@ -1403,6 +1403,25 @@ fn main() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn extract_var_let_expr() {
|
||||
check_assist_by_label(
|
||||
extract_variable,
|
||||
r#"
|
||||
fn main() {
|
||||
if $0let$0 Some(x) = Some(2+2) {}
|
||||
}
|
||||
"#,
|
||||
r#"
|
||||
fn main() {
|
||||
let $0var_name = Some(2+2);
|
||||
if let Some(x) = var_name {}
|
||||
}
|
||||
"#,
|
||||
"Extract into variable",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn extract_var_for_cast() {
|
||||
check_assist_by_label(
|
||||
@ -1738,6 +1757,14 @@ fn main() {
|
||||
check_assist_not_applicable(extract_variable, "fn main() { loop { $0break$0; }; }");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn extract_var_for_let_expr_not_applicable() {
|
||||
check_assist_not_applicable(
|
||||
extract_variable,
|
||||
"fn main() { if $0let Some(x) = Some(2+2) {} }",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn extract_var_unit_expr_not_applicable() {
|
||||
check_assist_not_applicable(
|
||||
|
Loading…
x
Reference in New Issue
Block a user