[INFO] crate immutable-chunkmap 0.5.0 is already in cache [INFO] extracting crate immutable-chunkmap 0.5.0 into work/ex/clippy-test-run/sources/stable/reg/immutable-chunkmap/0.5.0 [INFO] extracting crate immutable-chunkmap 0.5.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/immutable-chunkmap/0.5.0 [INFO] validating manifest of immutable-chunkmap-0.5.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 immutable-chunkmap-0.5.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 immutable-chunkmap-0.5.0 [INFO] finished frobbing immutable-chunkmap-0.5.0 [INFO] frobbed toml for immutable-chunkmap-0.5.0 written to work/ex/clippy-test-run/sources/stable/reg/immutable-chunkmap/0.5.0/Cargo.toml [INFO] started frobbing immutable-chunkmap-0.5.0 [INFO] finished frobbing immutable-chunkmap-0.5.0 [INFO] frobbed toml for immutable-chunkmap-0.5.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/immutable-chunkmap/0.5.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 immutable-chunkmap-0.5.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/immutable-chunkmap/0.5.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] 1691ec57c7bac6defa610874cd4409874abcdfb797bc0a164fb78da6e9c1f3f8 [INFO] running `"docker" "start" "-a" "1691ec57c7bac6defa610874cd4409874abcdfb797bc0a164fb78da6e9c1f3f8"` [INFO] [stderr] Checking immutable-chunkmap v0.5.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/avl.rs:708:20 [INFO] [stderr] | [INFO] [stderr] 708 | min_key: min_key, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `min_key` [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/avl.rs:709:20 [INFO] [stderr] | [INFO] [stderr] 709 | max_key: max_key, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `max_key` [INFO] [stderr] | [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: 5th binding whose name is just one char [INFO] [stderr] --> src/avl.rs:887:30 [INFO] [stderr] | [INFO] [stderr] 887 | Some((k, v)) => [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/avl.rs:901:30 [INFO] [stderr] | [INFO] [stderr] 901 | let (l, len, prev) = tn.left.update(len, k, d, f); [INFO] [stderr] | ^ [INFO] [stderr] | [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/avl.rs:905:30 [INFO] [stderr] | [INFO] [stderr] 905 | let (r, len, prev) = tn.right.update(len, k, d, f); [INFO] [stderr] | ^ [INFO] [stderr] | [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/avl.rs:1032:36 [INFO] [stderr] | [INFO] [stderr] 1032 | Ok(i) => break Some(f(e, i)), [INFO] [stderr] | ^ [INFO] [stderr] | [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: redundant field names in struct initialization [INFO] [stderr] --> src/map.rs:296:24 [INFO] [stderr] | [INFO] [stderr] 296 | (Map {root: t, len: len}, prev) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `len` [INFO] [stderr] | [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/set.rs:186:24 [INFO] [stderr] | [INFO] [stderr] 186 | (Set {root: t, len: len}, prev.is_some()) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `len` [INFO] [stderr] | [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: 5th binding whose name is just one char [INFO] [stderr] --> src/tests.rs:367:13 [INFO] [stderr] | [INFO] [stderr] 367 | let j = r.gen_range(0, SIZE - 1); [INFO] [stderr] | ^ [INFO] [stderr] | [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: redundant field names in struct initialization [INFO] [stderr] --> src/avl.rs:708:20 [INFO] [stderr] | [INFO] [stderr] 708 | min_key: min_key, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `min_key` [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/avl.rs:709:20 [INFO] [stderr] | [INFO] [stderr] 709 | max_key: max_key, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `max_key` [INFO] [stderr] | [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: 5th binding whose name is just one char [INFO] [stderr] --> src/avl.rs:887:30 [INFO] [stderr] | [INFO] [stderr] 887 | Some((k, v)) => [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/avl.rs:901:30 [INFO] [stderr] | [INFO] [stderr] 901 | let (l, len, prev) = tn.left.update(len, k, d, f); [INFO] [stderr] | ^ [INFO] [stderr] | [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/avl.rs:905:30 [INFO] [stderr] | [INFO] [stderr] 905 | let (r, len, prev) = tn.right.update(len, k, d, f); [INFO] [stderr] | ^ [INFO] [stderr] | [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/avl.rs:1032:36 [INFO] [stderr] | [INFO] [stderr] 1032 | Ok(i) => break Some(f(e, i)), [INFO] [stderr] | ^ [INFO] [stderr] | [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: redundant field names in struct initialization [INFO] [stderr] --> src/map.rs:296:24 [INFO] [stderr] | [INFO] [stderr] 296 | (Map {root: t, len: len}, prev) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `len` [INFO] [stderr] | [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/set.rs:186:24 [INFO] [stderr] | [INFO] [stderr] 186 | (Set {root: t, len: len}, prev.is_some()) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `len` [INFO] [stderr] | [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: Variant name starts with the enum's name [INFO] [stderr] --> src/avl.rs:68:5 [INFO] [stderr] | [INFO] [stderr] 68 | UpdateLeft(Q, D), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::enum_variant_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: Variant name starts with the enum's name [INFO] [stderr] --> src/avl.rs:69:5 [INFO] [stderr] | [INFO] [stderr] 69 | UpdateRight(Q, D), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/avl.rs:197:36 [INFO] [stderr] | [INFO] [stderr] 197 | } else { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 198 | | if let Some((k, v)) = f(q, d, None) { [INFO] [stderr] 199 | | overflow_right.push( [INFO] [stderr] 200 | | (elts.keys.pop().unwrap(), [INFO] [stderr] ... | [INFO] [stderr] 205 | | } [INFO] [stderr] 206 | | } [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] 197 | } else if let Some((k, v)) = f(q, d, None) { [INFO] [stderr] 198 | overflow_right.push( [INFO] [stderr] 199 | (elts.keys.pop().unwrap(), [INFO] [stderr] 200 | elts.vals.pop().unwrap()) [INFO] [stderr] 201 | ); [INFO] [stderr] 202 | elts.keys.insert(i, k); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/avl.rs:1060:48 [INFO] [stderr] | [INFO] [stderr] 1060 | pub(crate) fn invariant(&self, len: usize) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/map.rs:319:36 [INFO] [stderr] | [INFO] [stderr] 319 | pub(crate) fn invariant(&self) -> () { self.root.invariant(self.len) } [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/set.rs:210:36 [INFO] [stderr] | [INFO] [stderr] 210 | pub(crate) fn invariant(&self) -> () { self.root.invariant(self.len) } [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/avl.rs:123:40 [INFO] [stderr] | [INFO] [stderr] 123 | assert!(chunk.len() <= SIZE && chunk.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!chunk.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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/avl.rs:354:5 [INFO] [stderr] | [INFO] [stderr] 354 | / fn min_elt<'a>(&'a self) -> Option<(&'a K, &'a V)> { [INFO] [stderr] 355 | | if self.len() == 0 { None } [INFO] [stderr] 356 | | else { Some((&self.keys[0], &self.vals[0])) } [INFO] [stderr] 357 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/avl.rs:359:5 [INFO] [stderr] | [INFO] [stderr] 359 | / fn max_elt<'a>(&'a self) -> Option<(&'a K, &'a V)> { [INFO] [stderr] 360 | | if self.len() == 0 { None } [INFO] [stderr] 361 | | else { [INFO] [stderr] 362 | | let last = self.len() - 1; [INFO] [stderr] 363 | | Some((&self.keys[last], &self.vals[last])) [INFO] [stderr] 364 | | } [INFO] [stderr] 365 | | } [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] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/avl.rs:386:22 [INFO] [stderr] | [INFO] [stderr] 386 | (&self.keys).into_iter().zip(&self.vals) [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:536:21 [INFO] [stderr] | [INFO] [stderr] 536 | / match &mut self.elts { [INFO] [stderr] 537 | | &mut None => break, [INFO] [stderr] 538 | | &mut Some(ref mut s) => [INFO] [stderr] 539 | | match s.next() { [INFO] [stderr] ... | [INFO] [stderr] 542 | | } [INFO] [stderr] 543 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 536 | match *(&mut self.elts) { [INFO] [stderr] 537 | None => break, [INFO] [stderr] 538 | Some(ref mut s) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:595:21 [INFO] [stderr] | [INFO] [stderr] 595 | / match &mut self.elts_rev { [INFO] [stderr] 596 | | &mut None => break, [INFO] [stderr] 597 | | &mut Some(ref mut s) => [INFO] [stderr] 598 | | match s.next_back() { [INFO] [stderr] ... | [INFO] [stderr] 601 | | } [INFO] [stderr] 602 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 595 | match *(&mut self.elts_rev) { [INFO] [stderr] 596 | None => break, [INFO] [stderr] 597 | Some(ref mut s) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:665:9 [INFO] [stderr] | [INFO] [stderr] 665 | / match self { [INFO] [stderr] 666 | | &Tree::Empty => [INFO] [stderr] 667 | | Iter { [INFO] [stderr] 668 | | lbound, ubound, [INFO] [stderr] ... | [INFO] [stderr] 686 | | } [INFO] [stderr] 687 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 665 | match *self { [INFO] [stderr] 666 | Tree::Empty => [INFO] [stderr] 667 | Iter { [INFO] [stderr] 668 | lbound, ubound, [INFO] [stderr] 669 | stack: ArrayVec::<[_; MAX_DEPTH]>::new(), [INFO] [stderr] 670 | elts: None, current: None, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:698:9 [INFO] [stderr] | [INFO] [stderr] 698 | / match self { [INFO] [stderr] 699 | | &Tree::Empty => 0, [INFO] [stderr] 700 | | &Tree::Node(ref n) => n.height [INFO] [stderr] 701 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 698 | match *self { [INFO] [stderr] 699 | Tree::Empty => 0, [INFO] [stderr] 700 | Tree::Node(ref n) => n.height [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/avl.rs:770:12 [INFO] [stderr] | [INFO] [stderr] 770 | if chunk.len() == 0 { return (self.clone(), len) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `chunk.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:771:9 [INFO] [stderr] | [INFO] [stderr] 771 | / match self { [INFO] [stderr] 772 | | &Tree::Empty => { [INFO] [stderr] 773 | | let (elts, len) = { [INFO] [stderr] 774 | | let t = Elts::empty(); [INFO] [stderr] ... | [INFO] [stderr] 823 | | } [INFO] [stderr] 824 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 771 | match *self { [INFO] [stderr] 772 | Tree::Empty => { [INFO] [stderr] 773 | let (elts, len) = { [INFO] [stderr] 774 | let t = Elts::empty(); [INFO] [stderr] 775 | match t.update_chunk(chunk, len, true, f) { [INFO] [stderr] 776 | UpdateChunk::Created {elts, len} => (elts, len), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:883:9 [INFO] [stderr] | [INFO] [stderr] 883 | / match self { [INFO] [stderr] 884 | | &Tree::Empty => [INFO] [stderr] 885 | | match f(q, d, None) { [INFO] [stderr] 886 | | None => (self.clone(), len, None), [INFO] [stderr] ... | [INFO] [stderr] 932 | | } [INFO] [stderr] 933 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 883 | match *self { [INFO] [stderr] 884 | Tree::Empty => [INFO] [stderr] 885 | match f(q, d, None) { [INFO] [stderr] 886 | None => (self.clone(), len, None), [INFO] [stderr] 887 | Some((k, v)) => [INFO] [stderr] 888 | (Tree::create( [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:943:9 [INFO] [stderr] | [INFO] [stderr] 943 | / match self { [INFO] [stderr] 944 | | &Tree::Empty => None, [INFO] [stderr] 945 | | &Tree::Node(ref tn) => [INFO] [stderr] 946 | | match tn.left { [INFO] [stderr] ... | [INFO] [stderr] 949 | | } [INFO] [stderr] 950 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 943 | match *self { [INFO] [stderr] 944 | Tree::Empty => None, [INFO] [stderr] 945 | Tree::Node(ref tn) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:954:9 [INFO] [stderr] | [INFO] [stderr] 954 | / match self { [INFO] [stderr] 955 | | &Tree::Empty => panic!("remove min elt"), [INFO] [stderr] 956 | | &Tree::Node(ref tn) => [INFO] [stderr] 957 | | match tn.left { [INFO] [stderr] ... | [INFO] [stderr] 961 | | } [INFO] [stderr] 962 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 954 | match *self { [INFO] [stderr] 955 | Tree::Empty => panic!("remove min elt"), [INFO] [stderr] 956 | Tree::Node(ref tn) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:979:9 [INFO] [stderr] | [INFO] [stderr] 979 | / match self { [INFO] [stderr] 980 | | &Tree::Empty => (Tree::Empty, len, None), [INFO] [stderr] 981 | | &Tree::Node(ref tn) => [INFO] [stderr] 982 | | match tn.elts.get(k) { [INFO] [stderr] ... | [INFO] [stderr] 1003 | | } [INFO] [stderr] 1004 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 979 | match *self { [INFO] [stderr] 980 | Tree::Empty => (Tree::Empty, len, None), [INFO] [stderr] 981 | Tree::Node(ref tn) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:1013:9 [INFO] [stderr] | [INFO] [stderr] 1013 | / match self { [INFO] [stderr] 1014 | | &Tree::Empty => None, [INFO] [stderr] 1015 | | &Tree::Node(ref n) => { [INFO] [stderr] 1016 | | let mut tn = n; [INFO] [stderr] ... | [INFO] [stderr] 1038 | | } [INFO] [stderr] 1039 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1013 | match *self { [INFO] [stderr] 1014 | Tree::Empty => None, [INFO] [stderr] 1015 | Tree::Node(ref n) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/avl.rs:1068:34 [INFO] [stderr] | [INFO] [stderr] 1068 | (&elts.keys).into_iter().all(|k| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/avl.rs:1074:34 [INFO] [stderr] | [INFO] [stderr] 1074 | (&elts.keys).into_iter().all(|k| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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: Variant name starts with the enum's name [INFO] [stderr] --> src/avl.rs:68:5 [INFO] [stderr] | [INFO] [stderr] 68 | UpdateLeft(Q, D), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::enum_variant_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: Variant name starts with the enum's name [INFO] [stderr] --> src/avl.rs:69:5 [INFO] [stderr] | [INFO] [stderr] 69 | UpdateRight(Q, D), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/avl.rs:197:36 [INFO] [stderr] | [INFO] [stderr] 197 | } else { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 198 | | if let Some((k, v)) = f(q, d, None) { [INFO] [stderr] 199 | | overflow_right.push( [INFO] [stderr] 200 | | (elts.keys.pop().unwrap(), [INFO] [stderr] ... | [INFO] [stderr] 205 | | } [INFO] [stderr] 206 | | } [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] 197 | } else if let Some((k, v)) = f(q, d, None) { [INFO] [stderr] 198 | overflow_right.push( [INFO] [stderr] 199 | (elts.keys.pop().unwrap(), [INFO] [stderr] 200 | elts.vals.pop().unwrap()) [INFO] [stderr] 201 | ); [INFO] [stderr] 202 | elts.keys.insert(i, k); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: item `map::Map` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/map.rs:159:1 [INFO] [stderr] | [INFO] [stderr] 159 | / impl Map where K: Ord + Clone, V: Clone { [INFO] [stderr] 160 | | /// Create a new empty map [INFO] [stderr] 161 | | pub fn new() -> Self { Map { len: 0, root: Tree::new() } } [INFO] [stderr] 162 | | [INFO] [stderr] ... | [INFO] [stderr] 314 | | } [INFO] [stderr] 315 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/avl.rs:1060:48 [INFO] [stderr] | [INFO] [stderr] 1060 | pub(crate) fn invariant(&self, len: usize) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [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/map.rs:310:5 [INFO] [stderr] | [INFO] [stderr] 310 | / pub fn range<'a, Q>( [INFO] [stderr] 311 | | &'a self, lbound: Bound, ubound: Bound [INFO] [stderr] 312 | | ) -> Iter<'a, Q, K, V> where Q: Ord, K: Borrow { [INFO] [stderr] 313 | | self.root.range(lbound, ubound) [INFO] [stderr] 314 | | } [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] warning: unneeded unit return type [INFO] [stderr] --> src/map.rs:319:36 [INFO] [stderr] | [INFO] [stderr] 319 | pub(crate) fn invariant(&self) -> () { self.root.invariant(self.len) } [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/set.rs:210:36 [INFO] [stderr] | [INFO] [stderr] 210 | pub(crate) fn invariant(&self) -> () { self.root.invariant(self.len) } [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/tests.rs:13:21 [INFO] [stderr] | [INFO] [stderr] 13 | const SIZE: usize = 500000; [INFO] [stderr] | ^^^^^^ help: consider: `500_000` [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: unneeded unit expression [INFO] [stderr] --> src/tests.rs:82:35 [INFO] [stderr] | [INFO] [stderr] 82 | insert(randvec::(SIZE)); () [INFO] [stderr] | ^^ help: remove the final `()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: item `set::Set` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/set.rs:97:1 [INFO] [stderr] | [INFO] [stderr] 97 | / impl Set where K: Ord + Clone { [INFO] [stderr] 98 | | /// Create a new empty set [INFO] [stderr] 99 | | pub fn new() -> Self { Set { len: 0, root: Tree::new() } } [INFO] [stderr] 100 | | [INFO] [stderr] ... | [INFO] [stderr] 205 | | } [INFO] [stderr] 206 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/avl.rs:123:40 [INFO] [stderr] | [INFO] [stderr] 123 | assert!(chunk.len() <= SIZE && chunk.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!chunk.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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/avl.rs:354:5 [INFO] [stderr] | [INFO] [stderr] 354 | / fn min_elt<'a>(&'a self) -> Option<(&'a K, &'a V)> { [INFO] [stderr] 355 | | if self.len() == 0 { None } [INFO] [stderr] 356 | | else { Some((&self.keys[0], &self.vals[0])) } [INFO] [stderr] 357 | | } [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/avl.rs:359:5 [INFO] [stderr] | [INFO] [stderr] 359 | / fn max_elt<'a>(&'a self) -> Option<(&'a K, &'a V)> { [INFO] [stderr] 360 | | if self.len() == 0 { None } [INFO] [stderr] 361 | | else { [INFO] [stderr] 362 | | let last = self.len() - 1; [INFO] [stderr] 363 | | Some((&self.keys[last], &self.vals[last])) [INFO] [stderr] 364 | | } [INFO] [stderr] 365 | | } [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] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/avl.rs:386:22 [INFO] [stderr] | [INFO] [stderr] 386 | (&self.keys).into_iter().zip(&self.vals) [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:536:21 [INFO] [stderr] | [INFO] [stderr] 536 | / match &mut self.elts { [INFO] [stderr] 537 | | &mut None => break, [INFO] [stderr] 538 | | &mut Some(ref mut s) => [INFO] [stderr] 539 | | match s.next() { [INFO] [stderr] ... | [INFO] [stderr] 542 | | } [INFO] [stderr] 543 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 536 | match *(&mut self.elts) { [INFO] [stderr] 537 | None => break, [INFO] [stderr] 538 | Some(ref mut s) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:595:21 [INFO] [stderr] | [INFO] [stderr] 595 | / match &mut self.elts_rev { [INFO] [stderr] 596 | | &mut None => break, [INFO] [stderr] 597 | | &mut Some(ref mut s) => [INFO] [stderr] 598 | | match s.next_back() { [INFO] [stderr] ... | [INFO] [stderr] 601 | | } [INFO] [stderr] 602 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 595 | match *(&mut self.elts_rev) { [INFO] [stderr] 596 | None => break, [INFO] [stderr] 597 | Some(ref mut s) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:665:9 [INFO] [stderr] | [INFO] [stderr] 665 | / match self { [INFO] [stderr] 666 | | &Tree::Empty => [INFO] [stderr] 667 | | Iter { [INFO] [stderr] 668 | | lbound, ubound, [INFO] [stderr] ... | [INFO] [stderr] 686 | | } [INFO] [stderr] 687 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 665 | match *self { [INFO] [stderr] 666 | Tree::Empty => [INFO] [stderr] 667 | Iter { [INFO] [stderr] 668 | lbound, ubound, [INFO] [stderr] 669 | stack: ArrayVec::<[_; MAX_DEPTH]>::new(), [INFO] [stderr] 670 | elts: None, current: None, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:698:9 [INFO] [stderr] | [INFO] [stderr] 698 | / match self { [INFO] [stderr] 699 | | &Tree::Empty => 0, [INFO] [stderr] 700 | | &Tree::Node(ref n) => n.height [INFO] [stderr] 701 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 698 | match *self { [INFO] [stderr] 699 | Tree::Empty => 0, [INFO] [stderr] 700 | Tree::Node(ref n) => n.height [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/avl.rs:770:12 [INFO] [stderr] | [INFO] [stderr] 770 | if chunk.len() == 0 { return (self.clone(), len) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `chunk.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:771:9 [INFO] [stderr] | [INFO] [stderr] 771 | / match self { [INFO] [stderr] 772 | | &Tree::Empty => { [INFO] [stderr] 773 | | let (elts, len) = { [INFO] [stderr] 774 | | let t = Elts::empty(); [INFO] [stderr] ... | [INFO] [stderr] 823 | | } [INFO] [stderr] 824 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 771 | match *self { [INFO] [stderr] 772 | Tree::Empty => { [INFO] [stderr] 773 | let (elts, len) = { [INFO] [stderr] 774 | let t = Elts::empty(); [INFO] [stderr] 775 | match t.update_chunk(chunk, len, true, f) { [INFO] [stderr] 776 | UpdateChunk::Created {elts, len} => (elts, len), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:883:9 [INFO] [stderr] | [INFO] [stderr] 883 | / match self { [INFO] [stderr] 884 | | &Tree::Empty => [INFO] [stderr] 885 | | match f(q, d, None) { [INFO] [stderr] 886 | | None => (self.clone(), len, None), [INFO] [stderr] ... | [INFO] [stderr] 932 | | } [INFO] [stderr] 933 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 883 | match *self { [INFO] [stderr] 884 | Tree::Empty => [INFO] [stderr] 885 | match f(q, d, None) { [INFO] [stderr] 886 | None => (self.clone(), len, None), [INFO] [stderr] 887 | Some((k, v)) => [INFO] [stderr] 888 | (Tree::create( [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:943:9 [INFO] [stderr] | [INFO] [stderr] 943 | / match self { [INFO] [stderr] 944 | | &Tree::Empty => None, [INFO] [stderr] 945 | | &Tree::Node(ref tn) => [INFO] [stderr] 946 | | match tn.left { [INFO] [stderr] ... | [INFO] [stderr] 949 | | } [INFO] [stderr] 950 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 943 | match *self { [INFO] [stderr] 944 | Tree::Empty => None, [INFO] [stderr] 945 | Tree::Node(ref tn) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:954:9 [INFO] [stderr] | [INFO] [stderr] 954 | / match self { [INFO] [stderr] 955 | | &Tree::Empty => panic!("remove min elt"), [INFO] [stderr] 956 | | &Tree::Node(ref tn) => [INFO] [stderr] 957 | | match tn.left { [INFO] [stderr] ... | [INFO] [stderr] 961 | | } [INFO] [stderr] 962 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 954 | match *self { [INFO] [stderr] 955 | Tree::Empty => panic!("remove min elt"), [INFO] [stderr] 956 | Tree::Node(ref tn) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:979:9 [INFO] [stderr] | [INFO] [stderr] 979 | / match self { [INFO] [stderr] 980 | | &Tree::Empty => (Tree::Empty, len, None), [INFO] [stderr] 981 | | &Tree::Node(ref tn) => [INFO] [stderr] 982 | | match tn.elts.get(k) { [INFO] [stderr] ... | [INFO] [stderr] 1003 | | } [INFO] [stderr] 1004 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 979 | match *self { [INFO] [stderr] 980 | Tree::Empty => (Tree::Empty, len, None), [INFO] [stderr] 981 | Tree::Node(ref tn) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/avl.rs:1013:9 [INFO] [stderr] | [INFO] [stderr] 1013 | / match self { [INFO] [stderr] 1014 | | &Tree::Empty => None, [INFO] [stderr] 1015 | | &Tree::Node(ref n) => { [INFO] [stderr] 1016 | | let mut tn = n; [INFO] [stderr] ... | [INFO] [stderr] 1038 | | } [INFO] [stderr] 1039 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1013 | match *self { [INFO] [stderr] 1014 | Tree::Empty => None, [INFO] [stderr] 1015 | Tree::Node(ref n) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/avl.rs:1068:34 [INFO] [stderr] | [INFO] [stderr] 1068 | (&elts.keys).into_iter().all(|k| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/avl.rs:1074:34 [INFO] [stderr] | [INFO] [stderr] 1074 | (&elts.keys).into_iter().all(|k| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [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: item `map::Map` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/map.rs:159:1 [INFO] [stderr] | [INFO] [stderr] 159 | / impl Map where K: Ord + Clone, V: Clone { [INFO] [stderr] 160 | | /// Create a new empty map [INFO] [stderr] 161 | | pub fn new() -> Self { Map { len: 0, root: Tree::new() } } [INFO] [stderr] 162 | | [INFO] [stderr] ... | [INFO] [stderr] 314 | | } [INFO] [stderr] 315 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/map.rs:310:5 [INFO] [stderr] | [INFO] [stderr] 310 | / pub fn range<'a, Q>( [INFO] [stderr] 311 | | &'a self, lbound: Bound, ubound: Bound [INFO] [stderr] 312 | | ) -> Iter<'a, Q, K, V> where Q: Ord, K: Borrow { [INFO] [stderr] 313 | | self.root.range(lbound, ubound) [INFO] [stderr] 314 | | } [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] warning: item `set::Set` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/set.rs:97:1 [INFO] [stderr] | [INFO] [stderr] 97 | / impl Set where K: Ord + Clone { [INFO] [stderr] 98 | | /// Create a new empty set [INFO] [stderr] 99 | | pub fn new() -> Self { Set { len: 0, root: Tree::new() } } [INFO] [stderr] 100 | | [INFO] [stderr] ... | [INFO] [stderr] 205 | | } [INFO] [stderr] 206 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/tests.rs:49:29 [INFO] [stderr] | [INFO] [stderr] 49 | fn permutation(v: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^ help: change this to: `&[T]` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/tests.rs:146:49 [INFO] [stderr] | [INFO] [stderr] 146 | t = t.0.insert_many(t.1, v2.iter().map(|k| (k.clone(), k.clone()))); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*k` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tests.rs:146:60 [INFO] [stderr] | [INFO] [stderr] 146 | t = t.0.insert_many(t.1, v2.iter().map(|k| (k.clone(), k.clone()))); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*k` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/tests.rs:180:13 [INFO] [stderr] | [INFO] [stderr] 180 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 1` [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/tests.rs:189:13 [INFO] [stderr] | [INFO] [stderr] 189 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 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: the variable `i` is used as a loop counter. Consider using `for (i, item) in &v.enumerate()` or similar iterators [INFO] [stderr] --> src/tests.rs:198:18 [INFO] [stderr] | [INFO] [stderr] 198 | for k in &v { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/tests.rs:232:9 [INFO] [stderr] | [INFO] [stderr] 232 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 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/tests.rs:244:9 [INFO] [stderr] | [INFO] [stderr] 244 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 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/tests.rs:264:9 [INFO] [stderr] | [INFO] [stderr] 264 | i = i + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `i += 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: the function has a cyclomatic complexity of 36 [INFO] [stderr] --> src/tests.rs:275:1 [INFO] [stderr] | [INFO] [stderr] 275 | / fn test_map_range_small() { [INFO] [stderr] 276 | | let mut v = Vec::new(); [INFO] [stderr] 277 | | v.extend((-5000..5000).into_iter()); [INFO] [stderr] 278 | | let t = Map::new().insert_many(v.iter().map(|x| (*x, *x))); [INFO] [stderr] ... | [INFO] [stderr] 354 | | } [INFO] [stderr] 355 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/tests.rs:277:14 [INFO] [stderr] | [INFO] [stderr] 277 | v.extend((-5000..5000).into_iter()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `(-5000..5000)` [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: the loop variable `j` is only used to index `v`. [INFO] [stderr] --> src/tests.rs:442:22 [INFO] [stderr] | [INFO] [stderr] 442 | for j in 0..i { [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] 442 | for in v.iter().take(i) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is only used to index `v`. [INFO] [stderr] --> src/tests.rs:455:22 [INFO] [stderr] | [INFO] [stderr] 455 | for j in 0..i { [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] 455 | for in v.iter().take(i) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is only used to index `v`. [INFO] [stderr] --> src/tests.rs:458:22 [INFO] [stderr] | [INFO] [stderr] 458 | for j in (i+1)..v.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] 458 | for in v.iter().skip((i+1)) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/tests.rs:481:14 [INFO] [stderr] | [INFO] [stderr] 481 | let s0 = v0.iter().map(|v| v.clone()).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `v0.iter().cloned()` [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] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tests.rs:481:32 [INFO] [stderr] | [INFO] [stderr] 481 | let s0 = v0.iter().map(|v| v.clone()).collect::>(); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*v` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/tests.rs:482:14 [INFO] [stderr] | [INFO] [stderr] 482 | let s1 = v1.iter().map(|v| v.clone()).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `v1.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tests.rs:482:32 [INFO] [stderr] | [INFO] [stderr] 482 | let s1 = v1.iter().map(|v| v.clone()).collect::>(); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*v` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/tests.rs:483:14 [INFO] [stderr] | [INFO] [stderr] 483 | let s2 = v2.iter().map(|v| v.clone()).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `v2.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tests.rs:483:32 [INFO] [stderr] | [INFO] [stderr] 483 | let s2 = v2.iter().map(|v| v.clone()).collect::>(); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*v` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/tests.rs:484:14 [INFO] [stderr] | [INFO] [stderr] 484 | let s3 = v3.iter().map(|v| v.clone()).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `v3.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/tests.rs:484:32 [INFO] [stderr] | [INFO] [stderr] 484 | let s3 = v3.iter().map(|v| v.clone()).collect::>(); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*v` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 2.81s [INFO] running `"docker" "inspect" "1691ec57c7bac6defa610874cd4409874abcdfb797bc0a164fb78da6e9c1f3f8"` [INFO] running `"docker" "rm" "-f" "1691ec57c7bac6defa610874cd4409874abcdfb797bc0a164fb78da6e9c1f3f8"` [INFO] [stdout] 1691ec57c7bac6defa610874cd4409874abcdfb797bc0a164fb78da6e9c1f3f8