mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 14:21:44 +00:00
Trigger only when cursor is on else
This commit is contained in:
parent
59cdb31874
commit
a70beea9e9
2 changed files with 33 additions and 18 deletions
|
@ -1,4 +1,5 @@
|
||||||
use syntax::ast::{edit::AstNodeEdit, AstNode, HasName, LetStmt, Pat};
|
use syntax::ast::{edit::AstNodeEdit, AstNode, HasName, LetStmt, Pat};
|
||||||
|
use syntax::T;
|
||||||
|
|
||||||
use crate::{AssistContext, AssistId, AssistKind, Assists};
|
use crate::{AssistContext, AssistId, AssistKind, Assists};
|
||||||
|
|
||||||
|
@ -95,7 +96,7 @@ fn binders_to_str(binders: &[(String, bool)], addmut: bool) -> String {
|
||||||
//
|
//
|
||||||
// ```
|
// ```
|
||||||
// fn main() {
|
// fn main() {
|
||||||
// let Ok(mut x) = f() else {$0 return };
|
// let Ok(mut x) = f() else$0 { return };
|
||||||
// }
|
// }
|
||||||
// ```
|
// ```
|
||||||
// ->
|
// ->
|
||||||
|
@ -108,7 +109,9 @@ fn binders_to_str(binders: &[(String, bool)], addmut: bool) -> String {
|
||||||
// }
|
// }
|
||||||
// ```
|
// ```
|
||||||
pub(crate) fn convert_let_else_to_match(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
|
pub(crate) fn convert_let_else_to_match(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
|
||||||
let let_stmt: LetStmt = ctx.find_node_at_offset()?;
|
// should focus on else token to trigger
|
||||||
|
let else_token = ctx.find_token_syntax_at_offset(T![else])?;
|
||||||
|
let let_stmt = LetStmt::cast(else_token.parent()?.parent()?)?;
|
||||||
let let_else_block = let_stmt.let_else()?.block_expr()?;
|
let let_else_block = let_stmt.let_else()?.block_expr()?;
|
||||||
let let_init = let_stmt.initializer()?;
|
let let_init = let_stmt.initializer()?;
|
||||||
if let_stmt.ty().is_some() {
|
if let_stmt.ty().is_some() {
|
||||||
|
@ -177,18 +180,30 @@ mod tests {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let 1: u32 = v.iter().sum() else {$0 return };
|
let 1: u32 = v.iter().sum() else$0 { return };
|
||||||
}"#,
|
}"#,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_let_else_to_match_on_else() {
|
||||||
|
check_assist_not_applicable(
|
||||||
|
convert_let_else_to_match,
|
||||||
|
r#"
|
||||||
|
fn main() {
|
||||||
|
let Ok(x) = f() else {$0 return };
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn convert_let_else_to_match_no_macropat() {
|
fn convert_let_else_to_match_no_macropat() {
|
||||||
check_assist_not_applicable(
|
check_assist_not_applicable(
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let m!() = g() else {$0 return };
|
let m!() = g() else$0 { return };
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
);
|
);
|
||||||
|
@ -200,7 +215,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r"
|
r"
|
||||||
fn main() {
|
fn main() {
|
||||||
let Ok(x) = f() else {$0 continue };
|
let Ok(x) = f() else$0 { continue };
|
||||||
}",
|
}",
|
||||||
"let Ok(x) = f() else { continue };",
|
"let Ok(x) = f() else { continue };",
|
||||||
);
|
);
|
||||||
|
@ -212,7 +227,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r"
|
r"
|
||||||
fn main() {
|
fn main() {
|
||||||
let Ok(x) = f() else {$0 continue };
|
let Ok(x) = f() else$0 { continue };
|
||||||
}",
|
}",
|
||||||
r"
|
r"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -230,7 +245,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r"
|
r"
|
||||||
fn main() {
|
fn main() {
|
||||||
let Ok(mut x) = f() else {$0 continue };
|
let Ok(mut x) = f() el$0se { continue };
|
||||||
}",
|
}",
|
||||||
r"
|
r"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -248,7 +263,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let ControlFlow::Break((x, "tag", y, ..)) = f() else {$0 g(); return };
|
let ControlFlow::Break((x, "tag", y, ..)) = f() else$0 { g(); return };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -266,7 +281,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let [one, 1001, other] = f() else {$0 break };
|
let [one, 1001, other] = f() else$0 { break };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -284,7 +299,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let [Struct { inner: Some(it) }, 1001, other] = f() else {$0 break };
|
let [Struct { inner: Some(it) }, 1001, other] = f() else$0 { break };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -302,7 +317,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let [Struct { inner }, 1001, other] = f() else {$0 break };
|
let [Struct { inner }, 1001, other] = f() else$0 { break };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -320,7 +335,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let (8 | 9) = f() else {$0 panic!() };
|
let (8 | 9) = f() else$0 { panic!() };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -338,7 +353,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let 1.. = f() else {$0 return };
|
let 1.. = f() e$0lse { return };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -356,7 +371,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let Ok(&mut x) = f(&mut 0) else {$0 return };
|
let Ok(&mut x) = f(&mut 0) else$0 { return };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -374,7 +389,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let Ok(ref mut x) = f() else {$0 return };
|
let Ok(ref mut x) = f() else$0 { return };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -392,7 +407,7 @@ fn main() {
|
||||||
convert_let_else_to_match,
|
convert_let_else_to_match,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let out @ Ok(ins) = f() else {$0 return };
|
let out @ Ok(ins) = f() else$0 { return };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -411,7 +426,7 @@ fn main() {
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
let v = vec![1, 2, 3];
|
let v = vec![1, 2, 3];
|
||||||
let &[mut x, y, ..] = &v.iter().collect::<Vec<_>>()[..]$0 else { return };
|
let &[mut x, y, ..] = &v.iter().collect::<Vec<_>>()[..] else$0 { return };
|
||||||
}"#,
|
}"#,
|
||||||
r#"
|
r#"
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
|
@ -370,7 +370,7 @@ fn doctest_convert_let_else_to_match() {
|
||||||
"convert_let_else_to_match",
|
"convert_let_else_to_match",
|
||||||
r#####"
|
r#####"
|
||||||
fn main() {
|
fn main() {
|
||||||
let Ok(mut x) = f() else {$0 return };
|
let Ok(mut x) = f() else$0 { return };
|
||||||
}
|
}
|
||||||
"#####,
|
"#####,
|
||||||
r#####"
|
r#####"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue