Unnamed repository; edit this file 'description' to name the repository.
Fix AssistContext panic on sole whitespace selection
Lukas Wirth 2021-10-13
parent a871da3 · commit 086563f
-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 d6fd27efac..34b0ffc97d 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 }
}