Add more clippy warnings, and solve a bunch of them
This commit is contained in:
parent
cf0c576284
commit
297ff6b80b
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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();
|
||||||
|
10
src/main.rs
10
src/main.rs
@ -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;
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user