Add more clippy warnings, and solve a bunch of them

This commit is contained in:
Timothy Warren 2021-03-10 16:09:46 -05:00
parent cf0c576284
commit 297ff6b80b
4 changed files with 48 additions and 23 deletions

View File

@ -40,7 +40,7 @@ impl Document {
} }
pub fn insert(&mut self, at: &Position, c: char) { pub fn insert(&mut self, at: &Position, c: char) {
if at.y > self.len() { if at.y > self.rows.len() {
return; return;
} }
@ -52,18 +52,20 @@ impl Document {
return; return;
} }
if at.y == self.len() { if at.y == self.rows.len() {
let mut row = Row::default(); let mut row = Row::default();
row.insert(0, c); row.insert(0, c);
self.rows.push(row); self.rows.push(row);
} else { } else {
let row = self.rows.get_mut(at.y).unwrap(); #[allow(clippy::indexing_slicing)]
let row = &mut self.rows[at.y];
row.insert(at.x, c); row.insert(at.x, c);
} }
} }
#[allow(clippy::integer_arithmetic, clippy::indexing_slicing)]
pub fn delete(&mut self, at: &Position) { pub fn delete(&mut self, at: &Position) {
let len = self.len(); let len = self.rows.len();
if at.y >= len { if at.y >= len {
return return
} }
@ -71,12 +73,12 @@ impl Document {
// File has been modified // File has been modified
self.dirty = true; self.dirty = true;
if at.x == self.rows.get_mut(at.y).unwrap().len() && at.y < len - 1 { if at.x == self.rows[at.y].len() && at.y + 1 < len {
let next_row = self.rows.remove(at.y + 1); let next_row = self.rows.remove(at.y + 1);
let row = self.rows.get_mut(at.y).unwrap(); let row = &mut self.rows[at.y];
row.append(&next_row); row.append(&next_row);
} else { } else {
let row = self.rows.get_mut(at.y).unwrap(); let row = &mut self.rows[at.y];
row.delete(at.x); row.delete(at.x);
} }
} }
@ -102,12 +104,19 @@ impl Document {
} }
fn insert_newline(&mut self, at: &Position) { fn insert_newline(&mut self, at: &Position) {
if at.y == self.len() { if at.y > self.rows.len() {
return;
}
if at.y == self.rows.len() {
self.rows.push(Row::default()); self.rows.push(Row::default());
return; return;
} }
let new_row = self.rows.get_mut(at.y).unwrap().split(at.x); #[allow(clippy::indexing_slicing)]
let new_row = self.rows[at.y].split(at.x);
#[allow(clippy::integer_arithmetic)]
self.rows.insert(at.y + 1, new_row); self.rows.insert(at.y + 1, new_row);
} }
} }

View File

