[INFO] fetching crate headifier 0.2.0... [INFO] linting headifier-0.2.0 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate headifier 0.2.0 into /workspace/builds/worker-0-tc1/source [INFO] started tweaking crates.io crate headifier 0.2.0 [INFO] finished tweaking crates.io crate headifier 0.2.0 [INFO] tweaked toml for crates.io crate headifier 0.2.0 written to /workspace/builds/worker-0-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate headifier 0.2.0 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate headifier 0.2.0 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded strum_macros v0.25.3 [INFO] [stderr] Downloaded wildmatch v2.1.1 [INFO] [stderr] Downloaded ratatui v0.23.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 253c426a1211d7baf04a66eab02b005527a032b5c4a67ed0cceb3c02d731fde4 [INFO] running `Command { std: "docker" "start" "-a" "253c426a1211d7baf04a66eab02b005527a032b5c4a67ed0cceb3c02d731fde4", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "253c426a1211d7baf04a66eab02b005527a032b5c4a67ed0cceb3c02d731fde4", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "253c426a1211d7baf04a66eab02b005527a032b5c4a67ed0cceb3c02d731fde4", kill_on_drop: false }` [INFO] [stdout] 253c426a1211d7baf04a66eab02b005527a032b5c4a67ed0cceb3c02d731fde4 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] da5df0bcd27359f3fa291ced48a1cd1b9d64af70d2e5096fc59079f64f3fc018 [INFO] running `Command { std: "docker" "start" "-a" "da5df0bcd27359f3fa291ced48a1cd1b9d64af70d2e5096fc59079f64f3fc018", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.149 [INFO] [stderr] Compiling proc-macro2 v1.0.69 [INFO] [stderr] Compiling rustversion v1.0.14 [INFO] [stderr] Checking smallvec v1.11.1 [INFO] [stderr] Compiling paste v1.0.14 [INFO] [stderr] Checking bitflags v2.4.1 [INFO] [stderr] Checking either v1.9.0 [INFO] [stderr] Checking unicode-segmentation v1.10.1 [INFO] [stderr] Compiling indoc v2.0.4 [INFO] [stderr] Checking itertools v0.11.0 [INFO] [stderr] Checking unicode-width v0.1.11 [INFO] [stderr] Checking wildmatch v2.1.1 [INFO] [stderr] Compiling quote v1.0.33 [INFO] [stderr] Checking signal-hook-registry v1.4.1 [INFO] [stderr] Checking mio v0.8.8 [INFO] [stderr] Checking parking_lot_core v0.9.9 [INFO] [stderr] Checking signal-hook v0.3.17 [INFO] [stderr] Checking parking_lot v0.12.1 [INFO] [stderr] Compiling syn v2.0.38 [INFO] [stderr] Checking signal-hook-mio v0.2.3 [INFO] [stderr] Checking crossterm v0.27.0 [INFO] [stderr] Compiling strum_macros v0.25.3 [INFO] [stderr] Checking strum v0.25.0 [INFO] [stderr] Checking ratatui v0.23.0 [INFO] [stderr] Checking headifier v0.2.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `self` [INFO] [stdout] --> src/core.rs:14:22 [INFO] [stdout] | [INFO] [stdout] 14 | use crate::ui::app::{self, Mode}; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `thread::sleep` and `time::Duration` [INFO] [stdout] --> src/ui/app.rs:7:26 [INFO] [stdout] | [INFO] [stdout] 7 | use std::{path::PathBuf, time::Duration, thread::sleep}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::ops::Index` [INFO] [stdout] --> src/ui/ui.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::ops::Index; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `thread::sleep` and `time::Duration` [INFO] [stdout] --> src/ui/update.rs:4:11 [INFO] [stdout] | [INFO] [stdout] 4 | use std::{time::Duration, thread::sleep}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/core.rs:85:12 [INFO] [stdout] | [INFO] [stdout] 85 | .map(|(i, line)| { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `self` [INFO] [stdout] --> src/core.rs:14:22 [INFO] [stdout] | [INFO] [stdout] 14 | use crate::ui::app::{self, Mode}; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::Path` [INFO] [stdout] --> src/core.rs:264:9 [INFO] [stdout] | [INFO] [stdout] 264 | use std::path::Path; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `thread::sleep` and `time::Duration` [INFO] [stdout] --> src/ui/app.rs:7:26 [INFO] [stdout] | [INFO] [stdout] 7 | use std::{path::PathBuf, time::Duration, thread::sleep}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::ops::Index` [INFO] [stdout] --> src/ui/ui.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::ops::Index; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `thread::sleep` and `time::Duration` [INFO] [stdout] --> src/ui/update.rs:4:11 [INFO] [stdout] | [INFO] [stdout] 4 | use std::{time::Duration, thread::sleep}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `sender` and `handler` are never read [INFO] [stdout] --> src/ui/event.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct EventHandler { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 32 | /// Event sender channel. [INFO] [stdout] 33 | sender: mpsc::Sender, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 37 | handler: thread::JoinHandle<()>, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `EventHandler` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/core.rs:30:8 [INFO] [stdout] | [INFO] [stdout] 30 | if path == None { [INFO] [stdout] | ^^^^^^^^^^^^ help: use `Option::is_none()` instead: `path.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/core.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 49 | / match file_path { [INFO] [stdout] 50 | | Some(fp) => Some(read_file(&fp)), [INFO] [stdout] 51 | | None => None, [INFO] [stdout] 52 | | } [INFO] [stdout] | |_____^ help: try: `file_path.map(|fp| read_file(&fp))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core.rs:71:5 [INFO] [stdout] | [INFO] [stdout] 71 | return is_edited [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 71 - return is_edited [INFO] [stdout] 71 + is_edited [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/core.rs:65:49 [INFO] [stdout] | [INFO] [stdout] 65 | if comment_count == 0 && *mode == Mode::Add { [INFO] [stdout] | _________________________________________________^ [INFO] [stdout] 66 | | is_edited = true [INFO] [stdout] 67 | | } else if *mode == Mode::Replace { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/core.rs:67:38 [INFO] [stdout] | [INFO] [stdout] 67 | } else if *mode == Mode::Replace { [INFO] [stdout] | ______________________________________^ [INFO] [stdout] 68 | | is_edited = true [INFO] [stdout] 69 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core.rs:104:5 [INFO] [stdout] | [INFO] [stdout] 104 | return (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 104 - return (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] 104 + (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/core.rs:78:30 [INFO] [stdout] | [INFO] [stdout] 78 | fn contains_header(contents: &String, mode: &Mode) -> (String, i32) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 78 - fn contains_header(contents: &String, mode: &Mode) -> (String, i32) { [INFO] [stdout] 78 + fn contains_header(contents: &str, mode: &Mode) -> (String, i32) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | return format!("{}\n", line) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 99 - return format!("{}\n", line) [INFO] [stdout] 99 + format!("{}\n", line) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/core.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | return (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `new_contents[0..new_contents.len()-1].to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/core.rs:104:26 [INFO] [stdout] | [INFO] [stdout] 104 | return (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this: `&new_contents[0..new_contents.len()-1]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core.rs:125:5 [INFO] [stdout] | [INFO] [stdout] 125 | return (contents, comment_count); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 125 - return (contents, comment_count); [INFO] [stdout] 125 + (contents, comment_count) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/core.rs:129:19 [INFO] [stdout] | [INFO] [stdout] 129 | include_list: &mut Vec, header: &str, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 129 ~ include_list: &mut [String], header: &str, [INFO] [stdout] 130 | applied_list: &mut Vec, [INFO] [stdout] ... [INFO] [stdout] 145 | [INFO] [stdout] 146 ~ for include in include_list.to_owned() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:136:40 [INFO] [stdout] | [INFO] [stdout] 136 | let wildmatch = WildMatch::new(&ignore); [INFO] [stdout] | ^^^^^^^ help: change this to: `ignore` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/core.rs:181:28 [INFO] [stdout] | [INFO] [stdout] 181 | if !(l.len() == 0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `(l.len() != 0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/core.rs:195:5 [INFO] [stdout] | [INFO] [stdout] 173 | / let ignore_lines = match find_get_ignore(dir) { [INFO] [stdout] 174 | | Ok(path) => { [INFO] [stdout] 175 | | let buf_reader = BufReader::new(File::open(path).unwrap()); [INFO] [stdout] ... | [INFO] [stdout] 193 | | }; [INFO] [stdout] | |______- unnecessary `let` binding [INFO] [stdout] 194 | [INFO] [stdout] 195 | ignore_lines [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 173 ~ [INFO] [stdout] 174 | [INFO] [stdout] 175 ~ match find_get_ignore(dir) { [INFO] [stdout] 176 + Ok(path) => { [INFO] [stdout] 177 + let buf_reader = BufReader::new(File::open(path).unwrap()); [INFO] [stdout] 178 + [INFO] [stdout] 179 + let mut ignore_lines: Vec = vec![]; [INFO] [stdout] 180 + for line in buf_reader.lines() { [INFO] [stdout] 181 + match line { [INFO] [stdout] 182 + Ok(l) => { [INFO] [stdout] 183 + if !(l.len() == 0) { [INFO] [stdout] 184 + ignore_lines.push(l.to_ascii_lowercase()) [INFO] [stdout] 185 + } [INFO] [stdout] 186 + } Err(_) => break, [INFO] [stdout] 187 + } [INFO] [stdout] 188 + } [INFO] [stdout] 189 + [INFO] [stdout] 190 + ignore_lines [INFO] [stdout] 191 + } [INFO] [stdout] 192 + Err(_) => { [INFO] [stdout] 193 + vec![] [INFO] [stdout] 194 + } [INFO] [stdout] 195 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/core.rs:181:30 [INFO] [stdout] | [INFO] [stdout] 181 | if !(l.len() == 0) { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `l.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:205:70 [INFO] [stdout] | [INFO] [stdout] 205 | visit_drs(dir, ignore_list, include_list, header, applied_list, &mode) [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:222:79 [INFO] [stdout] | [INFO] [stdout] 222 | visit_drs(&path, ignore_list, include_list, header, applied_list, &mode); [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:224:39 [INFO] [stdout] | [INFO] [stdout] 224 | add_header_to_file(&path, &ignore_list, include_list, header, applied_list, &mode); [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `ignore_list` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:224:89 [INFO] [stdout] | [INFO] [stdout] 224 | add_header_to_file(&path, &ignore_list, include_list, header, applied_list, &mode); [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/core.rs:249:12 [INFO] [stdout] | [INFO] [stdout] 249 | if !(item.chars().next().unwrap() == '*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(item.chars().next().unwrap() != '*')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/core.rs:253:12 [INFO] [stdout] | [INFO] [stdout] 253 | if !(item.chars().last().unwrap() == '*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(item.chars().last().unwrap() != '*')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should use the `starts_with` method [INFO] [stdout] --> src/core.rs:249:13 [INFO] [stdout] | [INFO] [stdout] 249 | if !(item.chars().next().unwrap() == '*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `item.starts_with('*')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stdout] = note: `#[warn(clippy::chars_next_cmp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should use the `ends_with` method [INFO] [stdout] --> src/core.rs:253:13 [INFO] [stdout] | [INFO] [stdout] 253 | if !(item.chars().last().unwrap() == '*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `item.ends_with('*')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_last_cmp [INFO] [stdout] = note: `#[warn(clippy::chars_last_cmp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `App` [INFO] [stdout] --> src/ui/app.rs:82:5 [INFO] [stdout] | [INFO] [stdout] 82 | / pub fn new() -> Self { [INFO] [stdout] 83 | | // get ignore list [INFO] [stdout] 84 | | let dir = get_dir(); [INFO] [stdout] ... | [INFO] [stdout] 102 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 80 + impl Default for App { [INFO] [stdout] 81 + fn default() -> Self { [INFO] [stdout] 82 + Self::new() [INFO] [stdout] 83 + } [INFO] [stdout] 84 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needlessly taken reference of both operands [INFO] [stdout] --> src/ui/app.rs:153:12 [INFO] [stdout] | [INFO] [stdout] 153 | if &self.string.len() > &0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stdout] = note: `#[warn(clippy::op_ref)]` on by default [INFO] [stdout] help: use the values directly [INFO] [stdout] | [INFO] [stdout] 153 - if &self.string.len() > &0 { [INFO] [stdout] 153 + if self.string.len() > 0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/ui/app.rs:194:12 [INFO] [stdout] | [INFO] [stdout] 194 | if self.string.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.string.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/ui/app.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 200 | if self.string.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.string.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/ui/app.rs:244:35 [INFO] [stdout] | [INFO] [stdout] 244 | fn turn_vector_to_string(vec: &Vec) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 244 - fn turn_vector_to_string(vec: &Vec) -> String { [INFO] [stdout] 244 + fn turn_vector_to_string(vec: &[String]) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/ui/app.rs:248:38 [INFO] [stdout] | [INFO] [stdout] 248 | fn turn_string_to_vector(string: &String) -> Vec { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 248 - fn turn_string_to_vector(string: &String) -> Vec { [INFO] [stdout] 248 + fn turn_string_to_vector(string: &str) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/ui/app.rs:262:91 [INFO] [stdout] | [INFO] [stdout] 262 | ... &mut self.include_list, &self.header, &mut self.applied_list, &mode); [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/ui/app.rs:267:91 [INFO] [stdout] | [INFO] [stdout] 267 | ... &mut self.include_list, &self.header, &mut self.applied_list, &mode); [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/ui/mod.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | pub mod ui; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/ui/ui.rs:162:22 [INFO] [stdout] | [INFO] [stdout] 162 | let instructions = format!("1 to move to create header screen [INFO] [stdout] | ______________________^ [INFO] [stdout] 163 | | 2 to set list of files to ignore [INFO] [stdout] 164 | | 3 to set list of files to include. [INFO] [stdout] 165 | | Or, use up and down arrow keys to navigate, [INFO] [stdout] 166 | | and press Enter to advance"); [INFO] [stdout] | |____________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] help: consider using `.to_string()` [INFO] [stdout] | [INFO] [stdout] 162 ~ let instructions = "1 to move to create header screen [INFO] [stdout] 163 + 2 to set list of files to ignore [INFO] [stdout] 164 + 3 to set list of files to include. [INFO] [stdout] 165 + Or, use up and down arrow keys to navigate, [INFO] [stdout] 166 ~ and press Enter to advance".to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/ui/ui.rs:175:22 [INFO] [stdout] | [INFO] [stdout] 175 | let instructions = format!("1 to use contents of header.txt base of as header [INFO] [stdout] | ______________________^ [INFO] [stdout] 176 | | 2 to write new header in terminal. [INFO] [stdout] 177 | | Or, use Up and Down arrow keys to navigate, [INFO] [stdout] 178 | | and press Enter to advance"); [INFO] [stdout] | |____________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] help: consider using `.to_string()` [INFO] [stdout] | [INFO] [stdout] 175 ~ let instructions = "1 to use contents of header.txt base of as header [INFO] [stdout] 176 + 2 to write new header in terminal. [INFO] [stdout] 177 + Or, use Up and Down arrow keys to navigate, [INFO] [stdout] 178 ~ and press Enter to advance".to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/ui/update.rs:71:5 [INFO] [stdout] | [INFO] [stdout] 71 | / match key_event.code { [INFO] [stdout] 72 | | KeyCode::Esc => app.change_step(WelcomeScreenOptions::Initial), [INFO] [stdout] 73 | | _ => {} [INFO] [stdout] 74 | | }; [INFO] [stdout] | |_____^ help: try: `if key_event.code == KeyCode::Esc { app.change_step(WelcomeScreenOptions::Initial) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/core.rs:85:12 [INFO] [stdout] | [INFO] [stdout] 85 | .map(|(i, line)| { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `main_file_path` [INFO] [stdout] --> src/core.rs:320:13 [INFO] [stdout] | [INFO] [stdout] 320 | let main_file_path = PathBuf::from("src/main.rs"); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_main_file_path` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `main_file_path` [INFO] [stdout] --> src/core.rs:362:13 [INFO] [stdout] | [INFO] [stdout] 362 | let main_file_path = PathBuf::from("src/main.rs"); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_main_file_path` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `test_visit_dirs_replace` is never used [INFO] [stdout] --> src/core.rs:318:12 [INFO] [stdout] | [INFO] [stdout] 318 | pub fn test_visit_dirs_replace() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `sender` and `handler` are never read [INFO] [stdout] --> src/ui/event.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct EventHandler { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 32 | /// Event sender channel. [INFO] [stdout] 33 | sender: mpsc::Sender, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 37 | handler: thread::JoinHandle<()>, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `EventHandler` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/core.rs:30:8 [INFO] [stdout] | [INFO] [stdout] 30 | if path == None { [INFO] [stdout] | ^^^^^^^^^^^^ help: use `Option::is_none()` instead: `path.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/core.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 49 | / match file_path { [INFO] [stdout] 50 | | Some(fp) => Some(read_file(&fp)), [INFO] [stdout] 51 | | None => None, [INFO] [stdout] 52 | | } [INFO] [stdout] | |_____^ help: try: `file_path.map(|fp| read_file(&fp))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core.rs:71:5 [INFO] [stdout] | [INFO] [stdout] 71 | return is_edited [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 71 - return is_edited [INFO] [stdout] 71 + is_edited [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/core.rs:65:49 [INFO] [stdout] | [INFO] [stdout] 65 | if comment_count == 0 && *mode == Mode::Add { [INFO] [stdout] | _________________________________________________^ [INFO] [stdout] 66 | | is_edited = true [INFO] [stdout] 67 | | } else if *mode == Mode::Replace { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/core.rs:67:38 [INFO] [stdout] | [INFO] [stdout] 67 | } else if *mode == Mode::Replace { [INFO] [stdout] | ______________________________________^ [INFO] [stdout] 68 | | is_edited = true [INFO] [stdout] 69 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core.rs:104:5 [INFO] [stdout] | [INFO] [stdout] 104 | return (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 104 - return (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] 104 + (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/core.rs:78:30 [INFO] [stdout] | [INFO] [stdout] 78 | fn contains_header(contents: &String, mode: &Mode) -> (String, i32) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 78 - fn contains_header(contents: &String, mode: &Mode) -> (String, i32) { [INFO] [stdout] 78 + fn contains_header(contents: &str, mode: &Mode) -> (String, i32) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | return format!("{}\n", line) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 99 - return format!("{}\n", line) [INFO] [stdout] 99 + format!("{}\n", line) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/core.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | return (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `new_contents[0..new_contents.len()-1].to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/core.rs:104:26 [INFO] [stdout] | [INFO] [stdout] 104 | return (format!("{}",new_contents[0..new_contents.len()-1].to_string()), comments) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this: `&new_contents[0..new_contents.len()-1]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core.rs:125:5 [INFO] [stdout] | [INFO] [stdout] 125 | return (contents, comment_count); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 125 - return (contents, comment_count); [INFO] [stdout] 125 + (contents, comment_count) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/core.rs:129:19 [INFO] [stdout] | [INFO] [stdout] 129 | include_list: &mut Vec, header: &str, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 129 ~ include_list: &mut [String], header: &str, [INFO] [stdout] 130 | applied_list: &mut Vec, [INFO] [stdout] ... [INFO] [stdout] 145 | [INFO] [stdout] 146 ~ for include in include_list.to_owned() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:136:40 [INFO] [stdout] | [INFO] [stdout] 136 | let wildmatch = WildMatch::new(&ignore); [INFO] [stdout] | ^^^^^^^ help: change this to: `ignore` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/core.rs:181:28 [INFO] [stdout] | [INFO] [stdout] 181 | if !(l.len() == 0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `(l.len() != 0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/core.rs:195:5 [INFO] [stdout] | [INFO] [stdout] 173 | / let ignore_lines = match find_get_ignore(dir) { [INFO] [stdout] 174 | | Ok(path) => { [INFO] [stdout] 175 | | let buf_reader = BufReader::new(File::open(path).unwrap()); [INFO] [stdout] ... | [INFO] [stdout] 193 | | }; [INFO] [stdout] | |______- unnecessary `let` binding [INFO] [stdout] 194 | [INFO] [stdout] 195 | ignore_lines [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 173 ~ [INFO] [stdout] 174 | [INFO] [stdout] 175 ~ match find_get_ignore(dir) { [INFO] [stdout] 176 + Ok(path) => { [INFO] [stdout] 177 + let buf_reader = BufReader::new(File::open(path).unwrap()); [INFO] [stdout] 178 + [INFO] [stdout] 179 + let mut ignore_lines: Vec = vec![]; [INFO] [stdout] 180 + for line in buf_reader.lines() { [INFO] [stdout] 181 + match line { [INFO] [stdout] 182 + Ok(l) => { [INFO] [stdout] 183 + if !(l.len() == 0) { [INFO] [stdout] 184 + ignore_lines.push(l.to_ascii_lowercase()) [INFO] [stdout] 185 + } [INFO] [stdout] 186 + } Err(_) => break, [INFO] [stdout] 187 + } [INFO] [stdout] 188 + } [INFO] [stdout] 189 + [INFO] [stdout] 190 + ignore_lines [INFO] [stdout] 191 + } [INFO] [stdout] 192 + Err(_) => { [INFO] [stdout] 193 + vec![] [INFO] [stdout] 194 + } [INFO] [stdout] 195 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/core.rs:181:30 [INFO] [stdout] | [INFO] [stdout] 181 | if !(l.len() == 0) { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `l.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:205:70 [INFO] [stdout] | [INFO] [stdout] 205 | visit_drs(dir, ignore_list, include_list, header, applied_list, &mode) [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:222:79 [INFO] [stdout] | [INFO] [stdout] 222 | visit_drs(&path, ignore_list, include_list, header, applied_list, &mode); [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:224:39 [INFO] [stdout] | [INFO] [stdout] 224 | add_header_to_file(&path, &ignore_list, include_list, header, applied_list, &mode); [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `ignore_list` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core.rs:224:89 [INFO] [stdout] | [INFO] [stdout] 224 | add_header_to_file(&path, &ignore_list, include_list, header, applied_list, &mode); [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/core.rs:249:12 [INFO] [stdout] | [INFO] [stdout] 249 | if !(item.chars().next().unwrap() == '*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(item.chars().next().unwrap() != '*')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/core.rs:253:12 [INFO] [stdout] | [INFO] [stdout] 253 | if !(item.chars().last().unwrap() == '*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(item.chars().last().unwrap() != '*')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should use the `starts_with` method [INFO] [stdout] --> src/core.rs:249:13 [INFO] [stdout] | [INFO] [stdout] 249 | if !(item.chars().next().unwrap() == '*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `item.starts_with('*')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp [INFO] [stdout] = note: `#[warn(clippy::chars_next_cmp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should use the `ends_with` method [INFO] [stdout] --> src/core.rs:253:13 [INFO] [stdout] | [INFO] [stdout] 253 | if !(item.chars().last().unwrap() == '*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this: `item.ends_with('*')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#chars_last_cmp [INFO] [stdout] = note: `#[warn(clippy::chars_last_cmp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core.rs:356:9 [INFO] [stdout] | [INFO] [stdout] 356 | return (ignore_list, include_list, test_file, ignore_test_file) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 356 - return (ignore_list, include_list, test_file, ignore_test_file) [INFO] [stdout] 356 + (ignore_list, include_list, test_file, ignore_test_file) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `App` [INFO] [stdout] --> src/ui/app.rs:82:5 [INFO] [stdout] | [INFO] [stdout] 82 | / pub fn new() -> Self { [INFO] [stdout] 83 | | // get ignore list [INFO] [stdout] 84 | | let dir = get_dir(); [INFO] [stdout] ... | [INFO] [stdout] 102 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 80 + impl Default for App { [INFO] [stdout] 81 + fn default() -> Self { [INFO] [stdout] 82 + Self::new() [INFO] [stdout] 83 + } [INFO] [stdout] 84 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needlessly taken reference of both operands [INFO] [stdout] --> src/ui/app.rs:153:12 [INFO] [stdout] | [INFO] [stdout] 153 | if &self.string.len() > &0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stdout] = note: `#[warn(clippy::op_ref)]` on by default [INFO] [stdout] help: use the values directly [INFO] [stdout] | [INFO] [stdout] 153 - if &self.string.len() > &0 { [INFO] [stdout] 153 + if self.string.len() > 0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/ui/app.rs:194:12 [INFO] [stdout] | [INFO] [stdout] 194 | if self.string.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.string.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/ui/app.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 200 | if self.string.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.string.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/ui/app.rs:244:35 [INFO] [stdout] | [INFO] [stdout] 244 | fn turn_vector_to_string(vec: &Vec) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 244 - fn turn_vector_to_string(vec: &Vec) -> String { [INFO] [stdout] 244 + fn turn_vector_to_string(vec: &[String]) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/ui/app.rs:248:38 [INFO] [stdout] | [INFO] [stdout] 248 | fn turn_string_to_vector(string: &String) -> Vec { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 248 - fn turn_string_to_vector(string: &String) -> Vec { [INFO] [stdout] 248 + fn turn_string_to_vector(string: &str) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/ui/app.rs:262:91 [INFO] [stdout] | [INFO] [stdout] 262 | ... &mut self.include_list, &self.header, &mut self.applied_list, &mode); [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/ui/app.rs:267:91 [INFO] [stdout] | [INFO] [stdout] 267 | ... &mut self.include_list, &self.header, &mut self.applied_list, &mode); [INFO] [stdout] | ^^^^^ help: change this to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/ui/mod.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | pub mod ui; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/ui/ui.rs:162:22 [INFO] [stdout] | [INFO] [stdout] 162 | let instructions = format!("1 to move to create header screen [INFO] [stdout] | ______________________^ [INFO] [stdout] 163 | | 2 to set list of files to ignore [INFO] [stdout] 164 | | 3 to set list of files to include. [INFO] [stdout] 165 | | Or, use up and down arrow keys to navigate, [INFO] [stdout] 166 | | and press Enter to advance"); [INFO] [stdout] | |____________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] help: consider using `.to_string()` [INFO] [stdout] | [INFO] [stdout] 162 ~ let instructions = "1 to move to create header screen [INFO] [stdout] 163 + 2 to set list of files to ignore [INFO] [stdout] 164 + 3 to set list of files to include. [INFO] [stdout] 165 + Or, use up and down arrow keys to navigate, [INFO] [stdout] 166 ~ and press Enter to advance".to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/ui/ui.rs:175:22 [INFO] [stdout] | [INFO] [stdout] 175 | let instructions = format!("1 to use contents of header.txt base of as header [INFO] [stdout] | ______________________^ [INFO] [stdout] 176 | | 2 to write new header in terminal. [INFO] [stdout] 177 | | Or, use Up and Down arrow keys to navigate, [INFO] [stdout] 178 | | and press Enter to advance"); [INFO] [stdout] | |____________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] help: consider using `.to_string()` [INFO] [stdout] | [INFO] [stdout] 175 ~ let instructions = "1 to use contents of header.txt base of as header [INFO] [stdout] 176 + 2 to write new header in terminal. [INFO] [stdout] 177 + Or, use Up and Down arrow keys to navigate, [INFO] [stdout] 178 ~ and press Enter to advance".to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/ui/update.rs:71:5 [INFO] [stdout] | [INFO] [stdout] 71 | / match key_event.code { [INFO] [stdout] 72 | | KeyCode::Esc => app.change_step(WelcomeScreenOptions::Initial), [INFO] [stdout] 73 | | _ => {} [INFO] [stdout] 74 | | }; [INFO] [stdout] | |_____^ help: try: `if key_event.code == KeyCode::Esc { app.change_step(WelcomeScreenOptions::Initial) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 13.68s [INFO] running `Command { std: "docker" "inspect" "da5df0bcd27359f3fa291ced48a1cd1b9d64af70d2e5096fc59079f64f3fc018", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "da5df0bcd27359f3fa291ced48a1cd1b9d64af70d2e5096fc59079f64f3fc018", kill_on_drop: false }` [INFO] [stdout] da5df0bcd27359f3fa291ced48a1cd1b9d64af70d2e5096fc59079f64f3fc018