about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-10-12 19:29:47 +0000
committerGitHub <noreply@github.com>2021-10-12 19:29:47 +0000
commit137ac67f5dd10d8a5e83e9eeb7600993e9886c8a (patch)
treed22e89d2d850a15abbc3771a806b77d2f1e67124
parentf185d1c5332cf80566401b4de74cb6cb210db4cb (diff)
parent086563f7515d8b9ebefc8706232fa4a6d8826093 (diff)
downloadrust-137ac67f5dd10d8a5e83e9eeb7600993e9886c8a.tar.gz
rust-137ac67f5dd10d8a5e83e9eeb7600993e9886c8a.zip
Merge #10533
10533: fix: Fix AssistContext panic on sole whitespace selection r=Veykril a=Veykril

bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
-rw-r--r--crates/ide_assists/src/assist_context.rs11
1 files changed, 8 insertions, 3 deletions
diff --git a/crates/ide_assists/src/assist_context.rs b/crates/ide_assists/src/assist_context.rs
index d6fd27efac7..34b0ffc97d4 100644
--- a/crates/ide_assists/src/assist_context.rs
+++ b/crates/ide_assists/src/assist_context.rs
@@ -77,9 +77,14 @@ impl<'a> AssistContext<'a> {
             left.right_biased().and_then(|t| algo::skip_whitespace_token(t, Direction::Next));
         let right =
             right.left_biased().and_then(|t| algo::skip_whitespace_token(t, Direction::Prev));
-        let left = left.map(|t| t.text_range().start()).unwrap_or(start).clamp(start, end);
-        let right = right.map(|t| t.text_range().end()).unwrap_or(end).clamp(start, end);
-        let trimmed_range = TextRange::new(left, right);
+        let left = left.map(|t| t.text_range().start().clamp(start, end));
+        let right = right.map(|t| t.text_range().end().clamp(start, end));
+
+        let trimmed_range = match (left, right) {
+            (Some(left), Some(right)) if left <= right => TextRange::new(left, right),
+            // Selection solely consists of whitespace so just fall back to the original
+            _ => frange.range,
+        };
 
         AssistContext { config, sema, frange, source_file, trimmed_range }
     }