From 12b2f88f99fe802c8c65ecc324028b4a5659d43b Mon Sep 17 00:00:00 2001 From: Kyllingene Date: Tue, 3 Jan 2023 19:11:30 -0800 Subject: [PATCH 1/3] Fixed compilation issue at src/context.rs:98:20 --- src/context.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/context.rs b/src/context.rs index dda8c12..3fecb1e 100644 --- a/src/context.rs +++ b/src/context.rs @@ -92,9 +92,10 @@ impl Context { buffer: B, ) -> io::Result { let res = { + let bindings = self.key_bindings; let stdout = stdout().into_raw_mode().unwrap(); let ed = try!(Editor::new_with_init_buffer(stdout, prompt, self, buffer)); - match self.key_bindings { + match bindings { KeyBindings::Emacs => Self::handle_keys(keymap::Emacs::new(ed), handler), KeyBindings::Vi => Self::handle_keys(keymap::Vi::new(ed), handler), } From 3f331a412be493f75c3d11ed75df70767f81624f Mon Sep 17 00:00:00 2001 From: Kyllingene Date: Tue, 3 Jan 2023 19:26:12 -0800 Subject: [PATCH 2/3] Fixed an inexplicable buffer error in src/editor.rs --- src/history.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/history.rs b/src/history.rs index 0305289..f9eb1f1 100644 --- a/src/history.rs +++ b/src/history.rs @@ -294,7 +294,7 @@ fn write_to_disk(max_file_size: usize, new_item: &Buffer, file_name: &str) -> io fn move_file_contents_backward(file: &mut File, distance: u64) -> io::Result<()> { let mut total_read = 0; - let mut buffer = [0u8, 4096]; + let mut buffer = [0u8; 4096]; file.seek(SeekFrom::Start(distance))?; From 70f91f1bf8611f129a8f2278c4abd7b5c1ee9807 Mon Sep 17 00:00:00 2001 From: Kyllingene Date: Tue, 3 Jan 2023 19:54:47 -0800 Subject: [PATCH 3/3] Fixed all warnings --- src/buffer.rs | 4 +- src/context.rs | 14 +++---- src/editor.rs | 48 ++++++++++++------------ src/event.rs | 2 +- src/history.rs | 16 ++++---- src/keymap/emacs.rs | 6 +-- src/keymap/mod.rs | 16 ++++---- src/keymap/vi.rs | 90 ++++++++++++++++++++++----------------------- src/main.rs | 5 +-- src/test.rs | 12 +++--- src/util.rs | 2 +- 11 files changed, 107 insertions(+), 108 deletions(-) diff --git a/src/buffer.rs b/src/buffer.rs index 895faba..da9d1ce 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -65,7 +65,7 @@ impl<'a> From<&'a str> for Buffer { impl fmt::Display for Buffer { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { for &c in &self.data { - try!(f.write_char(c)); + f.write_char(c)?; } Ok(()) } @@ -256,7 +256,7 @@ impl Buffer { where W: Write { let string: String = self.data.iter().cloned().collect(); - try!(out.write(string.as_bytes())); + out.write(string.as_bytes())?; Ok(()) } diff --git a/src/context.rs b/src/context.rs index 3fecb1e..7668059 100644 --- a/src/context.rs +++ b/src/context.rs @@ -48,8 +48,8 @@ pub enum KeyBindings { pub struct Context { pub history: History, - pub completer: Option>, - pub word_divider_fn: Box Vec<(usize, usize)>>, + pub completer: Option>, + pub word_divider_fn: Box Vec<(usize, usize)>>, pub key_bindings: KeyBindings, } @@ -70,7 +70,7 @@ impl Context { pub fn read_line>( &mut self, prompt: P, - mut handler: &mut EventHandler>, + handler: &mut EventHandler>, ) -> io::Result { self.read_line_with_init_buffer(prompt, handler, Buffer::new()) } @@ -88,13 +88,13 @@ impl Context { pub fn read_line_with_init_buffer, B: Into>( &mut self, prompt: P, - mut handler: &mut EventHandler>, + handler: &mut EventHandler>, buffer: B, ) -> io::Result { let res = { let bindings = self.key_bindings; let stdout = stdout().into_raw_mode().unwrap(); - let ed = try!(Editor::new_with_init_buffer(stdout, prompt, self, buffer)); + let ed = Editor::new_with_init_buffer(stdout, prompt, self, buffer)?; match bindings { KeyBindings::Emacs => Self::handle_keys(keymap::Emacs::new(ed), handler), KeyBindings::Vi => Self::handle_keys(keymap::Vi::new(ed), handler), @@ -107,14 +107,14 @@ impl Context { fn handle_keys<'a, T, W: Write, M: KeyMap<'a, W, T>>( mut keymap: M, - mut handler: &mut EventHandler, + handler: &mut EventHandler, ) -> io::Result where String: From, { let stdin = stdin(); for c in stdin.keys() { - if try!(keymap.handle_key(c.unwrap(), handler)) { + if keymap.handle_key(c.unwrap(), handler)? { break; } } diff --git a/src/editor.rs b/src/editor.rs index f5c297f..46c8a9d 100644 --- a/src/editor.rs +++ b/src/editor.rs @@ -133,7 +133,7 @@ impl<'a, W: Write> Editor<'a, W> { ed.move_cursor_to_end_of_line()?; } - try!(ed.display()); + ed.display()?; Ok(ed) } @@ -171,7 +171,7 @@ impl<'a, W: Write> Editor<'a, W> { } else { self.cursor = cur_buf!(self).num_chars(); self._display(false)?; - try!(self.out.write(b"\r\n")); + self.out.write(b"\r\n")?; self.show_completions_hint = false; Ok(true) } @@ -218,24 +218,24 @@ impl<'a, W: Write> Editor<'a, W> { fn print_completion_list(&mut self, completions: &[String]) -> io::Result<()> { use std::cmp::max; - let (w, _) = try!(termion::terminal_size()); + let (w, _) = termion::terminal_size()?; // XXX wide character support let max_word_size = completions.iter().fold(1, |m, x| max(m, x.chars().count())); - let cols = max(1, (w as usize / (max_word_size))); + let cols = max(1, w as usize / (max_word_size)); let col_width = 2 + w as usize / cols; let cols = max(1, w as usize / col_width); let mut i = 0; for com in completions { if i == cols { - try!(write!(self.out, "\r\n")); + write!(self.out, "\r\n")?; i = 0; } else if i > cols { unreachable!() } - try!(write!(self.out, "{:<1$}", com, col_width)); + write!(self.out, "{:<1$}", com, col_width)?; i += 1; } @@ -277,7 +277,7 @@ impl<'a, W: Write> Editor<'a, W> { Ok(()) } else if completions.len() == 1 { self.show_completions_hint = false; - try!(self.delete_word_before_cursor(false)); + self.delete_word_before_cursor(false)?; self.insert_str_after_cursor(completions[0].as_ref()) } else { let common_prefix = util::find_longest_common_prefix( @@ -291,16 +291,16 @@ impl<'a, W: Write> Editor<'a, W> { let s = p.iter().cloned().collect::(); if s.len() > word.len() && s.starts_with(&word[..]) { - try!(self.delete_word_before_cursor(false)); + self.delete_word_before_cursor(false)?; return self.insert_str_after_cursor(s.as_ref()); } } if self.show_completions_hint { - try!(write!(self.out, "\r\n")); - try!(self.print_completion_list(&completions[..])); - try!(write!(self.out, "\r\n")); - try!(self.display()); + write!(self.out, "\r\n")?; + self.print_completion_list(&completions[..])?; + write!(self.out, "\r\n")?; + self.display()?; self.show_completions_hint = false; } else { @@ -347,7 +347,7 @@ impl<'a, W: Write> Editor<'a, W> { /// Clears the screen then prints the prompt and current buffer. pub fn clear(&mut self) -> io::Result<()> { - try!(write!(self.out, "{}{}", clear::All, cursor::Goto(1, 1))); + write!(self.out, "{}{}", clear::All, cursor::Goto(1, 1))?; self.term_cursor_line = 1; self.display() } @@ -572,7 +572,7 @@ impl<'a, W: Write> Editor<'a, W> { if self.show_autosuggestions { { let autosuggestion = self.current_autosuggestion().cloned(); - let mut buf = self.current_buffer_mut(); + let buf = self.current_buffer_mut(); if let Some(x) = autosuggestion { buf.insert_from_buffer(&x); } @@ -615,7 +615,7 @@ impl<'a, W: Write> Editor<'a, W> { if cfg!(test) { (80, 24) } // otherwise pull values from termion else { - let (mut size_col, mut size_row) = try!(termion::terminal_size()); + let (mut size_col, mut size_row) = termion::terminal_size()?; if size_col == 0 { size_col = 80; size_row = 24; @@ -660,14 +660,14 @@ impl<'a, W: Write> Editor<'a, W> { // Move the term cursor to the same line as the prompt. if self.term_cursor_line > 1 { - try!(write!( + write!( self.out, "{}", cursor::Up(self.term_cursor_line as u16 - 1) - )); + )?; } // Move the cursor to the start of the line then clear everything after. Write the prompt - try!(write!(self.out, "\r{}{}", clear::AfterCursor, self.prompt)); + write!(self.out, "\r{}{}", clear::AfterCursor, self.prompt)?; // If we have an autosuggestion, we make the autosuggestion the buffer we print out. // We get the number of bytes in the buffer (but NOT the autosuggestion). @@ -685,7 +685,7 @@ impl<'a, W: Write> Editor<'a, W> { for (i, line) in lines.iter().enumerate() { if i > 0 { - try!(write!(self.out, "{}", cursor::Right(prompt_width as u16))); + write!(self.out, "{}", cursor::Right(prompt_width as u16))?; } if buf_num_remaining_bytes == 0 { @@ -711,7 +711,7 @@ impl<'a, W: Write> Editor<'a, W> { // at the end of the line, move the cursor down a line if new_total_width % w == 0 { - try!(write!(self.out, "\r\n")); + write!(self.out, "\r\n")?; } self.term_cursor_line = (new_total_width_to_cursor + w) / w; @@ -720,7 +720,7 @@ impl<'a, W: Write> Editor<'a, W> { // to the line where the true cursor is. let cursor_line_diff = new_num_lines as isize - self.term_cursor_line as isize; if cursor_line_diff > 0 { - try!(write!(self.out, "{}", cursor::Up(cursor_line_diff as u16))); + write!(self.out, "{}", cursor::Up(cursor_line_diff as u16))?; } else if cursor_line_diff < 0 { unreachable!(); } @@ -730,13 +730,13 @@ impl<'a, W: Write> Editor<'a, W> { let cursor_col_diff = new_total_width as isize - new_total_width_to_cursor as isize - cursor_line_diff * w as isize; if cursor_col_diff > 0 { - try!(write!(self.out, "{}", cursor::Left(cursor_col_diff as u16))); + write!(self.out, "{}", cursor::Left(cursor_col_diff as u16))?; } else if cursor_col_diff < 0 { - try!(write!( + write!( self.out, "{}", cursor::Right((-cursor_col_diff) as u16) - )); + )?; } self.out.flush() diff --git a/src/event.rs b/src/event.rs index 568809d..5384d34 100644 --- a/src/event.rs +++ b/src/event.rs @@ -2,7 +2,7 @@ use std::io::Write; use termion::event::Key; use Editor; -pub type EventHandler<'a, W> = FnMut(Event) + 'a; +pub type EventHandler<'a, W> = dyn FnMut(Event) + 'a; pub struct Event<'a, 'out: 'a, W: Write + 'a> { pub editor: &'a mut Editor<'out, W>, diff --git a/src/history.rs b/src/history.rs index f9eb1f1..d3222c0 100644 --- a/src/history.rs +++ b/src/history.rs @@ -167,7 +167,7 @@ impl History { )) } }; - let file = try!(OpenOptions::new().read(true).open(file_name)); + let file = OpenOptions::new().read(true).open(file_name)?; let reader = BufReader::new(file); for line in reader.lines() { match line { @@ -217,7 +217,7 @@ fn write_to_disk(max_file_size: usize, new_item: &Buffer, file_name: &str) -> io .open(file_name)?; // The metadata contains the length of the file - let file_length = file.metadata().ok().map_or(0u64, |m| m.len()); + let _file_length = file.metadata().ok().map_or(0u64, |m| m.len()); { // Count number of entries in file @@ -277,16 +277,16 @@ fn write_to_disk(max_file_size: usize, new_item: &Buffer, file_name: &str) -> io // Move it all back - move_file_contents_backward(&mut file, move_dist); + move_file_contents_backward(&mut file, move_dist).unwrap_or_else(|_| {}); } }; // Seek to end for appending - try!(file.seek(SeekFrom::End(0))); + file.seek(SeekFrom::End(0))?; // Write the command to the history file. - try!(file.write_all(String::from(new_item.clone()).as_bytes())); - try!(file.write_all(b"\n")); + file.write_all(String::from(new_item.clone()).as_bytes())?; + file.write_all(b"\n")?; file.flush()?; Ok(()) @@ -307,11 +307,11 @@ fn move_file_contents_backward(file: &mut File, distance: u64) -> io::Result<()> break; } - file.seek(SeekFrom::Current(-(read as i64 + distance as i64))); + file.seek(SeekFrom::Current(-(read as i64 + distance as i64))).unwrap_or_else(|_| {0}); file.write_all(&buffer[..read])?; - file.seek(SeekFrom::Current(distance as i64)); + file.seek(SeekFrom::Current(distance as i64)).unwrap_or_else(|_| {0}); } file.set_len(total_read)?; diff --git a/src/keymap/emacs.rs b/src/keymap/emacs.rs index fbb064f..24a06e0 100644 --- a/src/keymap/emacs.rs +++ b/src/keymap/emacs.rs @@ -36,7 +36,7 @@ impl<'a, W: Write> Emacs<'a, W> { 'k' => self.ed.delete_all_after_cursor(), 'w' => self.ed.delete_word_before_cursor(true), 'x' => { - try!(self.ed.undo()); + self.ed.undo()?; Ok(()) } _ => Ok(()), @@ -51,7 +51,7 @@ impl<'a, W: Write> Emacs<'a, W> { 'f' => emacs_move_word(&mut self.ed, EmacsMoveDir::Right), 'b' => emacs_move_word(&mut self.ed, EmacsMoveDir::Left), 'r' => { - try!(self.ed.revert()); + self.ed.revert()?; Ok(()) } '.' => self.handle_last_arg_fetch(), @@ -191,7 +191,7 @@ mod tests { macro_rules! simulate_keys { ($keymap:ident, $keys:expr) => {{ - simulate_keys(&mut $keymap, $keys.into_iter()) + simulate_keys(&mut $keymap, $keys.iter()) }} } diff --git a/src/keymap/mod.rs b/src/keymap/mod.rs index 9e4c6f6..d081b66 100644 --- a/src/keymap/mod.rs +++ b/src/keymap/mod.rs @@ -22,34 +22,34 @@ pub trait KeyMap<'a, W: Write, T>: From { match key { Key::Ctrl('c') => { - try!(self.editor_mut().handle_newline()); + self.editor_mut().handle_newline()?; return Err(io::Error::new(ErrorKind::Interrupted, "ctrl-c")); } // if the current buffer is empty, treat ctrl-d as eof Key::Ctrl('d') if is_empty => { - try!(self.editor_mut().handle_newline()); + self.editor_mut().handle_newline()?; return Err(io::Error::new(ErrorKind::UnexpectedEof, "ctrl-d")); } - Key::Char('\t') => try!(self.editor_mut().complete(handler)), + Key::Char('\t') => self.editor_mut().complete(handler)?, Key::Char('\n') => { - done = try!(self.editor_mut().handle_newline()); + done = self.editor_mut().handle_newline()?; } Key::Ctrl('f') if self.editor().is_currently_showing_autosuggestion() => { - try!(self.editor_mut().accept_autosuggestion()); + self.editor_mut().accept_autosuggestion()?; } Key::Right if self.editor().is_currently_showing_autosuggestion() && self.editor().cursor_is_at_end_of_line() => { - try!(self.editor_mut().accept_autosuggestion()); + self.editor_mut().accept_autosuggestion()?; } _ => { - try!(self.handle_key_core(key)); + self.handle_key_core(key)?; self.editor_mut().skip_completions_hint(); } }; handler(Event::new(self.editor_mut(), EventKind::AfterKey(key))); - try!(self.editor_mut().flush()); + self.editor_mut().flush()?; Ok(done) } diff --git a/src/keymap/vi.rs b/src/keymap/vi.rs index 6e4a7b0..718c8cc 100644 --- a/src/keymap/vi.rs +++ b/src/keymap/vi.rs @@ -146,7 +146,7 @@ fn vi_move_word(ed: &mut Editor, move_mode: ViMoveMode, direction: Whitespace, Keyword, NonKeyword, - }; + } let mut cursor = ed.cursor(); 'repeat: for _ in 0..count { @@ -214,7 +214,7 @@ fn vi_move_word_end(ed: &mut Editor, move_mode: ViMoveMode, directi EndOnWord, EndOnOther, EndOnWhitespace, - }; + } let mut cursor = ed.cursor(); 'repeat: for _ in 0..count { @@ -379,8 +379,8 @@ impl<'a, W: Write> Vi<'a, W> { Delete(start_pos) => { // perform the delete operation match move_type { - Exclusive => try!(self.ed.delete_until(start_pos)), - Inclusive => try!(self.ed.delete_until_inclusive(start_pos)), + Exclusive => self.ed.delete_until(start_pos)?, + Inclusive => self.ed.delete_until_inclusive(start_pos)?, } // update the last state @@ -450,20 +450,20 @@ impl<'a, W: Write> Vi<'a, W> { if let Some(insert_key) = self.last_insert { // enter insert mode if necessary - try!(self.handle_key_core(insert_key)); + self.handle_key_core(insert_key)?; } for k in keys.iter() { - try!(self.handle_key_core(*k)); + self.handle_key_core(*k)?; } if self.last_insert.is_some() { // leave insert mode - try!(self.handle_key_core(Key::Esc)); + self.handle_key_core(Key::Esc)?; } // restore the last command - mem::replace(&mut self.last_command, keys); + self.last_command = keys; Ok(()) } @@ -493,13 +493,13 @@ impl<'a, W: Write> Vi<'a, W> { for _ in 1..self.count { let keys = mem::replace(&mut self.last_command, Vec::new()); for k in keys.into_iter() { - try!(self.handle_key_core(k)); + self.handle_key_core(k)?; } } self.count = 0; } // cursor moves to the left when switching from insert to normal mode - try!(self.ed.move_cursor_left(1)); + self.ed.move_cursor_left(1)?; self.pop_mode(); Ok(()) } @@ -539,7 +539,7 @@ impl<'a, W: Write> Vi<'a, W> { self.count = 0; self.movement_reset = true; self.ed.current_buffer_mut().end_undo_group(); - try!(self.ed.move_up()); + self.ed.move_up()?; self.ed.current_buffer_mut().start_undo_group(); Ok(()) } @@ -547,7 +547,7 @@ impl<'a, W: Write> Vi<'a, W> { self.count = 0; self.movement_reset = true; self.ed.current_buffer_mut().end_undo_group(); - try!(self.ed.move_down()); + self.ed.move_down()?; self.ed.current_buffer_mut().start_undo_group(); Ok(()) } @@ -589,7 +589,7 @@ impl<'a, W: Write> Vi<'a, W> { self.last_insert = Some(key); self.set_mode(Insert); let pos = self.ed.cursor() + self.move_count_right(); - try!(self.ed.delete_until(pos)); + self.ed.delete_until(pos)?; self.last_count = self.count; self.count = 0; Ok(()) @@ -654,20 +654,20 @@ impl<'a, W: Write> Vi<'a, W> { } Key::Char('h') | Key::Left | Key::Backspace => { let count = self.move_count_left(); - try!(self.ed.move_cursor_left(count)); + self.ed.move_cursor_left(count)?; self.pop_mode_after_movement(Exclusive) } Key::Char('l') | Key::Right | Key::Char(' ') => { let count = self.move_count_right(); - try!(self.ed.move_cursor_right(count)); + self.ed.move_cursor_right(count)?; self.pop_mode_after_movement(Exclusive) } Key::Char('k') | Key::Up => { - try!(self.ed.move_up()); + self.ed.move_up()?; self.pop_mode_after_movement(Exclusive) } Key::Char('j') | Key::Down => { - try!(self.ed.move_down()); + self.ed.move_down()?; self.pop_mode_after_movement(Exclusive) } Key::Char('t') => { @@ -690,32 +690,32 @@ impl<'a, W: Write> Vi<'a, W> { Key::Char(',') => self.handle_key_move_to_char(key, ReverseRepeat), Key::Char('w') => { let count = self.move_count(); - try!(move_word(&mut self.ed, count)); + move_word(&mut self.ed, count)?; self.pop_mode_after_movement(Exclusive) } Key::Char('W') => { let count = self.move_count(); - try!(move_word_ws(&mut self.ed, count)); + move_word_ws(&mut self.ed, count)?; self.pop_mode_after_movement(Exclusive) } Key::Char('e') => { let count = self.move_count(); - try!(move_to_end_of_word(&mut self.ed, count)); + move_to_end_of_word(&mut self.ed, count)?; self.pop_mode_after_movement(Exclusive) } Key::Char('E') => { let count = self.move_count(); - try!(move_to_end_of_word_ws(&mut self.ed, count)); + move_to_end_of_word_ws(&mut self.ed, count)?; self.pop_mode_after_movement(Exclusive) } Key::Char('b') => { let count = self.move_count(); - try!(move_word_back(&mut self.ed, count)); + move_word_back(&mut self.ed, count)?; self.pop_mode_after_movement(Exclusive) } Key::Char('B') => { let count = self.move_count(); - try!(move_word_ws_back(&mut self.ed, count)); + move_word_ws_back(&mut self.ed, count)?; self.pop_mode_after_movement(Exclusive) } Key::Char('g') => { @@ -724,10 +724,10 @@ impl<'a, W: Write> Vi<'a, W> { } // if count is 0, 0 should move to start of line Key::Char('0') if self.count == 0 => { - try!(self.ed.move_cursor_to_start_of_line()); + self.ed.move_cursor_to_start_of_line()?; self.pop_mode_after_movement(Exclusive) } - Key::Char(i @ '0'...'9') => { + Key::Char(i @ '0'..='9') => { let i = i.to_digit(10).unwrap(); // count = count * 10 + i self.count = self.count @@ -736,7 +736,7 @@ impl<'a, W: Write> Vi<'a, W> { Ok(()) } Key::Char('$') => { - try!(self.ed.move_cursor_to_end_of_line()); + self.ed.move_cursor_to_end_of_line()?; self.pop_mode_after_movement(Exclusive) } Key::Char('x') | Key::Delete => { @@ -747,7 +747,7 @@ impl<'a, W: Write> Vi<'a, W> { self.last_count = self.count; let pos = self.ed.cursor() + self.move_count_right(); - try!(self.ed.delete_until(pos)); + self.ed.delete_until(pos)?; self.count = 0; Ok(()) } @@ -762,19 +762,19 @@ impl<'a, W: Write> Vi<'a, W> { for _ in 0..self.move_count_right() { let c = self.ed.current_buffer().char_after(self.ed.cursor()).unwrap(); if c.is_lowercase() { - try!(self.ed.delete_after_cursor()); + self.ed.delete_after_cursor()?; for c in c.to_uppercase() { - try!(self.ed.insert_after_cursor(c)); + self.ed.insert_after_cursor(c)?; } } else if c.is_uppercase() { - try!(self.ed.delete_after_cursor()); + self.ed.delete_after_cursor()?; for c in c.to_lowercase() { - try!(self.ed.insert_after_cursor(c)); + self.ed.insert_after_cursor(c)?; } } else { - try!(self.ed.move_cursor_right(1)); + self.ed.move_cursor_right(1)?; } } self.pop_mode(); @@ -784,7 +784,7 @@ impl<'a, W: Write> Vi<'a, W> { let count = self.move_count(); self.count = 0; for _ in 0..count { - let did = try!(self.ed.undo()); + let did = self.ed.undo()?; if !did { break; } @@ -795,7 +795,7 @@ impl<'a, W: Write> Vi<'a, W> { let count = self.move_count(); self.count = 0; for _ in 0..count { - let did = try!(self.ed.redo()); + let did = self.ed.redo()?; if !did { break; } @@ -821,12 +821,12 @@ impl<'a, W: Write> Vi<'a, W> { // replace count characters self.ed.current_buffer_mut().start_undo_group(); for _ in 0..self.move_count_right() { - try!(self.ed.delete_after_cursor()); - try!(self.ed.insert_after_cursor(c)); + self.ed.delete_after_cursor()?; + self.ed.insert_after_cursor(c)?; } self.ed.current_buffer_mut().end_undo_group(); - try!(self.ed.move_cursor_left(1)); + self.ed.move_cursor_left(1)?; } self.pop_mode(); } @@ -864,7 +864,7 @@ impl<'a, W: Write> Vi<'a, W> { self.handle_key_normal(key) } // handle numeric keys - (Key::Char('0'...'9'), _) => { + (Key::Char('0'..='9'), _) => { self.handle_key_normal(key) } (Key::Char('c'), Some(Key::Char('c'))) | (Key::Char('d'), None) => { @@ -878,8 +878,8 @@ impl<'a, W: Write> Vi<'a, W> { // delete the whole line self.count = 0; self.secondary_count = 0; - try!(self.ed.move_cursor_to_start_of_line()); - try!(self.ed.delete_all_after_cursor()); + self.ed.move_cursor_to_start_of_line()?; + self.ed.delete_all_after_cursor()?; // return to the previous mode self.pop_mode(); @@ -926,7 +926,7 @@ impl<'a, W: Write> Vi<'a, W> { match key { Key::Char(c) => { let move_type; - try!(match movement { + match movement { RightUntil => { move_type = Inclusive; match find_char(self.ed.current_buffer(), self.ed.cursor() + 1, c, count) { @@ -956,7 +956,7 @@ impl<'a, W: Write> Vi<'a, W> { } } Repeat | ReverseRepeat => unreachable!(), - }); + }?; // go back to the previous mode self.pop_mode_after_movement(move_type) @@ -975,11 +975,11 @@ impl<'a, W: Write> Vi<'a, W> { let res = match key { Key::Char('e') => { - try!(move_to_end_of_word_back(&mut self.ed, count)); + move_to_end_of_word_back(&mut self.ed, count)?; self.pop_mode_after_movement(Inclusive) } Key::Char('E') => { - try!(move_to_end_of_word_ws_back(&mut self.ed, count)); + move_to_end_of_word_ws_back(&mut self.ed, count)?; self.pop_mode_after_movement(Inclusive) } @@ -1036,7 +1036,7 @@ mod tests { macro_rules! simulate_keys { ($keymap:ident, $keys:expr) => {{ - simulate_keys(&mut $keymap, $keys.into_iter()) + simulate_keys(&mut $keymap, $keys.iter()) }} } diff --git a/src/main.rs b/src/main.rs index 0df858b..474bfeb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,6 @@ extern crate liner; extern crate termion; -use std::mem::replace; use std::env::{args, current_dir}; use std::io; @@ -38,9 +37,9 @@ fn main() { if filename { let completer = FilenameCompleter::new(Some(current_dir().unwrap())); - replace(&mut editor.context().completer, Some(Box::new(completer))); + editor.context().completer = Some(Box::new(completer)); } else { - replace(&mut editor.context().completer, None); + editor.context().completer = None; } } }); diff --git a/src/test.rs b/src/test.rs index 0fe69b9..adc13f7 100644 --- a/src/test.rs +++ b/src/test.rs @@ -9,12 +9,12 @@ fn assert_cursor_pos(s: &str, cursor: usize, expected_pos: CursorPosition) { let buf = Buffer::from(s.to_owned()); let words = context::get_buffer_words(&buf); let pos = CursorPosition::get(cursor, &words[..]); - assert!(expected_pos == pos, - format!("buffer: {:?}, cursor: {}, expected pos: {:?}, pos: {:?}", - s, - cursor, - expected_pos, - pos)); + assert_eq!(expected_pos, pos, + "buffer: {:?}, cursor: {}, expected pos: {:?}, pos: {:?}", + s, + cursor, + expected_pos, + pos); } #[test] diff --git a/src/util.rs b/src/util.rs index 0f5377f..a235e8e 100644 --- a/src/util.rs +++ b/src/util.rs @@ -66,7 +66,7 @@ pub fn remove_codes(input: &str) -> Cow { _ => s = AnsiState::Norm, }, AnsiState::Csi => match c { - 'A' ... 'Z' | 'a' ... 'z' => s = AnsiState::Norm, + 'A' ..= 'Z' | 'a' ..= 'z' => s = AnsiState::Norm, _ => (), }, AnsiState::Osc => match c {