[INFO] updating cached repository WJackKing/prokaryote [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/WJackKing/prokaryote [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/WJackKing/prokaryote" "work/ex/clippy-test-run/sources/stable/gh/WJackKing/prokaryote"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/WJackKing/prokaryote'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/WJackKing/prokaryote" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/WJackKing/prokaryote"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/WJackKing/prokaryote'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 297e5092194ceabc552456006ed28ad52cb0cd69 [INFO] sha for GitHub repo WJackKing/prokaryote: 297e5092194ceabc552456006ed28ad52cb0cd69 [INFO] validating manifest of WJackKing/prokaryote on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of WJackKing/prokaryote on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing WJackKing/prokaryote [INFO] finished frobbing WJackKing/prokaryote [INFO] frobbed toml for WJackKing/prokaryote written to work/ex/clippy-test-run/sources/stable/gh/WJackKing/prokaryote/Cargo.toml [INFO] started frobbing WJackKing/prokaryote [INFO] finished frobbing WJackKing/prokaryote [INFO] frobbed toml for WJackKing/prokaryote written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/WJackKing/prokaryote/Cargo.toml [INFO] crate WJackKing/prokaryote has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting WJackKing/prokaryote against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/WJackKing/prokaryote:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dclippy::into_iter_on_array" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 6a943df44a1d95a6161caa99ce034516bd9d2562021fd4d86b136daca134c186 [INFO] running `"docker" "start" "-a" "6a943df44a1d95a6161caa99ce034516bd9d2562021fd4d86b136daca134c186"` [INFO] [stderr] Checking prokaryote v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dna/mod.rs:109:9 [INFO] [stderr] | [INFO] [stderr] 109 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dna/mod.rs:136:9 [INFO] [stderr] | [INFO] [stderr] 136 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dna/mod.rs:167:9 [INFO] [stderr] | [INFO] [stderr] 167 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/dna/mod.rs:158:13 [INFO] [stderr] | [INFO] [stderr] 158 | / if (i - offset) % 3 == 0 { [INFO] [stderr] 159 | | if self.genes[i].get_num() == codon.get_h() [INFO] [stderr] 160 | | && self.genes[i + 1].get_num() == codon.get_m() [INFO] [stderr] 161 | | && self.genes[i + 2].get_num() == codon.get_l() [INFO] [stderr] ... | [INFO] [stderr] 164 | | } [INFO] [stderr] 165 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 158 | if (i - offset) % 3 == 0 && self.genes[i].get_num() == codon.get_h() [INFO] [stderr] 159 | && self.genes[i + 1].get_num() == codon.get_m() [INFO] [stderr] 160 | && self.genes[i + 2].get_num() == codon.get_l() { [INFO] [stderr] 161 | return Some(i); [INFO] [stderr] 162 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/dna/mod.rs:173:13 [INFO] [stderr] | [INFO] [stderr] 173 | / if (i - offset) % 3 == 0 { [INFO] [stderr] 174 | | if self.genes[i].get_num() == codon.get_h() [INFO] [stderr] 175 | | && self.genes[i + 1].get_num() == codon.get_m() [INFO] [stderr] 176 | | && self.genes[i + 2].get_num() == codon.get_l() [INFO] [stderr] ... | [INFO] [stderr] 179 | | } [INFO] [stderr] 180 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 173 | if (i - offset) % 3 == 0 && self.genes[i].get_num() == codon.get_h() [INFO] [stderr] 174 | && self.genes[i + 1].get_num() == codon.get_m() [INFO] [stderr] 175 | && self.genes[i + 2].get_num() == codon.get_l() { [INFO] [stderr] 176 | v.push(i); [INFO] [stderr] 177 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dna/mod.rs:109:9 [INFO] [stderr] | [INFO] [stderr] 109 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dna/mod.rs:136:9 [INFO] [stderr] | [INFO] [stderr] 136 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dna/mod.rs:167:9 [INFO] [stderr] | [INFO] [stderr] 167 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/dna/mod.rs:158:13 [INFO] [stderr] | [INFO] [stderr] 158 | / if (i - offset) % 3 == 0 { [INFO] [stderr] 159 | | if self.genes[i].get_num() == codon.get_h() [INFO] [stderr] 160 | | && self.genes[i + 1].get_num() == codon.get_m() [INFO] [stderr] 161 | | && self.genes[i + 2].get_num() == codon.get_l() [INFO] [stderr] ... | [INFO] [stderr] 164 | | } [INFO] [stderr] 165 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 158 | if (i - offset) % 3 == 0 && self.genes[i].get_num() == codon.get_h() [INFO] [stderr] 159 | && self.genes[i + 1].get_num() == codon.get_m() [INFO] [stderr] 160 | && self.genes[i + 2].get_num() == codon.get_l() { [INFO] [stderr] 161 | return Some(i); [INFO] [stderr] 162 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/dna/mod.rs:173:13 [INFO] [stderr] | [INFO] [stderr] 173 | / if (i - offset) % 3 == 0 { [INFO] [stderr] 174 | | if self.genes[i].get_num() == codon.get_h() [INFO] [stderr] 175 | | && self.genes[i + 1].get_num() == codon.get_m() [INFO] [stderr] 176 | | && self.genes[i + 2].get_num() == codon.get_l() [INFO] [stderr] ... | [INFO] [stderr] 179 | | } [INFO] [stderr] 180 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 173 | if (i - offset) % 3 == 0 && self.genes[i].get_num() == codon.get_h() [INFO] [stderr] 174 | && self.genes[i + 1].get_num() == codon.get_m() [INFO] [stderr] 175 | && self.genes[i + 2].get_num() == codon.get_l() { [INFO] [stderr] 176 | v.push(i); [INFO] [stderr] 177 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: field is never used: `dna_io` [INFO] [stderr] --> src/orf/mod.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | dna_io: &'a mut Dnaio, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: defining a method called `cmp` on this type; consider implementing the `std::cmp::Ord` trait or choosing a less ambiguous name [INFO] [stderr] --> src/dna/codon.rs:56:5 [INFO] [stderr] | [INFO] [stderr] 56 | / pub fn cmp(&self, other: &Codon) -> bool { [INFO] [stderr] 57 | | let mut is_cmp = false; [INFO] [stderr] 58 | | if self.get_h() == other.get_h() && self.get_m() == other.get_m() [INFO] [stderr] 59 | | && self.get_l() == other.get_l() [INFO] [stderr] ... | [INFO] [stderr] 63 | | is_cmp [INFO] [stderr] 64 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/dna/codon.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | / let mut is_cmp = false; [INFO] [stderr] 58 | | if self.get_h() == other.get_h() && self.get_m() == other.get_m() [INFO] [stderr] 59 | | && self.get_l() == other.get_l() [INFO] [stderr] 60 | | { [INFO] [stderr] 61 | | is_cmp = true; [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 57 | let is_cmp = if self.get_h() == other.get_h() && self.get_m() == other.get_m() [INFO] [stderr] 58 | && self.get_l() == other.get_l() { true } else { false }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/dna/codon.rs:121:13 [INFO] [stderr] | [INFO] [stderr] 121 | self.index = self.index + 3; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.index += 3` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/dna/mod.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | / match base { [INFO] [stderr] 40 | | 0...4 => dna.push_num(base).unwrap(), [INFO] [stderr] 41 | | _ => (), [INFO] [stderr] 42 | | } [INFO] [stderr] | |_____________^ help: try this: `if let 0...4 = base { dna.push_num(base).unwrap() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/dna/mod.rs:61:28 [INFO] [stderr] | [INFO] [stderr] 61 | Ok(gene) => Ok(self.genes.push(gene)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 61 | Ok(gene) => Ok(()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/dna/mod.rs:78:28 [INFO] [stderr] | [INFO] [stderr] 78 | Ok(gene) => Ok(self.genes[index] = gene), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 78 | Ok(gene) => Ok(()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: item `dna::Dna` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/dna/mod.rs:84:1 [INFO] [stderr] | [INFO] [stderr] 84 | / impl Dna { [INFO] [stderr] 85 | | ///获取index处的碱基 [INFO] [stderr] 86 | | pub fn index(&self, index: usize) -> Base { [INFO] [stderr] 87 | | self.genes[index].clone() [INFO] [stderr] ... | [INFO] [stderr] 98 | | } [INFO] [stderr] 99 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/dna/mod.rs:120:12 [INFO] [stderr] | [INFO] [stderr] 120 | if v.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/dna/mod.rs:149:12 [INFO] [stderr] | [INFO] [stderr] 149 | if v.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/dna/mod.rs:182:12 [INFO] [stderr] | [INFO] [stderr] 182 | if v.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/protein/mod.rs:32:13 [INFO] [stderr] | [INFO] [stderr] 32 | / match a { [INFO] [stderr] 33 | | 0...21 => p.push_num(a).unwrap(), [INFO] [stderr] 34 | | _ => (), [INFO] [stderr] 35 | | } [INFO] [stderr] | |_____________^ help: try this: `if let 0...21 = a { p.push_num(a).unwrap() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/protein/mod.rs:44:25 [INFO] [stderr] | [INFO] [stderr] 44 | Ok(a) => Ok(self.peptide.push(a)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 44 | Ok(a) => Ok(()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/protein/mod.rs:59:25 [INFO] [stderr] | [INFO] [stderr] 59 | Ok(a) => Ok(self.peptide[index] = a), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 59 | Ok(a) => Ok(()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: item `protein::Protein` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/protein/mod.rs:65:1 [INFO] [stderr] | [INFO] [stderr] 65 | / impl Protein { [INFO] [stderr] 66 | | pub fn index(&self, index: usize) -> Aa { [INFO] [stderr] 67 | | self.peptide[index].clone() [INFO] [stderr] 68 | | } [INFO] [stderr] ... | [INFO] [stderr] 76 | | } [INFO] [stderr] 77 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: field is never used: `dna_io` [INFO] [stderr] --> src/orf/mod.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | dna_io: &'a mut Dnaio, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `buf` [INFO] [stderr] --> src/io/dna_io.rs:26:34 [INFO] [stderr] | [INFO] [stderr] 26 | for i in 0..buf.len() { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 26 | for (i, ) in buf.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/io/dna_io.rs:30:43 [INFO] [stderr] | [INFO] [stderr] 30 | if buf[i].eq(&">".as_bytes()[0]) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b">"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/io/dna_io.rs:34:25 [INFO] [stderr] | [INFO] [stderr] 34 | index = index + a; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += a` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: defining a method called `cmp` on this type; consider implementing the `std::cmp::Ord` trait or choosing a less ambiguous name [INFO] [stderr] --> src/dna/codon.rs:56:5 [INFO] [stderr] | [INFO] [stderr] 56 | / pub fn cmp(&self, other: &Codon) -> bool { [INFO] [stderr] 57 | | let mut is_cmp = false; [INFO] [stderr] 58 | | if self.get_h() == other.get_h() && self.get_m() == other.get_m() [INFO] [stderr] 59 | | && self.get_l() == other.get_l() [INFO] [stderr] ... | [INFO] [stderr] 63 | | is_cmp [INFO] [stderr] 64 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/dna/codon.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | / let mut is_cmp = false; [INFO] [stderr] 58 | | if self.get_h() == other.get_h() && self.get_m() == other.get_m() [INFO] [stderr] 59 | | && self.get_l() == other.get_l() [INFO] [stderr] 60 | | { [INFO] [stderr] 61 | | is_cmp = true; [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 57 | let is_cmp = if self.get_h() == other.get_h() && self.get_m() == other.get_m() [INFO] [stderr] 58 | && self.get_l() == other.get_l() { true } else { false }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/dna/codon.rs:121:13 [INFO] [stderr] | [INFO] [stderr] 121 | self.index = self.index + 3; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.index += 3` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/io/dna_io.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | self.file.read(&mut buf).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/dna/mod.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | / match base { [INFO] [stderr] 40 | | 0...4 => dna.push_num(base).unwrap(), [INFO] [stderr] 41 | | _ => (), [INFO] [stderr] 42 | | } [INFO] [stderr] | |_____________^ help: try this: `if let 0...4 = base { dna.push_num(base).unwrap() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/dna/mod.rs:61:28 [INFO] [stderr] | [INFO] [stderr] 61 | Ok(gene) => Ok(self.genes.push(gene)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 61 | Ok(gene) => Ok(()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/dna/mod.rs:78:28 [INFO] [stderr] | [INFO] [stderr] 78 | Ok(gene) => Ok(self.genes[index] = gene), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 78 | Ok(gene) => Ok(()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: item `dna::Dna` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/dna/mod.rs:84:1 [INFO] [stderr] | [INFO] [stderr] 84 | / impl Dna { [INFO] [stderr] 85 | | ///获取index处的碱基 [INFO] [stderr] 86 | | pub fn index(&self, index: usize) -> Base { [INFO] [stderr] 87 | | self.genes[index].clone() [INFO] [stderr] ... | [INFO] [stderr] 98 | | } [INFO] [stderr] 99 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/dna/mod.rs:120:12 [INFO] [stderr] | [INFO] [stderr] 120 | if v.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/dna/mod.rs:149:12 [INFO] [stderr] | [INFO] [stderr] 149 | if v.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/dna/mod.rs:182:12 [INFO] [stderr] | [INFO] [stderr] 182 | if v.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | self.end = self.end + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.end += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | self.start = self.start + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.start += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | self.index = self.index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:50:13 [INFO] [stderr] | [INFO] [stderr] 50 | self.end = self.end - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.end -= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | self.start = self.start - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.start -= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | self.index = self.index - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.index -= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/protein/mod.rs:32:13 [INFO] [stderr] | [INFO] [stderr] 32 | / match a { [INFO] [stderr] 33 | | 0...21 => p.push_num(a).unwrap(), [INFO] [stderr] 34 | | _ => (), [INFO] [stderr] 35 | | } [INFO] [stderr] | |_____________^ help: try this: `if let 0...21 = a { p.push_num(a).unwrap() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/protein/mod.rs:44:25 [INFO] [stderr] | [INFO] [stderr] 44 | Ok(a) => Ok(self.peptide.push(a)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 44 | Ok(a) => Ok(()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/protein/mod.rs:59:25 [INFO] [stderr] | [INFO] [stderr] 59 | Ok(a) => Ok(self.peptide[index] = a), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 59 | Ok(a) => Ok(()), [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: item `protein::Protein` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/protein/mod.rs:65:1 [INFO] [stderr] | [INFO] [stderr] 65 | / impl Protein { [INFO] [stderr] 66 | | pub fn index(&self, index: usize) -> Aa { [INFO] [stderr] 67 | | self.peptide[index].clone() [INFO] [stderr] 68 | | } [INFO] [stderr] ... | [INFO] [stderr] 76 | | } [INFO] [stderr] 77 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `buf` [INFO] [stderr] --> src/io/dna_io.rs:26:34 [INFO] [stderr] | [INFO] [stderr] 26 | for i in 0..buf.len() { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 26 | for (i, ) in buf.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/io/dna_io.rs:30:43 [INFO] [stderr] | [INFO] [stderr] 30 | if buf[i].eq(&">".as_bytes()[0]) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b">"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/io/dna_io.rs:34:25 [INFO] [stderr] | [INFO] [stderr] 34 | index = index + a; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += a` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/io/dna_io.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | self.file.read(&mut buf).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `prokaryote`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | self.end = self.end + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.end += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | self.start = self.start + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.start += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | self.index = self.index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:50:13 [INFO] [stderr] | [INFO] [stderr] 50 | self.end = self.end - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.end -= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | self.start = self.start - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.start -= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/orf/mod.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | self.index = self.index - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.index -= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `prokaryote`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "6a943df44a1d95a6161caa99ce034516bd9d2562021fd4d86b136daca134c186"` [INFO] running `"docker" "rm" "-f" "6a943df44a1d95a6161caa99ce034516bd9d2562021fd4d86b136daca134c186"` [INFO] [stdout] 6a943df44a1d95a6161caa99ce034516bd9d2562021fd4d86b136daca134c186