[INFO] crate bittwiddler 0.0.1 is already in cache [INFO] extracting crate bittwiddler 0.0.1 into work/ex/clippy-test-run/sources/stable/reg/bittwiddler/0.0.1 [INFO] extracting crate bittwiddler 0.0.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/bittwiddler/0.0.1 [INFO] validating manifest of bittwiddler-0.0.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 bittwiddler-0.0.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 bittwiddler-0.0.1 [INFO] finished frobbing bittwiddler-0.0.1 [INFO] frobbed toml for bittwiddler-0.0.1 written to work/ex/clippy-test-run/sources/stable/reg/bittwiddler/0.0.1/Cargo.toml [INFO] started frobbing bittwiddler-0.0.1 [INFO] finished frobbing bittwiddler-0.0.1 [INFO] frobbed toml for bittwiddler-0.0.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/bittwiddler/0.0.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 bittwiddler-0.0.1 against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/bittwiddler/0.0.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 -Dclippy::into_iter_on_array" "-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] d7b19322f6baa248c1c921087b5fe41842e193b75a9750e16b70c2f0e916a3b4 [INFO] running `"docker" "start" "-a" "d7b19322f6baa248c1c921087b5fe41842e193b75a9750e16b70c2f0e916a3b4"` [INFO] [stderr] Checking syn v0.13.11 [INFO] [stderr] Checking bittwiddler v0.0.1 (/opt/crater/workdir) [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:519:28 [INFO] [stderr] | [INFO] [stderr] 519 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 520 | | if dimensions.unwrap() != coords.len() { [INFO] [stderr] 521 | | panic!("Instance {} on {} has mismatched dimensions", instance_name, input_ident.as_ref()); [INFO] [stderr] 522 | | } [INFO] [stderr] 523 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 519 | } else if dimensions.unwrap() != coords.len() { [INFO] [stderr] 520 | panic!("Instance {} on {} has mismatched dimensions", instance_name, input_ident.as_ref()); [INFO] [stderr] 521 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:558:32 [INFO] [stderr] | [INFO] [stderr] 558 | } else { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 559 | | if mirror { [INFO] [stderr] 560 | | let mirror_ident = syn::Ident::from(format!("mirror_{}", dim_i)); [INFO] [stderr] 561 | | // mirror_idents.push(quote!{#mirror_ident: bool}); [INFO] [stderr] ... | [INFO] [stderr] 574 | | } [INFO] [stderr] 575 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 558 | } else if mirror { [INFO] [stderr] 559 | let mirror_ident = syn::Ident::from(format!("mirror_{}", dim_i)); [INFO] [stderr] 560 | // mirror_idents.push(quote!{#mirror_ident: bool}); [INFO] [stderr] 561 | index_each_dim.push(quote! { [INFO] [stderr] 562 | (start_coord as isize + [INFO] [stderr] 563 | (if #mirror_ident {-1} else {1}) * #coord_i as isize) as usize [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:519:28 [INFO] [stderr] | [INFO] [stderr] 519 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 520 | | if dimensions.unwrap() != coords.len() { [INFO] [stderr] 521 | | panic!("Instance {} on {} has mismatched dimensions", instance_name, input_ident.as_ref()); [INFO] [stderr] 522 | | } [INFO] [stderr] 523 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 519 | } else if dimensions.unwrap() != coords.len() { [INFO] [stderr] 520 | panic!("Instance {} on {} has mismatched dimensions", instance_name, input_ident.as_ref()); [INFO] [stderr] 521 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lib.rs:558:32 [INFO] [stderr] | [INFO] [stderr] 558 | } else { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 559 | | if mirror { [INFO] [stderr] 560 | | let mirror_ident = syn::Ident::from(format!("mirror_{}", dim_i)); [INFO] [stderr] 561 | | // mirror_idents.push(quote!{#mirror_ident: bool}); [INFO] [stderr] ... | [INFO] [stderr] 574 | | } [INFO] [stderr] 575 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 558 | } else if mirror { [INFO] [stderr] 559 | let mirror_ident = syn::Ident::from(format!("mirror_{}", dim_i)); [INFO] [stderr] 560 | // mirror_idents.push(quote!{#mirror_ident: bool}); [INFO] [stderr] 561 | index_each_dim.push(quote! { [INFO] [stderr] 562 | (start_coord as isize + [INFO] [stderr] 563 | (if #mirror_ident {-1} else {1}) * #coord_i as isize) as usize [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/lib.rs:294:36 [INFO] [stderr] | [INFO] [stderr] 294 | unsafe { Some(self.str.slice_unchecked(start_of_ret_idx, end_of_ret_idx)) } [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/lib.rs:294:36 [INFO] [stderr] | [INFO] [stderr] 294 | unsafe { Some(self.str.slice_unchecked(start_of_ret_idx, end_of_ret_idx)) } [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 31 [INFO] [stderr] --> src/lib.rs:41:1 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn bitpattern(input: TokenStream) -> TokenStream { [INFO] [stderr] 42 | | // Parse the input tokens into a syntax tree [INFO] [stderr] 43 | | let input: syn::DeriveInput = syn::parse(input).unwrap(); [INFO] [stderr] 44 | | [INFO] [stderr] ... | [INFO] [stderr] 157 | | } [INFO] [stderr] 158 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:53:12 [INFO] [stderr] | [INFO] [stderr] 53 | if dataenum.variants.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `dataenum.variants.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] error: for loop over `$ single`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/lib.rs:129:13 [INFO] [stderr] | [INFO] [stderr] 129 | / quote! { [INFO] [stderr] 130 | | impl #input_ident { [INFO] [stderr] 131 | | pub fn decode(x: (#(#bools2),*)) -> Self { [INFO] [stderr] 132 | | match x { [INFO] [stderr] ... | [INFO] [stderr] 137 | | } [INFO] [stderr] 138 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_option)] on by default [INFO] [stderr] = help: consider replacing `for $ first in $ single` with `if let Some($ first) = $ single` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: for loop over `$ single`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/lib.rs:141:13 [INFO] [stderr] | [INFO] [stderr] 141 | / quote! { [INFO] [stderr] 142 | | impl #input_ident { [INFO] [stderr] 143 | | pub fn decode(x: (#(#bools2),*)) -> Result { [INFO] [stderr] 144 | | Ok(match x { [INFO] [stderr] ... | [INFO] [stderr] 149 | | } [INFO] [stderr] 150 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for $ first in $ single` with `if let Some($ first) = $ single` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:204:9 [INFO] [stderr] | [INFO] [stderr] 204 | / match self { [INFO] [stderr] 205 | | &BitTwiddlerFieldRef::Ident(id) => id.as_ref().to_owned(), [INFO] [stderr] 206 | | &BitTwiddlerFieldRef::Index(idx) => format!("{}", idx), [INFO] [stderr] 207 | | &BitTwiddlerFieldRef::Self_ => "Enum".to_owned(), [INFO] [stderr] 208 | | } [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] 204 | match *self { [INFO] [stderr] 205 | BitTwiddlerFieldRef::Ident(id) => id.as_ref().to_owned(), [INFO] [stderr] 206 | BitTwiddlerFieldRef::Index(idx) => format!("{}", idx), [INFO] [stderr] 207 | BitTwiddlerFieldRef::Self_ => "Enum".to_owned(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:300:5 [INFO] [stderr] | [INFO] [stderr] 300 | / if let &syn::Type::Path(ref typep) = ty { [INFO] [stderr] 301 | | if typep.qself.is_none() && typep.path.leading_colon.is_none() && typep.path.segments.len() == 1 && [INFO] [stderr] 302 | | typep.path.segments[0].ident.as_ref() == "bool" { [INFO] [stderr] 303 | | [INFO] [stderr] ... | [INFO] [stderr] 309 | | false [INFO] [stderr] 310 | | } [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] 300 | if let syn::Type::Path(ref typep) = *ty { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/lib.rs:301:9 [INFO] [stderr] | [INFO] [stderr] 301 | / if typep.qself.is_none() && typep.path.leading_colon.is_none() && typep.path.segments.len() == 1 && [INFO] [stderr] 302 | | typep.path.segments[0].ident.as_ref() == "bool" { [INFO] [stderr] 303 | | [INFO] [stderr] 304 | | true [INFO] [stderr] 305 | | } else { [INFO] [stderr] 306 | | false [INFO] [stderr] 307 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] help: you can reduce it to [INFO] [stderr] | [INFO] [stderr] 301 | typep.qself.is_none() && typep.path.leading_colon.is_none() && typep.path.segments.len() == 1 && [INFO] [stderr] 302 | typep.path.segments[0].ident.as_ref() == "bool" [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 93 [INFO] [stderr] --> src/lib.rs:314:1 [INFO] [stderr] | [INFO] [stderr] 314 | / pub fn bittwiddler(input: TokenStream) -> TokenStream { [INFO] [stderr] 315 | | let input: syn::DeriveInput = syn::parse(input).unwrap(); [INFO] [stderr] 316 | | [INFO] [stderr] 317 | | let main_bittwiddler_attribs = parse_multi_string_attr_helper(&input.attrs, "bittwiddler", [INFO] [stderr] ... | [INFO] [stderr] 824 | | all_tokens.into() [INFO] [stderr] 825 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:335:28 [INFO] [stderr] | [INFO] [stderr] 335 | if bittwiddler_field_attrs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bittwiddler_field_attrs.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:350:28 [INFO] [stderr] | [INFO] [stderr] 350 | if bittwiddler_field_attrs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bittwiddler_field_attrs.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:368:16 [INFO] [stderr] | [INFO] [stderr] 368 | if bittwiddler_field_attrs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bittwiddler_field_attrs.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:399:44 [INFO] [stderr] | [INFO] [stderr] 399 | if errtype_tmp.starts_with("'") { [INFO] [stderr] | ^^^ help: try using a char instead: `'''` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:400:47 [INFO] [stderr] | [INFO] [stderr] 400 | if !errtype_tmp.ends_with("'") { [INFO] [stderr] | ^^^ help: try using a char instead: `'''` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:426:16 [INFO] [stderr] | [INFO] [stderr] 426 | if field_locs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `field_locs.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `bittwiddler`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: the function has a cyclomatic complexity of 31 [INFO] [stderr] --> src/lib.rs:41:1 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn bitpattern(input: TokenStream) -> TokenStream { [INFO] [stderr] 42 | | // Parse the input tokens into a syntax tree [INFO] [stderr] 43 | | let input: syn::DeriveInput = syn::parse(input).unwrap(); [INFO] [stderr] 44 | | [INFO] [stderr] ... | [INFO] [stderr] 157 | | } [INFO] [stderr] 158 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:53:12 [INFO] [stderr] | [INFO] [stderr] 53 | if dataenum.variants.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `dataenum.variants.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] error: for loop over `$ single`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/lib.rs:129:13 [INFO] [stderr] | [INFO] [stderr] 129 | / quote! { [INFO] [stderr] 130 | | impl #input_ident { [INFO] [stderr] 131 | | pub fn decode(x: (#(#bools2),*)) -> Self { [INFO] [stderr] 132 | | match x { [INFO] [stderr] ... | [INFO] [stderr] 137 | | } [INFO] [stderr] 138 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_option)] on by default [INFO] [stderr] = help: consider replacing `for $ first in $ single` with `if let Some($ first) = $ single` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: for loop over `$ single`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/lib.rs:141:13 [INFO] [stderr] | [INFO] [stderr] 141 | / quote! { [INFO] [stderr] 142 | | impl #input_ident { [INFO] [stderr] 143 | | pub fn decode(x: (#(#bools2),*)) -> Result { [INFO] [stderr] 144 | | Ok(match x { [INFO] [stderr] ... | [INFO] [stderr] 149 | | } [INFO] [stderr] 150 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for $ first in $ single` with `if let Some($ first) = $ single` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:204:9 [INFO] [stderr] | [INFO] [stderr] 204 | / match self { [INFO] [stderr] 205 | | &BitTwiddlerFieldRef::Ident(id) => id.as_ref().to_owned(), [INFO] [stderr] 206 | | &BitTwiddlerFieldRef::Index(idx) => format!("{}", idx), [INFO] [stderr] 207 | | &BitTwiddlerFieldRef::Self_ => "Enum".to_owned(), [INFO] [stderr] 208 | | } [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] 204 | match *self { [INFO] [stderr] 205 | BitTwiddlerFieldRef::Ident(id) => id.as_ref().to_owned(), [INFO] [stderr] 206 | BitTwiddlerFieldRef::Index(idx) => format!("{}", idx), [INFO] [stderr] 207 | BitTwiddlerFieldRef::Self_ => "Enum".to_owned(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:300:5 [INFO] [stderr] | [INFO] [stderr] 300 | / if let &syn::Type::Path(ref typep) = ty { [INFO] [stderr] 301 | | if typep.qself.is_none() && typep.path.leading_colon.is_none() && typep.path.segments.len() == 1 && [INFO] [stderr] 302 | | typep.path.segments[0].ident.as_ref() == "bool" { [INFO] [stderr] 303 | | [INFO] [stderr] ... | [INFO] [stderr] 309 | | false [INFO] [stderr] 310 | | } [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] 300 | if let syn::Type::Path(ref typep) = *ty { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/lib.rs:301:9 [INFO] [stderr] | [INFO] [stderr] 301 | / if typep.qself.is_none() && typep.path.leading_colon.is_none() && typep.path.segments.len() == 1 && [INFO] [stderr] 302 | | typep.path.segments[0].ident.as_ref() == "bool" { [INFO] [stderr] 303 | | [INFO] [stderr] 304 | | true [INFO] [stderr] 305 | | } else { [INFO] [stderr] 306 | | false [INFO] [stderr] 307 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] help: you can reduce it to [INFO] [stderr] | [INFO] [stderr] 301 | typep.qself.is_none() && typep.path.leading_colon.is_none() && typep.path.segments.len() == 1 && [INFO] [stderr] 302 | typep.path.segments[0].ident.as_ref() == "bool" [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 93 [INFO] [stderr] --> src/lib.rs:314:1 [INFO] [stderr] | [INFO] [stderr] 314 | / pub fn bittwiddler(input: TokenStream) -> TokenStream { [INFO] [stderr] 315 | | let input: syn::DeriveInput = syn::parse(input).unwrap(); [INFO] [stderr] 316 | | [INFO] [stderr] 317 | | let main_bittwiddler_attribs = parse_multi_string_attr_helper(&input.attrs, "bittwiddler", [INFO] [stderr] ... | [INFO] [stderr] 824 | | all_tokens.into() [INFO] [stderr] 825 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:335:28 [INFO] [stderr] | [INFO] [stderr] 335 | if bittwiddler_field_attrs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bittwiddler_field_attrs.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:350:28 [INFO] [stderr] | [INFO] [stderr] 350 | if bittwiddler_field_attrs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bittwiddler_field_attrs.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:368:16 [INFO] [stderr] | [INFO] [stderr] 368 | if bittwiddler_field_attrs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bittwiddler_field_attrs.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:399:44 [INFO] [stderr] | [INFO] [stderr] 399 | if errtype_tmp.starts_with("'") { [INFO] [stderr] | ^^^ help: try using a char instead: `'''` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:400:47 [INFO] [stderr] | [INFO] [stderr] 400 | if !errtype_tmp.ends_with("'") { [INFO] [stderr] | ^^^ help: try using a char instead: `'''` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:426:16 [INFO] [stderr] | [INFO] [stderr] 426 | if field_locs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `field_locs.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `bittwiddler`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "d7b19322f6baa248c1c921087b5fe41842e193b75a9750e16b70c2f0e916a3b4"` [INFO] running `"docker" "rm" "-f" "d7b19322f6baa248c1c921087b5fe41842e193b75a9750e16b70c2f0e916a3b4"` [INFO] [stdout] d7b19322f6baa248c1c921087b5fe41842e193b75a9750e16b70c2f0e916a3b4