[INFO] crate ledb 0.2.0 is already in cache [INFO] extracting crate ledb 0.2.0 into work/ex/clippy-test-run/sources/stable/reg/ledb/0.2.0 [INFO] extracting crate ledb 0.2.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ledb/0.2.0 [INFO] validating manifest of ledb-0.2.0 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 ledb-0.2.0 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 ledb-0.2.0 [INFO] finished frobbing ledb-0.2.0 [INFO] frobbed toml for ledb-0.2.0 written to work/ex/clippy-test-run/sources/stable/reg/ledb/0.2.0/Cargo.toml [INFO] started frobbing ledb-0.2.0 [INFO] finished frobbing ledb-0.2.0 [INFO] frobbed toml for ledb-0.2.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ledb/0.2.0/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 ledb-0.2.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/ledb/0.2.0:/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] 375730a63089e276adffc7f105619eaa638c77f8ba6e77d5aed2aa9e297fd89e [INFO] running `"docker" "start" "-a" "375730a63089e276adffc7f105619eaa638c77f8ba6e77d5aed2aa9e297fd89e"` [INFO] [stderr] Checking supercow v0.1.0 [INFO] [stderr] Checking dunce v0.1.1 [INFO] [stderr] Compiling liblmdb-sys v0.2.2 [INFO] [stderr] Compiling ledb-derive v0.2.1 [INFO] [stderr] Checking serde v1.0.85 [INFO] [stderr] Checking lmdb-zero v0.4.4 [INFO] [stderr] Checking serde_cbor v0.9.0 [INFO] [stderr] Checking serde_json v1.0.37 [INFO] [stderr] Checking ron v0.4.1 [INFO] [stderr] Checking ledb-types v0.2.0 [INFO] [stderr] Checking ledb v0.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/storage.rs:477:12 [INFO] [stderr] | [INFO] [stderr] 477 | } else { [INFO] [stderr] | ____________^ [INFO] [stderr] 478 | | if let Ok(path) = path.strip_prefix("~") { [INFO] [stderr] 479 | | home_dir() [INFO] [stderr] 480 | | .ok_or_else(|| "Unable to determine home directory") [INFO] [stderr] ... | [INFO] [stderr] 486 | | } [INFO] [stderr] 487 | | }; [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] 477 | } else if let Ok(path) = path.strip_prefix("~") { [INFO] [stderr] 478 | home_dir() [INFO] [stderr] 479 | .ok_or_else(|| "Unable to determine home directory") [INFO] [stderr] 480 | .wrap_err()? [INFO] [stderr] 481 | .as_path() [INFO] [stderr] 482 | .join(path) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/storage.rs:477:12 [INFO] [stderr] | [INFO] [stderr] 477 | } else { [INFO] [stderr] | ____________^ [INFO] [stderr] 478 | | if let Ok(path) = path.strip_prefix("~") { [INFO] [stderr] 479 | | home_dir() [INFO] [stderr] 480 | | .ok_or_else(|| "Unable to determine home directory") [INFO] [stderr] ... | [INFO] [stderr] 486 | | } [INFO] [stderr] 487 | | }; [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] 477 | } else if let Ok(path) = path.strip_prefix("~") { [INFO] [stderr] 478 | home_dir() [INFO] [stderr] 479 | .ok_or_else(|| "Unable to determine home directory") [INFO] [stderr] 480 | .wrap_err()? [INFO] [stderr] 481 | .as_path() [INFO] [stderr] 482 | .join(path) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/collection.rs:561:20 [INFO] [stderr] | [INFO] [stderr] 561 | if let Some(_) = indexes.iter().find(|index| index.path() == path) { [INFO] [stderr] | _____________- ^^^^^^^ [INFO] [stderr] 562 | | return Ok(false); [INFO] [stderr] 563 | | } [INFO] [stderr] | |_____________- help: try this: `if indexes.iter().find(|index| index.path() == path).is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/collection.rs:821:25 [INFO] [stderr] | [INFO] [stderr] 821 | fn order_primary_asc(a: &Primary, b: &Primary) -> Ordering { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/collection.rs:821:38 [INFO] [stderr] | [INFO] [stderr] 821 | fn order_primary_asc(a: &Primary, b: &Primary) -> Ordering { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/collection.rs:825:26 [INFO] [stderr] | [INFO] [stderr] 825 | fn order_primary_desc(a: &Primary, b: &Primary) -> Ordering { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/collection.rs:825:39 [INFO] [stderr] | [INFO] [stderr] 825 | fn order_primary_desc(a: &Primary, b: &Primary) -> Ordering { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [INFO] [stderr] | [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 `into_*` usually take self by value; consider choosing a less ambiguous name [INFO] [stderr] --> src/document.rs:65:21 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn into_bin(&self) -> Result> { [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/filter.rs:180:61 [INFO] [stderr] | [INFO] [stderr] 180 | pub fn serialize(field: &Identifier, op: &OrderKind, serializer: S) -> Result { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `OrderKind` [INFO] [stderr] | [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: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/index.rs:145:24 [INFO] [stderr] | [INFO] [stderr] 145 | let old_keys = old_doc [INFO] [stderr] | ________________________^ [INFO] [stderr] 146 | | .map(|doc| self.extract(doc)) [INFO] [stderr] 147 | | .unwrap_or(HashSet::new()); [INFO] [stderr] | |______________________________________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 145 | let old_keys = old_doc [INFO] [stderr] 146 | .map(|doc| self.extract(doc)).unwrap_or_default(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/index.rs:148:24 [INFO] [stderr] | [INFO] [stderr] 148 | let new_keys = new_doc [INFO] [stderr] | ________________________^ [INFO] [stderr] 149 | | .map(|doc| self.extract(doc)) [INFO] [stderr] 150 | | .unwrap_or(HashSet::new()); [INFO] [stderr] | |______________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 148 | let new_keys = new_doc [INFO] [stderr] 149 | .map(|doc| self.extract(doc)).unwrap_or_default(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/index.rs:280:32 [INFO] [stderr] | [INFO] [stderr] 280 | if &key < &end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 280 | if key < end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/index.rs:280:63 [INFO] [stderr] | [INFO] [stderr] 280 | if &key < &end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 280 | if &key < &end_key || *end_inc && key <= end_key { [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/index.rs:325:32 [INFO] [stderr] | [INFO] [stderr] 325 | if &key < &end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 325 | if key < end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/index.rs:325:63 [INFO] [stderr] | [INFO] [stderr] 325 | if &key < &end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 325 | if &key < &end_key || *end_inc && key <= end_key { [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/modify.rs:96:16 [INFO] [stderr] | [INFO] [stderr] 96 | if actions.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!actions.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: identical conversion [INFO] [stderr] --> src/modify.rs:185:42 [INFO] [stderr] | [INFO] [stderr] 185 | if let Some(acts) = mods.get(pfx.into()) { [INFO] [stderr] | ^^^^^^^^^^ help: consider removing `.into()`: `pfx` [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/modify.rs:233:42 [INFO] [stderr] | [INFO] [stderr] 233 | if let Some(acts) = mods.get(pfx.into()) { [INFO] [stderr] | ^^^^^^^^^^ help: consider removing `.into()`: `pfx` [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] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/modify.rs:236:21 [INFO] [stderr] | [INFO] [stderr] 236 | / match act { [INFO] [stderr] 237 | | Merge(Object(obj)) => { [INFO] [stderr] 238 | | map.extend(obj.iter().map(|(k, v)| (k.clone(), v.clone()))); [INFO] [stderr] 239 | | } [INFO] [stderr] 240 | | _ => (), [INFO] [stderr] 241 | | } [INFO] [stderr] | |_____________________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 236 | if let Merge(Object(obj)) = act { [INFO] [stderr] 237 | map.extend(obj.iter().map(|(k, v)| (k.clone(), v.clone()))); [INFO] [stderr] 238 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/modify.rs:260:34 [INFO] [stderr] | [INFO] [stderr] 260 | if let Some(acts) = mods.get(pfx.into()) { [INFO] [stderr] | ^^^^^^^^^^ help: consider removing `.into()`: `pfx` [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/modify.rs:340:19 [INFO] [stderr] | [INFO] [stderr] 340 | F64(v) if (v as u64) as f64 == v => U64(v as u64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `((v as u64) as f64 - v).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/modify.rs:340:19 [INFO] [stderr] | [INFO] [stderr] 340 | F64(v) if (v as u64) as f64 == v => U64(v as u64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/modify.rs:341:19 [INFO] [stderr] | [INFO] [stderr] 341 | F64(v) if (v as i64) as f64 == v => I64(v as i64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `((v as i64) as f64 - v).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/modify.rs:341:19 [INFO] [stderr] | [INFO] [stderr] 341 | F64(v) if (v as i64) as f64 == v => I64(v as i64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/modify.rs:349:42 [INFO] [stderr] | [INFO] [stderr] 349 | String(s) => pfx.to_owned() + if pfx.len() > 0 { "." } else { "" } + s, [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!pfx.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/modify.rs:362:14 [INFO] [stderr] | [INFO] [stderr] 362 | ins: &Vec, [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/modify.rs:360:14 [INFO] [stderr] | [INFO] [stderr] 360 | off: &i32, [INFO] [stderr] | ^^^^ help: consider passing by value instead: `i32` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/modify.rs:361:14 [INFO] [stderr] | [INFO] [stderr] 361 | del: &i32, [INFO] [stderr] | ^^^^ help: consider passing by value instead: `i32` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/selection.rs:17:27 [INFO] [stderr] | [INFO] [stderr] 17 | pub fn has(&self, id: &Primary) -> bool { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [INFO] [stderr] | [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/selection.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | / match self.inv { [INFO] [stderr] 19 | | false => self.ids.contains(id), [INFO] [stderr] 20 | | true => !self.ids.contains(id), [INFO] [stderr] 21 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.inv { !self.ids.contains(id) } else { self.ids.contains(id) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/storage.rs:421:6 [INFO] [stderr] | [INFO] [stderr] 421 | ) -> Result<(Serial, Vec<(CollectionDef, Vec)>)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [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/storage.rs:423:29 [INFO] [stderr] | [INFO] [stderr] 423 | let cursor = txn.cursor(db.clone()).wrap_err()?; [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] 423 | let cursor = txn.cursor(&(*db).clone()).wrap_err()?; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 423 | let cursor = txn.cursor(&lmdb::Database<'_>::clone(db)).wrap_err()?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/value.rs:26:28 [INFO] [stderr] | [INFO] [stderr] 26 | OrderedFloat(val): &OrderedFloat, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider passing by value instead: `OrderedFloat` [INFO] [stderr] | [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: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/value.rs:62:22 [INFO] [stderr] | [INFO] [stderr] 62 | Bool(if raw[0] == 0 { false } else { true }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(raw[0] == 0)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: methods called `into_*` usually take self by value; consider choosing a less ambiguous name [INFO] [stderr] --> src/value.rs:68:21 [INFO] [stderr] | [INFO] [stderr] 68 | pub fn into_raw(&self) -> &[u8] { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [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: transmute from a reference to a reference [INFO] [stderr] --> src/value.rs:71:34 [INFO] [stderr] | [INFO] [stderr] 71 | Int(val) => unsafe { transmute::<&i64, &[u8; 8]>(val) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*(val as *const i64 as *const [u8; 8])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: transmute from a reference to a reference [INFO] [stderr] --> src/value.rs:72:36 [INFO] [stderr] | [INFO] [stderr] 72 | Float(val) => unsafe { transmute::<&f64, &[u8; 8]>(val) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*(val as *const ordered_float::OrderedFloat as *const [u8; 8])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: transmute from a reference to a reference [INFO] [stderr] --> src/value.rs:83:35 [INFO] [stderr] | [INFO] [stderr] 83 | Bool(val) => unsafe { transmute::<&bool, &[u8; 1]>(val) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*(val as *const bool as *const [u8; 1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [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/value.rs:112:5 [INFO] [stderr] | [INFO] [stderr] 112 | / pub fn as_type<'a>(&'a self, typ: KeyType) -> Option<&'a KeyData> { [INFO] [stderr] 113 | | use self::KeyData::*; [INFO] [stderr] 114 | | Some(match (typ, self) { [INFO] [stderr] 115 | | (KeyType::Int, Int(..)) [INFO] [stderr] ... | [INFO] [stderr] 121 | | }) [INFO] [stderr] 122 | | } [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: methods called `into_*` usually take self by value; consider choosing a less ambiguous name [INFO] [stderr] --> src/value.rs:125:26 [INFO] [stderr] | [INFO] [stderr] 125 | pub fn into_type<'a>(&'a self, typ: KeyType) -> Option> { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/value.rs:125:5 [INFO] [stderr] | [INFO] [stderr] 125 | / pub fn into_type<'a>(&'a self, typ: KeyType) -> Option> { [INFO] [stderr] 126 | | use self::KeyData::*; [INFO] [stderr] 127 | | Some(if let Some(v) = self.as_type(typ) { [INFO] [stderr] 128 | | Cow::Borrowed(v) [INFO] [stderr] ... | [INFO] [stderr] 153 | | }) [INFO] [stderr] 154 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `ledb`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/collection.rs:561:20 [INFO] [stderr] | [INFO] [stderr] 561 | if let Some(_) = indexes.iter().find(|index| index.path() == path) { [INFO] [stderr] | _____________- ^^^^^^^ [INFO] [stderr] 562 | | return Ok(false); [INFO] [stderr] 563 | | } [INFO] [stderr] | |_____________- help: try this: `if indexes.iter().find(|index| index.path() == path).is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/collection.rs:821:25 [INFO] [stderr] | [INFO] [stderr] 821 | fn order_primary_asc(a: &Primary, b: &Primary) -> Ordering { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/collection.rs:821:38 [INFO] [stderr] | [INFO] [stderr] 821 | fn order_primary_asc(a: &Primary, b: &Primary) -> Ordering { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/collection.rs:825:26 [INFO] [stderr] | [INFO] [stderr] 825 | fn order_primary_desc(a: &Primary, b: &Primary) -> Ordering { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/collection.rs:825:39 [INFO] [stderr] | [INFO] [stderr] 825 | fn order_primary_desc(a: &Primary, b: &Primary) -> Ordering { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [INFO] [stderr] | [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 `into_*` usually take self by value; consider choosing a less ambiguous name [INFO] [stderr] --> src/document.rs:65:21 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn into_bin(&self) -> Result> { [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/filter.rs:180:61 [INFO] [stderr] | [INFO] [stderr] 180 | pub fn serialize(field: &Identifier, op: &OrderKind, serializer: S) -> Result { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `OrderKind` [INFO] [stderr] | [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: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/index.rs:145:24 [INFO] [stderr] | [INFO] [stderr] 145 | let old_keys = old_doc [INFO] [stderr] | ________________________^ [INFO] [stderr] 146 | | .map(|doc| self.extract(doc)) [INFO] [stderr] 147 | | .unwrap_or(HashSet::new()); [INFO] [stderr] | |______________________________________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 145 | let old_keys = old_doc [INFO] [stderr] 146 | .map(|doc| self.extract(doc)).unwrap_or_default(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `new` [INFO] [stderr] --> src/index.rs:148:24 [INFO] [stderr] | [INFO] [stderr] 148 | let new_keys = new_doc [INFO] [stderr] | ________________________^ [INFO] [stderr] 149 | | .map(|doc| self.extract(doc)) [INFO] [stderr] 150 | | .unwrap_or(HashSet::new()); [INFO] [stderr] | |______________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 148 | let new_keys = new_doc [INFO] [stderr] 149 | .map(|doc| self.extract(doc)).unwrap_or_default(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/index.rs:280:32 [INFO] [stderr] | [INFO] [stderr] 280 | if &key < &end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 280 | if key < end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/index.rs:280:63 [INFO] [stderr] | [INFO] [stderr] 280 | if &key < &end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 280 | if &key < &end_key || *end_inc && key <= end_key { [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/index.rs:325:32 [INFO] [stderr] | [INFO] [stderr] 325 | if &key < &end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 325 | if key < end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/index.rs:325:63 [INFO] [stderr] | [INFO] [stderr] 325 | if &key < &end_key || *end_inc && &key <= &end_key { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 325 | if &key < &end_key || *end_inc && key <= end_key { [INFO] [stderr] | ^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/modify.rs:96:16 [INFO] [stderr] | [INFO] [stderr] 96 | if actions.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!actions.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: identical conversion [INFO] [stderr] --> src/modify.rs:185:42 [INFO] [stderr] | [INFO] [stderr] 185 | if let Some(acts) = mods.get(pfx.into()) { [INFO] [stderr] | ^^^^^^^^^^ help: consider removing `.into()`: `pfx` [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/modify.rs:233:42 [INFO] [stderr] | [INFO] [stderr] 233 | if let Some(acts) = mods.get(pfx.into()) { [INFO] [stderr] | ^^^^^^^^^^ help: consider removing `.into()`: `pfx` [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] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/modify.rs:236:21 [INFO] [stderr] | [INFO] [stderr] 236 | / match act { [INFO] [stderr] 237 | | Merge(Object(obj)) => { [INFO] [stderr] 238 | | map.extend(obj.iter().map(|(k, v)| (k.clone(), v.clone()))); [INFO] [stderr] 239 | | } [INFO] [stderr] 240 | | _ => (), [INFO] [stderr] 241 | | } [INFO] [stderr] | |_____________________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 236 | if let Merge(Object(obj)) = act { [INFO] [stderr] 237 | map.extend(obj.iter().map(|(k, v)| (k.clone(), v.clone()))); [INFO] [stderr] 238 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/modify.rs:260:34 [INFO] [stderr] | [INFO] [stderr] 260 | if let Some(acts) = mods.get(pfx.into()) { [INFO] [stderr] | ^^^^^^^^^^ help: consider removing `.into()`: `pfx` [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/modify.rs:340:19 [INFO] [stderr] | [INFO] [stderr] 340 | F64(v) if (v as u64) as f64 == v => U64(v as u64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `((v as u64) as f64 - v).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/modify.rs:340:19 [INFO] [stderr] | [INFO] [stderr] 340 | F64(v) if (v as u64) as f64 == v => U64(v as u64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/modify.rs:341:19 [INFO] [stderr] | [INFO] [stderr] 341 | F64(v) if (v as i64) as f64 == v => I64(v as i64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `((v as i64) as f64 - v).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/modify.rs:341:19 [INFO] [stderr] | [INFO] [stderr] 341 | F64(v) if (v as i64) as f64 == v => I64(v as i64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/modify.rs:349:42 [INFO] [stderr] | [INFO] [stderr] 349 | String(s) => pfx.to_owned() + if pfx.len() > 0 { "." } else { "" } + s, [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!pfx.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/modify.rs:362:14 [INFO] [stderr] | [INFO] [stderr] 362 | ins: &Vec, [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/modify.rs:360:14 [INFO] [stderr] | [INFO] [stderr] 360 | off: &i32, [INFO] [stderr] | ^^^^ help: consider passing by value instead: `i32` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/modify.rs:361:14 [INFO] [stderr] | [INFO] [stderr] 361 | del: &i32, [INFO] [stderr] | ^^^^ help: consider passing by value instead: `i32` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/selection.rs:17:27 [INFO] [stderr] | [INFO] [stderr] 17 | pub fn has(&self, id: &Primary) -> bool { [INFO] [stderr] | ^^^^^^^^ help: consider passing by value instead: `Primary` [INFO] [stderr] | [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/selection.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | / match self.inv { [INFO] [stderr] 19 | | false => self.ids.contains(id), [INFO] [stderr] 20 | | true => !self.ids.contains(id), [INFO] [stderr] 21 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.inv { !self.ids.contains(id) } else { self.ids.contains(id) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/storage.rs:421:6 [INFO] [stderr] | [INFO] [stderr] 421 | ) -> Result<(Serial, Vec<(CollectionDef, Vec)>)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [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/storage.rs:423:29 [INFO] [stderr] | [INFO] [stderr] 423 | let cursor = txn.cursor(db.clone()).wrap_err()?; [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] 423 | let cursor = txn.cursor(&(*db).clone()).wrap_err()?; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 423 | let cursor = txn.cursor(&lmdb::Database<'_>::clone(db)).wrap_err()?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/value.rs:26:28 [INFO] [stderr] | [INFO] [stderr] 26 | OrderedFloat(val): &OrderedFloat, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider passing by value instead: `OrderedFloat` [INFO] [stderr] | [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: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/value.rs:62:22 [INFO] [stderr] | [INFO] [stderr] 62 | Bool(if raw[0] == 0 { false } else { true }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(raw[0] == 0)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: methods called `into_*` usually take self by value; consider choosing a less ambiguous name [INFO] [stderr] --> src/value.rs:68:21 [INFO] [stderr] | [INFO] [stderr] 68 | pub fn into_raw(&self) -> &[u8] { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [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: transmute from a reference to a reference [INFO] [stderr] --> src/value.rs:71:34 [INFO] [stderr] | [INFO] [stderr] 71 | Int(val) => unsafe { transmute::<&i64, &[u8; 8]>(val) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*(val as *const i64 as *const [u8; 8])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: transmute from a reference to a reference [INFO] [stderr] --> src/value.rs:72:36 [INFO] [stderr] | [INFO] [stderr] 72 | Float(val) => unsafe { transmute::<&f64, &[u8; 8]>(val) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*(val as *const ordered_float::OrderedFloat as *const [u8; 8])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: transmute from a reference to a reference [INFO] [stderr] --> src/value.rs:83:35 [INFO] [stderr] | [INFO] [stderr] 83 | Bool(val) => unsafe { transmute::<&bool, &[u8; 1]>(val) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&*(val as *const bool as *const [u8; 1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [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/value.rs:112:5 [INFO] [stderr] | [INFO] [stderr] 112 | / pub fn as_type<'a>(&'a self, typ: KeyType) -> Option<&'a KeyData> { [INFO] [stderr] 113 | | use self::KeyData::*; [INFO] [stderr] 114 | | Some(match (typ, self) { [INFO] [stderr] 115 | | (KeyType::Int, Int(..)) [INFO] [stderr] ... | [INFO] [stderr] 121 | | }) [INFO] [stderr] 122 | | } [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: methods called `into_*` usually take self by value; consider choosing a less ambiguous name [INFO] [stderr] --> src/value.rs:125:26 [INFO] [stderr] | [INFO] [stderr] 125 | pub fn into_type<'a>(&'a self, typ: KeyType) -> Option> { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/value.rs:125:5 [INFO] [stderr] | [INFO] [stderr] 125 | / pub fn into_type<'a>(&'a self, typ: KeyType) -> Option> { [INFO] [stderr] 126 | | use self::KeyData::*; [INFO] [stderr] 127 | | Some(if let Some(v) = self.as_type(typ) { [INFO] [stderr] 128 | | Cow::Borrowed(v) [INFO] [stderr] ... | [INFO] [stderr] 153 | | }) [INFO] [stderr] 154 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `ledb`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "375730a63089e276adffc7f105619eaa638c77f8ba6e77d5aed2aa9e297fd89e"` [INFO] running `"docker" "rm" "-f" "375730a63089e276adffc7f105619eaa638c77f8ba6e77d5aed2aa9e297fd89e"` [INFO] [stdout] 375730a63089e276adffc7f105619eaa638c77f8ba6e77d5aed2aa9e297fd89e