@ -64,11 +64,11 @@ impl Editor {
pub fn default() -> Self { pub fn default() -> Self {
let args: Vec<String> = env::args().collect(); let args: Vec<String> = env::args().collect();
let mut initial_status = String::from("HELP: Ctrl-S = save | Ctrl-Q = quit"); let mut initial_status = String::from("HELP: Ctrl-S = save | Ctrl-Q = quit");
let document = if args.len() > 1 { let document = if let Some(file_name) = args.get(1) {
let file_name = &args[1]; let file_name = &args[1];
let doc = Document::open(&file_name); let doc = Document::open(&file_name);
if doc.is_ok() { if let Ok(doc) = doc {
doc.unwrap() doc
} else { } else {
initial_status = format!("ERR: Could not open file: {}", file_name); initial_status = format!("ERR: Could not open file: {}", file_name);
Document::default() Document::default()
@ -134,9 +134,11 @@ impl Editor {
self.cursor_position.y.saturating_add(1), self.cursor_position.y.saturating_add(1),
self.document.len() self.document.len()
); );
#[allow(clippy::integer_arithmetic)]
let len = status.len() + line_indicator.len(); let len = status.len() + line_indicator.len();
if width > len { if width > len {
status.push_str(&" ".repeat(width - len)); status.push_str(&" ".repeat(width.saturating_sub(len)));
} }
status = format!("{}{}", status, line_indicator); status = format!("{}{}", status, line_indicator);
status.truncate(width); status.truncate(width);
@ -235,11 +237,7 @@ impl Editor {
self.refresh_screen()?; self.refresh_screen()?;
match Terminal::read_key()? { match Terminal::read_key()? {
Key::Backspace => { Key::Backspace => result.truncate(result.len().saturating_sub(1)),
if !result.is_empty() {
result.truncate(result.len() - 1);
}
}
Key::Char('\n') => break, Key::Char('\n') => break,
Key::Char(c) => { Key::Char(c) => {
if !c.is_control() { if !c.is_control() {
@ -322,14 +320,14 @@ impl Editor {
}, },
Key::PageUp => { Key::PageUp => {
y = if y > terminal_height { y = if y > terminal_height {
y - terminal_height y.saturating_sub(terminal_height)
} else { } else {
0 0
} }
}, },
Key::PageDown => { Key::PageDown => {
y = if y.saturating_add(terminal_height) < height { y = if y.saturating_add(terminal_height) < height {
y + terminal_height as usize y.saturating_add(terminal_height)
} else { } else {
height height
} }
@ -356,28 +354,36 @@ impl Editor {
let mut welcome_message = format!("Hecto editor -- version {}", VERSION); let mut welcome_message = format!("Hecto editor -- version {}", VERSION);
let width = self.terminal.size().width as usize; let width = self.terminal.size().width as usize;
let len = welcome_message.len(); let len = welcome_message.len();
#[allow(clippy::integer_arithmetic, clippy::integer_division)]
let padding = width.saturating_sub(len) / 2; let padding = width.saturating_sub(len) / 2;
let spaces = " ".repeat(padding.saturating_sub(1)); let spaces = " ".repeat(padding.saturating_sub(1));
welcome_message = format!("~{}{}", spaces, welcome_message); welcome_message = format!("~{}{}", spaces, welcome_message);
welcome_message.truncate(width); welcome_message.truncate(width);
println!("{}\r", welcome_message); println!("{}\r", welcome_message);
} }
pub fn draw_row(&self, row: &Row) { pub fn draw_row(&self, row: &Row) {
let width = self.terminal.size().width as usize; let width = self.terminal.size().width as usize;
let start = self.offset.x; let start = self.offset.x;
let end = self.offset.x + width; let end = self.offset.x.saturating_add(width);
let row = row.render(start, end); let row = row.render(start, end);
println!("{}\r", row); println!("{}\r", row);
} }
#[allow(clippy::integer_arithmetic, clippy::integer_division)]
fn draw_rows(&self) { fn draw_rows(&self) {
let height = self.terminal.size().height; let height = self.terminal.size().height;
for terminal_row in 0..height { for terminal_row in 0..height {
Terminal::clear_current_line(); Terminal::clear_current_line();
if let Some(row) = self.document.row(terminal_row as usize + self.offset.y) { if let Some(row) = self
.document
.row(self.offset.y.saturating_add(terminal_row as usize))
{
self.draw_row(row); self.draw_row(row);
} else if self.document.is_empty() && terminal_row == height / 3 { } else if self.document.is_empty() && terminal_row == height / 3 {
self.draw_welcome_message(); self.draw_welcome_message();

View File

@ -1,4 +1,12 @@
#![warn(clippy::all, clippy::pedantic)] #![warn(clippy::all, clippy::pedantic, clippy::restriction)]
#![allow(
clippy::missing_docs_in_private_items,
clippy::implicit_return,
clippy::shadow_reuse,
clippy::print_stdout,
clippy::wildcard_enum_match_arm,
clippy::else_if_without_else
)]
mod document; mod document;
mod editor; mod editor;
mod row; mod row;

View File

@ -26,6 +26,7 @@ impl Row {
let mut result = String::new(); let mut result = String::new();
#[allow(clippy::integer_arithmetic)]
for grapheme in self.string[..] for grapheme in self.string[..]
.graphemes(true) .graphemes(true)
.skip(start) .skip(start)
@ -69,6 +70,7 @@ impl Row {
self.update_len(); self.update_len();
} }
#[allow(clippy::integer_arithmetic)]
pub fn delete(&mut self, at: usize) { pub fn delete(&mut self, at: usize) {
if at >= self.len() { if at >= self.len() {
return return