From 9cac44c7c0f5696c8749fd8fdd32b8174723ab5d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= <blaz@mxxn.io>
Date: Wed, 17 Feb 2021 14:41:43 +0900
Subject: [PATCH] minor changes

---
 helix-core/src/selection.rs   | 8 ++++++--
 helix-core/src/transaction.rs | 5 +----
 helix-term/src/commands.rs    | 6 ++++--
 helix-term/src/ui/editor.rs   | 6 +++---
 4 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/helix-core/src/selection.rs b/helix-core/src/selection.rs
index 87216fd9..9a93e667 100644
--- a/helix-core/src/selection.rs
+++ b/helix-core/src/selection.rs
@@ -278,7 +278,7 @@ pub fn select_on_matches(
     text: &RopeSlice,
     selections: &Selection,
     regex: &crate::regex::Regex,
-) -> Selection {
+) -> Option<Selection> {
     let mut result = SmallVec::with_capacity(selections.ranges().len());
 
     for sel in selections.ranges() {
@@ -300,7 +300,11 @@ pub fn select_on_matches(
     }
 
     // TODO: figure out a new primary index
-    Selection::new(result, 0)
+    if !result.is_empty() {
+        return Some(Selection::new(result, 0));
+    }
+
+    None
 }
 
 // TODO: support to split on capture #N instead of whole match
diff --git a/helix-core/src/transaction.rs b/helix-core/src/transaction.rs
index 000782dd..ce0174a6 100644
--- a/helix-core/src/transaction.rs
+++ b/helix-core/src/transaction.rs
@@ -314,10 +314,7 @@ impl ChangeSet {
     /// `true` when the set is empty.
     #[inline]
     pub fn is_empty(&self) -> bool {
-        match self.changes.as_slice() {
-            [] | [Operation::Retain(_)] => true,
-            _ => false,
-        }
+        matches!(self.changes.as_slice(), [] | [Operation::Retain(_)])
     }
 
     /// Map a position through the changes.
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 5cb47485..a2f8d20a 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -193,7 +193,7 @@ pub fn check_cursor_in_view(view: &View) -> bool {
     let line = doc.text().char_to_line(cursor);
     let document_end = view.first_line + view.area.height.saturating_sub(1) as usize;
 
-    if (line > document_end.saturating_sub(PADDING)) | (line < view.first_line + PADDING) {
+    if (line > document_end.saturating_sub(PADDING)) || (line < view.first_line + PADDING) {
         return false;
     }
     true
@@ -304,7 +304,9 @@ pub fn select_all(cx: &mut Context) {
 pub fn select_regex(cx: &mut Context) {
     let prompt = ui::regex_prompt(cx, "select:".to_string(), |doc, regex| {
         let text = &doc.text().slice(..);
-        let selection = selection::select_on_matches(text, doc.selection(), &regex);
+        // TODO: if select on matches returns empty range, we need to abort
+        let selection =
+            selection::select_on_matches(text, doc.selection(), &regex).expect("no matches");
         doc.set_selection(selection);
     });
     cx.callback = Some(Box::new(
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 9383d1e1..22e80623 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -77,7 +77,7 @@ impl EditorView {
         let range = {
             // calculate viewport byte ranges
             let start = text.line_to_byte(view.first_line);
-            let end = text.line_to_byte(last_line) + text.line(last_line).len_bytes();
+            let end = text.line_to_byte(last_line + 1); // TODO: double check
 
             start..end
         };
@@ -381,8 +381,8 @@ impl Component for EditorView {
                         }
                     }
                     mode => {
-                        match keys.as_slice() {
-                            &[KeyEvent {
+                        match *keys.as_slice() {
+                            [KeyEvent {
                                 code: KeyCode::Char(i @ '0'..='9'),
                                 modifiers: KeyModifiers::NONE,
                             }] => {