diff --git a/src/buffer/mod.rs b/src/buffer/mod.rs index 1c4b852..d99f74b 100644 --- a/src/buffer/mod.rs +++ b/src/buffer/mod.rs @@ -326,7 +326,7 @@ impl Buffer { let l_start = self.text.line_to_char(pos.0); let l_end = self.text.line_to_char(pos.0 + 1); return (l_start + pos.1) - .min(l_start.max(l_end - 1.min(l_end))) + .min(l_start.max(l_end.saturating_sub(1))) .min(self.text.len_chars()); } else { return self.text.len_chars(); diff --git a/src/formatter.rs b/src/formatter.rs index aaf19f8..e23f322 100644 --- a/src/formatter.rs +++ b/src/formatter.rs @@ -148,7 +148,7 @@ pub trait LineFormatter { let block_slice = line.slice(block_start..block_end); let block_col_i = min( self.v2d_to_index(RopeGraphemes::new(&block_slice), (y, x), rounding), - block_len - 1.min(block_len), + block_len.saturating_sub(1), ); col_i = block_start + block_col_i; @@ -184,10 +184,7 @@ pub trait LineFormatter { (RoundingBehavior::Floor, rounding), ); let new_col_i = if (line_i + 1) < buf.line_count() || (block_i + 1) < block_count(&line) { - min( - block_range.0 + block_col_i, - block_range.1 - 1.min(block_range.1), - ) + min(block_range.0 + block_col_i, block_range.1.saturating_sub(1)) } else { min(block_range.0 + block_col_i, block_range.1) }; @@ -232,12 +229,12 @@ pub fn find_good_break(slice: &RopeSlice, lower_limit: usize, char_idx: usize) - pub fn char_range_from_block_index(slice: &RopeSlice, block_idx: usize) -> (usize, usize) { let start = { let initial = LINE_BLOCK_LENGTH * block_idx; - find_good_break(slice, initial - LINE_BLOCK_FUDGE.min(initial), initial) + find_good_break(slice, initial.saturating_sub(LINE_BLOCK_FUDGE), initial) }; let end = { let initial = LINE_BLOCK_LENGTH * (block_idx + 1); - find_good_break(slice, initial - LINE_BLOCK_FUDGE.min(initial), initial) + find_good_break(slice, initial.saturating_sub(LINE_BLOCK_FUDGE), initial) }; (start, end) @@ -255,7 +252,7 @@ pub fn block_index_and_range(slice: &RopeSlice, char_idx: usize) -> (usize, (usi pub fn block_count(slice: &RopeSlice) -> usize { let char_count = slice.len_chars(); - let mut last_idx = (char_count - 1.min(char_count)) / LINE_BLOCK_LENGTH; + let mut last_idx = char_count.saturating_sub(1) / LINE_BLOCK_LENGTH; let range = char_range_from_block_index(slice, last_idx + 1); if range.0 < range.1 { diff --git a/src/term_ui/mod.rs b/src/term_ui/mod.rs index e5deac2..351ff48 100644 --- a/src/term_ui/mod.rs +++ b/src/term_ui/mod.rs @@ -416,7 +416,7 @@ impl TermUI { // Jump to line! if !cancel { if let Ok(n) = line.parse::() { - self.editor.jump_to_line(n - 1.min(n)); + self.editor.jump_to_line(n.saturating_sub(1)); } } } @@ -449,7 +449,7 @@ impl TermUI { }; let pstring = format!("{}%", percentage); self.screen.draw( - c2.1 - pstring.len().min(c2.1), + c2.1.saturating_sub(pstring.len()), c1.0, &pstring[..], STYLE_INFO, @@ -473,7 +473,7 @@ impl TermUI { nl, soft_tabs_str, editor.soft_tab_width as usize ); self.screen - .draw(c2.1 - 30.min(c2.1), c1.0, &info_line[..], STYLE_INFO); + .draw(c2.1.saturating_sub(30), c1.0, &info_line[..], STYLE_INFO); // Draw main text editing area self.draw_editor_text(editor, (c1.0 + 1, c1.1), c2);