[INFO] crate bit_manager_derive 0.1.1 is already in cache [INFO] extracting crate bit_manager_derive 0.1.1 into work/ex/clippy-test-run/sources/stable/reg/bit_manager_derive/0.1.1 [INFO] extracting crate bit_manager_derive 0.1.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/bit_manager_derive/0.1.1 [INFO] validating manifest of bit_manager_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 bit_manager_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 bit_manager_derive-0.1.1 [INFO] finished frobbing bit_manager_derive-0.1.1 [INFO] frobbed toml for bit_manager_derive-0.1.1 written to work/ex/clippy-test-run/sources/stable/reg/bit_manager_derive/0.1.1/Cargo.toml [INFO] started frobbing bit_manager_derive-0.1.1 [INFO] finished frobbing bit_manager_derive-0.1.1 [INFO] frobbed toml for bit_manager_derive-0.1.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/bit_manager_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 bit_manager_derive-0.1.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-0/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/bit_manager_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 -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] fe7fe90886741366547e2015a08ad5a88d91e03f143975cdae5c68f45ca45e62 [INFO] running `"docker" "start" "-a" "fe7fe90886741366547e2015a08ad5a88d91e03f143975cdae5c68f45ca45e62"` [INFO] [stderr] Checking bit_manager v0.5.3 [INFO] [stderr] Checking bit_manager_derive v0.1.1 (/opt/crater/workdir) [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:120:17 [INFO] [stderr] | [INFO] [stderr] 120 | / if let &syn::MetaItem::List(_, ref list) = &attr.value { [INFO] [stderr] 121 | | for item in list { [INFO] [stderr] 122 | | if let &syn::NestedMetaItem::MetaItem(ref meta) = item { [INFO] [stderr] 123 | | match meta { [INFO] [stderr] ... | [INFO] [stderr] 156 | | } [INFO] [stderr] 157 | | } [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] 120 | if let syn::MetaItem::List(_, ref list) = attr.value { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:122:25 [INFO] [stderr] | [INFO] [stderr] 122 | / if let &syn::NestedMetaItem::MetaItem(ref meta) = item { [INFO] [stderr] 123 | | match meta { [INFO] [stderr] 124 | | &syn::MetaItem::Word(_) => { [INFO] [stderr] 125 | | match meta.name() { [INFO] [stderr] ... | [INFO] [stderr] 154 | | } [INFO] [stderr] 155 | | } [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] 122 | if let syn::NestedMetaItem::MetaItem(ref meta) = *item { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:123:29 [INFO] [stderr] | [INFO] [stderr] 123 | / match meta { [INFO] [stderr] 124 | | &syn::MetaItem::Word(_) => { [INFO] [stderr] 125 | | match meta.name() { [INFO] [stderr] 126 | | "align_enum" => attributes.align_enum = 8, [INFO] [stderr] ... | [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | } [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] 123 | match *meta { [INFO] [stderr] 124 | syn::MetaItem::Word(_) => { [INFO] [stderr] 125 | match meta.name() { [INFO] [stderr] 126 | "align_enum" => attributes.align_enum = 8, [INFO] [stderr] 127 | "verbose" => attributes.verbose = true, [INFO] [stderr] 128 | tag => panic!("unknown bit tag: {}", tag), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:133:81 [INFO] [stderr] | [INFO] [stderr] 133 | "align_enum" => attributes.align_enum = match literal { [INFO] [stderr] | _________________________________________________________________________________^ [INFO] [stderr] 134 | | &syn::Lit::Str(ref string, _) => { [INFO] [stderr] 135 | | let n = string.parse().expect("invalid index number"); [INFO] [stderr] 136 | | if n > 32 { [INFO] [stderr] ... | [INFO] [stderr] 141 | | _ => panic!("the align_enum tag only takes a string with a number") [INFO] [stderr] 142 | | }, [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] 133 | "align_enum" => attributes.align_enum = match *literal { [INFO] [stderr] 134 | syn::Lit::Str(ref string, _) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:200:5 [INFO] [stderr] | [INFO] [stderr] 200 | / match body { [INFO] [stderr] 201 | | &syn::Body::Struct(ref data) => { [INFO] [stderr] 202 | | if attributes.align_enum > 0 { [INFO] [stderr] 203 | | panic!("struct fields cannot be aligned with #[bit(align_enum)]"); [INFO] [stderr] ... | [INFO] [stderr] 222 | | }, [INFO] [stderr] 223 | | } [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] 200 | match *body { [INFO] [stderr] 201 | syn::Body::Struct(ref data) => { [INFO] [stderr] 202 | if attributes.align_enum > 0 { [INFO] [stderr] 203 | panic!("struct fields cannot be aligned with #[bit(align_enum)]"); [INFO] [stderr] 204 | } [INFO] [stderr] 205 | if let &syn::VariantData::Struct(ref fields) = data { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:205:13 [INFO] [stderr] | [INFO] [stderr] 205 | / if let &syn::VariantData::Struct(ref fields) = data { [INFO] [stderr] 206 | | parse_struct_impl(name, fields) [INFO] [stderr] 207 | | } else if let &syn::VariantData::Tuple(ref fields) = data { [INFO] [stderr] 208 | | parse_tuple_struct_impl(name, fields) [INFO] [stderr] ... | [INFO] [stderr] 217 | | } [INFO] [stderr] 218 | | } [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] 205 | if let syn::VariantData::Struct(ref fields) = *data { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:207:20 [INFO] [stderr] | [INFO] [stderr] 207 | } else if let &syn::VariantData::Tuple(ref fields) = data { [INFO] [stderr] | ____________________^ [INFO] [stderr] 208 | | parse_tuple_struct_impl(name, fields) [INFO] [stderr] 209 | | } else { [INFO] [stderr] 210 | | quote! { [INFO] [stderr] ... | [INFO] [stderr] 217 | | } [INFO] [stderr] 218 | | } [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] 207 | } else if let syn::VariantData::Tuple(ref fields) = *data { [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:226:49 [INFO] [stderr] | [INFO] [stderr] 226 | fn parse_enum_impl(name: &syn::Ident, variants: &Vec, attributes: &BitAttribute) -> quote::Tokens { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::Variant]` [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: length comparison to zero [INFO] [stderr] --> src/lib.rs:227:13 [INFO] [stderr] | [INFO] [stderr] 227 | assert!(variants.len() > 0, "enum {} has too few variants to store", name); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!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] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:228:38 [INFO] [stderr] | [INFO] [stderr] 228 | assert!(variants.len() as u64 <= (u32::max_value() as u64) + 1, "enum {} has too many variants to store", name); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(u32::max_value())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in variants.enumerate()` or similar iterators [INFO] [stderr] --> src/lib.rs:236:20 [INFO] [stderr] | [INFO] [stderr] 236 | for variant in variants { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:237:22 [INFO] [stderr] | [INFO] [stderr] 237 | let (r, w) = match &variant.data { [INFO] [stderr] | ______________________^ [INFO] [stderr] 238 | | &syn::VariantData::Struct(_) => parse_enum_struct_variant(&i, name, variant), [INFO] [stderr] 239 | | &syn::VariantData::Tuple(_) => parse_enum_tuple_variant(&i, name, variant), [INFO] [stderr] 240 | | &syn::VariantData::Unit => parse_enum_unit_variant(&i, name, variant), [INFO] [stderr] 241 | | }; [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] 237 | let (r, w) = match variant.data { [INFO] [stderr] 238 | syn::VariantData::Struct(_) => parse_enum_struct_variant(&i, name, variant), [INFO] [stderr] 239 | syn::VariantData::Tuple(_) => parse_enum_tuple_variant(&i, name, variant), [INFO] [stderr] 240 | syn::VariantData::Unit => parse_enum_unit_variant(&i, name, variant), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:271:33 [INFO] [stderr] | [INFO] [stderr] 271 | fn parse_enum_struct_variant(n: &u32, name: &syn::Ident, variant: &syn::Variant) -> (quote::Tokens, quote::Tokens) { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `u32` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:275:9 [INFO] [stderr] | [INFO] [stderr] 275 | / if let &Some(ref ident) = &field.ident { [INFO] [stderr] 276 | | access.push(quote! { #ident }); [INFO] [stderr] 277 | | } else { [INFO] [stderr] 278 | | unreachable!(); [INFO] [stderr] 279 | | } [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] 275 | if let Some(ref ident) = field.ident { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:305:32 [INFO] [stderr] | [INFO] [stderr] 305 | fn parse_enum_tuple_variant(n: &u32, name: &syn::Ident, variant: &syn::Variant) -> (quote::Tokens, quote::Tokens) { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `u32` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in fields.enumerate()` or similar iterators [INFO] [stderr] --> src/lib.rs:310:14 [INFO] [stderr] | [INFO] [stderr] 310 | for _ in fields { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:336:31 [INFO] [stderr] | [INFO] [stderr] 336 | fn parse_enum_unit_variant(n: &u32, name: &syn::Ident, variant: &syn::Variant) -> (quote::Tokens, quote::Tokens) { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `u32` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:120:17 [INFO] [stderr] | [INFO] [stderr] 120 | / if let &syn::MetaItem::List(_, ref list) = &attr.value { [INFO] [stderr] 121 | | for item in list { [INFO] [stderr] 122 | | if let &syn::NestedMetaItem::MetaItem(ref meta) = item { [INFO] [stderr] 123 | | match meta { [INFO] [stderr] ... | [INFO] [stderr] 156 | | } [INFO] [stderr] 157 | | } [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] 120 | if let syn::MetaItem::List(_, ref list) = attr.value { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:122:25 [INFO] [stderr] | [INFO] [stderr] 122 | / if let &syn::NestedMetaItem::MetaItem(ref meta) = item { [INFO] [stderr] 123 | | match meta { [INFO] [stderr] 124 | | &syn::MetaItem::Word(_) => { [INFO] [stderr] 125 | | match meta.name() { [INFO] [stderr] ... | [INFO] [stderr] 154 | | } [INFO] [stderr] 155 | | } [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] 122 | if let syn::NestedMetaItem::MetaItem(ref meta) = *item { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:123:29 [INFO] [stderr] | [INFO] [stderr] 123 | / match meta { [INFO] [stderr] 124 | | &syn::MetaItem::Word(_) => { [INFO] [stderr] 125 | | match meta.name() { [INFO] [stderr] 126 | | "align_enum" => attributes.align_enum = 8, [INFO] [stderr] ... | [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | } [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] 123 | match *meta { [INFO] [stderr] 124 | syn::MetaItem::Word(_) => { [INFO] [stderr] 125 | match meta.name() { [INFO] [stderr] 126 | "align_enum" => attributes.align_enum = 8, [INFO] [stderr] 127 | "verbose" => attributes.verbose = true, [INFO] [stderr] 128 | tag => panic!("unknown bit tag: {}", tag), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:133:81 [INFO] [stderr] | [INFO] [stderr] 133 | "align_enum" => attributes.align_enum = match literal { [INFO] [stderr] | _________________________________________________________________________________^ [INFO] [stderr] 134 | | &syn::Lit::Str(ref string, _) => { [INFO] [stderr] 135 | | let n = string.parse().expect("invalid index number"); [INFO] [stderr] 136 | | if n > 32 { [INFO] [stderr] ... | [INFO] [stderr] 141 | | _ => panic!("the align_enum tag only takes a string with a number") [INFO] [stderr] 142 | | }, [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] 133 | "align_enum" => attributes.align_enum = match *literal { [INFO] [stderr] 134 | syn::Lit::Str(ref string, _) => { [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:353:9 [INFO] [stderr] | [INFO] [stderr] 353 | / if let &Some(ref ident) = &field.ident { [INFO] [stderr] 354 | | access.push(quote! { #ident }); [INFO] [stderr] 355 | | } else { [INFO] [stderr] 356 | | unreachable!(); [INFO] [stderr] 357 | | } [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] 353 | if let Some(ref ident) = field.ident { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:200:5 [INFO] [stderr] | [INFO] [stderr] 200 | / match body { [INFO] [stderr] 201 | | &syn::Body::Struct(ref data) => { [INFO] [stderr] 202 | | if attributes.align_enum > 0 { [INFO] [stderr] 203 | | panic!("struct fields cannot be aligned with #[bit(align_enum)]"); [INFO] [stderr] ... | [INFO] [stderr] 222 | | }, [INFO] [stderr] 223 | | } [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] 200 | match *body { [INFO] [stderr] 201 | syn::Body::Struct(ref data) => { [INFO] [stderr] 202 | if attributes.align_enum > 0 { [INFO] [stderr] 203 | panic!("struct fields cannot be aligned with #[bit(align_enum)]"); [INFO] [stderr] 204 | } [INFO] [stderr] 205 | if let &syn::VariantData::Struct(ref fields) = data { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:205:13 [INFO] [stderr] | [INFO] [stderr] 205 | / if let &syn::VariantData::Struct(ref fields) = data { [INFO] [stderr] 206 | | parse_struct_impl(name, fields) [INFO] [stderr] 207 | | } else if let &syn::VariantData::Tuple(ref fields) = data { [INFO] [stderr] 208 | | parse_tuple_struct_impl(name, fields) [INFO] [stderr] ... | [INFO] [stderr] 217 | | } [INFO] [stderr] 218 | | } [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] 205 | if let syn::VariantData::Struct(ref fields) = *data { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:207:20 [INFO] [stderr] | [INFO] [stderr] 207 | } else if let &syn::VariantData::Tuple(ref fields) = data { [INFO] [stderr] | ____________________^ [INFO] [stderr] 208 | | parse_tuple_struct_impl(name, fields) [INFO] [stderr] 209 | | } else { [INFO] [stderr] 210 | | quote! { [INFO] [stderr] ... | [INFO] [stderr] 217 | | } [INFO] [stderr] 218 | | } [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] 207 | } else if let syn::VariantData::Tuple(ref fields) = *data { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in fields.enumerate()` or similar iterators [INFO] [stderr] --> src/lib.rs:384:14 [INFO] [stderr] | [INFO] [stderr] 384 | for _ in fields { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/lib.rs:226:49 [INFO] [stderr] | [INFO] [stderr] 226 | fn parse_enum_impl(name: &syn::Ident, variants: &Vec, attributes: &BitAttribute) -> quote::Tokens { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::Variant]` [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: length comparison to zero [INFO] [stderr] --> src/lib.rs:227:13 [INFO] [stderr] | [INFO] [stderr] 227 | assert!(variants.len() > 0, "enum {} has too few variants to store", name); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!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] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/lib.rs:228:38 [INFO] [stderr] | [INFO] [stderr] 228 | assert!(variants.len() as u64 <= (u32::max_value() as u64) + 1, "enum {} has too many variants to store", name); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(u32::max_value())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in variants.enumerate()` or similar iterators [INFO] [stderr] --> src/lib.rs:236:20 [INFO] [stderr] | [INFO] [stderr] 236 | for variant in variants { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:237:22 [INFO] [stderr] | [INFO] [stderr] 237 | let (r, w) = match &variant.data { [INFO] [stderr] | ______________________^ [INFO] [stderr] 238 | | &syn::VariantData::Struct(_) => parse_enum_struct_variant(&i, name, variant), [INFO] [stderr] 239 | | &syn::VariantData::Tuple(_) => parse_enum_tuple_variant(&i, name, variant), [INFO] [stderr] 240 | | &syn::VariantData::Unit => parse_enum_unit_variant(&i, name, variant), [INFO] [stderr] 241 | | }; [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] 237 | let (r, w) = match variant.data { [INFO] [stderr] 238 | syn::VariantData::Struct(_) => parse_enum_struct_variant(&i, name, variant), [INFO] [stderr] 239 | syn::VariantData::Tuple(_) => parse_enum_tuple_variant(&i, name, variant), [INFO] [stderr] 240 | syn::VariantData::Unit => parse_enum_unit_variant(&i, name, variant), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:271:33 [INFO] [stderr] | [INFO] [stderr] 271 | fn parse_enum_struct_variant(n: &u32, name: &syn::Ident, variant: &syn::Variant) -> (quote::Tokens, quote::Tokens) { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `u32` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:275:9 [INFO] [stderr] | [INFO] [stderr] 275 | / if let &Some(ref ident) = &field.ident { [INFO] [stderr] 276 | | access.push(quote! { #ident }); [INFO] [stderr] 277 | | } else { [INFO] [stderr] 278 | | unreachable!(); [INFO] [stderr] 279 | | } [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] 275 | if let Some(ref ident) = field.ident { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:305:32 [INFO] [stderr] | [INFO] [stderr] 305 | fn parse_enum_tuple_variant(n: &u32, name: &syn::Ident, variant: &syn::Variant) -> (quote::Tokens, quote::Tokens) { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `u32` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in fields.enumerate()` or similar iterators [INFO] [stderr] --> src/lib.rs:310:14 [INFO] [stderr] | [INFO] [stderr] 310 | for _ in fields { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:336:31 [INFO] [stderr] | [INFO] [stderr] 336 | fn parse_enum_unit_variant(n: &u32, name: &syn::Ident, variant: &syn::Variant) -> (quote::Tokens, quote::Tokens) { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `u32` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/lib.rs:353:9 [INFO] [stderr] | [INFO] [stderr] 353 | / if let &Some(ref ident) = &field.ident { [INFO] [stderr] 354 | | access.push(quote! { #ident }); [INFO] [stderr] 355 | | } else { [INFO] [stderr] 356 | | unreachable!(); [INFO] [stderr] 357 | | } [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] 353 | if let Some(ref ident) = field.ident { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in fields.enumerate()` or similar iterators [INFO] [stderr] --> src/lib.rs:384:14 [INFO] [stderr] | [INFO] [stderr] 384 | for _ in fields { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 4.29s [INFO] running `"docker" "inspect" "fe7fe90886741366547e2015a08ad5a88d91e03f143975cdae5c68f45ca45e62"` [INFO] running `"docker" "rm" "-f" "fe7fe90886741366547e2015a08ad5a88d91e03f143975cdae5c68f45ca45e62"` [INFO] [stdout] fe7fe90886741366547e2015a08ad5a88d91e03f143975cdae5c68f45ca45e62