[INFO] updating cached repository nbouscal/kilo.rs [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/nbouscal/kilo.rs [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/nbouscal/kilo.rs" "work/ex/clippy-test-run/sources/stable/gh/nbouscal/kilo.rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/nbouscal/kilo.rs'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/nbouscal/kilo.rs" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nbouscal/kilo.rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nbouscal/kilo.rs'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] a75269e2af8701283fb4859eca35acc8b0e84028 [INFO] sha for GitHub repo nbouscal/kilo.rs: a75269e2af8701283fb4859eca35acc8b0e84028 [INFO] validating manifest of nbouscal/kilo.rs 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 nbouscal/kilo.rs 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 nbouscal/kilo.rs [INFO] finished frobbing nbouscal/kilo.rs [INFO] frobbed toml for nbouscal/kilo.rs written to work/ex/clippy-test-run/sources/stable/gh/nbouscal/kilo.rs/Cargo.toml [INFO] started frobbing nbouscal/kilo.rs [INFO] finished frobbing nbouscal/kilo.rs [INFO] frobbed toml for nbouscal/kilo.rs written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nbouscal/kilo.rs/Cargo.toml [INFO] crate nbouscal/kilo.rs 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 nbouscal/kilo.rs against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/nbouscal/kilo.rs:/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] a7cb6bfd7cc8acd3942a14069919de6a40886dcbc1c780dc61cb31a1a289ad7c [INFO] running `"docker" "start" "-a" "a7cb6bfd7cc8acd3942a14069919de6a40886dcbc1c780dc61cb31a1a289ad7c"` [INFO] [stderr] Checking kilo v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/editor/mod.rs:248:21 [INFO] [stderr] | [INFO] [stderr] 248 | cursor: cursor, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `cursor` [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/editor/mod.rs:269:64 [INFO] [stderr] | [INFO] [stderr] 269 | res.map(|(option_x, y)| Cursor { x: option_x.unwrap(), y: y }) [INFO] [stderr] | ^^^^ help: replace it with: `y` [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: redundant field names in struct initialization [INFO] [stderr] --> src/editor/mod.rs:248:21 [INFO] [stderr] | [INFO] [stderr] 248 | cursor: cursor, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `cursor` [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/editor/mod.rs:269:64 [INFO] [stderr] | [INFO] [stderr] 269 | res.map(|(option_x, y)| Cursor { x: option_x.unwrap(), y: y }) [INFO] [stderr] | ^^^^ help: replace it with: `y` [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: this if statement can be collapsed [INFO] [stderr] --> src/editor/row.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | / if in_string.is_none() && !in_mlcomment && opens_comment { [INFO] [stderr] 165 | | if self.render.chars().skip(i).collect::().starts_with(scs) { [INFO] [stderr] 166 | | for j in i..self.highlight.len() { [INFO] [stderr] 167 | | self.highlight[j] = Highlight::Comment; [INFO] [stderr] ... | [INFO] [stderr] 170 | | } [INFO] [stderr] 171 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 164 | if in_string.is_none() && !in_mlcomment && opens_comment && self.render.chars().skip(i).collect::().starts_with(scs) { [INFO] [stderr] 165 | for j in i..self.highlight.len() { [INFO] [stderr] 166 | self.highlight[j] = Highlight::Comment; [INFO] [stderr] 167 | } [INFO] [stderr] 168 | break; [INFO] [stderr] 169 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/editor/row.rs:192:24 [INFO] [stderr] | [INFO] [stderr] 192 | } else if opens_comment { [INFO] [stderr] | ________________________^ [INFO] [stderr] 193 | | if self.render.chars().skip(i).collect::().starts_with(mcs) { [INFO] [stderr] 194 | | self.highlight[i] = Highlight::MLComment; [INFO] [stderr] 195 | | for j in 1..mcs.len() { [INFO] [stderr] ... | [INFO] [stderr] 201 | | } [INFO] [stderr] 202 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 192 | } else if opens_comment && self.render.chars().skip(i).collect::().starts_with(mcs) { [INFO] [stderr] 193 | self.highlight[i] = Highlight::MLComment; [INFO] [stderr] 194 | for j in 1..mcs.len() { [INFO] [stderr] 195 | self.highlight[i + j] = Highlight::MLComment; [INFO] [stderr] 196 | iter.next(); [INFO] [stderr] 197 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/editor/row.rs:235:13 [INFO] [stderr] | [INFO] [stderr] 235 | / if syntax.flags.contains(&Flag::HighlightNumbers) { [INFO] [stderr] 236 | | if (c.is_digit(10) && (prev_sep || prev_hl == Highlight::Number)) || (c == '.' && prev_hl == Highlight::Number) { [INFO] [stderr] 237 | | prev_sep = false; [INFO] [stderr] 238 | | self.highlight[i] = Highlight::Number; [INFO] [stderr] 239 | | continue; [INFO] [stderr] 240 | | } [INFO] [stderr] 241 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 235 | if syntax.flags.contains(&Flag::HighlightNumbers) && ((c.is_digit(10) && (prev_sep || prev_hl == Highlight::Number)) || (c == '.' && prev_hl == Highlight::Number)) { [INFO] [stderr] 236 | prev_sep = false; [INFO] [stderr] 237 | self.highlight[i] = Highlight::Number; [INFO] [stderr] 238 | continue; [INFO] [stderr] 239 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/editor/mod.rs:22:22 [INFO] [stderr] | [INFO] [stderr] 22 | const KILO_VERSION: &'static str = "0.0.1"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/editor/row.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | / if in_string.is_none() && !in_mlcomment && opens_comment { [INFO] [stderr] 165 | | if self.render.chars().skip(i).collect::().starts_with(scs) { [INFO] [stderr] 166 | | for j in i..self.highlight.len() { [INFO] [stderr] 167 | | self.highlight[j] = Highlight::Comment; [INFO] [stderr] ... | [INFO] [stderr] 170 | | } [INFO] [stderr] 171 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 164 | if in_string.is_none() && !in_mlcomment && opens_comment && self.render.chars().skip(i).collect::().starts_with(scs) { [INFO] [stderr] 165 | for j in i..self.highlight.len() { [INFO] [stderr] 166 | self.highlight[j] = Highlight::Comment; [INFO] [stderr] 167 | } [INFO] [stderr] 168 | break; [INFO] [stderr] 169 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/editor/row.rs:192:24 [INFO] [stderr] | [INFO] [stderr] 192 | } else if opens_comment { [INFO] [stderr] | ________________________^ [INFO] [stderr] 193 | | if self.render.chars().skip(i).collect::().starts_with(mcs) { [INFO] [stderr] 194 | | self.highlight[i] = Highlight::MLComment; [INFO] [stderr] 195 | | for j in 1..mcs.len() { [INFO] [stderr] ... | [INFO] [stderr] 201 | | } [INFO] [stderr] 202 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 192 | } else if opens_comment && self.render.chars().skip(i).collect::().starts_with(mcs) { [INFO] [stderr] 193 | self.highlight[i] = Highlight::MLComment; [INFO] [stderr] 194 | for j in 1..mcs.len() { [INFO] [stderr] 195 | self.highlight[i + j] = Highlight::MLComment; [INFO] [stderr] 196 | iter.next(); [INFO] [stderr] 197 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/editor/row.rs:235:13 [INFO] [stderr] | [INFO] [stderr] 235 | / if syntax.flags.contains(&Flag::HighlightNumbers) { [INFO] [stderr] 236 | | if (c.is_digit(10) && (prev_sep || prev_hl == Highlight::Number)) || (c == '.' && prev_hl == Highlight::Number) { [INFO] [stderr] 237 | | prev_sep = false; [INFO] [stderr] 238 | | self.highlight[i] = Highlight::Number; [INFO] [stderr] 239 | | continue; [INFO] [stderr] 240 | | } [INFO] [stderr] 241 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 235 | if syntax.flags.contains(&Flag::HighlightNumbers) && ((c.is_digit(10) && (prev_sep || prev_hl == Highlight::Number)) || (c == '.' && prev_hl == Highlight::Number)) { [INFO] [stderr] 236 | prev_sep = false; [INFO] [stderr] 237 | self.highlight[i] = Highlight::Number; [INFO] [stderr] 238 | continue; [INFO] [stderr] 239 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/editor/mod.rs:22:22 [INFO] [stderr] | [INFO] [stderr] 22 | const KILO_VERSION: &'static str = "0.0.1"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/editor/mod.rs:93:17 [INFO] [stderr] | [INFO] [stderr] 93 | let mut current_row = self.current_row_mut().unwrap(); [INFO] [stderr] | ----^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: some ranges overlap [INFO] [stderr] --> src/editor/key.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | 1...31 => Some(Key::Control((byte | 0x40) as char)), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_overlapping_arm)] on by default [INFO] [stderr] note: overlaps with this [INFO] [stderr] --> src/editor/key.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | 8 | 127 => Some(Key::Backspace), [INFO] [stderr] | ^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/editor/mod.rs:93:17 [INFO] [stderr] | [INFO] [stderr] 93 | let mut current_row = self.current_row_mut().unwrap(); [INFO] [stderr] | ----^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/editor/row.rs:30:21 [INFO] [stderr] | [INFO] [stderr] 30 | pub fn to_color(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/editor/row.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match kw { [INFO] [stderr] 44 | | &Keyword::One(_) => Highlight::Keyword1, [INFO] [stderr] 45 | | &Keyword::Two(_) => Highlight::Keyword2, [INFO] [stderr] 46 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 43 | match *kw { [INFO] [stderr] 44 | Keyword::One(_) => Highlight::Keyword1, [INFO] [stderr] 45 | Keyword::Two(_) => Highlight::Keyword2, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/editor/row.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | / match self { [INFO] [stderr] 58 | | &InString::SingleQuoted => '\'', [INFO] [stderr] 59 | | &InString::DoubleQuoted => '"', [INFO] [stderr] 60 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 57 | match *self { [INFO] [stderr] 58 | InString::SingleQuoted => '\'', [INFO] [stderr] 59 | InString::DoubleQuoted => '"', [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 27 [INFO] [stderr] --> src/editor/row.rs:131:5 [INFO] [stderr] | [INFO] [stderr] 131 | / pub fn update_syntax(&mut self) { [INFO] [stderr] 132 | | self.highlight = iter::repeat(Highlight::Normal) [INFO] [stderr] 133 | | .take(self.render.chars().count()).collect(); [INFO] [stderr] 134 | | [INFO] [stderr] ... | [INFO] [stderr] 264 | | } [INFO] [stderr] 265 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/editor/row.rs:219:29 [INFO] [stderr] | [INFO] [stderr] 219 | / match iter.next() { [INFO] [stderr] 220 | | Some((j, _)) => { [INFO] [stderr] 221 | | self.highlight[j] = Highlight::String; [INFO] [stderr] 222 | | continue; [INFO] [stderr] 223 | | }, [INFO] [stderr] 224 | | None => (), [INFO] [stderr] 225 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 219 | if let Some((j, _)) = iter.next() { [INFO] [stderr] 220 | self.highlight[j] = Highlight::String; [INFO] [stderr] 221 | continue; [INFO] [stderr] 222 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/editor/syntax.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | / match self { [INFO] [stderr] 31 | | &Keyword::One(s) => s, [INFO] [stderr] 32 | | &Keyword::Two(s) => s, [INFO] [stderr] 33 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 30 | match *self { [INFO] [stderr] 31 | Keyword::One(s) => s, [INFO] [stderr] 32 | Keyword::Two(s) => s, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/editor/syntax.rs:100:24 [INFO] [stderr] | [INFO] [stderr] 100 | if matched.chars().next().unwrap() == '.' || [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `matched.starts_with('.')` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::chars_next_cmp)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/editor/mod.rs:161:25 [INFO] [stderr] | [INFO] [stderr] 161 | .map(|line| line.unwrap_or(String::new())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `line.unwrap_or_default()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/editor/mod.rs:245:9 [INFO] [stderr] | [INFO] [stderr] 245 | / match res { [INFO] [stderr] 246 | | Some(cursor) => { [INFO] [stderr] 247 | | self.search_state.last_match = Some(Match { [INFO] [stderr] 248 | | cursor: cursor, [INFO] [stderr] ... | [INFO] [stderr] 258 | | _ => (), [INFO] [stderr] 259 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 245 | if let Some(cursor) = res { [INFO] [stderr] 246 | self.search_state.last_match = Some(Match { [INFO] [stderr] 247 | cursor: cursor, [INFO] [stderr] 248 | highlight: self.rows[cursor.y].highlight.clone() [INFO] [stderr] 249 | }); [INFO] [stderr] 250 | self.cursor = cursor; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/editor/mod.rs:328:21 [INFO] [stderr] | [INFO] [stderr] 328 | let ref row = self.rows[file_row]; [INFO] [stderr] | ----^^^^^^^----------------------- help: try: `let row = &self.rows[file_row];` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/editor/mod.rs:335:34 [INFO] [stderr] | [INFO] [stderr] 335 | ('@' as u8 + c as u8) as char [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'@' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: this block may be rewritten with the `?` operator [INFO] [stderr] --> src/editor/mod.rs:410:9 [INFO] [stderr] | [INFO] [stderr] 410 | if c.is_none() { return None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace_it_with: `c?;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::question_mark)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/editor/mod.rs:455:24 [INFO] [stderr] | [INFO] [stderr] 455 | if buffer.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/editor/mod.rs:483:17 [INFO] [stderr] | [INFO] [stderr] 483 | / match self.current_row_size() { [INFO] [stderr] 484 | | Some(current_row_size) => { [INFO] [stderr] 485 | | if self.cursor.x < current_row_size { [INFO] [stderr] 486 | | self.cursor.x += 1 [INFO] [stderr] ... | [INFO] [stderr] 492 | | None => () [INFO] [stderr] 493 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 483 | if let Some(current_row_size) = self.current_row_size() { [INFO] [stderr] 484 | if self.cursor.x < current_row_size { [INFO] [stderr] 485 | self.cursor.x += 1 [INFO] [stderr] 486 | } else if self.cursor.x == current_row_size { [INFO] [stderr] 487 | self.cursor.y += 1; [INFO] [stderr] 488 | self.cursor.x = 0; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: The function/method `libc::tcsetattr` doesn't need a mutable reference [INFO] [stderr] --> src/terminal.rs:12:74 [INFO] [stderr] | [INFO] [stderr] 12 | let errno = libc::tcsetattr(libc::STDIN_FILENO, libc::TCSAFLUSH, &mut termios); [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: The function/method `libc::tcsetattr` doesn't need a mutable reference [INFO] [stderr] --> src/terminal.rs:34:74 [INFO] [stderr] | [INFO] [stderr] 34 | let errno = libc::tcsetattr(libc::STDIN_FILENO, libc::TCSAFLUSH, &mut termios); [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: some ranges overlap [INFO] [stderr] --> src/editor/key.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | 1...31 => Some(Key::Control((byte | 0x40) as char)), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_overlapping_arm)] on by default [INFO] [stderr] note: overlaps with this [INFO] [stderr] --> src/editor/key.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | 8 | 127 => Some(Key::Backspace), [INFO] [stderr] | ^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/editor/row.rs:30:21 [INFO] [stderr] | [INFO] [stderr] 30 | pub fn to_color(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/editor/row.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match kw { [INFO] [stderr] 44 | | &Keyword::One(_) => Highlight::Keyword1, [INFO] [stderr] 45 | | &Keyword::Two(_) => Highlight::Keyword2, [INFO] [stderr] 46 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 43 | match *kw { [INFO] [stderr] 44 | Keyword::One(_) => Highlight::Keyword1, [INFO] [stderr] 45 | Keyword::Two(_) => Highlight::Keyword2, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/editor/row.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | / match self { [INFO] [stderr] 58 | | &InString::SingleQuoted => '\'', [INFO] [stderr] 59 | | &InString::DoubleQuoted => '"', [INFO] [stderr] 60 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 57 | match *self { [INFO] [stderr] 58 | InString::SingleQuoted => '\'', [INFO] [stderr] 59 | InString::DoubleQuoted => '"', [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 27 [INFO] [stderr] --> src/editor/row.rs:131:5 [INFO] [stderr] | [INFO] [stderr] 131 | / pub fn update_syntax(&mut self) { [INFO] [stderr] 132 | | self.highlight = iter::repeat(Highlight::Normal) [INFO] [stderr] 133 | | .take(self.render.chars().count()).collect(); [INFO] [stderr] 134 | | [INFO] [stderr] ... | [INFO] [stderr] 264 | | } [INFO] [stderr] 265 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/editor/row.rs:219:29 [INFO] [stderr] | [INFO] [stderr] 219 | / match iter.next() { [INFO] [stderr] 220 | | Some((j, _)) => { [INFO] [stderr] 221 | | self.highlight[j] = Highlight::String; [INFO] [stderr] 222 | | continue; [INFO] [stderr] 223 | | }, [INFO] [stderr] 224 | | None => (), [INFO] [stderr] 225 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 219 | if let Some((j, _)) = iter.next() { [INFO] [stderr] 220 | self.highlight[j] = Highlight::String; [INFO] [stderr] 221 | continue; [INFO] [stderr] 222 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/editor/syntax.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | / match self { [INFO] [stderr] 31 | | &Keyword::One(s) => s, [INFO] [stderr] 32 | | &Keyword::Two(s) => s, [INFO] [stderr] 33 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 30 | match *self { [INFO] [stderr] 31 | Keyword::One(s) => s, [INFO] [stderr] 32 | Keyword::Two(s) => s, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should use the `starts_with` method [INFO] [stderr] --> src/editor/syntax.rs:100:24 [INFO] [stderr] | [INFO] [stderr] 100 | if matched.chars().next().unwrap() == '.' || [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `matched.starts_with('.')` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::chars_next_cmp)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/editor/mod.rs:161:25 [INFO] [stderr] | [INFO] [stderr] 161 | .map(|line| line.unwrap_or(String::new())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `line.unwrap_or_default()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/editor/mod.rs:245:9 [INFO] [stderr] | [INFO] [stderr] 245 | / match res { [INFO] [stderr] 246 | | Some(cursor) => { [INFO] [stderr] 247 | | self.search_state.last_match = Some(Match { [INFO] [stderr] 248 | | cursor: cursor, [INFO] [stderr] ... | [INFO] [stderr] 258 | | _ => (), [INFO] [stderr] 259 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 245 | if let Some(cursor) = res { [INFO] [stderr] 246 | self.search_state.last_match = Some(Match { [INFO] [stderr] 247 | cursor: cursor, [INFO] [stderr] 248 | highlight: self.rows[cursor.y].highlight.clone() [INFO] [stderr] 249 | }); [INFO] [stderr] 250 | self.cursor = cursor; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/editor/mod.rs:328:21 [INFO] [stderr] | [INFO] [stderr] 328 | let ref row = self.rows[file_row]; [INFO] [stderr] | ----^^^^^^^----------------------- help: try: `let row = &self.rows[file_row];` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/editor/mod.rs:335:34 [INFO] [stderr] | [INFO] [stderr] 335 | ('@' as u8 + c as u8) as char [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'@' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: this block may be rewritten with the `?` operator [INFO] [stderr] --> src/editor/mod.rs:410:9 [INFO] [stderr] | [INFO] [stderr] 410 | if c.is_none() { return None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace_it_with: `c?;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::question_mark)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/editor/mod.rs:455:24 [INFO] [stderr] | [INFO] [stderr] 455 | if buffer.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/editor/mod.rs:483:17 [INFO] [stderr] | [INFO] [stderr] 483 | / match self.current_row_size() { [INFO] [stderr] 484 | | Some(current_row_size) => { [INFO] [stderr] 485 | | if self.cursor.x < current_row_size { [INFO] [stderr] 486 | | self.cursor.x += 1 [INFO] [stderr] ... | [INFO] [stderr] 492 | | None => () [INFO] [stderr] 493 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 483 | if let Some(current_row_size) = self.current_row_size() { [INFO] [stderr] 484 | if self.cursor.x < current_row_size { [INFO] [stderr] 485 | self.cursor.x += 1 [INFO] [stderr] 486 | } else if self.cursor.x == current_row_size { [INFO] [stderr] 487 | self.cursor.y += 1; [INFO] [stderr] 488 | self.cursor.x = 0; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: The function/method `libc::tcsetattr` doesn't need a mutable reference [INFO] [stderr] --> src/terminal.rs:12:74 [INFO] [stderr] | [INFO] [stderr] 12 | let errno = libc::tcsetattr(libc::STDIN_FILENO, libc::TCSAFLUSH, &mut termios); [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: The function/method `libc::tcsetattr` doesn't need a mutable reference [INFO] [stderr] --> src/terminal.rs:34:74 [INFO] [stderr] | [INFO] [stderr] 34 | let errno = libc::tcsetattr(libc::STDIN_FILENO, libc::TCSAFLUSH, &mut termios); [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 0.82s [INFO] running `"docker" "inspect" "a7cb6bfd7cc8acd3942a14069919de6a40886dcbc1c780dc61cb31a1a289ad7c"` [INFO] running `"docker" "rm" "-f" "a7cb6bfd7cc8acd3942a14069919de6a40886dcbc1c780dc61cb31a1a289ad7c"` [INFO] [stdout] a7cb6bfd7cc8acd3942a14069919de6a40886dcbc1c780dc61cb31a1a289ad7c