about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-10-19 12:16:30 +0000
committerGitHub <noreply@github.com>2021-10-19 12:16:30 +0000
commite77fc481adb98d95643e00f5fa5f02cbef698014 (patch)
tree4c8a04cc7b5d65e844f4f7c68c8fb78488fc4aad
parent0e4c3b2c2be83251ab0f1ffba74780e05e77c2ff (diff)
parent7e1d6e526512407b259b9bdd2622c4cc4f46972d (diff)
downloadrust-e77fc481adb98d95643e00f5fa5f02cbef698014.tar.gz
rust-e77fc481adb98d95643e00f5fa5f02cbef698014.zip
Merge #10587
10587: fix: Fix `add_missing_match_arm` panicking on failed upmapping r=Veykril a=Veykril

Closes https://github.com/rust-analyzer/rust-analyzer/issues/10580#issuecomment-946170475

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
-rw-r--r--crates/ide_assists/src/handlers/add_missing_match_arms.rs19
1 files changed, 7 insertions, 12 deletions
diff --git a/crates/ide_assists/src/handlers/add_missing_match_arms.rs b/crates/ide_assists/src/handlers/add_missing_match_arms.rs
index 4573a609893..463fb1c914a 100644
--- a/crates/ide_assists/src/handlers/add_missing_match_arms.rs
+++ b/crates/ide_assists/src/handlers/add_missing_match_arms.rs
@@ -6,7 +6,6 @@ use ide_db::helpers::{mod_path_to_ast, FamousDefs};
 use ide_db::RootDatabase;
 use itertools::Itertools;
 use syntax::ast::{self, make, AstNode, HasName, MatchArm, MatchArmList, MatchExpr, Pat};
-use syntax::TextRange;
 
 use crate::{
     utils::{self, render_snippet, Cursor},
@@ -40,21 +39,15 @@ use crate::{
 pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
     let match_expr = ctx.find_node_at_offset_with_descend::<ast::MatchExpr>()?;
     let match_arm_list = match_expr.match_arm_list()?;
-    let target_range: TextRange;
+    let target_range = ctx.sema.original_range(match_expr.syntax()).range;
 
     if let None = cursor_at_trivial_match_arm_list(&ctx, &match_expr, &match_arm_list) {
-        target_range = TextRange::new(
-            ctx.sema.original_range(match_expr.syntax()).range.start(),
-            ctx.sema.original_range(match_arm_list.syntax()).range.start(),
-        );
-
-        let cursor_in_range = target_range.contains_range(ctx.selection_trimmed());
-        if !cursor_in_range {
+        let arm_list_range = ctx.sema.original_range(match_arm_list.syntax()).range;
+        let cursor_in_range = arm_list_range.contains_range(ctx.selection_trimmed());
+        if cursor_in_range {
             cov_mark::hit!(not_applicable_outside_of_range_right);
             return None;
         }
-    } else {
-        target_range = ctx.sema.original_range(match_expr.syntax()).range;
     }
 
     let expr = match_expr.expr()?;
@@ -953,7 +946,9 @@ fn main() {
     }
 }
 "#,
-            "match E::X ",
+            "match E::X {
+        E::X => {}
+    }",
         );
     }