[INFO] updating cached repository amccreight/heapgraph [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/amccreight/heapgraph [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/amccreight/heapgraph" "work/ex/clippy-test-run/sources/stable/gh/amccreight/heapgraph"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/amccreight/heapgraph'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/amccreight/heapgraph" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/amccreight/heapgraph"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/amccreight/heapgraph'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 96b0cf3881dbac8add1aebe0bbeaa0360c290d33 [INFO] sha for GitHub repo amccreight/heapgraph: 96b0cf3881dbac8add1aebe0bbeaa0360c290d33 [INFO] validating manifest of amccreight/heapgraph 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 amccreight/heapgraph 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 amccreight/heapgraph [INFO] finished frobbing amccreight/heapgraph [INFO] frobbed toml for amccreight/heapgraph written to work/ex/clippy-test-run/sources/stable/gh/amccreight/heapgraph/Cargo.toml [INFO] started frobbing amccreight/heapgraph [INFO] finished frobbing amccreight/heapgraph [INFO] frobbed toml for amccreight/heapgraph written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/amccreight/heapgraph/Cargo.toml [INFO] crate amccreight/heapgraph has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting amccreight/heapgraph against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/amccreight/heapgraph:/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] 1dd7d7966dd1a64d837da5f8360278f44f4773c949c87cae21c81fa8eb02c554 [INFO] running `"docker" "start" "-a" "1dd7d7966dd1a64d837da5f8360278f44f4773c949c87cae21c81fa8eb02c554"` [INFO] [stderr] Checking regex-syntax v0.3.7 [INFO] [stderr] Checking regex v0.1.77 [INFO] [stderr] Checking heapgraph_rust v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cc_log.rs:40:20 [INFO] [stderr] | [INFO] [stderr] 40 | EdgeInfo { addr: addr, label: label } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `addr` [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/cc_log.rs:40:32 [INFO] [stderr] | [INFO] [stderr] 40 | EdgeInfo { addr: addr, label: label } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `label` [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/cc_log.rs:64:21 [INFO] [stderr] | [INFO] [stderr] 64 | GraphNode { node_type: node_type, label: label, edges: Vec::new() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `node_type` [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/cc_log.rs:64:43 [INFO] [stderr] | [INFO] [stderr] 64 | GraphNode { node_type: node_type, label: label, edges: Vec::new() } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `label` [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: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:91:5 [INFO] [stderr] | [INFO] [stderr] 91 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cc_log.rs:40:20 [INFO] [stderr] | [INFO] [stderr] 40 | EdgeInfo { addr: addr, label: label } [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `addr` [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/cc_log.rs:40:32 [INFO] [stderr] | [INFO] [stderr] 40 | EdgeInfo { addr: addr, label: label } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `label` [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/cc_log.rs:64:21 [INFO] [stderr] | [INFO] [stderr] 64 | GraphNode { node_type: node_type, label: label, edges: Vec::new() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `node_type` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:99:9 [INFO] [stderr] | [INFO] [stderr] 99 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cc_log.rs:64:43 [INFO] [stderr] | [INFO] [stderr] 64 | GraphNode { node_type: node_type, label: label, edges: Vec::new() } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `label` [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: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:91:5 [INFO] [stderr] | [INFO] [stderr] 91 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:103:5 [INFO] [stderr] | [INFO] [stderr] 103 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:106:5 [INFO] [stderr] | [INFO] [stderr] 106 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:193:13 [INFO] [stderr] | [INFO] [stderr] 193 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:99:9 [INFO] [stderr] | [INFO] [stderr] 99 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:103:5 [INFO] [stderr] | [INFO] [stderr] 103 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:106:5 [INFO] [stderr] | [INFO] [stderr] 106 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/find_roots.rs:193:13 [INFO] [stderr] | [INFO] [stderr] 193 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/string_intern.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | return new_id; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `new_id` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/string_intern.rs:33:24 [INFO] [stderr] | [INFO] [stderr] 33 | Some(s) => return s, [INFO] [stderr] | ^^^^^^^^ help: remove `return` as shown: `s` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/string_intern.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | return new_id; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `new_id` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/string_intern.rs:33:24 [INFO] [stderr] | [INFO] [stderr] 33 | Some(s) => return s, [INFO] [stderr] | ^^^^^^^^ help: remove `return` as shown: `s` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: function is never used: `print_known_edges` [INFO] [stderr] --> src/find_roots.rs:31:1 [INFO] [stderr] | [INFO] [stderr] 31 | fn print_known_edges(log: &CCLog, x: &Addr, known_edges: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [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/string_intern.rs:21:9 [INFO] [stderr] | [INFO] [stderr] 21 | / match self.to_atom.get(s) { [INFO] [stderr] 22 | | Some(v) => return v.clone(), [INFO] [stderr] 23 | | None => () [INFO] [stderr] 24 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(v) = self.to_atom.get(s) { return v.clone() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/string_intern.rs:22:31 [INFO] [stderr] | [INFO] [stderr] 22 | Some(v) => return v.clone(), [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*v` [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: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cc_log.rs:108:18 [INFO] [stderr] | [INFO] [stderr] 108 | if *c == ' ' as u8 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b' ' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cc_log.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | / match e { [INFO] [stderr] 161 | | &ParseChunk::FixedString(expected) => { [INFO] [stderr] 162 | | expect_bytes(expected, s); [INFO] [stderr] 163 | | s = &s[expected.len()..]; [INFO] [stderr] ... | [INFO] [stderr] 176 | | }, [INFO] [stderr] 177 | | } [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] 160 | match *e { [INFO] [stderr] 161 | ParseChunk::FixedString(expected) => { [INFO] [stderr] 162 | expect_bytes(expected, s); [INFO] [stderr] 163 | s = &s[expected.len()..]; [INFO] [stderr] 164 | }, [INFO] [stderr] 165 | ParseChunk::Address => { [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/cc_log.rs:223:34 [INFO] [stderr] | [INFO] [stderr] 223 | pub fn atom_string(&self, a: &Atom) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Atom` [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/cc_log.rs:227:36 [INFO] [stderr] | [INFO] [stderr] 227 | pub fn node_label(&self, node: &Addr) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cc_log.rs:246:28 [INFO] [stderr] | [INFO] [stderr] 246 | if s[3] == 'c' as u8 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'c' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cc_log.rs:248:32 [INFO] [stderr] | [INFO] [stderr] 248 | if s[4] == ']' as u8 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b']' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/find_roots.rs:13:34 [INFO] [stderr] | [INFO] [stderr] 13 | fn print_node(log: &CCLog, node: &Addr) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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/find_roots.rs:20:31 [INFO] [stderr] | [INFO] [stderr] 20 | fn print_edge(log: &CCLog, x: &Addr, y: &Addr) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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/find_roots.rs:20:41 [INFO] [stderr] | [INFO] [stderr] 20 | fn print_edge(log: &CCLog, x: &Addr, y: &Addr) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/find_roots.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | &log.nodes.get(x).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log.nodes[x]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [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/find_roots.rs:31:58 [INFO] [stderr] | [INFO] [stderr] 31 | fn print_known_edges(log: &CCLog, x: &Addr, known_edges: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Addr]` [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/find_roots.rs:31:38 [INFO] [stderr] | [INFO] [stderr] 31 | fn print_known_edges(log: &CCLog, x: &Addr, known_edges: &Vec) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: length comparison to zero [INFO] [stderr] --> src/find_roots.rs:32:8 [INFO] [stderr] | [INFO] [stderr] 32 | if known_edges.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `known_edges.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/find_roots.rs:47:36 [INFO] [stderr] | [INFO] [stderr] 47 | fn explain_root(log: &CCLog, root: &Addr) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/find_roots.rs:48:21 [INFO] [stderr] | [INFO] [stderr] 48 | let root_node = log.nodes.get(root).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log.nodes[root]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [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/find_roots.rs:88:34 [INFO] [stderr] | [INFO] [stderr] 88 | fn print_path(log: &CCLog, path: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Addr]` [INFO] [stderr] | [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/find_roots.rs:133:47 [INFO] [stderr] | [INFO] [stderr] 133 | start_node.edges.push(EdgeInfo { addr:r.clone(), label: empty_label.clone() }); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*r` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/find_roots.rs:133:65 [INFO] [stderr] | [INFO] [stderr] 133 | start_node.edges.push(EdgeInfo { addr:r.clone(), label: empty_label.clone() }); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `empty_label` [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 don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/find_roots.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | / match &distances.get(y) { [INFO] [stderr] 165 | | &Some(&(y_dist, _)) => assert!(y_dist <= new_dist), [INFO] [stderr] 166 | | &None => { [INFO] [stderr] 167 | | distances.insert(y.clone(), new_dist_node.clone()); [INFO] [stderr] 168 | | work_list.push_back(y.clone()); [INFO] [stderr] 169 | | } [INFO] [stderr] 170 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 164 | match distances.get(y) { [INFO] [stderr] 165 | Some(&(y_dist, _)) => assert!(y_dist <= new_dist), [INFO] [stderr] 166 | None => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/find_roots.rs:167:49 [INFO] [stderr] | [INFO] [stderr] 167 | distances.insert(y.clone(), new_dist_node.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `new_dist_node` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/find_roots.rs:184:23 [INFO] [stderr] | [INFO] [stderr] 184 | path.push(p.clone()); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `p` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/find_roots.rs:185:19 [INFO] [stderr] | [INFO] [stderr] 185 | match distances.get(&p).unwrap().1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&distances[&p]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: function is never used: `print_known_edges` [INFO] [stderr] --> src/find_roots.rs:31:1 [INFO] [stderr] | [INFO] [stderr] 31 | fn print_known_edges(log: &CCLog, x: &Addr, known_edges: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [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/string_intern.rs:21:9 [INFO] [stderr] | [INFO] [stderr] 21 | / match self.to_atom.get(s) { [INFO] [stderr] 22 | | Some(v) => return v.clone(), [INFO] [stderr] 23 | | None => () [INFO] [stderr] 24 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(v) = self.to_atom.get(s) { return v.clone() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/string_intern.rs:22:31 [INFO] [stderr] | [INFO] [stderr] 22 | Some(v) => return v.clone(), [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*v` [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: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cc_log.rs:108:18 [INFO] [stderr] | [INFO] [stderr] 108 | if *c == ' ' as u8 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b' ' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cc_log.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | / match e { [INFO] [stderr] 161 | | &ParseChunk::FixedString(expected) => { [INFO] [stderr] 162 | | expect_bytes(expected, s); [INFO] [stderr] 163 | | s = &s[expected.len()..]; [INFO] [stderr] ... | [INFO] [stderr] 176 | | }, [INFO] [stderr] 177 | | } [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] 160 | match *e { [INFO] [stderr] 161 | ParseChunk::FixedString(expected) => { [INFO] [stderr] 162 | expect_bytes(expected, s); [INFO] [stderr] 163 | s = &s[expected.len()..]; [INFO] [stderr] 164 | }, [INFO] [stderr] 165 | ParseChunk::Address => { [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/cc_log.rs:223:34 [INFO] [stderr] | [INFO] [stderr] 223 | pub fn atom_string(&self, a: &Atom) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Atom` [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/cc_log.rs:227:36 [INFO] [stderr] | [INFO] [stderr] 227 | pub fn node_label(&self, node: &Addr) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cc_log.rs:246:28 [INFO] [stderr] | [INFO] [stderr] 246 | if s[3] == 'c' as u8 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'c' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cc_log.rs:248:32 [INFO] [stderr] | [INFO] [stderr] 248 | if s[4] == ']' as u8 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b']' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/find_roots.rs:13:34 [INFO] [stderr] | [INFO] [stderr] 13 | fn print_node(log: &CCLog, node: &Addr) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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/find_roots.rs:20:31 [INFO] [stderr] | [INFO] [stderr] 20 | fn print_edge(log: &CCLog, x: &Addr, y: &Addr) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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/find_roots.rs:20:41 [INFO] [stderr] | [INFO] [stderr] 20 | fn print_edge(log: &CCLog, x: &Addr, y: &Addr) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/find_roots.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | &log.nodes.get(x).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log.nodes[x]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [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/find_roots.rs:31:58 [INFO] [stderr] | [INFO] [stderr] 31 | fn print_known_edges(log: &CCLog, x: &Addr, known_edges: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Addr]` [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/find_roots.rs:31:38 [INFO] [stderr] | [INFO] [stderr] 31 | fn print_known_edges(log: &CCLog, x: &Addr, known_edges: &Vec) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: length comparison to zero [INFO] [stderr] --> src/find_roots.rs:32:8 [INFO] [stderr] | [INFO] [stderr] 32 | if known_edges.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `known_edges.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/find_roots.rs:47:36 [INFO] [stderr] | [INFO] [stderr] 47 | fn explain_root(log: &CCLog, root: &Addr) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/find_roots.rs:48:21 [INFO] [stderr] | [INFO] [stderr] 48 | let root_node = log.nodes.get(root).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&log.nodes[root]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [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/find_roots.rs:88:34 [INFO] [stderr] | [INFO] [stderr] 88 | fn print_path(log: &CCLog, path: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Addr]` [INFO] [stderr] | [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/find_roots.rs:133:47 [INFO] [stderr] | [INFO] [stderr] 133 | start_node.edges.push(EdgeInfo { addr:r.clone(), label: empty_label.clone() }); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*r` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/find_roots.rs:133:65 [INFO] [stderr] | [INFO] [stderr] 133 | start_node.edges.push(EdgeInfo { addr:r.clone(), label: empty_label.clone() }); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `empty_label` [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 don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/find_roots.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | / match &distances.get(y) { [INFO] [stderr] 165 | | &Some(&(y_dist, _)) => assert!(y_dist <= new_dist), [INFO] [stderr] 166 | | &None => { [INFO] [stderr] 167 | | distances.insert(y.clone(), new_dist_node.clone()); [INFO] [stderr] 168 | | work_list.push_back(y.clone()); [INFO] [stderr] 169 | | } [INFO] [stderr] 170 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 164 | match distances.get(y) { [INFO] [stderr] 165 | Some(&(y_dist, _)) => assert!(y_dist <= new_dist), [INFO] [stderr] 166 | None => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/find_roots.rs:167:49 [INFO] [stderr] | [INFO] [stderr] 167 | distances.insert(y.clone(), new_dist_node.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `new_dist_node` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/find_roots.rs:184:23 [INFO] [stderr] | [INFO] [stderr] 184 | path.push(p.clone()); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `p` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/find_roots.rs:185:19 [INFO] [stderr] | [INFO] [stderr] 185 | match distances.get(&p).unwrap().1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&distances[&p]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 6.74s [INFO] running `"docker" "inspect" "1dd7d7966dd1a64d837da5f8360278f44f4773c949c87cae21c81fa8eb02c554"` [INFO] running `"docker" "rm" "-f" "1dd7d7966dd1a64d837da5f8360278f44f4773c949c87cae21c81fa8eb02c554"` [INFO] [stdout] 1dd7d7966dd1a64d837da5f8360278f44f4773c949c87cae21c81fa8eb02c554