// }
// ```
pub(crate) fn fill_match_arms(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
- let match_expr = ctx.find_node_at_offset::<ast::MatchExpr>()?;
+ let match_expr = ctx.find_node_at_offset_with_descend::<ast::MatchExpr>()?;
let match_arm_list = match_expr.match_arm_list()?;
let expr = match_expr.expr()?;
return None;
}
- let target = match_expr.syntax().text_range();
+ let target = ctx.sema.original_range(match_expr.syntax()).range;
acc.add(
AssistId("fill_match_arms", AssistKind::QuickFix),
"Fill match arms",
let n_old_arms = new_arm_list.arms().count();
let new_arm_list = new_arm_list.append_arms(missing_arms);
let first_new_arm = new_arm_list.arms().nth(n_old_arms);
- let old_range = match_arm_list.syntax().text_range();
+ let old_range = ctx.sema.original_range(match_arm_list.syntax()).range;
match (first_new_arm, ctx.config.snippet_cap) {
(Some(first_new_arm), Some(cap)) => {
let extend_lifetime;
"#,
);
}
+
+ #[test]
+ fn works_inside_macro_call() {
+ check_assist(
+ fill_match_arms,
+ r#"
+macro_rules! m { ($expr:expr) => {$expr}}
+enum Test {
+ A,
+ B,
+ C,
+}
+
+fn foo(t: Test) {
+ m!(match t$0 {});
+}"#,
+ r#"macro_rules! m { ($expr:expr) => {$expr}}
+enum Test {
+ A,
+ B,
+ C,
+}
+
+fn foo(t: Test) {
+ m!(match t {
+ $0Test::A => {}
+ Test::B => {}
+ Test::C => {}
+});
+}"#,
+ );
+ }
}