[INFO] crate flickr_derive 0.1.1 is already in cache [INFO] extracting crate flickr_derive 0.1.1 into work/ex/clippy-test-run/sources/stable/reg/flickr_derive/0.1.1 [INFO] extracting crate flickr_derive 0.1.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/flickr_derive/0.1.1 [INFO] validating manifest of flickr_derive-0.1.1 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 flickr_derive-0.1.1 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 flickr_derive-0.1.1 [INFO] finished frobbing flickr_derive-0.1.1 [INFO] frobbed toml for flickr_derive-0.1.1 written to work/ex/clippy-test-run/sources/stable/reg/flickr_derive/0.1.1/Cargo.toml [INFO] started frobbing flickr_derive-0.1.1 [INFO] finished frobbing flickr_derive-0.1.1 [INFO] frobbed toml for flickr_derive-0.1.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/flickr_derive/0.1.1/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 flickr_derive-0.1.1 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/flickr_derive/0.1.1:/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] b7ecd8ed1e3b7ee524217a873cb29410fdb692cf3dd940afed11bfb0e9b881b7 [INFO] running `"docker" "start" "-a" "b7ecd8ed1e3b7ee524217a873cb29410fdb692cf3dd940afed11bfb0e9b881b7"` [INFO] [stderr] Checking flickr_derive v0.1.1 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:145:25 [INFO] [stderr] | [INFO] [stderr] 145 | member_type: member_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `member_type` [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:146:25 [INFO] [stderr] | [INFO] [stderr] 146 | param_type: param_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `param_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/lib.rs:147:25 [INFO] [stderr] | [INFO] [stderr] 147 | mandatory: mandatory, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `mandatory` [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:148:25 [INFO] [stderr] | [INFO] [stderr] 148 | alternative_format: alternative_format, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `alternative_format` [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:145:25 [INFO] [stderr] | [INFO] [stderr] 145 | member_type: member_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `member_type` [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:146:25 [INFO] [stderr] | [INFO] [stderr] 146 | param_type: param_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `param_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/lib.rs:147:25 [INFO] [stderr] | [INFO] [stderr] 147 | mandatory: mandatory, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `mandatory` [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:148:25 [INFO] [stderr] | [INFO] [stderr] 148 | alternative_format: alternative_format, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `alternative_format` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:37:19 [INFO] [stderr] | [INFO] [stderr] 37 | let alt = match self.alternative_format { [INFO] [stderr] | ___________________^ [INFO] [stderr] 38 | | true => { " ALT" }, [INFO] [stderr] 39 | | false => { "" }, [INFO] [stderr] 40 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.alternative_format { " ALT" } else { "" }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:41:22 [INFO] [stderr] | [INFO] [stderr] 41 | let manopt = match self.mandatory { [INFO] [stderr] | ______________________^ [INFO] [stderr] 42 | | true => { " mandatory" }, [INFO] [stderr] 43 | | false => { " optional" }, [INFO] [stderr] 44 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.mandatory { " mandatory" } else { " optional" }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [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/lib.rs:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | / match tt { [INFO] [stderr] 61 | | proc_macro2::TokenTree::Literal(lit) => { [INFO] [stderr] 62 | | if attr_name == "method" { [INFO] [stderr] 63 | | method_name = Some(strip_quotes(&lit.to_string())); [INFO] [stderr] ... | [INFO] [stderr] 71 | | } [INFO] [stderr] 72 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 60 | if let proc_macro2::TokenTree::Literal(lit) = tt { [INFO] [stderr] 61 | if attr_name == "method" { [INFO] [stderr] 62 | method_name = Some(strip_quotes(&lit.to_string())); [INFO] [stderr] 63 | } [INFO] [stderr] 64 | [INFO] [stderr] 65 | if attr_name == "result" { [INFO] [stderr] ... [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/lib.rs:76:5 [INFO] [stderr] | [INFO] [stderr] 76 | / match fields { [INFO] [stderr] 77 | | syn::Fields::Named(fields_named) => { [INFO] [stderr] 78 | | for ref f in fields_named.named.iter() { [INFO] [stderr] 79 | | // Look for macro attributes [INFO] [stderr] ... | [INFO] [stderr] 155 | | _ => { } [INFO] [stderr] 156 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 76 | if let syn::Fields::Named(fields_named) = fields { [INFO] [stderr] 77 | for ref f in fields_named.named.iter() { [INFO] [stderr] 78 | // Look for macro attributes [INFO] [stderr] 79 | let mut alternative_format = false; // TODO [INFO] [stderr] 80 | for attr in &f.attrs { [INFO] [stderr] 81 | if let Some(pair) = attr.path.segments.last() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:78:17 [INFO] [stderr] | [INFO] [stderr] 78 | for ref f in fields_named.named.iter() { [INFO] [stderr] | ^^^^^ ------------------------- help: try: `let f = &fields_named.named.iter();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:89:65 [INFO] [stderr] | [INFO] [stderr] 89 | } else if t.ident == "truebool" { [INFO] [stderr] | _________________________________________________________________^ [INFO] [stderr] 90 | | alternative_format = true; [INFO] [stderr] 91 | | } [INFO] [stderr] | |_________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:87:59 [INFO] [stderr] | [INFO] [stderr] 87 | if t.ident == "mysqldate" { [INFO] [stderr] | ___________________________________________________________^ [INFO] [stderr] 88 | | alternative_format = true; [INFO] [stderr] 89 | | } else if t.ident == "truebool" { [INFO] [stderr] | |_________________________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [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/lib.rs:109:21 [INFO] [stderr] | [INFO] [stderr] 109 | / match param_type.clone() { [INFO] [stderr] 110 | | syn::Type::Path(ref mut pt) => { [INFO] [stderr] 111 | | let seg1 = pt.path.segments [INFO] [stderr] 112 | | .first() [INFO] [stderr] ... | [INFO] [stderr] 139 | | _ => { } [INFO] [stderr] 140 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 109 | if let syn::Type::Path(ref mut pt) = param_type.clone() { [INFO] [stderr] 110 | let seg1 = pt.path.segments [INFO] [stderr] 111 | .first() [INFO] [stderr] 112 | .expect("Option") [INFO] [stderr] 113 | .into_tuple().0; [INFO] [stderr] 114 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> src/lib.rs:117:32 [INFO] [stderr] | [INFO] [stderr] 117 | if seg1.ident.to_string() == "Option" [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `*seg1.ident` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cmp_owned)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [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/lib.rs:121:33 [INFO] [stderr] | [INFO] [stderr] 121 | / match &seg1.arguments { [INFO] [stderr] 122 | | syn::PathArguments::AngleBracketed(abga) => { [INFO] [stderr] 123 | | let arg1 = abga [INFO] [stderr] 124 | | .args [INFO] [stderr] ... | [INFO] [stderr] 135 | | _ => { } [INFO] [stderr] 136 | | } [INFO] [stderr] | |_________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 121 | if let syn::PathArguments::AngleBracketed(abga) = &seg1.arguments { [INFO] [stderr] 122 | let arg1 = abga [INFO] [stderr] 123 | .args [INFO] [stderr] 124 | .first() [INFO] [stderr] 125 | .expect("GenericArgument") [INFO] [stderr] 126 | .into_tuple().0; [INFO] [stderr] ... [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/lib.rs:128:41 [INFO] [stderr] | [INFO] [stderr] 128 | / match arg1 { [INFO] [stderr] 129 | | syn::GenericArgument::Type(ty) => { [INFO] [stderr] 130 | | param_type = ty.clone(); [INFO] [stderr] 131 | | }, [INFO] [stderr] 132 | | _ => { } [INFO] [stderr] 133 | | } [INFO] [stderr] | |_________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 128 | if let syn::GenericArgument::Type(ty) = arg1 { [INFO] [stderr] 129 | param_type = ty.clone(); [INFO] [stderr] 130 | } [INFO] [stderr] | [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/lib.rs:228:91 [INFO] [stderr] | [INFO] [stderr] 228 | fn generate_constructor(struct_name: &syn::Ident, flickr_api_type: &syn::Type, summaries: &Vec) -> proc_macro2::TokenStream { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[FieldSummary]` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/lib.rs:266:84 [INFO] [stderr] | [INFO] [stderr] 266 | fn generate_perform_method(method_name: &str, result_struct_type: &str, summaries: &Vec) -> proc_macro2::TokenStream { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[FieldSummary]` [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:390:20 [INFO] [stderr] | [INFO] [stderr] 390 | fn strip_quotes(s: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `flickr_derive`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:37:19 [INFO] [stderr] | [INFO] [stderr] 37 | let alt = match self.alternative_format { [INFO] [stderr] | ___________________^ [INFO] [stderr] 38 | | true => { " ALT" }, [INFO] [stderr] 39 | | false => { "" }, [INFO] [stderr] 40 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.alternative_format { " ALT" } else { "" }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/lib.rs:41:22 [INFO] [stderr] | [INFO] [stderr] 41 | let manopt = match self.mandatory { [INFO] [stderr] | ______________________^ [INFO] [stderr] 42 | | true => { " mandatory" }, [INFO] [stderr] 43 | | false => { " optional" }, [INFO] [stderr] 44 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if self.mandatory { " mandatory" } else { " optional" }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [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/lib.rs:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | / match tt { [INFO] [stderr] 61 | | proc_macro2::TokenTree::Literal(lit) => { [INFO] [stderr] 62 | | if attr_name == "method" { [INFO] [stderr] 63 | | method_name = Some(strip_quotes(&lit.to_string())); [INFO] [stderr] ... | [INFO] [stderr] 71 | | } [INFO] [stderr] 72 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 60 | if let proc_macro2::TokenTree::Literal(lit) = tt { [INFO] [stderr] 61 | if attr_name == "method" { [INFO] [stderr] 62 | method_name = Some(strip_quotes(&lit.to_string())); [INFO] [stderr] 63 | } [INFO] [stderr] 64 | [INFO] [stderr] 65 | if attr_name == "result" { [INFO] [stderr] ... [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/lib.rs:76:5 [INFO] [stderr] | [INFO] [stderr] 76 | / match fields { [INFO] [stderr] 77 | | syn::Fields::Named(fields_named) => { [INFO] [stderr] 78 | | for ref f in fields_named.named.iter() { [INFO] [stderr] 79 | | // Look for macro attributes [INFO] [stderr] ... | [INFO] [stderr] 155 | | _ => { } [INFO] [stderr] 156 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 76 | if let syn::Fields::Named(fields_named) = fields { [INFO] [stderr] 77 | for ref f in fields_named.named.iter() { [INFO] [stderr] 78 | // Look for macro attributes [INFO] [stderr] 79 | let mut alternative_format = false; // TODO [INFO] [stderr] 80 | for attr in &f.attrs { [INFO] [stderr] 81 | if let Some(pair) = attr.path.segments.last() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/lib.rs:78:17 [INFO] [stderr] | [INFO] [stderr] 78 | for ref f in fields_named.named.iter() { [INFO] [stderr] | ^^^^^ ------------------------- help: try: `let f = &fields_named.named.iter();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:89:65 [INFO] [stderr] | [INFO] [stderr] 89 | } else if t.ident == "truebool" { [INFO] [stderr] | _________________________________________________________________^ [INFO] [stderr] 90 | | alternative_format = true; [INFO] [stderr] 91 | | } [INFO] [stderr] | |_________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:87:59 [INFO] [stderr] | [INFO] [stderr] 87 | if t.ident == "mysqldate" { [INFO] [stderr] | ___________________________________________________________^ [INFO] [stderr] 88 | | alternative_format = true; [INFO] [stderr] 89 | | } else if t.ident == "truebool" { [INFO] [stderr] | |_________________________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [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/lib.rs:109:21 [INFO] [stderr] | [INFO] [stderr] 109 | / match param_type.clone() { [INFO] [stderr] 110 | | syn::Type::Path(ref mut pt) => { [INFO] [stderr] 111 | | let seg1 = pt.path.segments [INFO] [stderr] 112 | | .first() [INFO] [stderr] ... | [INFO] [stderr] 139 | | _ => { } [INFO] [stderr] 140 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 109 | if let syn::Type::Path(ref mut pt) = param_type.clone() { [INFO] [stderr] 110 | let seg1 = pt.path.segments [INFO] [stderr] 111 | .first() [INFO] [stderr] 112 | .expect("Option") [INFO] [stderr] 113 | .into_tuple().0; [INFO] [stderr] 114 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> src/lib.rs:117:32 [INFO] [stderr] | [INFO] [stderr] 117 | if seg1.ident.to_string() == "Option" [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `*seg1.ident` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cmp_owned)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [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/lib.rs:121:33 [INFO] [stderr] | [INFO] [stderr] 121 | / match &seg1.arguments { [INFO] [stderr] 122 | | syn::PathArguments::AngleBracketed(abga) => { [INFO] [stderr] 123 | | let arg1 = abga [INFO] [stderr] 124 | | .args [INFO] [stderr] ... | [INFO] [stderr] 135 | | _ => { } [INFO] [stderr] 136 | | } [INFO] [stderr] | |_________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 121 | if let syn::PathArguments::AngleBracketed(abga) = &seg1.arguments { [INFO] [stderr] 122 | let arg1 = abga [INFO] [stderr] 123 | .args [INFO] [stderr] 124 | .first() [INFO] [stderr] 125 | .expect("GenericArgument") [INFO] [stderr] 126 | .into_tuple().0; [INFO] [stderr] ... [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/lib.rs:128:41 [INFO] [stderr] | [INFO] [stderr] 128 | / match arg1 { [INFO] [stderr] 129 | | syn::GenericArgument::Type(ty) => { [INFO] [stderr] 130 | | param_type = ty.clone(); [INFO] [stderr] 131 | | }, [INFO] [stderr] 132 | | _ => { } [INFO] [stderr] 133 | | } [INFO] [stderr] | |_________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 128 | if let syn::GenericArgument::Type(ty) = arg1 { [INFO] [stderr] 129 | param_type = ty.clone(); [INFO] [stderr] 130 | } [INFO] [stderr] | [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/lib.rs:228:91 [INFO] [stderr] | [INFO] [stderr] 228 | fn generate_constructor(struct_name: &syn::Ident, flickr_api_type: &syn::Type, summaries: &Vec) -> proc_macro2::TokenStream { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[FieldSummary]` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/lib.rs:266:84 [INFO] [stderr] | [INFO] [stderr] 266 | fn generate_perform_method(method_name: &str, result_struct_type: &str, summaries: &Vec) -> proc_macro2::TokenStream { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[FieldSummary]` [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:390:20 [INFO] [stderr] | [INFO] [stderr] 390 | fn strip_quotes(s: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `flickr_derive`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "b7ecd8ed1e3b7ee524217a873cb29410fdb692cf3dd940afed11bfb0e9b881b7"` [INFO] running `"docker" "rm" "-f" "b7ecd8ed1e3b7ee524217a873cb29410fdb692cf3dd940afed11bfb0e9b881b7"` [INFO] [stdout] b7ecd8ed1e3b7ee524217a873cb29410fdb692cf3dd940afed11bfb0e9b881b7