[INFO] fetching crate mbf-fastq-processor 0.8.1... [INFO] linting mbf-fastq-processor-0.8.1 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate mbf-fastq-processor 0.8.1 into /workspace/builds/worker-0-tc1/source [INFO] started tweaking crates.io crate mbf-fastq-processor 0.8.1 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate mbf-fastq-processor 0.8.1 [INFO] tweaked toml for crates.io crate mbf-fastq-processor 0.8.1 written to /workspace/builds/worker-0-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate mbf-fastq-processor 0.8.1 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 mbf-fastq-processor 0.8.1 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 serde_valid_literal v2.0.0 [INFO] [stderr] Downloaded scalable_cuckoo_filter v0.4.0 [INFO] [stderr] Downloaded eserde_derive v0.1.7 [INFO] [stderr] Downloaded noodles-bgzf v0.43.0 [INFO] [stderr] Downloaded derefable v0.1.0 [INFO] [stderr] Downloaded objc2-user-notifications v0.3.2 [INFO] [stderr] Downloaded serde_valid_derive v2.0.0 [INFO] [stderr] Downloaded ex v0.1.3 [INFO] [stderr] Downloaded allocation-counter v0.8.1 [INFO] [stderr] Downloaded noodles v0.101.0 [INFO] [stderr] Downloaded human-panic v2.0.4 [INFO] [stderr] Downloaded json_value_merge v2.0.1 [INFO] [stderr] Downloaded noodles-core v0.18.0 [INFO] [stderr] Downloaded objc2-core-location v0.3.2 [INFO] [stderr] Downloaded bgzip v0.3.1 [INFO] [stderr] Downloaded serde_valid v2.0.0 [INFO] [stderr] Downloaded objc2-core-data v0.3.2 [INFO] [stderr] Downloaded eserde v0.1.7 [INFO] [stderr] Downloaded niffler v3.0.0 [INFO] [stderr] Downloaded noodles-bam v0.83.0 [INFO] [stderr] Downloaded objc2-cloud-kit v0.3.2 [INFO] [stderr] Downloaded objc2-core-image v0.3.2 [INFO] [stderr] Downloaded noodles-sam v0.79.0 [INFO] [stderr] Downloaded os_info v3.13.0 [INFO] [stderr] Downloaded liblzma v0.3.6 [INFO] [stderr] Downloaded noodles-csi v0.51.0 [INFO] [stderr] Downloaded bio v3.0.0 [INFO] [stderr] Downloaded fasteval v0.2.4 [INFO] [stderr] Downloaded liblzma-sys v0.3.13 [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] 58ed70a4ed3da3aaecb6c470d44a9f94ebbda1914b57edc52c9f4be1852ce42a [INFO] running `Command { std: "docker" "start" "-a" "58ed70a4ed3da3aaecb6c470d44a9f94ebbda1914b57edc52c9f4be1852ce42a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "58ed70a4ed3da3aaecb6c470d44a9f94ebbda1914b57edc52c9f4be1852ce42a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "58ed70a4ed3da3aaecb6c470d44a9f94ebbda1914b57edc52c9f4be1852ce42a", kill_on_drop: false }` [INFO] [stdout] 58ed70a4ed3da3aaecb6c470d44a9f94ebbda1914b57edc52c9f4be1852ce42a [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] e3ed025c15374609dfc06effaa25984e0758d93c7c5b4f140e757e746af078ec [INFO] running `Command { std: "docker" "start" "-a" "e3ed025c15374609dfc06effaa25984e0758d93c7c5b4f140e757e746af078ec", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.177 [INFO] [stderr] Compiling syn v2.0.110 [INFO] [stderr] Checking hashbrown v0.16.0 [INFO] [stderr] Checking regex-automata v0.4.13 [INFO] [stderr] Checking simd-adler32 v0.3.7 [INFO] [stderr] Checking zlib-rs v0.5.2 [INFO] [stderr] Checking lexical-util v1.0.7 [INFO] [stderr] Checking getrandom v0.3.4 [INFO] [stderr] Checking miniz_oxide v0.8.9 [INFO] [stderr] Checking getrandom v0.2.16 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Compiling matrixmultiply v0.3.10 [INFO] [stderr] Checking bit-vec v0.8.0 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking lexical-parse-integer v1.0.6 [INFO] [stderr] Checking indexmap v2.12.0 [INFO] [stderr] Checking lexical-write-integer v1.0.6 [INFO] [stderr] Checking num-complex v0.4.6 [INFO] [stderr] Checking num-integer v0.1.46 [INFO] [stderr] Compiling serde_json v1.0.145 [INFO] [stderr] Compiling nix v0.30.1 [INFO] [stderr] Checking lexical-write-float v1.0.6 [INFO] [stderr] Checking libz-rs-sys v0.5.2 [INFO] [stderr] Checking flate2 v1.1.5 [INFO] [stderr] Checking lexical-parse-float v1.0.6 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking approx v0.5.1 [INFO] [stderr] Compiling syn v0.15.44 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Checking simba v0.9.1 [INFO] [stderr] Checking noodles-bgzf v0.43.0 [INFO] [stderr] Compiling cc v1.2.45 [INFO] [stderr] Checking lexical-core v1.0.6 [INFO] [stderr] Checking num-rational v0.4.2 [INFO] [stderr] Checking toml_parser v1.0.4 [INFO] [stderr] Checking rand_core v0.9.3 [INFO] [stderr] Checking rand_distr v0.4.3 [INFO] [stderr] Checking toml_datetime v0.7.3 [INFO] [stderr] Checking toml_writer v1.0.4 [INFO] [stderr] Checking rand_chacha v0.9.0 [INFO] [stderr] Checking bstr v1.12.1 [INFO] [stderr] Checking regex v1.12.2 [INFO] [stderr] Checking object v0.37.3 [INFO] [stderr] Checking serde_spanned v1.0.3 [INFO] [stderr] Checking csv-core v0.1.13 [INFO] [stderr] Checking noodles-core v0.18.0 [INFO] [stderr] Checking fixedbitset v0.5.7 [INFO] [stderr] Checking noodles-csi v0.51.0 [INFO] [stderr] Checking rustc-demangle v0.1.26 [INFO] [stderr] Compiling zstd-sys v2.0.16+zstd.1.5.7 [INFO] [stderr] Compiling liblzma-sys v0.3.13 [INFO] [stderr] Compiling proc-macro-error2 v2.0.1 [INFO] [stderr] Compiling bzip2-sys v0.1.13+1.0.8 [INFO] [stderr] Checking noodles-sam v0.79.0 [INFO] [stderr] Compiling serde_derive_internals v0.29.1 [INFO] [stderr] Checking clap_builder v4.5.51 [INFO] [stderr] Checking bzip2 v0.5.2 [INFO] [stderr] Compiling derefable v0.1.0 [INFO] [stderr] Checking noodles-bam v0.83.0 [INFO] [stderr] Checking nalgebra v0.33.2 [INFO] [stderr] Checking anstream v0.6.21 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling thiserror-impl v2.0.17 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling ref-cast-impl v1.0.25 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Compiling derive-new v0.6.0 [INFO] [stderr] Compiling enum-map-derive v0.17.0 [INFO] [stderr] Checking ref-cast v1.0.25 [INFO] [stderr] Checking bgzip v0.3.1 [INFO] [stderr] Checking enum-map v2.7.3 [INFO] [stderr] Checking thiserror v2.0.17 [INFO] [stderr] Checking backtrace v0.3.76 [INFO] [stderr] Compiling eserde_derive v0.1.7 [INFO] [stderr] Compiling getset v0.1.6 [INFO] [stderr] Compiling serde_valid_derive v2.0.0 [INFO] [stderr] Compiling schemars_derive v1.1.0 [INFO] [stderr] Checking petgraph v0.8.3 [INFO] [stderr] Checking bio-types v1.0.4 [INFO] [stderr] Checking csv v1.4.0 [INFO] [stderr] Checking toml v0.9.8 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking serde_valid_literal v2.0.0 [INFO] [stderr] Checking rand v0.9.2 [INFO] [stderr] Checking ndarray v0.16.1 [INFO] [stderr] Checking bit-set v0.8.0 [INFO] [stderr] Checking toml_datetime v0.6.11 [INFO] [stderr] Checking serde_spanned v0.6.9 [INFO] [stderr] Checking os_info v3.13.0 [INFO] [stderr] Checking toml_edit v0.22.27 [INFO] [stderr] Checking vec_map v0.8.2 [INFO] [stderr] Checking multimap v0.10.1 [INFO] [stderr] Checking bv v0.11.1 [INFO] [stderr] Checking uuid v1.18.1 [INFO] [stderr] Checking liblzma v0.3.6 [INFO] [stderr] Checking itertools-num v0.1.3 [INFO] [stderr] Checking ordered-float v5.1.0 [INFO] [stderr] Checking editdistancek v1.0.2 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Checking triple_accel v0.4.0 [INFO] [stderr] Checking bytecount v0.6.9 [INFO] [stderr] Checking sha2 v0.10.9 [INFO] [stderr] Checking ex v0.1.3 [INFO] [stderr] Checking serde_valid v2.0.0 [INFO] [stderr] Checking human-panic v2.0.4 [INFO] [stderr] Compiling enum_dispatch v0.3.13 [INFO] [stderr] Checking tempfile v3.23.0 [INFO] [stderr] Checking schemars v1.1.0 [INFO] [stderr] Checking scalable_cuckoo_filter v0.4.0 [INFO] [stderr] Checking crossbeam v0.8.4 [INFO] [stderr] Checking clap v4.5.51 [INFO] [stderr] Checking noodles v0.101.0 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Checking json_value_merge v2.0.1 [INFO] [stderr] Checking toml_edit v0.23.7 [INFO] [stderr] Checking toml v0.8.23 [INFO] [stderr] Checking allocation-counter v0.8.1 [INFO] [stderr] Checking fasteval v0.2.4 [INFO] [stderr] Checking wait-timeout v0.2.1 [INFO] [stderr] Checking statrs v0.18.0 [INFO] [stderr] Checking eserde v0.1.7 [INFO] [stderr] Checking bio v3.0.0 [INFO] [stderr] Compiling zstd-safe v7.2.4 [INFO] [stderr] Checking zstd v0.13.3 [INFO] [stderr] Checking niffler v3.0.0 [INFO] [stderr] Checking mbf-fastq-processor v0.8.1 (/opt/rustwide/workdir) [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/transformations/hamming_correct.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | use FastQBlocksCombined; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/transformations/hamming_correct.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | use FastQBlocksCombined; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/config/deser.rs:144:13 [INFO] [stdout] | [INFO] [stdout] 144 | / Ok(Deserialize::deserialize( [INFO] [stdout] 145 | | de::value::SeqAccessDeserializer::new(visitor), [INFO] [stdout] 146 | | )?) [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 144 ~ Deserialize::deserialize( [INFO] [stdout] 145 | de::value::SeqAccessDeserializer::new(visitor), [INFO] [stdout] 146 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for copying elements [INFO] [stdout] --> src/demultiplex.rs:70:9 [INFO] [stdout] | [INFO] [stdout] 70 | self.0.keys().map(|tag| *tag) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `copied` method: `self.0.keys().copied()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary map of the identity function [INFO] [stdout] --> src/demultiplex.rs:95:27 [INFO] [stdout] | [INFO] [stdout] 95 | self.0.into_iter().map(|(tag, data)| (tag, data)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove the call to `map` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_identity [INFO] [stdout] = note: `#[warn(clippy::map_identity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `OptDemultiplex` has a public `len` method, but no `is_empty` method [INFO] [stdout] --> src/demultiplex.rs:200:5 [INFO] [stdout] | [INFO] [stdout] 200 | pub fn len(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for copying elements [INFO] [stdout] --> src/demultiplex.rs:216:32 [INFO] [stdout] | [INFO] [stdout] 216 | Self::Yes(info) => info.tag_to_name.keys().map(|x| *x).collect(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `copied` method: `info.tag_to_name.keys().copied()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has a `#[must_use]` attribute with no message, but returns a type already marked as `#[must_use]` [INFO] [stdout] --> src/demultiplex.rs:221:5 [INFO] [stdout] | [INFO] [stdout] 221 | / pub fn open_output_streams( [INFO] [stdout] 222 | | &self, [INFO] [stdout] 223 | | output_directory: &Path, [INFO] [stdout] 224 | | filename_prefix: &str, [INFO] [stdout] ... | [INFO] [stdout] 232 | | allow_overwrite: bool, [INFO] [stdout] 233 | | ) -> Result { [INFO] [stdout] | |_________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: either add some descriptive message or remove the attribute [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_must_use [INFO] [stdout] = note: `#[warn(clippy::double_must_use)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (11/7) [INFO] [stdout] --> src/demultiplex.rs:221:5 [INFO] [stdout] | [INFO] [stdout] 221 | / pub fn open_output_streams( [INFO] [stdout] 222 | | &self, [INFO] [stdout] 223 | | output_directory: &Path, [INFO] [stdout] 224 | | filename_prefix: &str, [INFO] [stdout] ... | [INFO] [stdout] 232 | | allow_overwrite: bool, [INFO] [stdout] 233 | | ) -> Result { [INFO] [stdout] | |_________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` 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/demultiplex.rs:236:86 [INFO] [stdout] | [INFO] [stdout] 236 | let basename = join_nonempty(vec![filename_prefix, filename_suffix], &ix_separator); [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `ix_separator` [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/demultiplex.rs:259:33 [INFO] [stdout] | [INFO] [stdout] 259 | ... &ix_separator, [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `ix_separator` [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: returning the result of a `let` binding from a block [INFO] [stdout] --> src/interactive.rs:215:5 [INFO] [stdout] | [INFO] [stdout] 167 | / let result = if output.status.success() { [INFO] [stdout] 168 | | // Extract stdout and stderr [INFO] [stdout] 169 | | let stdout = String::from_utf8_lossy(&output.stdout); [INFO] [stdout] 170 | | let stderr = String::from_utf8_lossy(&output.stderr); [INFO] [stdout] ... | [INFO] [stdout] 212 | | Err(anyhow::anyhow!("Processing failed:\n{}", stderr)) [INFO] [stdout] 213 | | }; [INFO] [stdout] | |______- unnecessary `let` binding [INFO] [stdout] 214 | [INFO] [stdout] 215 | result [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] 167 ~ [INFO] [stdout] 168 | [INFO] [stdout] 169 ~ if output.status.success() { [INFO] [stdout] 170 + // Extract stdout and stderr [INFO] [stdout] 171 + let stdout = String::from_utf8_lossy(&output.stdout); [INFO] [stdout] 172 + let stderr = String::from_utf8_lossy(&output.stderr); [INFO] [stdout] 173 + [INFO] [stdout] 174 + /* //list all files in tempdir [INFO] [stdout] 175 + for entry in fs::read_dir(&temp_dir)? { [INFO] [stdout] 176 + let entry = entry?; [INFO] [stdout] 177 + let path = entry.path(); [INFO] [stdout] 178 + if path.is_file() { [INFO] [stdout] 179 + let filesize = fs::metadata(&path)?.len(); [INFO] [stdout] 180 + println!("Generated file: {} {}", path.display(), filesize); [INFO] [stdout] 181 + } [INFO] [stdout] 182 + } */ [INFO] [stdout] 183 + [INFO] [stdout] 184 + // Look for the Inspect output file [INFO] [stdout] 185 + let mut inspect_output = String::new(); [INFO] [stdout] 186 + let inspect_file = temp_dir.join("interactive_output_inspect_interleaved.fq"); [INFO] [stdout] 187 + if inspect_file.exists() { [INFO] [stdout] 188 + if let Ok(contents) = fs::read_to_string(&inspect_file) { [INFO] [stdout] 189 + inspect_output = contents; [INFO] [stdout] 190 + } [INFO] [stdout] 191 + } [INFO] [stdout] 192 + [INFO] [stdout] 193 + // Combine for output [INFO] [stdout] 194 + let mut result = String::new(); [INFO] [stdout] 195 + if !stderr.is_empty() { [INFO] [stdout] 196 + result.push_str(&stderr); [INFO] [stdout] 197 + } [INFO] [stdout] 198 + if !stdout.is_empty() { [INFO] [stdout] 199 + if !result.is_empty() { [INFO] [stdout] 200 + result.push('\n'); [INFO] [stdout] 201 + } [INFO] [stdout] 202 + result.push_str(&stdout); [INFO] [stdout] 203 + } [INFO] [stdout] 204 + if !inspect_output.is_empty() { [INFO] [stdout] 205 + if !result.is_empty() { [INFO] [stdout] 206 + result.push_str("\n\n"); [INFO] [stdout] 207 + } [INFO] [stdout] 208 + result.push_str("Inspect Output:\n"); [INFO] [stdout] 209 + result.push_str(&inspect_output); [INFO] [stdout] 210 + } [INFO] [stdout] 211 + Ok(result) [INFO] [stdout] 212 + } else { [INFO] [stdout] 213 + let stderr = String::from_utf8_lossy(&output.stderr); [INFO] [stdout] 214 + Err(anyhow::anyhow!("Processing failed:\n{}", stderr)) [INFO] [stdout] 215 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/interactive.rs:163:22 [INFO] [stdout] | [INFO] [stdout] 163 | .current_dir(&temp_dir) [INFO] [stdout] | ^^^^^^^^^ help: change this to: `temp_dir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/io/input.rs:161:9 [INFO] [stdout] | [INFO] [stdout] 161 | return ex::fs::File::open("/dev/stdin").context("Failed to access stdin via /dev/stdin"); [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] 161 - return ex::fs::File::open("/dev/stdin").context("Failed to access stdin via /dev/stdin"); [INFO] [stdout] 161 + ex::fs::File::open("/dev/stdin").context("Failed to access stdin via /dev/stdin") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/io/output/compressed_output.rs:33:17 [INFO] [stdout] | [INFO] [stdout] 33 | io::Error::new(io::ErrorKind::Other, "SimulatedFailure".to_string()) [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] 33 - io::Error::new(io::ErrorKind::Other, "SimulatedFailure".to_string()) [INFO] [stdout] 33 + io::Error::other("SimulatedFailure".to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual arithmetic check found [INFO] [stdout] --> src/io/output.rs:47:19 [INFO] [stdout] | [INFO] [stdout] 47 | .map(|&q| if q < 33 { 0 } else { q - 33 }) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `q.saturating_sub(33)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Position` which implements the `Copy` trait [INFO] [stdout] --> src/io/reads.rs:216:74 [INFO] [stdout] | [INFO] [stdout] 216 | FastQElement::Local(position) => FastQElement::Local(position.clone()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*position` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Position` which implements the `Copy` trait [INFO] [stdout] --> src/io/reads.rs:221:74 [INFO] [stdout] | [INFO] [stdout] 221 | FastQElement::Local(position) => FastQElement::Local(position.clone()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*position` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Position` which implements the `Copy` trait [INFO] [stdout] --> src/io/reads.rs:226:74 [INFO] [stdout] | [INFO] [stdout] 226 | FastQElement::Local(position) => FastQElement::Local(position.clone()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*position` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `clone` can be confused for the standard trait method `std::clone::Clone::clone` [INFO] [stdout] --> src/io/reads.rs:1079:5 [INFO] [stdout] | [INFO] [stdout] 1079 | / pub fn clone(&self) -> Vec { [INFO] [stdout] 1080 | | self.segments [INFO] [stdout] 1081 | | .iter() [INFO] [stdout] 1082 | | .map(|wrapped| wrapped.owned()) [INFO] [stdout] 1083 | | .collect() [INFO] [stdout] 1084 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: consider implementing the trait `std::clone::Clone` or choosing a less ambiguous method name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stdout] = note: `#[warn(clippy::should_implement_trait)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (11/7) [INFO] [stdout] --> src/output.rs:150:5 [INFO] [stdout] | [INFO] [stdout] 150 | / fn new_file( [INFO] [stdout] 151 | | directory: impl AsRef, [INFO] [stdout] 152 | | basename: &str, [INFO] [stdout] 153 | | suffix: &str, [INFO] [stdout] ... | [INFO] [stdout] 161 | | chunk_size: Option, [INFO] [stdout] 162 | | ) -> Result { [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/output.rs:322:59 [INFO] [stdout] | [INFO] [stdout] 322 | let old_filename_prefix = self.directory.join(format!( [INFO] [stdout] | ___________________________________________________________^ [INFO] [stdout] 323 | | "{}.{}", [INFO] [stdout] 324 | | self.basename, [INFO] [stdout] 325 | | format!("{:0width$}", ii, width = old_chunk_digit_count), [INFO] [stdout] 326 | | )); [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] = note: `#[warn(clippy::format_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/output.rs:327:59 [INFO] [stdout] | [INFO] [stdout] 327 | let new_filename_prefix = self.directory.join(format!( [INFO] [stdout] | ___________________________________________________________^ [INFO] [stdout] 328 | | "{}.{}", [INFO] [stdout] 329 | | self.basename, [INFO] [stdout] 330 | | format!("{:0width$}", ii, width = self.chunk_digit_count), [INFO] [stdout] 331 | | )); [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/output.rs:355:40 [INFO] [stdout] | [INFO] [stdout] 355 | ex::fs::rename(&path, &new_filename).with_context(|| { [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/config/deser.rs:144:13 [INFO] [stdout] | [INFO] [stdout] 144 | / Ok(Deserialize::deserialize( [INFO] [stdout] 145 | | de::value::SeqAccessDeserializer::new(visitor), [INFO] [stdout] 146 | | )?) [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 144 ~ Deserialize::deserialize( [INFO] [stdout] 145 | de::value::SeqAccessDeserializer::new(visitor), [INFO] [stdout] 146 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `tag_value` is used as a loop counter [INFO] [stdout] --> src/pipeline.rs:192:21 [INFO] [stdout] | [INFO] [stdout] 192 | for (_ii, name) in unique_names.into_iter().enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (tag_value, (_ii, name)) in (1_u64..).zip(unique_names.into_iter().enumerate())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/pipeline.rs:192:64 [INFO] [stdout] | [INFO] [stdout] 192 | for (_ii, name) in unique_names.into_iter().enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] = note: `#[warn(clippy::unused_enumerate_index)]` on by default [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 192 - for (_ii, name) in unique_names.into_iter().enumerate() { [INFO] [stdout] 192 + for name in unique_names.into_iter() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/pipeline.rs:231:45 [INFO] [stdout] | [INFO] [stdout] 231 | / ... if let Some(new_name) = new_name { [INFO] [stdout] 232 | | ... Some(format!( [INFO] [stdout] 233 | | ... "{}{}{}", [INFO] [stdout] 234 | | ... old_name, &output_ix_separator, new_name [INFO] [stdout] ... | [INFO] [stdout] 237 | | ... None [INFO] [stdout] 238 | | ... } [INFO] [stdout] | |_______________________^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 231 ~ new_name.as_ref().map(|new_name| format!( [INFO] [stdout] 232 + "{}{}{}", [INFO] [stdout] 233 + old_name, &output_ix_separator, new_name [INFO] [stdout] 234 + )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> src/pipeline.rs:339:46 [INFO] [stdout] | [INFO] [stdout] 339 | segment_order.iter().zip(input_files.segments.into_iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/91021ccc790478a1a89c003e7d32b8d155ae6aae/library/core/src/iter/traits/iterator.rs:629:11 [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] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 339 - segment_order.iter().zip(input_files.segments.into_iter()) [INFO] [stdout] 339 + segment_order.iter().zip(input_files.segments) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/pipeline.rs:471:22 [INFO] [stdout] | [INFO] [stdout] 471 | let stages = std::mem::replace(&mut parsed.transform, Vec::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut parsed.transform)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] = note: `#[warn(clippy::mem_replace_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/transformations/convert/eval_expression.rs:76:13 [INFO] [stdout] | [INFO] [stdout] 76 | / input_def [INFO] [stdout] 77 | | .get_segment_order() [INFO] [stdout] 78 | | .iter() [INFO] [stdout] 79 | | .map(|x| x.clone()) [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 76 ~ input_def [INFO] [stdout] 77 + .get_segment_order() [INFO] [stdout] 78 + .iter().cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/transformations/convert/eval_expression.rs:194:38 [INFO] [stdout] | [INFO] [stdout] 194 | tag_data.push((var_name, &tag_values)); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `tag_values` [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/transformations/convert/eval_expression.rs:231:46 [INFO] [stdout] | [INFO] [stdout] 231 | let result = match compiled.eval(&slab, &mut vars) { [INFO] [stdout] | ^^^^^ help: change this to: `slab` [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 `if` statement can be collapsed [INFO] [stdout] --> src/transformations/demultiplex.rs:57:9 [INFO] [stdout] | [INFO] [stdout] 57 | / if !upstream_label_is_bool { [INFO] [stdout] 58 | | if self.output_unmatched.is_none() { [INFO] [stdout] 59 | | bail!("output_unmatched must be set when using barcodes for demultiplex"); [INFO] [stdout] 60 | | } [INFO] [stdout] 61 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 57 ~ if !upstream_label_is_bool [INFO] [stdout] 58 ~ && self.output_unmatched.is_none() { [INFO] [stdout] 59 | bail!("output_unmatched must be set when using barcodes for demultiplex"); [INFO] [stdout] 60 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for copying elements [INFO] [stdout] --> src/demultiplex.rs:70:9 [INFO] [stdout] | [INFO] [stdout] 70 | self.0.keys().map(|tag| *tag) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `copied` method: `self.0.keys().copied()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary map of the identity function [INFO] [stdout] --> src/demultiplex.rs:95:27 [INFO] [stdout] | [INFO] [stdout] 95 | self.0.into_iter().map(|(tag, data)| (tag, data)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove the call to `map` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_identity [INFO] [stdout] = note: `#[warn(clippy::map_identity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `OptDemultiplex` has a public `len` method, but no `is_empty` method [INFO] [stdout] --> src/demultiplex.rs:200:5 [INFO] [stdout] | [INFO] [stdout] 200 | pub fn len(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for copying elements [INFO] [stdout] --> src/demultiplex.rs:216:32 [INFO] [stdout] | [INFO] [stdout] 216 | Self::Yes(info) => info.tag_to_name.keys().map(|x| *x).collect(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `copied` method: `info.tag_to_name.keys().copied()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has a `#[must_use]` attribute with no message, but returns a type already marked as `#[must_use]` [INFO] [stdout] --> src/demultiplex.rs:221:5 [INFO] [stdout] | [INFO] [stdout] 221 | / pub fn open_output_streams( [INFO] [stdout] 222 | | &self, [INFO] [stdout] 223 | | output_directory: &Path, [INFO] [stdout] 224 | | filename_prefix: &str, [INFO] [stdout] ... | [INFO] [stdout] 232 | | allow_overwrite: bool, [INFO] [stdout] 233 | | ) -> Result { [INFO] [stdout] | |_________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: either add some descriptive message or remove the attribute [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_must_use [INFO] [stdout] = note: `#[warn(clippy::double_must_use)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (11/7) [INFO] [stdout] --> src/demultiplex.rs:221:5 [INFO] [stdout] | [INFO] [stdout] 221 | / pub fn open_output_streams( [INFO] [stdout] 222 | | &self, [INFO] [stdout] 223 | | output_directory: &Path, [INFO] [stdout] 224 | | filename_prefix: &str, [INFO] [stdout] ... | [INFO] [stdout] 232 | | allow_overwrite: bool, [INFO] [stdout] 233 | | ) -> Result { [INFO] [stdout] | |_________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` 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/demultiplex.rs:236:86 [INFO] [stdout] | [INFO] [stdout] 236 | let basename = join_nonempty(vec![filename_prefix, filename_suffix], &ix_separator); [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `ix_separator` [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/demultiplex.rs:259:33 [INFO] [stdout] | [INFO] [stdout] 259 | ... &ix_separator, [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `ix_separator` [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: returning the result of a `let` binding from a block [INFO] [stdout] --> src/interactive.rs:215:5 [INFO] [stdout] | [INFO] [stdout] 167 | / let result = if output.status.success() { [INFO] [stdout] 168 | | // Extract stdout and stderr [INFO] [stdout] 169 | | let stdout = String::from_utf8_lossy(&output.stdout); [INFO] [stdout] 170 | | let stderr = String::from_utf8_lossy(&output.stderr); [INFO] [stdout] ... | [INFO] [stdout] 212 | | Err(anyhow::anyhow!("Processing failed:\n{}", stderr)) [INFO] [stdout] 213 | | }; [INFO] [stdout] | |______- unnecessary `let` binding [INFO] [stdout] 214 | [INFO] [stdout] 215 | result [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] 167 ~ [INFO] [stdout] 168 | [INFO] [stdout] 169 ~ if output.status.success() { [INFO] [stdout] 170 + // Extract stdout and stderr [INFO] [stdout] 171 + let stdout = String::from_utf8_lossy(&output.stdout); [INFO] [stdout] 172 + let stderr = String::from_utf8_lossy(&output.stderr); [INFO] [stdout] 173 + [INFO] [stdout] 174 + /* //list all files in tempdir [INFO] [stdout] 175 + for entry in fs::read_dir(&temp_dir)? { [INFO] [stdout] 176 + let entry = entry?; [INFO] [stdout] 177 + let path = entry.path(); [INFO] [stdout] 178 + if path.is_file() { [INFO] [stdout] 179 + let filesize = fs::metadata(&path)?.len(); [INFO] [stdout] 180 + println!("Generated file: {} {}", path.display(), filesize); [INFO] [stdout] 181 + } [INFO] [stdout] 182 + } */ [INFO] [stdout] 183 + [INFO] [stdout] 184 + // Look for the Inspect output file [INFO] [stdout] 185 + let mut inspect_output = String::new(); [INFO] [stdout] 186 + let inspect_file = temp_dir.join("interactive_output_inspect_interleaved.fq"); [INFO] [stdout] 187 + if inspect_file.exists() { [INFO] [stdout] 188 + if let Ok(contents) = fs::read_to_string(&inspect_file) { [INFO] [stdout] 189 + inspect_output = contents; [INFO] [stdout] 190 + } [INFO] [stdout] 191 + } [INFO] [stdout] 192 + [INFO] [stdout] 193 + // Combine for output [INFO] [stdout] 194 + let mut result = String::new(); [INFO] [stdout] 195 + if !stderr.is_empty() { [INFO] [stdout] 196 + result.push_str(&stderr); [INFO] [stdout] 197 + } [INFO] [stdout] 198 + if !stdout.is_empty() { [INFO] [stdout] 199 + if !result.is_empty() { [INFO] [stdout] 200 + result.push('\n'); [INFO] [stdout] 201 + } [INFO] [stdout] 202 + result.push_str(&stdout); [INFO] [stdout] 203 + } [INFO] [stdout] 204 + if !inspect_output.is_empty() { [INFO] [stdout] 205 + if !result.is_empty() { [INFO] [stdout] 206 + result.push_str("\n\n"); [INFO] [stdout] 207 + } [INFO] [stdout] 208 + result.push_str("Inspect Output:\n"); [INFO] [stdout] 209 + result.push_str(&inspect_output); [INFO] [stdout] 210 + } [INFO] [stdout] 211 + Ok(result) [INFO] [stdout] 212 + } else { [INFO] [stdout] 213 + let stderr = String::from_utf8_lossy(&output.stderr); [INFO] [stdout] 214 + Err(anyhow::anyhow!("Processing failed:\n{}", stderr)) [INFO] [stdout] 215 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/interactive.rs:163:22 [INFO] [stdout] | [INFO] [stdout] 163 | .current_dir(&temp_dir) [INFO] [stdout] | ^^^^^^^^^ help: change this to: `temp_dir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/io/input.rs:161:9 [INFO] [stdout] | [INFO] [stdout] 161 | return ex::fs::File::open("/dev/stdin").context("Failed to access stdin via /dev/stdin"); [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] 161 - return ex::fs::File::open("/dev/stdin").context("Failed to access stdin via /dev/stdin"); [INFO] [stdout] 161 + ex::fs::File::open("/dev/stdin").context("Failed to access stdin via /dev/stdin") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/io/output/compressed_output.rs:33:17 [INFO] [stdout] | [INFO] [stdout] 33 | io::Error::new(io::ErrorKind::Other, "SimulatedFailure".to_string()) [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] 33 - io::Error::new(io::ErrorKind::Other, "SimulatedFailure".to_string()) [INFO] [stdout] 33 + io::Error::other("SimulatedFailure".to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual arithmetic check found [INFO] [stdout] --> src/io/output.rs:47:19 [INFO] [stdout] | [INFO] [stdout] 47 | .map(|&q| if q < 33 { 0 } else { q - 33 }) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `q.saturating_sub(33)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Position` which implements the `Copy` trait [INFO] [stdout] --> src/io/reads.rs:216:74 [INFO] [stdout] | [INFO] [stdout] 216 | FastQElement::Local(position) => FastQElement::Local(position.clone()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*position` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Position` which implements the `Copy` trait [INFO] [stdout] --> src/io/reads.rs:221:74 [INFO] [stdout] | [INFO] [stdout] 221 | FastQElement::Local(position) => FastQElement::Local(position.clone()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*position` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Position` which implements the `Copy` trait [INFO] [stdout] --> src/io/reads.rs:226:74 [INFO] [stdout] | [INFO] [stdout] 226 | FastQElement::Local(position) => FastQElement::Local(position.clone()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*position` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `repeat().take()` can be written more concisely [INFO] [stdout] --> src/transformations/edits/merge_reads.rs:187:50 [INFO] [stdout] | [INFO] [stdout] 187 | concatenated_qual.extend(std::iter::repeat(spacer_qual).take(spacer.len())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `repeat_n()` instead: `std::iter::repeat_n(spacer_qual, spacer.len())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_repeat_n [INFO] [stdout] = note: `#[warn(clippy::manual_repeat_n)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/transformations/edits/merge_reads.rs:230:1 [INFO] [stdout] | [INFO] [stdout] 230 | / fn try_merge_reads( [INFO] [stdout] 231 | | seq1: &[u8], [INFO] [stdout] 232 | | qual1: &[u8], [INFO] [stdout] 233 | | seq2: &[u8], [INFO] [stdout] ... | [INFO] [stdout] 238 | | max_mismatch_count: usize, [INFO] [stdout] 239 | | ) -> Result { [INFO] [stdout] | |________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `clone` can be confused for the standard trait method `std::clone::Clone::clone` [INFO] [stdout] --> src/io/reads.rs:1079:5 [INFO] [stdout] | [INFO] [stdout] 1079 | / pub fn clone(&self) -> Vec { [INFO] [stdout] 1080 | | self.segments [INFO] [stdout] 1081 | | .iter() [INFO] [stdout] 1082 | | .map(|wrapped| wrapped.owned()) [INFO] [stdout] 1083 | | .collect() [INFO] [stdout] 1084 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: consider implementing the trait `std::clone::Clone` or choosing a less ambiguous method name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stdout] = note: `#[warn(clippy::should_implement_trait)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/transformations/edits/merge_reads.rs:302:9 [INFO] [stdout] | [INFO] [stdout] 302 | / if mismatches <= max_mismatches || (first_k_below_limit) { [INFO] [stdout] 303 | | if best_match.is_none() || mismatches < best_match.unwrap().2 { [INFO] [stdout] 304 | | best_match = Some((offset as isize, overlap_len, mismatches)); [INFO] [stdout] 305 | | } [INFO] [stdout] 306 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 302 ~ if (mismatches <= max_mismatches || (first_k_below_limit)) { [INFO] [stdout] 303 ~ && (best_match.is_none() || mismatches < best_match.unwrap().2) { [INFO] [stdout] 304 | best_match = Some((offset as isize, overlap_len, mismatches)); [INFO] [stdout] 305 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> src/transformations/edits/merge_reads.rs:349:5 [INFO] [stdout] | [INFO] [stdout] 349 | / fn append_overlap( [INFO] [stdout] 350 | | seq1: &[u8], [INFO] [stdout] 351 | | qual1: &[u8], [INFO] [stdout] 352 | | seq2: &[u8], [INFO] [stdout] ... | [INFO] [stdout] 358 | | inside_out: bool, [INFO] [stdout] 359 | | ) { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (11/7) [INFO] [stdout] --> src/output.rs:150:5 [INFO] [stdout] | [INFO] [stdout] 150 | / fn new_file( [INFO] [stdout] 151 | | directory: impl AsRef, [INFO] [stdout] 152 | | basename: &str, [INFO] [stdout] 153 | | suffix: &str, [INFO] [stdout] ... | [INFO] [stdout] 161 | | chunk_size: Option, [INFO] [stdout] 162 | | ) -> Result { [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/output.rs:322:59 [INFO] [stdout] | [INFO] [stdout] 322 | let old_filename_prefix = self.directory.join(format!( [INFO] [stdout] | ___________________________________________________________^ [INFO] [stdout] 323 | | "{}.{}", [INFO] [stdout] 324 | | self.basename, [INFO] [stdout] 325 | | format!("{:0width$}", ii, width = old_chunk_digit_count), [INFO] [stdout] 326 | | )); [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] = note: `#[warn(clippy::format_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/output.rs:327:59 [INFO] [stdout] | [INFO] [stdout] 327 | let new_filename_prefix = self.directory.join(format!( [INFO] [stdout] | ___________________________________________________________^ [INFO] [stdout] 328 | | "{}.{}", [INFO] [stdout] 329 | | self.basename, [INFO] [stdout] 330 | | format!("{:0width$}", ii, width = self.chunk_digit_count), [INFO] [stdout] 331 | | )); [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/output.rs:355:40 [INFO] [stdout] | [INFO] [stdout] 355 | ex::fs::rename(&path, &new_filename).with_context(|| { [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `tag_value` is used as a loop counter [INFO] [stdout] --> src/pipeline.rs:192:21 [INFO] [stdout] | [INFO] [stdout] 192 | for (_ii, name) in unique_names.into_iter().enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (tag_value, (_ii, name)) in (1_u64..).zip(unique_names.into_iter().enumerate())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/pipeline.rs:192:64 [INFO] [stdout] | [INFO] [stdout] 192 | for (_ii, name) in unique_names.into_iter().enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] = note: `#[warn(clippy::unused_enumerate_index)]` on by default [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 192 - for (_ii, name) in unique_names.into_iter().enumerate() { [INFO] [stdout] 192 + for name in unique_names.into_iter() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/pipeline.rs:231:45 [INFO] [stdout] | [INFO] [stdout] 231 | / ... if let Some(new_name) = new_name { [INFO] [stdout] 232 | | ... Some(format!( [INFO] [stdout] 233 | | ... "{}{}{}", [INFO] [stdout] 234 | | ... old_name, &output_ix_separator, new_name [INFO] [stdout] ... | [INFO] [stdout] 237 | | ... None [INFO] [stdout] 238 | | ... } [INFO] [stdout] | |_______________________^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 231 ~ new_name.as_ref().map(|new_name| format!( [INFO] [stdout] 232 + "{}{}{}", [INFO] [stdout] 233 + old_name, &output_ix_separator, new_name [INFO] [stdout] 234 + )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> src/pipeline.rs:339:46 [INFO] [stdout] | [INFO] [stdout] 339 | segment_order.iter().zip(input_files.segments.into_iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/91021ccc790478a1a89c003e7d32b8d155ae6aae/library/core/src/iter/traits/iterator.rs:629:11 [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] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 339 - segment_order.iter().zip(input_files.segments.into_iter()) [INFO] [stdout] 339 + segment_order.iter().zip(input_files.segments) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/pipeline.rs:471:22 [INFO] [stdout] | [INFO] [stdout] 471 | let stages = std::mem::replace(&mut parsed.transform, Vec::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut parsed.transform)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] = note: `#[warn(clippy::mem_replace_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/transformations/edits/swap.rs:73:6 [INFO] [stdout] | [INFO] [stdout] 73 | ) -> Result< [INFO] [stdout] | ______^ [INFO] [stdout] 74 | | ( [INFO] [stdout] 75 | | Option, [INFO] [stdout] 76 | | Option, [INFO] [stdout] ... | [INFO] [stdout] 80 | | anyhow::Error, [INFO] [stdout] 81 | | > { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/transformations/convert/eval_expression.rs:76:13 [INFO] [stdout] | [INFO] [stdout] 76 | / input_def [INFO] [stdout] 77 | | .get_segment_order() [INFO] [stdout] 78 | | .iter() [INFO] [stdout] 79 | | .map(|x| x.clone()) [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 76 ~ input_def [INFO] [stdout] 77 + .get_segment_order() [INFO] [stdout] 78 + .iter().cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/transformations/convert/eval_expression.rs:194:38 [INFO] [stdout] | [INFO] [stdout] 194 | tag_data.push((var_name, &tag_values)); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `tag_values` [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/transformations/convert/eval_expression.rs:231:46 [INFO] [stdout] | [INFO] [stdout] 231 | let result = match compiled.eval(&slab, &mut vars) { [INFO] [stdout] | ^^^^^ help: change this to: `slab` [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 `if` statement can be collapsed [INFO] [stdout] --> src/transformations/demultiplex.rs:57:9 [INFO] [stdout] | [INFO] [stdout] 57 | / if !upstream_label_is_bool { [INFO] [stdout] 58 | | if self.output_unmatched.is_none() { [INFO] [stdout] 59 | | bail!("output_unmatched must be set when using barcodes for demultiplex"); [INFO] [stdout] 60 | | } [INFO] [stdout] 61 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 57 ~ if !upstream_label_is_bool [INFO] [stdout] 58 ~ && self.output_unmatched.is_none() { [INFO] [stdout] 59 | bail!("output_unmatched must be set when using barcodes for demultiplex"); [INFO] [stdout] 60 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `end` is used to index `seq` [INFO] [stdout] --> src/transformations/extract/longest_poly_x.rs:77:24 [INFO] [stdout] | [INFO] [stdout] 77 | for end in start..seq.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 77 - for end in start..seq.len() { [INFO] [stdout] 77 + for (end, ) in seq.iter().enumerate().skip(start) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `repeat().take()` can be written more concisely [INFO] [stdout] --> src/transformations/edits/merge_reads.rs:187:50 [INFO] [stdout] | [INFO] [stdout] 187 | concatenated_qual.extend(std::iter::repeat(spacer_qual).take(spacer.len())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `repeat_n()` instead: `std::iter::repeat_n(spacer_qual, spacer.len())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_repeat_n [INFO] [stdout] = note: `#[warn(clippy::manual_repeat_n)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/transformations/edits/merge_reads.rs:230:1 [INFO] [stdout] | [INFO] [stdout] 230 | / fn try_merge_reads( [INFO] [stdout] 231 | | seq1: &[u8], [INFO] [stdout] 232 | | qual1: &[u8], [INFO] [stdout] 233 | | seq2: &[u8], [INFO] [stdout] ... | [INFO] [stdout] 238 | | max_mismatch_count: usize, [INFO] [stdout] 239 | | ) -> Result { [INFO] [stdout] | |________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/transformations/edits/merge_reads.rs:302:9 [INFO] [stdout] | [INFO] [stdout] 302 | / if mismatches <= max_mismatches || (first_k_below_limit) { [INFO] [stdout] 303 | | if best_match.is_none() || mismatches < best_match.unwrap().2 { [INFO] [stdout] 304 | | best_match = Some((offset as isize, overlap_len, mismatches)); [INFO] [stdout] 305 | | } [INFO] [stdout] 306 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 302 ~ if (mismatches <= max_mismatches || (first_k_below_limit)) { [INFO] [stdout] 303 ~ && (best_match.is_none() || mismatches < best_match.unwrap().2) { [INFO] [stdout] 304 | best_match = Some((offset as isize, overlap_len, mismatches)); [INFO] [stdout] 305 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> src/transformations/edits/merge_reads.rs:349:5 [INFO] [stdout] | [INFO] [stdout] 349 | / fn append_overlap( [INFO] [stdout] 350 | | seq1: &[u8], [INFO] [stdout] 351 | | qual1: &[u8], [INFO] [stdout] 352 | | seq2: &[u8], [INFO] [stdout] ... | [INFO] [stdout] 358 | | inside_out: bool, [INFO] [stdout] 359 | | ) { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/transformations/edits/swap.rs:73:6 [INFO] [stdout] | [INFO] [stdout] 73 | ) -> Result< [INFO] [stdout] | ______^ [INFO] [stdout] 74 | | ( [INFO] [stdout] 75 | | Option, [INFO] [stdout] 76 | | Option, [INFO] [stdout] ... | [INFO] [stdout] 80 | | anyhow::Error, [INFO] [stdout] 81 | | > { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/transformations/filters/reservoir_sample.rs:55:33 [INFO] [stdout] | [INFO] [stdout] 55 | .or_insert_with(|| Vec::new()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/transformations/filters/reservoir_sample.rs:70:27 [INFO] [stdout] | [INFO] [stdout] 70 | let buffers = std::mem::replace(&mut self.buffers, DemultiplexedData::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut self.buffers)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/transformations/reports/progress.rs:160:29 [INFO] [stdout] | [INFO] [stdout] 160 | .unwrap_or_else(|| std::time::Instant::now()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `std::time::Instant::now` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/transformations/reports/report_base_statistics_part1.rs:139:34 [INFO] [stdout] | [INFO] [stdout] 139 | ... .get(&tag) [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_base_statistics_part2.rs:145:34 [INFO] [stdout] | [INFO] [stdout] 145 | ... .get(&tag) [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_count.rs:86:67 [INFO] [stdout] | [INFO] [stdout] 86 | ... "molecule_count": *(self.data.get(&tag).unwrap()), [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_count_oligos.rs:102:73 [INFO] [stdout] | [INFO] [stdout] 102 | ... local.insert(oligo.clone(), self.counts.get(&tag).unwrap()[ii].into()); [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_duplicate_count.rs:131:34 [INFO] [stdout] | [INFO] [stdout] 131 | ... .get(&tag) [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_duplicate_fragment_count.rs:121:43 [INFO] [stdout] | [INFO] [stdout] 121 | ... self.data.get(&tag).unwrap().duplicate_count.into(), [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_length_distribution.rs:102:34 [INFO] [stdout] | [INFO] [stdout] 102 | ... .get(&tag) [INFO] [stdout] | ^^^^ help: change this to: `tag` [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: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/transformations/tag/quantify_tag.rs:114:30 [INFO] [stdout] | [INFO] [stdout] 114 | let output_streams = std::mem::replace( [INFO] [stdout] | ______________________________^ [INFO] [stdout] 115 | | &mut self.output_streams, [INFO] [stdout] 116 | | DemultiplexedOutputFiles::default(), [INFO] [stdout] 117 | | ); [INFO] [stdout] | |_________^ help: consider using: `std::mem::take(&mut self.output_streams)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `end` is used to index `seq` [INFO] [stdout] --> src/transformations/extract/longest_poly_x.rs:77:24 [INFO] [stdout] | [INFO] [stdout] 77 | for end in start..seq.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 77 - for end in start..seq.len() { [INFO] [stdout] 77 + for (end, ) in seq.iter().enumerate().skip(start) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/transformations/tag/store_tag_in_fastq.rs:363:30 [INFO] [stdout] | [INFO] [stdout] 363 | let output_streams = std::mem::replace( [INFO] [stdout] | ______________________________^ [INFO] [stdout] 364 | | &mut self.output_streams, [INFO] [stdout] 365 | | DemultiplexedOutputFiles::default(), [INFO] [stdout] 366 | | ); [INFO] [stdout] | |_________^ help: consider using: `std::mem::take(&mut self.output_streams)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/transformations/tag/store_tags_in_table.rs:96:21 [INFO] [stdout] | [INFO] [stdout] 96 | / match opt_buffered_writer { [INFO] [stdout] 97 | | Some(buffered_writer) => Some( [INFO] [stdout] 98 | | csv::WriterBuilder::new() [INFO] [stdout] 99 | | .delimiter(b'\t') [INFO] [stdout] ... | [INFO] [stdout] 102 | | None => None, [INFO] [stdout] 103 | | }, [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 96 ~ opt_buffered_writer.map(|buffered_writer| csv::WriterBuilder::new() [INFO] [stdout] 97 + .delimiter(b'\t') [INFO] [stdout] 98 ~ .from_writer(buffered_writer)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/transformations/validation/all_reads_same_length.rs:53:28 [INFO] [stdout] | [INFO] [stdout] 53 | let mut expected = self.expected_length.clone(); //borrow checker... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.expected_length` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/transformations/filters/reservoir_sample.rs:55:33 [INFO] [stdout] | [INFO] [stdout] 55 | .or_insert_with(|| Vec::new()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/transformations/filters/reservoir_sample.rs:70:27 [INFO] [stdout] | [INFO] [stdout] 70 | let buffers = std::mem::replace(&mut self.buffers, DemultiplexedData::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut self.buffers)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/transformations/reports/progress.rs:160:29 [INFO] [stdout] | [INFO] [stdout] 160 | .unwrap_or_else(|| std::time::Instant::now()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `std::time::Instant::now` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/transformations/reports/report_base_statistics_part1.rs:139:34 [INFO] [stdout] | [INFO] [stdout] 139 | ... .get(&tag) [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_base_statistics_part2.rs:145:34 [INFO] [stdout] | [INFO] [stdout] 145 | ... .get(&tag) [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_count.rs:86:67 [INFO] [stdout] | [INFO] [stdout] 86 | ... "molecule_count": *(self.data.get(&tag).unwrap()), [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_count_oligos.rs:102:73 [INFO] [stdout] | [INFO] [stdout] 102 | ... local.insert(oligo.clone(), self.counts.get(&tag).unwrap()[ii].into()); [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_duplicate_count.rs:131:34 [INFO] [stdout] | [INFO] [stdout] 131 | ... .get(&tag) [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_duplicate_fragment_count.rs:121:43 [INFO] [stdout] | [INFO] [stdout] 121 | ... self.data.get(&tag).unwrap().duplicate_count.into(), [INFO] [stdout] | ^^^^ help: change this to: `tag` [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/transformations/reports/report_length_distribution.rs:102:34 [INFO] [stdout] | [INFO] [stdout] 102 | ... .get(&tag) [INFO] [stdout] | ^^^^ help: change this to: `tag` [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: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/transformations/tag/quantify_tag.rs:114:30 [INFO] [stdout] | [INFO] [stdout] 114 | let output_streams = std::mem::replace( [INFO] [stdout] | ______________________________^ [INFO] [stdout] 115 | | &mut self.output_streams, [INFO] [stdout] 116 | | DemultiplexedOutputFiles::default(), [INFO] [stdout] 117 | | ); [INFO] [stdout] | |_________^ help: consider using: `std::mem::take(&mut self.output_streams)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/transformations/tag/store_tag_in_fastq.rs:363:30 [INFO] [stdout] | [INFO] [stdout] 363 | let output_streams = std::mem::replace( [INFO] [stdout] | ______________________________^ [INFO] [stdout] 364 | | &mut self.output_streams, [INFO] [stdout] 365 | | DemultiplexedOutputFiles::default(), [INFO] [stdout] 366 | | ); [INFO] [stdout] | |_________^ help: consider using: `std::mem::take(&mut self.output_streams)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/transformations/tag/store_tags_in_table.rs:96:21 [INFO] [stdout] | [INFO] [stdout] 96 | / match opt_buffered_writer { [INFO] [stdout] 97 | | Some(buffered_writer) => Some( [INFO] [stdout] 98 | | csv::WriterBuilder::new() [INFO] [stdout] 99 | | .delimiter(b'\t') [INFO] [stdout] ... | [INFO] [stdout] 102 | | None => None, [INFO] [stdout] 103 | | }, [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 96 ~ opt_buffered_writer.map(|buffered_writer| csv::WriterBuilder::new() [INFO] [stdout] 97 + .delimiter(b'\t') [INFO] [stdout] 98 ~ .from_writer(buffered_writer)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/transformations/validation/all_reads_same_length.rs:53:28 [INFO] [stdout] | [INFO] [stdout] 53 | let mut expected = self.expected_length.clone(); //borrow checker... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.expected_length` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/lib.rs:99:24 [INFO] [stdout] | [INFO] [stdout] 99 | if !fs::metadata(&file_path).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(&file_path).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: this boolean expression can be simplified [INFO] [stdout] --> src/lib.rs:110:28 [INFO] [stdout] | [INFO] [stdout] 110 | if !fs::metadata(&file_path).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(&file_path).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] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/lib.rs:99:24 [INFO] [stdout] | [INFO] [stdout] 99 | if !fs::metadata(&file_path).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(&file_path).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: this boolean expression can be simplified [INFO] [stdout] --> src/lib.rs:110:28 [INFO] [stdout] | [INFO] [stdout] 110 | if !fs::metadata(&file_path).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(&file_path).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] [INFO] [stdout] [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> tests/verify_all_test_cases_present.rs:25:14 [INFO] [stdout] | [INFO] [stdout] 25 | .replace('/', "_x_") [INFO] [stdout] | ______________^ [INFO] [stdout] 26 | | .replace('\\', "_x_") [INFO] [stdout] | |_________________________________^ help: replace with: `replace(['/', '\\'], "_x_")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] = note: `#[warn(clippy::collapsible_str_replace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> tests/template_and_documentation_verification.rs:525:17 [INFO] [stdout] | [INFO] [stdout] 525 | / if toml_blocks.is_empty() { [INFO] [stdout] 526 | | if !ignored.contains(&doc_file.file_name().and_then(|o| o.to_str()).unwrap()) { [INFO] [stdout] 527 | | failed_files [INFO] [stdout] 528 | | .push(format!("{}: No TOML examples found", doc_file.display())); [INFO] [stdout] ... | [INFO] [stdout] 531 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 525 ~ if toml_blocks.is_empty() [INFO] [stdout] 526 ~ && !ignored.contains(&doc_file.file_name().and_then(|o| o.to_str()).unwrap()) { [INFO] [stdout] 527 | failed_files [INFO] [stdout] 528 | .push(format!("{}: No TOML examples found", doc_file.display())); [INFO] [stdout] 529 | continue; [INFO] [stdout] 530 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/template_and_documentation_verification.rs:521:23 [INFO] [stdout] | [INFO] [stdout] 521 | let ignored = vec!["CalcMeanQuality.md"]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `["CalcMeanQuality.md"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` 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/main.rs:415:46 [INFO] [stdout] | [INFO] [stdout] 415 | if let Err(e) = mbf_fastq_processor::run(&toml_file, ¤t_dir, allow_overwrites) { [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `toml_file` [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/main.rs:415:46 [INFO] [stdout] | [INFO] [stdout] 415 | if let Err(e) = mbf_fastq_processor::run(&toml_file, ¤t_dir, allow_overwrites) { [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `toml_file` [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] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 20s [INFO] running `Command { std: "docker" "inspect" "e3ed025c15374609dfc06effaa25984e0758d93c7c5b4f140e757e746af078ec", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e3ed025c15374609dfc06effaa25984e0758d93c7c5b4f140e757e746af078ec", kill_on_drop: false }` [INFO] [stdout] e3ed025c15374609dfc06effaa25984e0758d93c7c5b4f140e757e746af078ec