[INFO] updating cached repository chucksmash/hejmo [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/chucksmash/hejmo [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/chucksmash/hejmo" "work/ex/clippy-test-run/sources/stable/gh/chucksmash/hejmo"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/chucksmash/hejmo'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/chucksmash/hejmo" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/chucksmash/hejmo"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/chucksmash/hejmo'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 86a850454cbbcaa9d943bfe334b3a124875c4802 [INFO] sha for GitHub repo chucksmash/hejmo: 86a850454cbbcaa9d943bfe334b3a124875c4802 [INFO] validating manifest of chucksmash/hejmo on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of chucksmash/hejmo on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing chucksmash/hejmo [INFO] finished frobbing chucksmash/hejmo [INFO] frobbed toml for chucksmash/hejmo written to work/ex/clippy-test-run/sources/stable/gh/chucksmash/hejmo/Cargo.toml [INFO] started frobbing chucksmash/hejmo [INFO] finished frobbing chucksmash/hejmo [INFO] frobbed toml for chucksmash/hejmo written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/chucksmash/hejmo/Cargo.toml [INFO] crate chucksmash/hejmo has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting chucksmash/hejmo against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/chucksmash/hejmo:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 9b22af315872d21fe6cb7f192497f4093d07dc92d1c26735c179b0335b499af2 [INFO] running `"docker" "start" "-a" "9b22af315872d21fe6cb7f192497f4093d07dc92d1c26735c179b0335b499af2"` [INFO] [stderr] Checking bytecount v0.3.1 [INFO] [stderr] Checking hejmo v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/delta.rs:94:62 [INFO] [stderr] | [INFO] [stderr] 94 | let insert_chg = Delta::Insert { text: text.clone(), pos: pos }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/delta.rs:95:62 [INFO] [stderr] | [INFO] [stderr] 95 | let delete_chg = Delta::Delete { text: text.clone(), pos: pos }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/window.rs:49:13 [INFO] [stderr] | [INFO] [stderr] 49 | write!(screen, "{}\r\n", &line[..cols]).expect("Could not write to screen"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/delta.rs:94:62 [INFO] [stderr] | [INFO] [stderr] 94 | let insert_chg = Delta::Insert { text: text.clone(), pos: pos }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/delta.rs:95:62 [INFO] [stderr] | [INFO] [stderr] 95 | let delete_chg = Delta::Delete { text: text.clone(), pos: pos }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/window.rs:49:13 [INFO] [stderr] | [INFO] [stderr] 49 | write!(screen, "{}\r\n", &line[..cols]).expect("Could not write to screen"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cursor.rs:88:17 [INFO] [stderr] | [INFO] [stderr] 88 | return self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.clone()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cursor.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | return self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.clone()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/document.rs:112:9 [INFO] [stderr] | [INFO] [stderr] 112 | return self.offset_of_line(line + 1) - self.offset_of_line(line); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.offset_of_line(line + 1) - self.offset_of_line(line)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/rope/mod.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | pub mod rope; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: Unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stderr] --> src/window.rs:54:12 [INFO] [stderr] | [INFO] [stderr] 54 | if offset + 1 <= self.doc.num_chars() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::int_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stderr] help: change `>= y + 1` to `> y` as shown [INFO] [stderr] | [INFO] [stderr] 54 | if offset < self.doc.num_chars() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cursor.rs:88:17 [INFO] [stderr] | [INFO] [stderr] 88 | return self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.clone()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cursor.rs:114:17 [INFO] [stderr] | [INFO] [stderr] 114 | return self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.clone()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/document.rs:112:9 [INFO] [stderr] | [INFO] [stderr] 112 | return self.offset_of_line(line + 1) - self.offset_of_line(line); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.offset_of_line(line + 1) - self.offset_of_line(line)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/rope/mod.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | pub mod rope; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: Unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stderr] --> src/window.rs:54:12 [INFO] [stderr] | [INFO] [stderr] 54 | if offset + 1 <= self.doc.num_chars() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::int_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stderr] help: change `>= y + 1` to `> y` as shown [INFO] [stderr] | [INFO] [stderr] 54 | if offset < self.doc.num_chars() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `text` [INFO] [stderr] --> src/document.rs:76:33 [INFO] [stderr] | [INFO] [stderr] 76 | Delta::Delete { text, pos } => { [INFO] [stderr] | ^^^^ help: try ignoring the field: `text: _` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `text` [INFO] [stderr] --> src/document.rs:93:33 [INFO] [stderr] | [INFO] [stderr] 93 | Delta::Delete { text, pos } => { [INFO] [stderr] | ^^^^ help: try ignoring the field: `text: _` [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `bindings::Binding` [INFO] [stderr] --> src/bindings.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> Binding { [INFO] [stderr] 16 | | Binding {} [INFO] [stderr] 17 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 11 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/cursor.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | / match self.screen.col < document.line_len(self.document.line) { [INFO] [stderr] 71 | | true => { [INFO] [stderr] 72 | | let mut cursor = self.clone(); [INFO] [stderr] 73 | | cursor.document.offset += 1; [INFO] [stderr] ... | [INFO] [stderr] 89 | | }, [INFO] [stderr] 90 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 70 | if self.screen.col < document.line_len(self.document.line) { [INFO] [stderr] 71 | let mut cursor = self.clone(); [INFO] [stderr] 72 | cursor.document.offset += 1; [INFO] [stderr] 73 | cursor.screen.col += 1; [INFO] [stderr] 74 | cursor [INFO] [stderr] 75 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/cursor.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | / match self.screen.col > 1 { [INFO] [stderr] 96 | | true => { [INFO] [stderr] 97 | | let mut cursor = self.clone(); [INFO] [stderr] 98 | | cursor.document.offset -= 1; [INFO] [stderr] ... | [INFO] [stderr] 115 | | }, [INFO] [stderr] 116 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 95 | if self.screen.col > 1 { [INFO] [stderr] 96 | let mut cursor = self.clone(); [INFO] [stderr] 97 | cursor.document.offset -= 1; [INFO] [stderr] 98 | cursor.screen.col -= 1; [INFO] [stderr] 99 | cursor [INFO] [stderr] 100 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/cursor.rs:120:9 [INFO] [stderr] | [INFO] [stderr] 120 | / match 0 < self.document.line { [INFO] [stderr] 121 | | true => { [INFO] [stderr] 122 | | let mut cursor = self.clone(); [INFO] [stderr] 123 | | cursor.document.line = self.document.line - 1; [INFO] [stderr] ... | [INFO] [stderr] 136 | | false => self.clone(), [INFO] [stderr] 137 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 120 | if 0 < self.document.line { [INFO] [stderr] 121 | let mut cursor = self.clone(); [INFO] [stderr] 122 | cursor.document.line = self.document.line - 1; [INFO] [stderr] 123 | let line_offset = document.offset_of_line(cursor.document.line); [INFO] [stderr] 124 | let line_len = document.line_len(cursor.document.line); [INFO] [stderr] 125 | if cursor.screen.col >= line_len { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/cursor.rs:140:9 [INFO] [stderr] | [INFO] [stderr] 140 | / match document.num_lines() - self.document.line > 1 { [INFO] [stderr] 141 | | true => { [INFO] [stderr] 142 | | let mut cursor = self.clone(); [INFO] [stderr] 143 | | cursor.document.line = self.document.line + 1; [INFO] [stderr] ... | [INFO] [stderr] 156 | | false => self.clone(), [INFO] [stderr] 157 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 140 | if document.num_lines() - self.document.line > 1 { [INFO] [stderr] 141 | let mut cursor = self.clone(); [INFO] [stderr] 142 | cursor.document.line = self.document.line + 1; [INFO] [stderr] 143 | let line_offset = document.offset_of_line(cursor.document.line); [INFO] [stderr] 144 | let line_len = document.line_len(cursor.document.line); [INFO] [stderr] 145 | if cursor.screen.col >= line_len { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `delta::Deltas` [INFO] [stderr] --> src/delta.rs:47:5 [INFO] [stderr] | [INFO] [stderr] 47 | / pub fn new() -> Deltas { [INFO] [stderr] 48 | | Deltas { [INFO] [stderr] 49 | | deque: VecDeque::new(), [INFO] [stderr] 50 | | } [INFO] [stderr] 51 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 42 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `document::Document` [INFO] [stderr] --> src/document.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> Document { [INFO] [stderr] 16 | | Document { [INFO] [stderr] 17 | | rope: Rope::from(""), [INFO] [stderr] 18 | | undo: Deltas::new(), [INFO] [stderr] 19 | | redo: Deltas::new(), [INFO] [stderr] 20 | | } [INFO] [stderr] 21 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 13 | impl Default for document::Document { [INFO] [stderr] 14 | fn default() -> Self { [INFO] [stderr] 15 | Self::new() [INFO] [stderr] 16 | } [INFO] [stderr] 17 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `editor::Editor` [INFO] [stderr] --> src/editor.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / pub fn new() -> Editor { [INFO] [stderr] 31 | | let window = Window::from_file( [INFO] [stderr] 32 | | Path::new("/home/chuck/fun/hejmo/examples/lorem_short.txt")); [INFO] [stderr] 33 | | let screen = AlternateScreen::from( [INFO] [stderr] 34 | | io::stdout().into_raw_mode().expect("Could not acquire raw mode")); [INFO] [stderr] 35 | | Editor { window, screen, } [INFO] [stderr] 36 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 21 | impl Default for editor::Editor { [INFO] [stderr] 22 | fn default() -> Self { [INFO] [stderr] 23 | Self::new() [INFO] [stderr] 24 | } [INFO] [stderr] 25 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/rope/rope.rs:633:64 [INFO] [stderr] | [INFO] [stderr] 633 | result = cow_append(result, &self.fragment[.. i + 1]); [INFO] [stderr] | ^^^^^^^^ help: use: `..=i` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: trait `Leaf` has a `len` method but no (possibly inherited) `is_empty` method [INFO] [stderr] --> src/rope/tree.rs:61:1 [INFO] [stderr] | [INFO] [stderr] 61 | / pub trait Leaf: Sized + Clone + Default { [INFO] [stderr] 62 | | [INFO] [stderr] 63 | | /// Measurement of leaf in base units. [INFO] [stderr] 64 | | /// A 'base unit' refers to the smallest discrete unit [INFO] [stderr] ... | [INFO] [stderr] 95 | | } [INFO] [stderr] 96 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: item `rope::tree::Node` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/rope/tree.rs:171:1 [INFO] [stderr] | [INFO] [stderr] 171 | / impl Node { [INFO] [stderr] 172 | | pub fn from_leaf(l: N::L) -> Node { [INFO] [stderr] 173 | | let len = l.len(); [INFO] [stderr] 174 | | let info = N::compute_info(&l); [INFO] [stderr] ... | [INFO] [stderr] 419 | | } [INFO] [stderr] 420 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `children` [INFO] [stderr] --> src/rope/tree.rs:230:18 [INFO] [stderr] | [INFO] [stderr] 230 | for i in j .. children.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 230 | for (i, ) in children.iter().enumerate().skip(j) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `rope::tree::TreeBuilder` [INFO] [stderr] --> src/rope/tree.rs:431:5 [INFO] [stderr] | [INFO] [stderr] 431 | / pub fn new() -> TreeBuilder { [INFO] [stderr] 432 | | TreeBuilder(None) [INFO] [stderr] 433 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 428 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/rope/tree.rs:510:38 [INFO] [stderr] | [INFO] [stderr] 510 | pub fn is_boundary>(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/rope/tree.rs:585:5 [INFO] [stderr] | [INFO] [stderr] 585 | / pub fn next>(&mut self) -> Option<(usize)> { [INFO] [stderr] 586 | | if self.position >= self.root.len() || self.leaf.is_none() { [INFO] [stderr] 587 | | self.leaf = None; [INFO] [stderr] 588 | | return None; [INFO] [stderr] ... | [INFO] [stderr] 627 | | } [INFO] [stderr] 628 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `window::Window` [INFO] [stderr] --> src/window.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | / pub fn new() -> Window { [INFO] [stderr] 25 | | let (cols, rows) = terminal_size().expect("Could not read term size"); [INFO] [stderr] 26 | | Window { cols, rows, [INFO] [stderr] 27 | | cursor: Default::default(), [INFO] [stderr] 28 | | doc: Document::from_string("".to_owned()), } [INFO] [stderr] 29 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 23 | impl Default for window::Window { [INFO] [stderr] 24 | fn default() -> Self { [INFO] [stderr] 25 | Self::new() [INFO] [stderr] 26 | } [INFO] [stderr] 27 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused variable: `text` [INFO] [stderr] --> src/document.rs:76:33 [INFO] [stderr] | [INFO] [stderr] 76 | Delta::Delete { text, pos } => { [INFO] [stderr] | ^^^^ help: try ignoring the field: `text: _` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `text` [INFO] [stderr] --> src/document.rs:93:33 [INFO] [stderr] | [INFO] [stderr] 93 | Delta::Delete { text, pos } => { [INFO] [stderr] | ^^^^ help: try ignoring the field: `text: _` [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `bindings::Binding` [INFO] [stderr] --> src/bindings.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> Binding { [INFO] [stderr] 16 | | Binding {} [INFO] [stderr] 17 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 11 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/cursor.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | / match self.screen.col < document.line_len(self.document.line) { [INFO] [stderr] 71 | | true => { [INFO] [stderr] 72 | | let mut cursor = self.clone(); [INFO] [stderr] 73 | | cursor.document.offset += 1; [INFO] [stderr] ... | [INFO] [stderr] 89 | | }, [INFO] [stderr] 90 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 70 | if self.screen.col < document.line_len(self.document.line) { [INFO] [stderr] 71 | let mut cursor = self.clone(); [INFO] [stderr] 72 | cursor.document.offset += 1; [INFO] [stderr] 73 | cursor.screen.col += 1; [INFO] [stderr] 74 | cursor [INFO] [stderr] 75 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/cursor.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | / match self.screen.col > 1 { [INFO] [stderr] 96 | | true => { [INFO] [stderr] 97 | | let mut cursor = self.clone(); [INFO] [stderr] 98 | | cursor.document.offset -= 1; [INFO] [stderr] ... | [INFO] [stderr] 115 | | }, [INFO] [stderr] 116 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 95 | if self.screen.col > 1 { [INFO] [stderr] 96 | let mut cursor = self.clone(); [INFO] [stderr] 97 | cursor.document.offset -= 1; [INFO] [stderr] 98 | cursor.screen.col -= 1; [INFO] [stderr] 99 | cursor [INFO] [stderr] 100 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/cursor.rs:120:9 [INFO] [stderr] | [INFO] [stderr] 120 | / match 0 < self.document.line { [INFO] [stderr] 121 | | true => { [INFO] [stderr] 122 | | let mut cursor = self.clone(); [INFO] [stderr] 123 | | cursor.document.line = self.document.line - 1; [INFO] [stderr] ... | [INFO] [stderr] 136 | | false => self.clone(), [INFO] [stderr] 137 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 120 | if 0 < self.document.line { [INFO] [stderr] 121 | let mut cursor = self.clone(); [INFO] [stderr] 122 | cursor.document.line = self.document.line - 1; [INFO] [stderr] 123 | let line_offset = document.offset_of_line(cursor.document.line); [INFO] [stderr] 124 | let line_len = document.line_len(cursor.document.line); [INFO] [stderr] 125 | if cursor.screen.col >= line_len { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/cursor.rs:140:9 [INFO] [stderr] | [INFO] [stderr] 140 | / match document.num_lines() - self.document.line > 1 { [INFO] [stderr] 141 | | true => { [INFO] [stderr] 142 | | let mut cursor = self.clone(); [INFO] [stderr] 143 | | cursor.document.line = self.document.line + 1; [INFO] [stderr] ... | [INFO] [stderr] 156 | | false => self.clone(), [INFO] [stderr] 157 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 140 | if document.num_lines() - self.document.line > 1 { [INFO] [stderr] 141 | let mut cursor = self.clone(); [INFO] [stderr] 142 | cursor.document.line = self.document.line + 1; [INFO] [stderr] 143 | let line_offset = document.offset_of_line(cursor.document.line); [INFO] [stderr] 144 | let line_len = document.line_len(cursor.document.line); [INFO] [stderr] 145 | if cursor.screen.col >= line_len { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `delta::Deltas` [INFO] [stderr] --> src/delta.rs:47:5 [INFO] [stderr] | [INFO] [stderr] 47 | / pub fn new() -> Deltas { [INFO] [stderr] 48 | | Deltas { [INFO] [stderr] 49 | | deque: VecDeque::new(), [INFO] [stderr] 50 | | } [INFO] [stderr] 51 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 42 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `document::Document` [INFO] [stderr] --> src/document.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> Document { [INFO] [stderr] 16 | | Document { [INFO] [stderr] 17 | | rope: Rope::from(""), [INFO] [stderr] 18 | | undo: Deltas::new(), [INFO] [stderr] 19 | | redo: Deltas::new(), [INFO] [stderr] 20 | | } [INFO] [stderr] 21 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 13 | impl Default for document::Document { [INFO] [stderr] 14 | fn default() -> Self { [INFO] [stderr] 15 | Self::new() [INFO] [stderr] 16 | } [INFO] [stderr] 17 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `editor::Editor` [INFO] [stderr] --> src/editor.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / pub fn new() -> Editor { [INFO] [stderr] 31 | | let window = Window::from_file( [INFO] [stderr] 32 | | Path::new("/home/chuck/fun/hejmo/examples/lorem_short.txt")); [INFO] [stderr] 33 | | let screen = AlternateScreen::from( [INFO] [stderr] 34 | | io::stdout().into_raw_mode().expect("Could not acquire raw mode")); [INFO] [stderr] 35 | | Editor { window, screen, } [INFO] [stderr] 36 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 21 | impl Default for editor::Editor { [INFO] [stderr] 22 | fn default() -> Self { [INFO] [stderr] 23 | Self::new() [INFO] [stderr] 24 | } [INFO] [stderr] 25 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/rope/rope.rs:633:64 [INFO] [stderr] | [INFO] [stderr] 633 | result = cow_append(result, &self.fragment[.. i + 1]); [INFO] [stderr] | ^^^^^^^^ help: use: `..=i` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/rope/rope.rs:835:28 [INFO] [stderr] | [INFO] [stderr] 835 | Rope::from(String::from(s1.clone()) + "\u{1f1fa}"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `s1.clone()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `==` [INFO] [stderr] --> src/rope/rope.rs:889:17 [INFO] [stderr] | [INFO] [stderr] 889 | assert!(empty == empty); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::eq_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] warning: trait `Leaf` has a `len` method but no (possibly inherited) `is_empty` method [INFO] [stderr] --> src/rope/tree.rs:61:1 [INFO] [stderr] | [INFO] [stderr] 61 | / pub trait Leaf: Sized + Clone + Default { [INFO] [stderr] 62 | | [INFO] [stderr] 63 | | /// Measurement of leaf in base units. [INFO] [stderr] 64 | | /// A 'base unit' refers to the smallest discrete unit [INFO] [stderr] ... | [INFO] [stderr] 95 | | } [INFO] [stderr] 96 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: item `rope::tree::Node` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/rope/tree.rs:171:1 [INFO] [stderr] | [INFO] [stderr] 171 | / impl Node { [INFO] [stderr] 172 | | pub fn from_leaf(l: N::L) -> Node { [INFO] [stderr] 173 | | let len = l.len(); [INFO] [stderr] 174 | | let info = N::compute_info(&l); [INFO] [stderr] ... | [INFO] [stderr] 419 | | } [INFO] [stderr] 420 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `children` [INFO] [stderr] --> src/rope/tree.rs:230:18 [INFO] [stderr] | [INFO] [stderr] 230 | for i in j .. children.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 230 | for (i, ) in children.iter().enumerate().skip(j) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `rope::tree::TreeBuilder` [INFO] [stderr] --> src/rope/tree.rs:431:5 [INFO] [stderr] | [INFO] [stderr] 431 | / pub fn new() -> TreeBuilder { [INFO] [stderr] 432 | | TreeBuilder(None) [INFO] [stderr] 433 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 428 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/rope/tree.rs:510:38 [INFO] [stderr] | [INFO] [stderr] 510 | pub fn is_boundary>(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/rope/tree.rs:585:5 [INFO] [stderr] | [INFO] [stderr] 585 | / pub fn next>(&mut self) -> Option<(usize)> { [INFO] [stderr] 586 | | if self.position >= self.root.len() || self.leaf.is_none() { [INFO] [stderr] 587 | | self.leaf = None; [INFO] [stderr] 588 | | return None; [INFO] [stderr] ... | [INFO] [stderr] 627 | | } [INFO] [stderr] 628 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `window::Window` [INFO] [stderr] --> src/window.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | / pub fn new() -> Window { [INFO] [stderr] 25 | | let (cols, rows) = terminal_size().expect("Could not read term size"); [INFO] [stderr] 26 | | Window { cols, rows, [INFO] [stderr] 27 | | cursor: Default::default(), [INFO] [stderr] 28 | | doc: Document::from_string("".to_owned()), } [INFO] [stderr] 29 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 23 | impl Default for window::Window { [INFO] [stderr] 24 | fn default() -> Self { [INFO] [stderr] 25 | Self::new() [INFO] [stderr] 26 | } [INFO] [stderr] 27 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `hejmo`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "9b22af315872d21fe6cb7f192497f4093d07dc92d1c26735c179b0335b499af2"` [INFO] running `"docker" "rm" "-f" "9b22af315872d21fe6cb7f192497f4093d07dc92d1c26735c179b0335b499af2"` [INFO] [stdout] 9b22af315872d21fe6cb7f192497f4093d07dc92d1c26735c179b0335b499af2