[INFO] updating cached repository uhyo/tandem-repeat [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/uhyo/tandem-repeat [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/uhyo/tandem-repeat" "work/ex/clippy-test-run/sources/stable/gh/uhyo/tandem-repeat"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/uhyo/tandem-repeat'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/uhyo/tandem-repeat" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/uhyo/tandem-repeat"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/uhyo/tandem-repeat'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] a8b54d63ba7b30640e1576f5f48cc4145e19ff2a [INFO] sha for GitHub repo uhyo/tandem-repeat: a8b54d63ba7b30640e1576f5f48cc4145e19ff2a [INFO] validating manifest of uhyo/tandem-repeat 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 uhyo/tandem-repeat 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 uhyo/tandem-repeat [INFO] finished frobbing uhyo/tandem-repeat [INFO] frobbed toml for uhyo/tandem-repeat written to work/ex/clippy-test-run/sources/stable/gh/uhyo/tandem-repeat/Cargo.toml [INFO] started frobbing uhyo/tandem-repeat [INFO] finished frobbing uhyo/tandem-repeat [INFO] frobbed toml for uhyo/tandem-repeat written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/uhyo/tandem-repeat/Cargo.toml [INFO] crate uhyo/tandem-repeat 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 uhyo/tandem-repeat against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/uhyo/tandem-repeat:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] bc9b9bebe413e3efe91f0c5ccc65cde50128f3b20a88efe9d2f4c147c7e95b74 [INFO] running `"docker" "start" "-a" "bc9b9bebe413e3efe91f0c5ccc65cde50128f3b20a88efe9d2f4c147c7e95b74"` [INFO] [stderr] Checking bencher v0.1.3 [INFO] [stderr] Checking tandem-repeat v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: 5th binding whose name is just one char [INFO] [stderr] --> src/algorithm/rmq.rs:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | let j = self.st[k][yi]; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::many_single_char_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: 5th binding whose name is just one char [INFO] [stderr] --> src/algorithm/rmq.rs:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | let j = self.st[k][yi]; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::many_single_char_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/options.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | / return Opts { [INFO] [stderr] 46 | | algorithm, [INFO] [stderr] 47 | | }; [INFO] [stderr] | |______^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 45 | Opts { [INFO] [stderr] 46 | algorithm, [INFO] [stderr] 47 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/algorithm/ultra_naive.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | / return AlgoResult { [INFO] [stderr] 37 | | from: max_from, [INFO] [stderr] 38 | | length: max_length, [INFO] [stderr] 39 | | count: max_count, [INFO] [stderr] 40 | | }; [INFO] [stderr] | |______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 36 | AlgoResult { [INFO] [stderr] 37 | from: max_from, [INFO] [stderr] 38 | length: max_length, [INFO] [stderr] 39 | count: max_count, [INFO] [stderr] 40 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/algorithm/divide.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | return rec(data, 0, l, 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `rec(data, 0, l, 0)` [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/algorithm/divide.rs:102:5 [INFO] [stderr] | [INFO] [stderr] 102 | / return AlgoResult { [INFO] [stderr] 103 | | from: max_from, [INFO] [stderr] 104 | | length: max_len, [INFO] [stderr] 105 | | count: max_count, [INFO] [stderr] 106 | | }; [INFO] [stderr] | |______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 102 | AlgoResult { [INFO] [stderr] 103 | from: max_from, [INFO] [stderr] 104 | length: max_len, [INFO] [stderr] 105 | count: max_count, [INFO] [stderr] 106 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/algorithm/suffix_array.rs:111:5 [INFO] [stderr] | [INFO] [stderr] 111 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/algorithm/suffix_array.rs:109:18 [INFO] [stderr] | [INFO] [stderr] 109 | let result = induced_sort(&types[..], data, &lms_sa[..], max_alphabet); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/algorithm/suffix_array.rs:224:5 [INFO] [stderr] | [INFO] [stderr] 224 | return idxi == idxj; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `idxi == idxj` [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/algorithm/lcp_divide.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | return rec(data.len(), &lcp[..], &inv_sa[..], &r, &lcp_rev[..], &inv_sa_rev[..], &r_rev, 0, len, 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `rec(data.len(), &lcp[..], &inv_sa[..], &r, &lcp_rev[..], &inv_sa_rev[..], &r_rev, 0, len, 0)` [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/algorithm/lcp_divide.rs:177:5 [INFO] [stderr] | [INFO] [stderr] 177 | / return AlgoResult { [INFO] [stderr] 178 | | from: max_from, [INFO] [stderr] 179 | | length: max_length, [INFO] [stderr] 180 | | count: max_count as u32, [INFO] [stderr] 181 | | }; [INFO] [stderr] | |______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 177 | AlgoResult { [INFO] [stderr] 178 | from: max_from, [INFO] [stderr] 179 | length: max_length, [INFO] [stderr] 180 | count: max_count as u32, [INFO] [stderr] 181 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/options.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 45 | / return Opts { [INFO] [stderr] 46 | | algorithm, [INFO] [stderr] 47 | | }; [INFO] [stderr] | |______^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 45 | Opts { [INFO] [stderr] 46 | algorithm, [INFO] [stderr] 47 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/algorithm/ultra_naive.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | / return AlgoResult { [INFO] [stderr] 37 | | from: max_from, [INFO] [stderr] 38 | | length: max_length, [INFO] [stderr] 39 | | count: max_count, [INFO] [stderr] 40 | | }; [INFO] [stderr] | |______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 36 | AlgoResult { [INFO] [stderr] 37 | from: max_from, [INFO] [stderr] 38 | length: max_length, [INFO] [stderr] 39 | count: max_count, [INFO] [stderr] 40 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/algorithm/divide.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | return rec(data, 0, l, 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `rec(data, 0, l, 0)` [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/algorithm/divide.rs:102:5 [INFO] [stderr] | [INFO] [stderr] 102 | / return AlgoResult { [INFO] [stderr] 103 | | from: max_from, [INFO] [stderr] 104 | | length: max_len, [INFO] [stderr] 105 | | count: max_count, [INFO] [stderr] 106 | | }; [INFO] [stderr] | |______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 102 | AlgoResult { [INFO] [stderr] 103 | from: max_from, [INFO] [stderr] 104 | length: max_len, [INFO] [stderr] 105 | count: max_count, [INFO] [stderr] 106 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/algorithm/suffix_array.rs:111:5 [INFO] [stderr] | [INFO] [stderr] 111 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/algorithm/suffix_array.rs:109:18 [INFO] [stderr] | [INFO] [stderr] 109 | let result = induced_sort(&types[..], data, &lms_sa[..], max_alphabet); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/algorithm/suffix_array.rs:224:5 [INFO] [stderr] | [INFO] [stderr] 224 | return idxi == idxj; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `idxi == idxj` [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/algorithm/lcp_divide.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | return rec(data.len(), &lcp[..], &inv_sa[..], &r, &lcp_rev[..], &inv_sa_rev[..], &r_rev, 0, len, 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `rec(data.len(), &lcp[..], &inv_sa[..], &r, &lcp_rev[..], &inv_sa_rev[..], &r_rev, 0, len, 0)` [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/algorithm/lcp_divide.rs:177:5 [INFO] [stderr] | [INFO] [stderr] 177 | / return AlgoResult { [INFO] [stderr] 178 | | from: max_from, [INFO] [stderr] 179 | | length: max_length, [INFO] [stderr] 180 | | count: max_count as u32, [INFO] [stderr] 181 | | }; [INFO] [stderr] | |______^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 177 | AlgoResult { [INFO] [stderr] 178 | from: max_from, [INFO] [stderr] 179 | length: max_length, [INFO] [stderr] 180 | count: max_count as u32, [INFO] [stderr] 181 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/algorithm/lcp_divide.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | for i in 0..len { [INFO] [stderr] | ^ help: consider using `_i` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/options.rs:31:39 [INFO] [stderr] | [INFO] [stderr] 31 | let a = opts.opt_str("algorithm").unwrap_or(String::from("lcp_divide")); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("lcp_divide"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/algorithm/ultra_naive.rs:12:18 [INFO] [stderr] | [INFO] [stderr] 12 | for j in 1..((l-i)/2+1) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: use: `1..=(l-i)/2` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/algorithm/divide.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | for j in 1..(len+1) { [INFO] [stderr] | ^^^^^^^^^^ help: use: `1..=len` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `types` [INFO] [stderr] --> src/algorithm/suffix_array.rs:39:14 [INFO] [stderr] | [INFO] [stderr] 39 | for i in 0..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] 39 | for (i, ) in types.iter().enumerate().take(len) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `res`. [INFO] [stderr] --> src/algorithm/suffix_array.rs:56:14 [INFO] [stderr] | [INFO] [stderr] 56 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 56 | for in res.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `names` [INFO] [stderr] --> src/algorithm/suffix_array.rs:90:22 [INFO] [stderr] | [INFO] [stderr] 90 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 90 | for (i, ) in names.iter().enumerate().take(len) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `bucket`. [INFO] [stderr] --> src/algorithm/suffix_array.rs:130:14 [INFO] [stderr] | [INFO] [stderr] 130 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 130 | for in bucket.iter_mut().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/algorithm/lcp_divide.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | for i in 0..len { [INFO] [stderr] | ^ help: consider using `_i` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `bucket`. [INFO] [stderr] --> src/algorithm/suffix_array.rs:163:14 [INFO] [stderr] | [INFO] [stderr] 163 | for i in 0..max_alphabet { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 163 | for in bucket.iter_mut().take(max_alphabet) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `result`. [INFO] [stderr] --> src/algorithm/suffix_array.rs:198:14 [INFO] [stderr] | [INFO] [stderr] 198 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 198 | for in result.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/algorithm/lcp_array.rs:21:9 [INFO] [stderr] | [INFO] [stderr] 21 | / let mut cnt = 0; [INFO] [stderr] 22 | | if mem > 0 { [INFO] [stderr] 23 | | // 前回の結果を用いてスキップできる [INFO] [stderr] 24 | | cnt = mem-1; [INFO] [stderr] 25 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let cnt = if mem > 0 { mem-1 } else { 0 };` [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] [INFO] [stderr] warning: the loop variable `i` is only used to index `data_u8`. [INFO] [stderr] --> src/algorithm/lcp.rs:13:14 [INFO] [stderr] | [INFO] [stderr] 13 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 13 | for in data_u8.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/algorithm/lcp.rs:14:19 [INFO] [stderr] | [INFO] [stderr] 14 | data.push(data_u8[i] as u32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(data_u8[i])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/algorithm/lcp.rs:40:18 [INFO] [stderr] | [INFO] [stderr] 40 | for j in 1..((len-i)/2+1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: use: `1..=(len-i)/2` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `data_u8`. [INFO] [stderr] --> src/algorithm/lcp_divide.rs:14:14 [INFO] [stderr] | [INFO] [stderr] 14 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 14 | for in data_u8.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/algorithm/lcp_divide.rs:15:19 [INFO] [stderr] | [INFO] [stderr] 15 | data.push(data_u8[i] as u32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(data_u8[i])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/algorithm/lcp_divide.rs:16:23 [INFO] [stderr] | [INFO] [stderr] 16 | data_rev.push(data_u8[i] as u32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(data_u8[i])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (10/7) [INFO] [stderr] --> src/algorithm/lcp_divide.rs:44:1 [INFO] [stderr] | [INFO] [stderr] 44 | / fn rec(l: usize, lcp: &[usize], inv_sa: &[usize], r: &Rmq, lcp_rev: &[usize], inv_sa_rev: &[usize], r_rev: &Rmq, start: usize, end: usize, mut alpha: usize) -> AlgoResult { [INFO] [stderr] 45 | | // 区間の長さ [INFO] [stderr] 46 | | if end <= start + 1 { [INFO] [stderr] 47 | | // もう区間がない [INFO] [stderr] ... | [INFO] [stderr] 181 | | }; [INFO] [stderr] 182 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/algorithm/rmq.rs:33:1 [INFO] [stderr] | [INFO] [stderr] 33 | / pub fn rmq<'a>(lcp: &'a [usize]) -> Rmq<'a> { [INFO] [stderr] 34 | | let len = lcp.len(); [INFO] [stderr] 35 | | // ブロックの数 [INFO] [stderr] 36 | | let m = ((len as f64).log2() + 1.0) as usize; [INFO] [stderr] ... | [INFO] [stderr] 66 | | } [INFO] [stderr] 67 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/options.rs:31:39 [INFO] [stderr] | [INFO] [stderr] 31 | let a = opts.opt_str("algorithm").unwrap_or(String::from("lcp_divide")); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("lcp_divide"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/algorithm/ultra_naive.rs:12:18 [INFO] [stderr] | [INFO] [stderr] 12 | for j in 1..((l-i)/2+1) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: use: `1..=(l-i)/2` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/algorithm/divide.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | for j in 1..(len+1) { [INFO] [stderr] | ^^^^^^^^^^ help: use: `1..=len` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `types` [INFO] [stderr] --> src/algorithm/suffix_array.rs:39:14 [INFO] [stderr] | [INFO] [stderr] 39 | for i in 0..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] 39 | for (i, ) in types.iter().enumerate().take(len) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `res`. [INFO] [stderr] --> src/algorithm/suffix_array.rs:56:14 [INFO] [stderr] | [INFO] [stderr] 56 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 56 | for in res.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `names` [INFO] [stderr] --> src/algorithm/suffix_array.rs:90:22 [INFO] [stderr] | [INFO] [stderr] 90 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 90 | for (i, ) in names.iter().enumerate().take(len) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `bucket`. [INFO] [stderr] --> src/algorithm/suffix_array.rs:130:14 [INFO] [stderr] | [INFO] [stderr] 130 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 130 | for in bucket.iter_mut().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `bucket`. [INFO] [stderr] --> src/algorithm/suffix_array.rs:163:14 [INFO] [stderr] | [INFO] [stderr] 163 | for i in 0..max_alphabet { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 163 | for in bucket.iter_mut().take(max_alphabet) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `result`. [INFO] [stderr] --> src/algorithm/suffix_array.rs:198:14 [INFO] [stderr] | [INFO] [stderr] 198 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 198 | for in result.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/algorithm/lcp_array.rs:21:9 [INFO] [stderr] | [INFO] [stderr] 21 | / let mut cnt = 0; [INFO] [stderr] 22 | | if mem > 0 { [INFO] [stderr] 23 | | // 前回の結果を用いてスキップできる [INFO] [stderr] 24 | | cnt = mem-1; [INFO] [stderr] 25 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let cnt = if mem > 0 { mem-1 } else { 0 };` [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] [INFO] [stderr] warning: the loop variable `i` is only used to index `data_u8`. [INFO] [stderr] --> src/algorithm/lcp.rs:13:14 [INFO] [stderr] | [INFO] [stderr] 13 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 13 | for in data_u8.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/algorithm/lcp.rs:14:19 [INFO] [stderr] | [INFO] [stderr] 14 | data.push(data_u8[i] as u32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(data_u8[i])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/algorithm/lcp.rs:40:18 [INFO] [stderr] | [INFO] [stderr] 40 | for j in 1..((len-i)/2+1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: use: `1..=(len-i)/2` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `data_u8`. [INFO] [stderr] --> src/algorithm/lcp_divide.rs:14:14 [INFO] [stderr] | [INFO] [stderr] 14 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [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] 14 | for in data_u8.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/algorithm/lcp_divide.rs:15:19 [INFO] [stderr] | [INFO] [stderr] 15 | data.push(data_u8[i] as u32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(data_u8[i])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/algorithm/lcp_divide.rs:16:23 [INFO] [stderr] | [INFO] [stderr] 16 | data_rev.push(data_u8[i] as u32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u32::from(data_u8[i])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (10/7) [INFO] [stderr] --> src/algorithm/lcp_divide.rs:44:1 [INFO] [stderr] | [INFO] [stderr] 44 | / fn rec(l: usize, lcp: &[usize], inv_sa: &[usize], r: &Rmq, lcp_rev: &[usize], inv_sa_rev: &[usize], r_rev: &Rmq, start: usize, end: usize, mut alpha: usize) -> AlgoResult { [INFO] [stderr] 45 | | // 区間の長さ [INFO] [stderr] 46 | | if end <= start + 1 { [INFO] [stderr] 47 | | // もう区間がない [INFO] [stderr] ... | [INFO] [stderr] 181 | | }; [INFO] [stderr] 182 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/algorithm/rmq.rs:33:1 [INFO] [stderr] | [INFO] [stderr] 33 | / pub fn rmq<'a>(lcp: &'a [usize]) -> Rmq<'a> { [INFO] [stderr] 34 | | let len = lcp.len(); [INFO] [stderr] 35 | | // ブロックの数 [INFO] [stderr] 36 | | let m = ((len as f64).log2() + 1.0) as usize; [INFO] [stderr] ... | [INFO] [stderr] 66 | | } [INFO] [stderr] 67 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:59:43 [INFO] [stderr] | [INFO] [stderr] 59 | algorithm::lcp::algorithm("foofoobarfoobarbarfooabafoobarbarfoo".as_bytes()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"foofoobarfoobarbarfooabafoobarbarfoo"` [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:76:50 [INFO] [stderr] | [INFO] [stderr] 76 | algorithm::lcp_divide::algorithm("foofoobarfoobarbarfooaba".as_bytes()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"foofoobarfoobarbarfooaba"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:88:50 [INFO] [stderr] | [INFO] [stderr] 88 | algorithm::lcp_divide::algorithm("foobarfoobaraoaoaojfuwjhgnebfyu78yr32hf".as_bytes()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"foobarfoobaraoaoaojfuwjhgnebfyu78yr32hf"` [INFO] [stderr] | [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] Finished dev [unoptimized + debuginfo] target(s) in 2.14s [INFO] running `"docker" "inspect" "bc9b9bebe413e3efe91f0c5ccc65cde50128f3b20a88efe9d2f4c147c7e95b74"` [INFO] running `"docker" "rm" "-f" "bc9b9bebe413e3efe91f0c5ccc65cde50128f3b20a88efe9d2f4c147c7e95b74"` [INFO] [stdout] bc9b9bebe413e3efe91f0c5ccc65cde50128f3b20a88efe9d2f4c147c7e95b74