[INFO] crate treeflection_derive 0.3.2 is already in cache [INFO] extracting crate treeflection_derive 0.3.2 into work/ex/clippy-test-run/sources/stable/reg/treeflection_derive/0.3.2 [INFO] extracting crate treeflection_derive 0.3.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/treeflection_derive/0.3.2 [INFO] validating manifest of treeflection_derive-0.3.2 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of treeflection_derive-0.3.2 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing treeflection_derive-0.3.2 [INFO] finished frobbing treeflection_derive-0.3.2 [INFO] frobbed toml for treeflection_derive-0.3.2 written to work/ex/clippy-test-run/sources/stable/reg/treeflection_derive/0.3.2/Cargo.toml [INFO] started frobbing treeflection_derive-0.3.2 [INFO] finished frobbing treeflection_derive-0.3.2 [INFO] frobbed toml for treeflection_derive-0.3.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/treeflection_derive/0.3.2/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting treeflection_derive-0.3.2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/treeflection_derive/0.3.2:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 894f30d547ed1583303c34823aaa84f08234489f102543655440dd9acba04afb [INFO] running `"docker" "start" "-a" "894f30d547ed1583303c34823aaa84f08234489f102543655440dd9acba04afb"` [INFO] [stderr] Checking quote v0.6.11 [INFO] [stderr] Compiling syn v0.15.26 [INFO] [stderr] Checking treeflection_derive v0.3.2 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:631:17 [INFO] [stderr] | [INFO] [stderr] 631 | function: function, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `function` [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/lib.rs:632:17 [INFO] [stderr] | [INFO] [stderr] 632 | args: args, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `args` [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/lib.rs:633:17 [INFO] [stderr] | [INFO] [stderr] 633 | return_string: return_string, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `return_string` [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/lib.rs:634:17 [INFO] [stderr] | [INFO] [stderr] 634 | help: help, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `help` [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] Compiling serde_derive v1.0.85 [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:222:27 [INFO] [stderr] | [INFO] [stderr] 222 | variant_arms.push(match &variant.fields { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 223 | | &Fields::Named (ref fields) => { [INFO] [stderr] 224 | | let mut field_values: Vec = vec!(); [INFO] [stderr] 225 | | for field in fields.named.iter() { [INFO] [stderr] ... | [INFO] [stderr] 258 | | } [INFO] [stderr] 259 | | }); [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: try [INFO] [stderr] | [INFO] [stderr] 222 | variant_arms.push(match variant.fields { [INFO] [stderr] 223 | Fields::Named (ref fields) => { [INFO] [stderr] 224 | let mut field_values: Vec = vec!(); [INFO] [stderr] 225 | for field in fields.named.iter() { [INFO] [stderr] 226 | let field_name = field.ident.as_ref().unwrap(); [INFO] [stderr] 227 | field_values.push(quote_spanned!{ Span::call_site() => [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:276:24 [INFO] [stderr] | [INFO] [stderr] 276 | enum_arms.push(match &variant.fields { [INFO] [stderr] | ________________________^ [INFO] [stderr] 277 | | &Fields::Named(ref fields) => { [INFO] [stderr] 278 | | let mut field_names: Vec = vec!(); [INFO] [stderr] 279 | | let mut property_arms: Vec = vec!(); [INFO] [stderr] ... | [INFO] [stderr] 313 | | } [INFO] [stderr] 314 | | }); [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] 276 | enum_arms.push(match variant.fields { [INFO] [stderr] 277 | Fields::Named(ref fields) => { [INFO] [stderr] 278 | let mut field_names: Vec = vec!(); [INFO] [stderr] 279 | let mut property_arms: Vec = vec!(); [INFO] [stderr] 280 | for field in fields.named.iter() { [INFO] [stderr] 281 | let field_name = &field.ident; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:330:24 [INFO] [stderr] | [INFO] [stderr] 330 | enum_arms.push(match &variant.fields { [INFO] [stderr] | ________________________^ [INFO] [stderr] 331 | | &Fields::Named (ref fields) => { [INFO] [stderr] 332 | | let mut name_pairs: Vec = vec!(); [INFO] [stderr] 333 | | for field in fields.named.iter() { [INFO] [stderr] ... | [INFO] [stderr] 366 | | } [INFO] [stderr] 367 | | }); [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] 330 | enum_arms.push(match variant.fields { [INFO] [stderr] 331 | Fields::Named (ref fields) => { [INFO] [stderr] 332 | let mut name_pairs: Vec = vec!(); [INFO] [stderr] 333 | for field in fields.named.iter() { [INFO] [stderr] 334 | let field_name = &field.ident; [INFO] [stderr] 335 | name_pairs.push(quote_spanned!{ Span::call_site() => #field_name: _ }); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:379:5 [INFO] [stderr] | [INFO] [stderr] 379 | / match data { [INFO] [stderr] 380 | | &Fields::Named(ref fields_named) => { [INFO] [stderr] 381 | | let property_arm = gen_struct_property(&name_string, fields_named.named.iter()); [INFO] [stderr] 382 | | let get_arm = gen_get(&name_string); [INFO] [stderr] ... | [INFO] [stderr] 418 | | _ => unimplemented!() [INFO] [stderr] 419 | | } [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] 379 | match *data { [INFO] [stderr] 380 | Fields::Named(ref fields_named) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:482:9 [INFO] [stderr] | [INFO] [stderr] 482 | / match &variant.fields { [INFO] [stderr] 483 | | &Fields::Named (ref fields) => { [INFO] [stderr] 484 | | accessor_list.push_str(format!("As {}:\n", variant_name).as_ref()); [INFO] [stderr] 485 | | for field in fields.named.iter() { [INFO] [stderr] ... | [INFO] [stderr] 498 | | &Fields::Unit => { } [INFO] [stderr] 499 | | } [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] 482 | match variant.fields { [INFO] [stderr] 483 | Fields::Named (ref fields) => { [INFO] [stderr] 484 | accessor_list.push_str(format!("As {}:\n", variant_name).as_ref()); [INFO] [stderr] 485 | for field in fields.named.iter() { [INFO] [stderr] 486 | let field_name = field.ident.as_ref().unwrap().to_string(); [INFO] [stderr] 487 | let field_type = type_string(&field.ty); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:535:29 [INFO] [stderr] | [INFO] [stderr] 535 | let action_string = if let &Some(ref help) = &action.help { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 536 | | format!("* {} - {}\n", action.action.value(), help) [INFO] [stderr] 537 | | } else { [INFO] [stderr] 538 | | format!("* {}\n", action.action.value()) [INFO] [stderr] 539 | | }; [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] 535 | let action_string = if let Some(ref help) = action.help { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:546:5 [INFO] [stderr] | [INFO] [stderr] 546 | / match ty { [INFO] [stderr] 547 | | &Type::Path (ref path) => { [INFO] [stderr] 548 | | String::from(path.path.segments[0].ident.to_string()) [INFO] [stderr] 549 | | } [INFO] [stderr] 550 | | &Type::Tuple (_) => String::from("Tuple"), [INFO] [stderr] 551 | | _ => String::from("UNABLE TO GET TYPE") [INFO] [stderr] 552 | | } [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] 546 | match *ty { [INFO] [stderr] 547 | Type::Path (ref path) => { [INFO] [stderr] 548 | String::from(path.path.segments[0].ident.to_string()) [INFO] [stderr] 549 | } [INFO] [stderr] 550 | Type::Tuple (_) => String::from("Tuple"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/lib.rs:548:13 [INFO] [stderr] | [INFO] [stderr] 548 | String::from(path.path.segments[0].ident.to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `path.path.segments[0].ident.to_string()` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:561:21 [INFO] [stderr] | [INFO] [stderr] 561 | / if let &NestedMeta::Meta (ref sub_attr) = nest_meta { [INFO] [stderr] 562 | | actions.push(attr_to_action(sub_attr)); [INFO] [stderr] 563 | | } [INFO] [stderr] 564 | | else { [INFO] [stderr] 565 | | panic!("Invalid NodeActions attribute: Needs to be a list of NodeAction") [INFO] [stderr] 566 | | } [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] 561 | if let NestedMeta::Meta (ref sub_attr) = *nest_meta { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:575:5 [INFO] [stderr] | [INFO] [stderr] 575 | / if let &Meta::List (ref list) = attr { [INFO] [stderr] 576 | | if list.ident == "NodeAction" { [INFO] [stderr] 577 | | let mut action: Option = None; [INFO] [stderr] 578 | | let mut function: Option = None; [INFO] [stderr] ... | [INFO] [stderr] 642 | | panic!("Invalid NodeAction attribute: Needs to be a list") [INFO] [stderr] 643 | | } [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] 575 | if let Meta::List (ref list) = *attr { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:583:17 [INFO] [stderr] | [INFO] [stderr] 583 | / if let &NestedMeta::Meta (ref meta) = nest_meta { [INFO] [stderr] 584 | | match meta { [INFO] [stderr] 585 | | &Meta::Word (ref ident) => { [INFO] [stderr] 586 | | if ident == "return_string" { [INFO] [stderr] ... | [INFO] [stderr] 623 | | panic!("Invalid NodeAction attribute: Invalid value in list"); [INFO] [stderr] 624 | | } [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] 583 | if let NestedMeta::Meta (ref meta) = *nest_meta { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:584:21 [INFO] [stderr] | [INFO] [stderr] 584 | / match meta { [INFO] [stderr] 585 | | &Meta::Word (ref ident) => { [INFO] [stderr] 586 | | if ident == "return_string" { [INFO] [stderr] 587 | | return_string = true; [INFO] [stderr] ... | [INFO] [stderr] 619 | | } [INFO] [stderr] 620 | | } [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] 584 | match *meta { [INFO] [stderr] 585 | Meta::Word (ref ident) => { [INFO] [stderr] 586 | if ident == "return_string" { [INFO] [stderr] 587 | return_string = true; [INFO] [stderr] 588 | } else { [INFO] [stderr] 589 | panic!("Invalid NodeAction attribute: Invalid value in list"); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:595:37 [INFO] [stderr] | [INFO] [stderr] 595 | / if let &Lit::Str(ref lit) = &name_value.lit { action = Some(lit.clone()); } [INFO] [stderr] 596 | | else { panic!("Invalid NodeAction attribute: Expected a string for action value"); } [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] 595 | if let Lit::Str(ref lit) = name_value.lit { action = Some(lit.clone()); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:599:37 [INFO] [stderr] | [INFO] [stderr] 599 | / if let &Lit::Str(ref lit) = &name_value.lit { function = Some(lit.clone()) } [INFO] [stderr] 600 | | else { panic!("Invalid NodeAction attribute: Expected a string for function value"); } [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] 599 | if let Lit::Str(ref lit) = name_value.lit { function = Some(lit.clone()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:603:37 [INFO] [stderr] | [INFO] [stderr] 603 | / if let &Lit::Str(ref lit) = &name_value.lit { help = Some(lit.value()) } [INFO] [stderr] 604 | | else { panic!("Invalid NodeAction attribute: Expected a string for help value"); } [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] 603 | if let Lit::Str(ref lit) = name_value.lit { help = Some(lit.value()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:607:37 [INFO] [stderr] | [INFO] [stderr] 607 | / if let &Lit::Str(ref lit) = &name_value.lit { [INFO] [stderr] 608 | | args = lit.value().parse::().expect("Invalid NodeAction attribute: Expected a string that can parse into usize"); [INFO] [stderr] 609 | | } [INFO] [stderr] 610 | | else { [INFO] [stderr] 611 | | panic!("Invalid NodeAction attribute: Expected a string for args value"); [INFO] [stderr] 612 | | } [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] 607 | if let Lit::Str(ref lit) = name_value.lit { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:630:39 [INFO] [stderr] | [INFO] [stderr] 630 | action: action.unwrap_or(function.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| function.clone())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] Checking treeflection v0.1.31 [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:631:17 [INFO] [stderr] | [INFO] [stderr] 631 | function: function, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `function` [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/lib.rs:632:17 [INFO] [stderr] | [INFO] [stderr] 632 | args: args, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `args` [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/lib.rs:633:17 [INFO] [stderr] | [INFO] [stderr] 633 | return_string: return_string, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `return_string` [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/lib.rs:634:17 [INFO] [stderr] | [INFO] [stderr] 634 | help: help, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `help` [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: All the struct fields are matched to a wildcard pattern, consider using `..`. [INFO] [stderr] --> tests/test.rs:261:13 [INFO] [stderr] | [INFO] [stderr] 261 | #[derive(Node, Serialize, Deserialize, Clone, Debug)] [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: Try with `Baz { .. }` instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: All the struct fields are matched to a wildcard pattern, consider using `..`. [INFO] [stderr] --> tests/test.rs:261:13 [INFO] [stderr] | [INFO] [stderr] 261 | #[derive(Node, Serialize, Deserialize, Clone, Debug)] [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `GenericNamed { .. }` instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:222:27 [INFO] [stderr] | [INFO] [stderr] 222 | variant_arms.push(match &variant.fields { [INFO] [stderr] | ___________________________^ [INFO] [stderr] 223 | | &Fields::Named (ref fields) => { [INFO] [stderr] 224 | | let mut field_values: Vec = vec!(); [INFO] [stderr] 225 | | for field in fields.named.iter() { [INFO] [stderr] ... | [INFO] [stderr] 258 | | } [INFO] [stderr] 259 | | }); [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: try [INFO] [stderr] | [INFO] [stderr] 222 | variant_arms.push(match variant.fields { [INFO] [stderr] 223 | Fields::Named (ref fields) => { [INFO] [stderr] 224 | let mut field_values: Vec = vec!(); [INFO] [stderr] 225 | for field in fields.named.iter() { [INFO] [stderr] 226 | let field_name = field.ident.as_ref().unwrap(); [INFO] [stderr] 227 | field_values.push(quote_spanned!{ Span::call_site() => [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:276:24 [INFO] [stderr] | [INFO] [stderr] 276 | enum_arms.push(match &variant.fields { [INFO] [stderr] | ________________________^ [INFO] [stderr] 277 | | &Fields::Named(ref fields) => { [INFO] [stderr] 278 | | let mut field_names: Vec = vec!(); [INFO] [stderr] 279 | | let mut property_arms: Vec = vec!(); [INFO] [stderr] ... | [INFO] [stderr] 313 | | } [INFO] [stderr] 314 | | }); [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] 276 | enum_arms.push(match variant.fields { [INFO] [stderr] 277 | Fields::Named(ref fields) => { [INFO] [stderr] 278 | let mut field_names: Vec = vec!(); [INFO] [stderr] 279 | let mut property_arms: Vec = vec!(); [INFO] [stderr] 280 | for field in fields.named.iter() { [INFO] [stderr] 281 | let field_name = &field.ident; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:330:24 [INFO] [stderr] | [INFO] [stderr] 330 | enum_arms.push(match &variant.fields { [INFO] [stderr] | ________________________^ [INFO] [stderr] 331 | | &Fields::Named (ref fields) => { [INFO] [stderr] 332 | | let mut name_pairs: Vec = vec!(); [INFO] [stderr] 333 | | for field in fields.named.iter() { [INFO] [stderr] ... | [INFO] [stderr] 366 | | } [INFO] [stderr] 367 | | }); [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] 330 | enum_arms.push(match variant.fields { [INFO] [stderr] 331 | Fields::Named (ref fields) => { [INFO] [stderr] 332 | let mut name_pairs: Vec = vec!(); [INFO] [stderr] 333 | for field in fields.named.iter() { [INFO] [stderr] 334 | let field_name = &field.ident; [INFO] [stderr] 335 | name_pairs.push(quote_spanned!{ Span::call_site() => #field_name: _ }); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:379:5 [INFO] [stderr] | [INFO] [stderr] 379 | / match data { [INFO] [stderr] 380 | | &Fields::Named(ref fields_named) => { [INFO] [stderr] 381 | | let property_arm = gen_struct_property(&name_string, fields_named.named.iter()); [INFO] [stderr] 382 | | let get_arm = gen_get(&name_string); [INFO] [stderr] ... | [INFO] [stderr] 418 | | _ => unimplemented!() [INFO] [stderr] 419 | | } [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] 379 | match *data { [INFO] [stderr] 380 | Fields::Named(ref fields_named) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:482:9 [INFO] [stderr] | [INFO] [stderr] 482 | / match &variant.fields { [INFO] [stderr] 483 | | &Fields::Named (ref fields) => { [INFO] [stderr] 484 | | accessor_list.push_str(format!("As {}:\n", variant_name).as_ref()); [INFO] [stderr] 485 | | for field in fields.named.iter() { [INFO] [stderr] ... | [INFO] [stderr] 498 | | &Fields::Unit => { } [INFO] [stderr] 499 | | } [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] 482 | match variant.fields { [INFO] [stderr] 483 | Fields::Named (ref fields) => { [INFO] [stderr] 484 | accessor_list.push_str(format!("As {}:\n", variant_name).as_ref()); [INFO] [stderr] 485 | for field in fields.named.iter() { [INFO] [stderr] 486 | let field_name = field.ident.as_ref().unwrap().to_string(); [INFO] [stderr] 487 | let field_type = type_string(&field.ty); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:535:29 [INFO] [stderr] | [INFO] [stderr] 535 | let action_string = if let &Some(ref help) = &action.help { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 536 | | format!("* {} - {}\n", action.action.value(), help) [INFO] [stderr] 537 | | } else { [INFO] [stderr] 538 | | format!("* {}\n", action.action.value()) [INFO] [stderr] 539 | | }; [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] 535 | let action_string = if let Some(ref help) = action.help { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:546:5 [INFO] [stderr] | [INFO] [stderr] 546 | / match ty { [INFO] [stderr] 547 | | &Type::Path (ref path) => { [INFO] [stderr] 548 | | String::from(path.path.segments[0].ident.to_string()) [INFO] [stderr] 549 | | } [INFO] [stderr] 550 | | &Type::Tuple (_) => String::from("Tuple"), [INFO] [stderr] 551 | | _ => String::from("UNABLE TO GET TYPE") [INFO] [stderr] 552 | | } [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] 546 | match *ty { [INFO] [stderr] 547 | Type::Path (ref path) => { [INFO] [stderr] 548 | String::from(path.path.segments[0].ident.to_string()) [INFO] [stderr] 549 | } [INFO] [stderr] 550 | Type::Tuple (_) => String::from("Tuple"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/lib.rs:548:13 [INFO] [stderr] | [INFO] [stderr] 548 | String::from(path.path.segments[0].ident.to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `path.path.segments[0].ident.to_string()` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:561:21 [INFO] [stderr] | [INFO] [stderr] 561 | / if let &NestedMeta::Meta (ref sub_attr) = nest_meta { [INFO] [stderr] 562 | | actions.push(attr_to_action(sub_attr)); [INFO] [stderr] 563 | | } [INFO] [stderr] 564 | | else { [INFO] [stderr] 565 | | panic!("Invalid NodeActions attribute: Needs to be a list of NodeAction") [INFO] [stderr] 566 | | } [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] 561 | if let NestedMeta::Meta (ref sub_attr) = *nest_meta { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:575:5 [INFO] [stderr] | [INFO] [stderr] 575 | / if let &Meta::List (ref list) = attr { [INFO] [stderr] 576 | | if list.ident == "NodeAction" { [INFO] [stderr] 577 | | let mut action: Option = None; [INFO] [stderr] 578 | | let mut function: Option = None; [INFO] [stderr] ... | [INFO] [stderr] 642 | | panic!("Invalid NodeAction attribute: Needs to be a list") [INFO] [stderr] 643 | | } [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] 575 | if let Meta::List (ref list) = *attr { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:583:17 [INFO] [stderr] | [INFO] [stderr] 583 | / if let &NestedMeta::Meta (ref meta) = nest_meta { [INFO] [stderr] 584 | | match meta { [INFO] [stderr] 585 | | &Meta::Word (ref ident) => { [INFO] [stderr] 586 | | if ident == "return_string" { [INFO] [stderr] ... | [INFO] [stderr] 623 | | panic!("Invalid NodeAction attribute: Invalid value in list"); [INFO] [stderr] 624 | | } [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] 583 | if let NestedMeta::Meta (ref meta) = *nest_meta { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:584:21 [INFO] [stderr] | [INFO] [stderr] 584 | / match meta { [INFO] [stderr] 585 | | &Meta::Word (ref ident) => { [INFO] [stderr] 586 | | if ident == "return_string" { [INFO] [stderr] 587 | | return_string = true; [INFO] [stderr] ... | [INFO] [stderr] 619 | | } [INFO] [stderr] 620 | | } [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] 584 | match *meta { [INFO] [stderr] 585 | Meta::Word (ref ident) => { [INFO] [stderr] 586 | if ident == "return_string" { [INFO] [stderr] 587 | return_string = true; [INFO] [stderr] 588 | } else { [INFO] [stderr] 589 | panic!("Invalid NodeAction attribute: Invalid value in list"); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:595:37 [INFO] [stderr] | [INFO] [stderr] 595 | / if let &Lit::Str(ref lit) = &name_value.lit { action = Some(lit.clone()); } [INFO] [stderr] 596 | | else { panic!("Invalid NodeAction attribute: Expected a string for action value"); } [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] 595 | if let Lit::Str(ref lit) = name_value.lit { action = Some(lit.clone()); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:599:37 [INFO] [stderr] | [INFO] [stderr] 599 | / if let &Lit::Str(ref lit) = &name_value.lit { function = Some(lit.clone()) } [INFO] [stderr] 600 | | else { panic!("Invalid NodeAction attribute: Expected a string for function value"); } [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] 599 | if let Lit::Str(ref lit) = name_value.lit { function = Some(lit.clone()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:603:37 [INFO] [stderr] | [INFO] [stderr] 603 | / if let &Lit::Str(ref lit) = &name_value.lit { help = Some(lit.value()) } [INFO] [stderr] 604 | | else { panic!("Invalid NodeAction attribute: Expected a string for help value"); } [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] 603 | if let Lit::Str(ref lit) = name_value.lit { help = Some(lit.value()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:607:37 [INFO] [stderr] | [INFO] [stderr] 607 | / if let &Lit::Str(ref lit) = &name_value.lit { [INFO] [stderr] 608 | | args = lit.value().parse::().expect("Invalid NodeAction attribute: Expected a string that can parse into usize"); [INFO] [stderr] 609 | | } [INFO] [stderr] 610 | | else { [INFO] [stderr] 611 | | panic!("Invalid NodeAction attribute: Expected a string for args value"); [INFO] [stderr] 612 | | } [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] 607 | if let Lit::Str(ref lit) = name_value.lit { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/lib.rs:630:39 [INFO] [stderr] | [INFO] [stderr] 630 | action: action.unwrap_or(function.clone()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| function.clone())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: float has excessive precision [INFO] [stderr] --> tests/test.rs:373:43 [INFO] [stderr] | [INFO] [stderr] 373 | let mut some_enum = SomeEnum::Baz {x: 412.12345, y: 44.11}; [INFO] [stderr] | ^^^^^^^^^ help: consider changing the type or truncating it to: `412.123_44` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::excessive_precision)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#excessive_precision [INFO] [stderr] [INFO] [stderr] warning: float has excessive precision [INFO] [stderr] --> tests/test.rs:387:43 [INFO] [stderr] | [INFO] [stderr] 387 | let mut some_enum = SomeEnum::Baz {x: 412.12345, y: 44.11}; [INFO] [stderr] | ^^^^^^^^^ help: consider changing the type or truncating it to: `412.123_44` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#excessive_precision [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 24.23s [INFO] running `"docker" "inspect" "894f30d547ed1583303c34823aaa84f08234489f102543655440dd9acba04afb"` [INFO] running `"docker" "rm" "-f" "894f30d547ed1583303c34823aaa84f08234489f102543655440dd9acba04afb"` [INFO] [stdout] 894f30d547ed1583303c34823aaa84f08234489f102543655440dd9acba04afb