[INFO] crate blot-lib 0.1.2 is already in cache [INFO] extracting crate blot-lib 0.1.2 into work/ex/clippy-test-run/sources/stable/reg/blot-lib/0.1.2 [INFO] extracting crate blot-lib 0.1.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/blot-lib/0.1.2 [INFO] validating manifest of blot-lib-0.1.2 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 blot-lib-0.1.2 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 blot-lib-0.1.2 [INFO] finished frobbing blot-lib-0.1.2 [INFO] frobbed toml for blot-lib-0.1.2 written to work/ex/clippy-test-run/sources/stable/reg/blot-lib/0.1.2/Cargo.toml [INFO] started frobbing blot-lib-0.1.2 [INFO] finished frobbing blot-lib-0.1.2 [INFO] frobbed toml for blot-lib-0.1.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/blot-lib/0.1.2/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [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 blot-lib-0.1.2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/blot-lib/0.1.2:/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] ff4191bd0cf3faa7cf66eb609fa39440de6e3a2b91c263e15771b856977b202a [INFO] running `"docker" "start" "-a" "ff4191bd0cf3faa7cf66eb609fa39440de6e3a2b91c263e15771b856977b202a"` [INFO] [stderr] Checking crypto-mac v0.7.0 [INFO] [stderr] Checking sha3 v0.8.1 [INFO] [stderr] Checking blake2 v0.8.0 [INFO] [stderr] Checking blot-lib v0.1.2 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/seal.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | tag: tag, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `tag` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/seal.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | tag: tag, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `tag` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: immediately dereferencing a reference [INFO] [stderr] --> src/seal.rs:151:22 [INFO] [stderr] | [INFO] [stderr] 151 | let length = *&rest[0]; [INFO] [stderr] | ^^^^^^^^^ help: try this: `rest[0]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deref_addrof)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deref_addrof [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/value/mod.rs:209:23 [INFO] [stderr] | [INFO] [stderr] 209 | list![123456789012345], [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider: `123_456_789_012_345` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/value/mod.rs:213:23 [INFO] [stderr] | [INFO] [stderr] 213 | list![123456789012345, 678901234567890], [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider: `123_456_789_012_345` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/value/mod.rs:213:40 [INFO] [stderr] | [INFO] [stderr] 213 | list![123456789012345, 678901234567890], [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider: `678_901_234_567_890` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: immediately dereferencing a reference [INFO] [stderr] --> src/seal.rs:151:22 [INFO] [stderr] | [INFO] [stderr] 151 | let length = *&rest[0]; [INFO] [stderr] | ^^^^^^^^^ help: try this: `rest[0]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deref_addrof)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deref_addrof [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/core.rs:54:58 [INFO] [stderr] | [INFO] [stderr] 54 | None => digester.digest_primitive(Tag::Null, "".as_bytes()), [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/core.rs:91:17 [INFO] [stderr] | [INFO] [stderr] 91 | / item.blot(digester) [INFO] [stderr] 92 | | .as_ref() [INFO] [stderr] 93 | | .iter() [INFO] [stderr] 94 | | .map(|x| *x) [INFO] [stderr] | |________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 91 | item.blot(digester) [INFO] [stderr] 92 | .as_ref() [INFO] [stderr] 93 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: impl for `HashSet` should be generalized over different hashers [INFO] [stderr] --> src/core.rs:102:47 [INFO] [stderr] | [INFO] [stderr] 102 | impl Blot for HashSet { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 102 | impl Blot for HashSet { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/core.rs:107:17 [INFO] [stderr] | [INFO] [stderr] 107 | / item.blot(digester) [INFO] [stderr] 108 | | .as_ref() [INFO] [stderr] 109 | | .iter() [INFO] [stderr] 110 | | .map(|x| *x) [INFO] [stderr] | |________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 107 | item.blot(digester) [INFO] [stderr] 108 | .as_ref() [INFO] [stderr] 109 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/core.rs:120:21 [INFO] [stderr] | [INFO] [stderr] 120 | impl Blot for HashMap [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 120 | impl Blot for HashMap [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/core.rs:166:9 [INFO] [stderr] | [INFO] [stderr] 166 | (*self as f64).blot(digester) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from(*self)` [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/core.rs:173:51 [INFO] [stderr] | [INFO] [stderr] 173 | digester.digest_primitive(Tag::Float, "NaN".as_bytes()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"NaN"` [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: manual implementation of an assign operation [INFO] [stderr] --> src/core.rs:206:9 [INFO] [stderr] | [INFO] [stderr] 206 | f = f / 2.; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `f /= 2.` [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: manual implementation of an assign operation [INFO] [stderr] --> src/core.rs:207:9 [INFO] [stderr] | [INFO] [stderr] 207 | e = e + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `e += 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/core.rs:211:9 [INFO] [stderr] | [INFO] [stderr] 211 | f = f * 2.; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `f *= 2.` [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/core.rs:212:9 [INFO] [stderr] | [INFO] [stderr] 212 | e = e - 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `e -= 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/core.rs:226:13 [INFO] [stderr] | [INFO] [stderr] 226 | f = f - 1.; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `f -= 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/core.rs:234:9 [INFO] [stderr] | [INFO] [stderr] 234 | f = f * 2.; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `f *= 2.` [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 `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/seal.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | / pub fn from_str(input: &str) -> Result, SealError> { [INFO] [stderr] 87 | | let bare = if input.starts_with("**REDACTED**") { [INFO] [stderr] 88 | | input [INFO] [stderr] 89 | | .get(12..) [INFO] [stderr] ... | [INFO] [stderr] 101 | | Seal::from_bytes_without_mark(&bytes) [INFO] [stderr] 102 | | } [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tag.rs:26:21 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn to_bytes(&self) -> [u8; 1] { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/uvar.rs:34:21 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn to_bytes(self) -> Vec { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/uvar.rs:60:30 [INFO] [stderr] | [INFO] [stderr] 60 | for (i, b) in buffer.into_iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/uvar.rs:62:42 [INFO] [stderr] | [INFO] [stderr] 62 | let code = Uvar((&buffer[..i + 1]).into()); [INFO] [stderr] | ^^^^^^^ help: use: `..=i` [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: the operation is ineffective. Consider reducing it to `b` [INFO] [stderr] --> src/uvar.rs:106:42 [INFO] [stderr] | [INFO] [stderr] 106 | n = n << (i * 8) | u64::from(b & 0xFF); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/uvar.rs:127:13 [INFO] [stderr] | [INFO] [stderr] 127 | value = value >> 8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `value >>= 8` [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: identical conversion [INFO] [stderr] --> src/value/de.rs:40:27 [INFO] [stderr] | [INFO] [stderr] 40 | Ok(Value::Integer(value.into())) [INFO] [stderr] | ^^^^^^^^^^^^ help: consider removing `.into()`: `value` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/value/de.rs:62:25 [INFO] [stderr] | [INFO] [stderr] 62 | Ok(Value::Float(value.into())) [INFO] [stderr] | ^^^^^^^^^^^^ help: consider removing `.into()`: `value` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/value/mod.rs:79:38 [INFO] [stderr] | [INFO] [stderr] 79 | Value::Timestamp(raw) => digester [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 80 | | .clone() [INFO] [stderr] | |________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 79 | Value::Timestamp(raw) => &(*digester).clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 79 | Value::Timestamp(raw) => &D::clone(digester) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/value/mod.rs:90:25 [INFO] [stderr] | [INFO] [stderr] 90 | / item.blot(digester) [INFO] [stderr] 91 | | .as_slice() [INFO] [stderr] 92 | | .iter() [INFO] [stderr] 93 | | .map(|x| *x) [INFO] [stderr] | |________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 90 | item.blot(digester) [INFO] [stderr] 91 | .as_slice() [INFO] [stderr] 92 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/value/mod.rs:100:17 [INFO] [stderr] | [INFO] [stderr] 100 | digester.clone().digest_collection(Tag::Set, list) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 100 | &(*digester).clone().digest_collection(Tag::Set, list) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 100 | &D::clone(digester).digest_collection(Tag::Set, list) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `blot-lib`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/core.rs:54:58 [INFO] [stderr] | [INFO] [stderr] 54 | None => digester.digest_primitive(Tag::Null, "".as_bytes()), [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/core.rs:91:17 [INFO] [stderr] | [INFO] [stderr] 91 | / item.blot(digester) [INFO] [stderr] 92 | | .as_ref() [INFO] [stderr] 93 | | .iter() [INFO] [stderr] 94 | | .map(|x| *x) [INFO] [stderr] | |________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 91 | item.blot(digester) [INFO] [stderr] 92 | .as_ref() [INFO] [stderr] 93 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: impl for `HashSet` should be generalized over different hashers [INFO] [stderr] --> src/core.rs:102:47 [INFO] [stderr] | [INFO] [stderr] 102 | impl Blot for HashSet { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 102 | impl Blot for HashSet { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/core.rs:107:17 [INFO] [stderr] | [INFO] [stderr] 107 | / item.blot(digester) [INFO] [stderr] 108 | | .as_ref() [INFO] [stderr] 109 | | .iter() [INFO] [stderr] 110 | | .map(|x| *x) [INFO] [stderr] | |________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 107 | item.blot(digester) [INFO] [stderr] 108 | .as_ref() [INFO] [stderr] 109 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/core.rs:120:21 [INFO] [stderr] | [INFO] [stderr] 120 | impl Blot for HashMap [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 120 | impl Blot for HashMap [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/core.rs:166:9 [INFO] [stderr] | [INFO] [stderr] 166 | (*self as f64).blot(digester) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from(*self)` [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/core.rs:173:51 [INFO] [stderr] | [INFO] [stderr] 173 | digester.digest_primitive(Tag::Float, "NaN".as_bytes()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"NaN"` [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: manual implementation of an assign operation [INFO] [stderr] --> src/core.rs:206:9 [INFO] [stderr] | [INFO] [stderr] 206 | f = f / 2.; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `f /= 2.` [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: manual implementation of an assign operation [INFO] [stderr] --> src/core.rs:207:9 [INFO] [stderr] | [INFO] [stderr] 207 | e = e + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `e += 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/core.rs:211:9 [INFO] [stderr] | [INFO] [stderr] 211 | f = f * 2.; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `f *= 2.` [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/core.rs:212:9 [INFO] [stderr] | [INFO] [stderr] 212 | e = e - 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `e -= 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/core.rs:226:13 [INFO] [stderr] | [INFO] [stderr] 226 | f = f - 1.; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `f -= 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/core.rs:234:9 [INFO] [stderr] | [INFO] [stderr] 234 | f = f * 2.; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `f *= 2.` [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 `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/seal.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | / pub fn from_str(input: &str) -> Result, SealError> { [INFO] [stderr] 87 | | let bare = if input.starts_with("**REDACTED**") { [INFO] [stderr] 88 | | input [INFO] [stderr] 89 | | .get(12..) [INFO] [stderr] ... | [INFO] [stderr] 101 | | Seal::from_bytes_without_mark(&bytes) [INFO] [stderr] 102 | | } [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tag.rs:26:21 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn to_bytes(&self) -> [u8; 1] { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/uvar.rs:34:21 [INFO] [stderr] | [INFO] [stderr] 34 | pub fn to_bytes(self) -> Vec { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/uvar.rs:60:30 [INFO] [stderr] | [INFO] [stderr] 60 | for (i, b) in buffer.into_iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/uvar.rs:62:42 [INFO] [stderr] | [INFO] [stderr] 62 | let code = Uvar((&buffer[..i + 1]).into()); [INFO] [stderr] | ^^^^^^^ help: use: `..=i` [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: the operation is ineffective. Consider reducing it to `b` [INFO] [stderr] --> src/uvar.rs:106:42 [INFO] [stderr] | [INFO] [stderr] 106 | n = n << (i * 8) | u64::from(b & 0xFF); [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/uvar.rs:127:13 [INFO] [stderr] | [INFO] [stderr] 127 | value = value >> 8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `value >>= 8` [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: identical conversion [INFO] [stderr] --> src/value/de.rs:40:27 [INFO] [stderr] | [INFO] [stderr] 40 | Ok(Value::Integer(value.into())) [INFO] [stderr] | ^^^^^^^^^^^^ help: consider removing `.into()`: `value` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/value/de.rs:62:25 [INFO] [stderr] | [INFO] [stderr] 62 | Ok(Value::Float(value.into())) [INFO] [stderr] | ^^^^^^^^^^^^ help: consider removing `.into()`: `value` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/value/mod.rs:79:38 [INFO] [stderr] | [INFO] [stderr] 79 | Value::Timestamp(raw) => digester [INFO] [stderr] | ______________________________________^ [INFO] [stderr] 80 | | .clone() [INFO] [stderr] | |________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 79 | Value::Timestamp(raw) => &(*digester).clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 79 | Value::Timestamp(raw) => &D::clone(digester) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/value/mod.rs:90:25 [INFO] [stderr] | [INFO] [stderr] 90 | / item.blot(digester) [INFO] [stderr] 91 | | .as_slice() [INFO] [stderr] 92 | | .iter() [INFO] [stderr] 93 | | .map(|x| *x) [INFO] [stderr] | |________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 90 | item.blot(digester) [INFO] [stderr] 91 | .as_slice() [INFO] [stderr] 92 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/value/mod.rs:100:17 [INFO] [stderr] | [INFO] [stderr] 100 | digester.clone().digest_collection(Tag::Set, list) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 100 | &(*digester).clone().digest_collection(Tag::Set, list) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 100 | &D::clone(digester).digest_collection(Tag::Set, list) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of a blacklisted/placeholder name `foo` [INFO] [stderr] --> src/value/mod.rs:356:13 [INFO] [stderr] | [INFO] [stderr] 356 | let foo: Seal = Seal::from_str( [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::blacklisted_name)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blacklisted_name [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `blot-lib`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "ff4191bd0cf3faa7cf66eb609fa39440de6e3a2b91c263e15771b856977b202a"` [INFO] running `"docker" "rm" "-f" "ff4191bd0cf3faa7cf66eb609fa39440de6e3a2b91c263e15771b856977b202a"` [INFO] [stdout] ff4191bd0cf3faa7cf66eb609fa39440de6e3a2b91c263e15771b856977b202a