[INFO] cloning repository https://github.com/danny270793/CodeMetadata [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/danny270793/CodeMetadata" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdanny270793%2FCodeMetadata", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdanny270793%2FCodeMetadata'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 1b3e42ff1793ea74296672699b8871cb6ff11743 [INFO] linting danny270793/CodeMetadata against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdanny270793%2FCodeMetadata" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/danny270793/CodeMetadata [INFO] finished tweaking git repo https://github.com/danny270793/CodeMetadata [INFO] tweaked toml for git repo https://github.com/danny270793/CodeMetadata written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/danny270793/CodeMetadata 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 git repo https://github.com/danny270793/CodeMetadata 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] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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] 9974705848dd337dad72e790210c58be9fe77d84842f6dc984c6507591381de5 [INFO] running `Command { std: "docker" "start" "-a" "9974705848dd337dad72e790210c58be9fe77d84842f6dc984c6507591381de5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "9974705848dd337dad72e790210c58be9fe77d84842f6dc984c6507591381de5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "9974705848dd337dad72e790210c58be9fe77d84842f6dc984c6507591381de5", kill_on_drop: false }` [INFO] [stdout] 9974705848dd337dad72e790210c58be9fe77d84842f6dc984c6507591381de5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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] 35ca3d39097ce48b115f64ad3434777da92ca354f12f317ab7d3802692b5839e [INFO] running `Command { std: "docker" "start" "-a" "35ca3d39097ce48b115f64ad3434777da92ca354f12f317ab7d3802692b5839e", kill_on_drop: false }` [INFO] [stderr] Checking code-metadata v1.0.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: methods `print` and `get_headers_from` are never used [INFO] [stdout] --> src/table.rs:52:12 [INFO] [stdout] | [INFO] [stdout] 9 | impl Table { [INFO] [stdout] | ---------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn print(&self, rows: &Vec>) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 57 | fn get_headers_from(&self, rows: &Vec>) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::fs::ReadDir` [INFO] [stdout] --> src/directory.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | fs::read_dir(path).unwrap().into_iter().for_each(|file: Result| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `fs::read_dir(path).unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/directory.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | if !link.is_ok() && metadata.is_dir() { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `link.is_err()` [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: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/table.rs:17:44 [INFO] [stdout] | [INFO] [stdout] 17 | pub fn print_with_headers(&self, rows: &Vec>, headers: &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] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 17 - pub fn print_with_headers(&self, rows: &Vec>, headers: &Vec) { [INFO] [stdout] 17 + pub fn print_with_headers(&self, rows: &[collections::HashMap], headers: &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/table.rs:43:30 [INFO] [stdout] | [INFO] [stdout] 43 | self.print_separator(&headers, &sizes); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/table.rs:44:25 [INFO] [stdout] | [INFO] [stdout] 44 | self.print_line(&headers, &sizes, &headers_map); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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/table.rs:46:34 [INFO] [stdout] | [INFO] [stdout] 46 | self.print_separator(&headers, &sizes); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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/table.rs:47:29 [INFO] [stdout] | [INFO] [stdout] 47 | self.print_line(&headers, &sizes, row); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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/table.rs:49:30 [INFO] [stdout] | [INFO] [stdout] 49 | self.print_separator(&headers, &sizes); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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/table.rs:53:58 [INFO] [stdout] | [INFO] [stdout] 53 | let headers: Vec = self.get_headers_from(&rows); [INFO] [stdout] | ^^^^^ help: change this to: `rows` [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/table.rs:54:33 [INFO] [stdout] | [INFO] [stdout] 54 | self.print_with_headers(&rows, &headers); [INFO] [stdout] | ^^^^^ help: change this to: `rows` [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: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/table.rs:57:38 [INFO] [stdout] | [INFO] [stdout] 57 | fn get_headers_from(&self, rows: &Vec>) -> 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] 57 - fn get_headers_from(&self, rows: &Vec>) -> Vec { [INFO] [stdout] 57 + fn get_headers_from(&self, rows: &[collections::HashMap]) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/table.rs:69:35 [INFO] [stdout] | [INFO] [stdout] 69 | fn print_line(&self, headers: &Vec, sizes: &collections::HashMap, row: &collections::HashMap, sizes: &collections::HashMap, row: &collections::HashMap) { [INFO] [stdout] 69 + fn print_line(&self, headers: &[String], sizes: &collections::HashMap, row: &collections::HashMap) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/table.rs:84:9 [INFO] [stdout] | [INFO] [stdout] 84 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/table.rs:87:40 [INFO] [stdout] | [INFO] [stdout] 87 | fn print_separator(&self, headers: &Vec, sizes: &collections::HashMap) { [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] 87 - fn print_separator(&self, headers: &Vec, sizes: &collections::HashMap) { [INFO] [stdout] 87 + fn print_separator(&self, headers: &[String], sizes: &collections::HashMap) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/table.rs:101:9 [INFO] [stdout] | [INFO] [stdout] 101 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/codemetadata.rs:17:33 [INFO] [stdout] | [INFO] [stdout] 17 | pub fn get_metadatas(files: &Vec) -> collections::HashMap { [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] 17 - pub fn get_metadatas(files: &Vec) -> collections::HashMap { [INFO] [stdout] 17 + pub fn get_metadatas(files: &[String]) -> collections::HashMap { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/codemetadata.rs:21:16 [INFO] [stdout] | [INFO] [stdout] 21 | if metadata.0 == "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `metadata.0.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/codemetadata.rs:26:17 [INFO] [stdout] | [INFO] [stdout] 26 | / match rows { [INFO] [stdout] 27 | | Some(value) => { [INFO] [stdout] 28 | | let file_metadata: FileMetadata = FileMetadata { [INFO] [stdout] 29 | | files: value.files + 1, [INFO] [stdout] ... | [INFO] [stdout] 34 | | None => {}, [INFO] [stdout] 35 | | } [INFO] [stdout] | |_________________^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 26 ~ if let Some(value) = rows { [INFO] [stdout] 27 + let file_metadata: FileMetadata = FileMetadata { [INFO] [stdout] 28 + files: value.files + 1, [INFO] [stdout] 29 + lines: value.lines + metadata.1 [INFO] [stdout] 30 + }; [INFO] [stdout] 31 + hash_map.insert(metadata.0, file_metadata); [INFO] [stdout] 32 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/codemetadata.rs:71:9 [INFO] [stdout] | [INFO] [stdout] 71 | return (String::from(file_parts[file_parts.len() - 1]), lines); [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 (String::from(file_parts[file_parts.len() - 1]), lines); [INFO] [stdout] 71 + (String::from(file_parts[file_parts.len() - 1]), lines) [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/codemetadata.rs:47:31 [INFO] [stdout] | [INFO] [stdout] 47 | pub fn get_metadata(file: &String) -> (String, usize) { [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] 47 ~ pub fn get_metadata(file: &str) -> (String, usize) { [INFO] [stdout] 48 | let path_parts: Vec<&str> = file.split(path::MAIN_SEPARATOR.to_string().as_str()).collect(); [INFO] [stdout] ... [INFO] [stdout] 51 | let file_parts: Vec<&str> = filename.split(".").collect(); [INFO] [stdout] 52 ~ let input: fs::File = fs::File::open(file).expect("can't open file"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/command.rs:37:52 [INFO] [stdout] | [INFO] [stdout] 37 | ... let error: io::Error = io::Error::new(io::ErrorKind::Other, format!("argument {} is not parsable", argument)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 37 - let error: io::Error = io::Error::new(io::ErrorKind::Other, format!("argument {} is not parsable", argument)); [INFO] [stdout] 37 + let error: io::Error = io::Error::other(format!("argument {} is not parsable", argument)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::collections::hash_map::Keys<'_, std::string::String, codemetadata::FileMetadata>` [INFO] [stdout] --> src/main.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | lines.keys().into_iter().for_each(|extention: &String| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `lines.keys()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/main.rs:54:38 [INFO] [stdout] | [INFO] [stdout] 54 | file.ends_with(&text) && metadata.0 != "" [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!metadata.0.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `print` and `get_headers_from` are never used [INFO] [stdout] --> src/table.rs:52:12 [INFO] [stdout] | [INFO] [stdout] 9 | impl Table { [INFO] [stdout] | ---------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn print(&self, rows: &Vec>) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 57 | fn get_headers_from(&self, rows: &Vec>) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::fs::ReadDir` [INFO] [stdout] --> src/directory.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | fs::read_dir(path).unwrap().into_iter().for_each(|file: Result| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `fs::read_dir(path).unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/directory.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | if !link.is_ok() && metadata.is_dir() { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `link.is_err()` [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: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/table.rs:17:44 [INFO] [stdout] | [INFO] [stdout] 17 | pub fn print_with_headers(&self, rows: &Vec>, headers: &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] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 17 - pub fn print_with_headers(&self, rows: &Vec>, headers: &Vec) { [INFO] [stdout] 17 + pub fn print_with_headers(&self, rows: &[collections::HashMap], headers: &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/table.rs:43:30 [INFO] [stdout] | [INFO] [stdout] 43 | self.print_separator(&headers, &sizes); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/table.rs:44:25 [INFO] [stdout] | [INFO] [stdout] 44 | self.print_line(&headers, &sizes, &headers_map); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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/table.rs:46:34 [INFO] [stdout] | [INFO] [stdout] 46 | self.print_separator(&headers, &sizes); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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/table.rs:47:29 [INFO] [stdout] | [INFO] [stdout] 47 | self.print_line(&headers, &sizes, row); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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/table.rs:49:30 [INFO] [stdout] | [INFO] [stdout] 49 | self.print_separator(&headers, &sizes); [INFO] [stdout] | ^^^^^^^^ help: change this to: `headers` [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/table.rs:53:58 [INFO] [stdout] | [INFO] [stdout] 53 | let headers: Vec = self.get_headers_from(&rows); [INFO] [stdout] | ^^^^^ help: change this to: `rows` [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/table.rs:54:33 [INFO] [stdout] | [INFO] [stdout] 54 | self.print_with_headers(&rows, &headers); [INFO] [stdout] | ^^^^^ help: change this to: `rows` [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: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/table.rs:57:38 [INFO] [stdout] | [INFO] [stdout] 57 | fn get_headers_from(&self, rows: &Vec>) -> 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] 57 - fn get_headers_from(&self, rows: &Vec>) -> Vec { [INFO] [stdout] 57 + fn get_headers_from(&self, rows: &[collections::HashMap]) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/table.rs:69:35 [INFO] [stdout] | [INFO] [stdout] 69 | fn print_line(&self, headers: &Vec, sizes: &collections::HashMap, row: &collections::HashMap, sizes: &collections::HashMap, row: &collections::HashMap) { [INFO] [stdout] 69 + fn print_line(&self, headers: &[String], sizes: &collections::HashMap, row: &collections::HashMap) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/table.rs:84:9 [INFO] [stdout] | [INFO] [stdout] 84 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/table.rs:87:40 [INFO] [stdout] | [INFO] [stdout] 87 | fn print_separator(&self, headers: &Vec, sizes: &collections::HashMap) { [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] 87 - fn print_separator(&self, headers: &Vec, sizes: &collections::HashMap) { [INFO] [stdout] 87 + fn print_separator(&self, headers: &[String], sizes: &collections::HashMap) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/table.rs:101:9 [INFO] [stdout] | [INFO] [stdout] 101 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/codemetadata.rs:17:33 [INFO] [stdout] | [INFO] [stdout] 17 | pub fn get_metadatas(files: &Vec) -> collections::HashMap { [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] 17 - pub fn get_metadatas(files: &Vec) -> collections::HashMap { [INFO] [stdout] 17 + pub fn get_metadatas(files: &[String]) -> collections::HashMap { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/codemetadata.rs:21:16 [INFO] [stdout] | [INFO] [stdout] 21 | if metadata.0 == "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `metadata.0.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/codemetadata.rs:26:17 [INFO] [stdout] | [INFO] [stdout] 26 | / match rows { [INFO] [stdout] 27 | | Some(value) => { [INFO] [stdout] 28 | | let file_metadata: FileMetadata = FileMetadata { [INFO] [stdout] 29 | | files: value.files + 1, [INFO] [stdout] ... | [INFO] [stdout] 34 | | None => {}, [INFO] [stdout] 35 | | } [INFO] [stdout] | |_________________^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 26 ~ if let Some(value) = rows { [INFO] [stdout] 27 + let file_metadata: FileMetadata = FileMetadata { [INFO] [stdout] 28 + files: value.files + 1, [INFO] [stdout] 29 + lines: value.lines + metadata.1 [INFO] [stdout] 30 + }; [INFO] [stdout] 31 + hash_map.insert(metadata.0, file_metadata); [INFO] [stdout] 32 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/codemetadata.rs:71:9 [INFO] [stdout] | [INFO] [stdout] 71 | return (String::from(file_parts[file_parts.len() - 1]), lines); [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 (String::from(file_parts[file_parts.len() - 1]), lines); [INFO] [stdout] 71 + (String::from(file_parts[file_parts.len() - 1]), lines) [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/codemetadata.rs:47:31 [INFO] [stdout] | [INFO] [stdout] 47 | pub fn get_metadata(file: &String) -> (String, usize) { [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] 47 ~ pub fn get_metadata(file: &str) -> (String, usize) { [INFO] [stdout] 48 | let path_parts: Vec<&str> = file.split(path::MAIN_SEPARATOR.to_string().as_str()).collect(); [INFO] [stdout] ... [INFO] [stdout] 51 | let file_parts: Vec<&str> = filename.split(".").collect(); [INFO] [stdout] 52 ~ let input: fs::File = fs::File::open(file).expect("can't open file"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/command.rs:37:52 [INFO] [stdout] | [INFO] [stdout] 37 | ... let error: io::Error = io::Error::new(io::ErrorKind::Other, format!("argument {} is not parsable", argument)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 37 - let error: io::Error = io::Error::new(io::ErrorKind::Other, format!("argument {} is not parsable", argument)); [INFO] [stdout] 37 + let error: io::Error = io::Error::other(format!("argument {} is not parsable", argument)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::collections::hash_map::Keys<'_, std::string::String, codemetadata::FileMetadata>` [INFO] [stdout] --> src/main.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | lines.keys().into_iter().for_each(|extention: &String| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `lines.keys()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/main.rs:54:38 [INFO] [stdout] | [INFO] [stdout] 54 | file.ends_with(&text) && metadata.0 != "" [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!metadata.0.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.33s [INFO] running `Command { std: "docker" "inspect" "35ca3d39097ce48b115f64ad3434777da92ca354f12f317ab7d3802692b5839e", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "35ca3d39097ce48b115f64ad3434777da92ca354f12f317ab7d3802692b5839e", kill_on_drop: false }` [INFO] [stdout] 35ca3d39097ce48b115f64ad3434777da92ca354f12f317ab7d3802692b5839e