[INFO] crate packed_struct_codegen 0.3.0 is already in cache [INFO] extracting crate packed_struct_codegen 0.3.0 into work/ex/clippy-test-run/sources/stable/reg/packed_struct_codegen/0.3.0 [INFO] extracting crate packed_struct_codegen 0.3.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/packed_struct_codegen/0.3.0 [INFO] validating manifest of packed_struct_codegen-0.3.0 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 packed_struct_codegen-0.3.0 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 packed_struct_codegen-0.3.0 [INFO] finished frobbing packed_struct_codegen-0.3.0 [INFO] frobbed toml for packed_struct_codegen-0.3.0 written to work/ex/clippy-test-run/sources/stable/reg/packed_struct_codegen/0.3.0/Cargo.toml [INFO] started frobbing packed_struct_codegen-0.3.0 [INFO] finished frobbing packed_struct_codegen-0.3.0 [INFO] frobbed toml for packed_struct_codegen-0.3.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/packed_struct_codegen/0.3.0/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 packed_struct_codegen-0.3.0 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/packed_struct_codegen/0.3.0:/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] fe51a07f7886a97eda30910a8c966959a2dfd0cde1e01ff6b52745b605b51bab [INFO] running `"docker" "start" "-a" "fe51a07f7886a97eda30910a8c966959a2dfd0cde1e01ff6b52745b605b51bab"` [INFO] [stderr] Compiling serde v1.0.85 [INFO] [stderr] Compiling packed_struct v0.3.0 [INFO] [stderr] Checking packed_struct_codegen v0.3.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pack_parse.rs:171:9 [INFO] [stderr] | [INFO] [stderr] 171 | bit_width: bit_width, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bit_width` [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/pack_parse.rs:172:9 [INFO] [stderr] | [INFO] [stderr] 172 | bits_position: bits_position [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bits_position` [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/pack_parse.rs:216:29 [INFO] [stderr] | [INFO] [stderr] 216 | elements: elements [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `elements` [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/pack_parse.rs:298:9 [INFO] [stderr] | [INFO] [stderr] 298 | bit_width: bit_width, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bit_width` [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/pack_parse.rs:466:9 [INFO] [stderr] | [INFO] [stderr] 466 | num_bytes: num_bytes, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `num_bytes` [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/pack_parse.rs:467:9 [INFO] [stderr] | [INFO] [stderr] 467 | num_bits: num_bits [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `num_bits` [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/primitive_enum.rs:260:21 [INFO] [stderr] | [INFO] [stderr] 260 | discriminant: discriminant, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `discriminant` [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/primitive_enum.rs:261:21 [INFO] [stderr] | [INFO] [stderr] 261 | negative: negative, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `negative` [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/primitive_enum.rs:262:21 [INFO] [stderr] | [INFO] [stderr] 262 | int_ty: int_ty [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `int_ty` [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/pack_parse.rs:171:9 [INFO] [stderr] | [INFO] [stderr] 171 | bit_width: bit_width, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bit_width` [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/pack_parse.rs:172:9 [INFO] [stderr] | [INFO] [stderr] 172 | bits_position: bits_position [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bits_position` [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/pack_parse.rs:216:29 [INFO] [stderr] | [INFO] [stderr] 216 | elements: elements [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `elements` [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/pack_parse.rs:298:9 [INFO] [stderr] | [INFO] [stderr] 298 | bit_width: bit_width, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bit_width` [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/pack_parse.rs:466:9 [INFO] [stderr] | [INFO] [stderr] 466 | num_bytes: num_bytes, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `num_bytes` [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/pack_parse.rs:467:9 [INFO] [stderr] | [INFO] [stderr] 467 | num_bits: num_bits [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `num_bits` [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/primitive_enum.rs:260:21 [INFO] [stderr] | [INFO] [stderr] 260 | discriminant: discriminant, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `discriminant` [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/primitive_enum.rs:261:21 [INFO] [stderr] | [INFO] [stderr] 261 | negative: negative, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `negative` [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/primitive_enum.rs:262:21 [INFO] [stderr] | [INFO] [stderr] 262 | int_ty: int_ty [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `int_ty` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/pack_parse.rs:426:13 [INFO] [stderr] | [INFO] [stderr] 426 | last_bit [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/pack_parse.rs:422:28 [INFO] [stderr] | [INFO] [stderr] 422 | let last_bit = fields_parsed.iter().map(|f| match f { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 423 | | &FieldKind::Regular { ref field, .. } => field.bit_range_rust.end, [INFO] [stderr] 424 | | &FieldKind::Array { ref elements, .. } => elements.last().unwrap().bit_range_rust.end [INFO] [stderr] 425 | | }).max().unwrap(); [INFO] [stderr] | |_____________________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/primitive_enum.rs:60:20 [INFO] [stderr] | [INFO] [stderr] 60 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 61 | | if d.negative { [INFO] [stderr] 62 | | let n = d.discriminant as i64; [INFO] [stderr] 63 | | if n < ::min_value() as i64 { [INFO] [stderr] ... | [INFO] [stderr] 86 | | } [INFO] [stderr] 87 | | } [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] 60 | } else if d.negative { [INFO] [stderr] 61 | let n = d.discriminant as i64; [INFO] [stderr] 62 | if n < ::min_value() as i64 { [INFO] [stderr] 63 | syn::IntTy::I64 [INFO] [stderr] 64 | } else { [INFO] [stderr] 65 | let n = -n; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:33:14 [INFO] [stderr] | [INFO] [stderr] 33 | 0 => 0b00000000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:34:14 [INFO] [stderr] | [INFO] [stderr] 34 | 1 => 0b00000001, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:35:14 [INFO] [stderr] | [INFO] [stderr] 35 | 2 => 0b00000011, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0011` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | 3 => 0b00000111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:37:14 [INFO] [stderr] | [INFO] [stderr] 37 | 4 => 0b00001111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:38:14 [INFO] [stderr] | [INFO] [stderr] 38 | 5 => 0b00011111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:39:14 [INFO] [stderr] | [INFO] [stderr] 39 | 6 => 0b00111111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0011_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:40:14 [INFO] [stderr] | [INFO] [stderr] 40 | 7 => 0b01111111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0111_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:41:14 [INFO] [stderr] | [INFO] [stderr] 41 | _ => 0b11111111 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1111_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/pack_parse.rs:426:13 [INFO] [stderr] | [INFO] [stderr] 426 | last_bit [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/pack_parse.rs:422:28 [INFO] [stderr] | [INFO] [stderr] 422 | let last_bit = fields_parsed.iter().map(|f| match f { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 423 | | &FieldKind::Regular { ref field, .. } => field.bit_range_rust.end, [INFO] [stderr] 424 | | &FieldKind::Array { ref elements, .. } => elements.last().unwrap().bit_range_rust.end [INFO] [stderr] 425 | | }).max().unwrap(); [INFO] [stderr] | |_____________________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/primitive_enum.rs:60:20 [INFO] [stderr] | [INFO] [stderr] 60 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 61 | | if d.negative { [INFO] [stderr] 62 | | let n = d.discriminant as i64; [INFO] [stderr] 63 | | if n < ::min_value() as i64 { [INFO] [stderr] ... | [INFO] [stderr] 86 | | } [INFO] [stderr] 87 | | } [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] 60 | } else if d.negative { [INFO] [stderr] 61 | let n = d.discriminant as i64; [INFO] [stderr] 62 | if n < ::min_value() as i64 { [INFO] [stderr] 63 | syn::IntTy::I64 [INFO] [stderr] 64 | } else { [INFO] [stderr] 65 | let n = -n; [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:33:14 [INFO] [stderr] | [INFO] [stderr] 33 | 0 => 0b00000000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:34:14 [INFO] [stderr] | [INFO] [stderr] 34 | 1 => 0b00000001, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:35:14 [INFO] [stderr] | [INFO] [stderr] 35 | 2 => 0b00000011, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0011` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:36:14 [INFO] [stderr] | [INFO] [stderr] 36 | 3 => 0b00000111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:37:14 [INFO] [stderr] | [INFO] [stderr] 37 | 4 => 0b00001111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:38:14 [INFO] [stderr] | [INFO] [stderr] 38 | 5 => 0b00011111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:39:14 [INFO] [stderr] | [INFO] [stderr] 39 | 6 => 0b00111111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0011_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:40:14 [INFO] [stderr] | [INFO] [stderr] 40 | 7 => 0b01111111, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0111_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/utils.rs:41:14 [INFO] [stderr] | [INFO] [stderr] 41 | _ => 0b11111111 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1111_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_codegen.rs:57:13 [INFO] [stderr] | [INFO] [stderr] 57 | / match field { [INFO] [stderr] 58 | | &FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 59 | | reg(ident, ident, field); [INFO] [stderr] 60 | | [INFO] [stderr] ... | [INFO] [stderr] 79 | | } [INFO] [stderr] 80 | | } [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] 57 | match *field { [INFO] [stderr] 58 | FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 59 | reg(ident, ident, field); [INFO] [stderr] 60 | [INFO] [stderr] 61 | unpack_struct_set.push(quote! { [INFO] [stderr] 62 | #ident: #ident [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_codegen.rs:293:9 [INFO] [stderr] | [INFO] [stderr] 293 | / match wrapper { [INFO] [stderr] 294 | | &SerializationWrapper::PrimitiveEnumWrapper => { [INFO] [stderr] 295 | | output = quote! { [INFO] [stderr] 296 | | { [INFO] [stderr] ... | [INFO] [stderr] 325 | | } [INFO] [stderr] 326 | | } [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] 293 | match *wrapper { [INFO] [stderr] 294 | SerializationWrapper::PrimitiveEnumWrapper => { [INFO] [stderr] 295 | output = quote! { [INFO] [stderr] 296 | { [INFO] [stderr] 297 | use ::packed_struct::PrimitiveEnum; [INFO] [stderr] 298 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/pack_codegen.rs:394:12 [INFO] [stderr] | [INFO] [stderr] 394 | if wrappers.len() == 0 || i > wrappers.len() - 1 { break; } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `wrappers.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_codegen_docs.rs:27:9 [INFO] [stderr] | [INFO] [stderr] 27 | / match field { [INFO] [stderr] 28 | | &FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 29 | | let ref name_str = ident.as_ref().to_string(); [INFO] [stderr] 30 | | let bits = syn::parse_expr(&format!("{}..{}", field.bit_range.start, field.bit_range.end)).unwrap(); [INFO] [stderr] ... | [INFO] [stderr] 54 | | } [INFO] [stderr] 55 | | } [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] 27 | match *field { [INFO] [stderr] 28 | FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 29 | let ref name_str = ident.as_ref().to_string(); [INFO] [stderr] 30 | let bits = syn::parse_expr(&format!("{}..{}", field.bit_range.start, field.bit_range.end)).unwrap(); [INFO] [stderr] 31 | [INFO] [stderr] 32 | debug_fields.push(quote! { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/pack_codegen_docs.rs:29:21 [INFO] [stderr] | [INFO] [stderr] 29 | let ref name_str = ident.as_ref().to_string(); [INFO] [stderr] | ----^^^^^^^^^^^^------------------------------ help: try: `let name_str = &ident.as_ref().to_string();` [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] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_codegen_docs.rs:126:13 [INFO] [stderr] | [INFO] [stderr] 126 | / match field { [INFO] [stderr] 127 | | &FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 128 | | emit_field_docs(&field.bit_range, ident.as_ref().to_string(), &field.ty); [INFO] [stderr] 129 | | }, [INFO] [stderr] ... | [INFO] [stderr] 134 | | } [INFO] [stderr] 135 | | } [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] 126 | match *field { [INFO] [stderr] 127 | FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 128 | emit_field_docs(&field.bit_range, ident.as_ref().to_string(), &field.ty); [INFO] [stderr] 129 | }, [INFO] [stderr] 130 | FieldKind::Array { ref ident, ref elements, .. } => { [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/pack_parse.rs:11:41 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn parse_sub_attributes(attributes: &Vec, main_attribute: &str) -> Vec<(String, String)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::Attribute]` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | / if let &syn::Attribute { value: syn::MetaItem::List(ref ident, ref list), .. } = attr { [INFO] [stderr] 16 | | if ident.as_ref() != main_attribute { continue; } [INFO] [stderr] 17 | | [INFO] [stderr] 18 | | for item in list { [INFO] [stderr] ... | [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [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] 15 | if let syn::Attribute { value: syn::MetaItem::List(ref ident, ref list), .. } = *attr { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:19:17 [INFO] [stderr] | [INFO] [stderr] 19 | / if let &syn::NestedMetaItem::MetaItem(syn::MetaItem::NameValue(ref ident, ref lit)) = item { [INFO] [stderr] 20 | | let n = ident.as_ref(); [INFO] [stderr] 21 | | [INFO] [stderr] 22 | | if let &syn::Lit::Str(ref v, _) = lit { [INFO] [stderr] 23 | | r.push((n.to_string(), v.to_string())); [INFO] [stderr] 24 | | } [INFO] [stderr] 25 | | } [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] 19 | if let syn::NestedMetaItem::MetaItem(syn::MetaItem::NameValue(ref ident, ref lit)) = *item { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:22:21 [INFO] [stderr] | [INFO] [stderr] 22 | / if let &syn::Lit::Str(ref v, _) = lit { [INFO] [stderr] 23 | | r.push((n.to_string(), v.to_string())); [INFO] [stderr] 24 | | } [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] 22 | if let syn::Lit::Str(ref v, _) = *lit { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/pack_parse.rs:115:21 [INFO] [stderr] | [INFO] [stderr] 115 | let ref segment = segments[0]; [INFO] [stderr] | ----^^^^^^^^^^^--------------- help: try: `let segment = &segments[0];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:127:21 [INFO] [stderr] | [INFO] [stderr] 127 | / if let &syn::ConstExpr::Lit(syn::Lit::Int(size, _)) = size { [INFO] [stderr] 128 | | let ref segment = segments[0]; [INFO] [stderr] 129 | | bit_width_builtin = get_builtin_type_bit_width(segment); [INFO] [stderr] 130 | | array_size = size as usize; [INFO] [stderr] ... | [INFO] [stderr] 136 | | panic!("unsupported array size: {:?}", size); [INFO] [stderr] 137 | | } [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] 127 | if let syn::ConstExpr::Lit(syn::Lit::Int(size, _)) = *size { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/pack_parse.rs:128:29 [INFO] [stderr] | [INFO] [stderr] 128 | let ref segment = segments[0]; [INFO] [stderr] | ----^^^^^^^^^^^--------------- help: try: `let segment = &segments[0];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:151:64 [INFO] [stderr] | [INFO] [stderr] 151 | let bits_position = field_attributes.iter().filter_map(|a| match a { [INFO] [stderr] | ________________________________________________________________^ [INFO] [stderr] 152 | | &PackFieldAttribute::BitPosition(b) | &PackFieldAttribute::BytePosition(b) => Some(b), [INFO] [stderr] 153 | | _ => None [INFO] [stderr] 154 | | }).next().unwrap_or(BitsPositionParsed::Next); [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] 151 | let bits_position = field_attributes.iter().filter_map(|a| match *a { [INFO] [stderr] 152 | PackFieldAttribute::BitPosition(b) | PackFieldAttribute::BytePosition(b) => Some(b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:156:80 [INFO] [stderr] | [INFO] [stderr] 156 | let bit_width = if let Some(bits) = field_attributes.iter().filter_map(|a| if let &PackFieldAttribute::SizeBits(bits) = a { Some(bits) } else { None }).next() { [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] 156 | let bit_width = if let Some(bits) = field_attributes.iter().filter_map(|a| if let PackFieldAttribute::SizeBits(bits) = *a { Some(bits) } else { None }).next() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:159:71 [INFO] [stderr] | [INFO] [stderr] 159 | } else if let Some(bits) = field_attributes.iter().filter_map(|a| if let &PackFieldAttribute::ElementSizeBits(bits) = a { Some(bits) } else { None }).next() { [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] 159 | } else if let Some(bits) = field_attributes.iter().filter_map(|a| if let PackFieldAttribute::ElementSizeBits(bits) = *a { Some(bits) } else { None }).next() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:197:21 [INFO] [stderr] | [INFO] [stderr] 197 | / if let &syn::ConstExpr::Lit(syn::Lit::Int(size, _)) = size { [INFO] [stderr] 198 | | let ty = syn::parse_type(&syn_to_string(&segments[0])).expect("error parsing path segment to ty"); [INFO] [stderr] 199 | | [INFO] [stderr] 200 | | let element_size_bits: usize = mp.bit_width as usize / size as usize; [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] 197 | if let syn::ConstExpr::Lit(syn::Lit::Int(size, _)) = *size { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:235:61 [INFO] [stderr] | [INFO] [stderr] 235 | let is_enum_ty = field_attributes.iter().filter_map(|a| match a { [INFO] [stderr] | _____________________________________________________________^ [INFO] [stderr] 236 | | &PackFieldAttribute::Ty(TyKind::Enum) => Some(()), [INFO] [stderr] 237 | | _ => None [INFO] [stderr] 238 | | }).next().is_some(); [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] 235 | let is_enum_ty = field_attributes.iter().filter_map(|a| match *a { [INFO] [stderr] 236 | PackFieldAttribute::Ty(TyKind::Enum) => Some(()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/pack_parse.rs:265:9 [INFO] [stderr] | [INFO] [stderr] 265 | / let mut endiannes = if let Some(endiannes) = field_attributes [INFO] [stderr] 266 | | .iter() [INFO] [stderr] 267 | | .filter_map(|a| if let &PackFieldAttribute::IntEndiannes(endiannes) = a { [INFO] [stderr] 268 | | Some(endiannes) [INFO] [stderr] ... | [INFO] [stderr] 279 | | endiannes = Some(IntegerEndianness::Msb); [INFO] [stderr] 280 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 265 | let endiannes = if bit_width <= 8 { Some(IntegerEndianness::Msb) } else { if let Some(endiannes) = field_attributes [INFO] [stderr] 266 | .iter() [INFO] [stderr] 267 | .filter_map(|a| if let &PackFieldAttribute::IntEndiannes(endiannes) = a { [INFO] [stderr] 268 | Some(endiannes) [INFO] [stderr] 269 | } else { [INFO] [stderr] 270 | None [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:267:29 [INFO] [stderr] | [INFO] [stderr] 267 | .filter_map(|a| if let &PackFieldAttribute::IntEndiannes(endiannes) = a { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 268 | | Some(endiannes) [INFO] [stderr] 269 | | } else { [INFO] [stderr] 270 | | None [INFO] [stderr] 271 | | }).next() [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] 267 | .filter_map(|a| if let PackFieldAttribute::IntEndiannes(endiannes) = *a { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/pack_parse.rs:300:25 [INFO] [stderr] | [INFO] [stderr] 300 | bit_range_rust: bit_range.start..(bit_range.end + 1) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `bit_range.start..=bit_range.end` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/pack_parse.rs:333:44 [INFO] [stderr] | [INFO] [stderr] 333 | usize::from_str_radix(&s[2..], 16).expect(&format!("Invalid hex number: {:?}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Invalid hex number: {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/pack_parse.rs:335:19 [INFO] [stderr] | [INFO] [stderr] 335 | s.parse().expect(&format!("Invalid decimal number: {:?}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Invalid decimal number: {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/pack_parse.rs:351:8 [INFO] [stderr] | [INFO] [stderr] 351 | if ast.generics.ty_params.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ast.generics.ty_params.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:356:42 [INFO] [stderr] | [INFO] [stderr] 356 | attributes.iter().filter_map(|a| match a { [INFO] [stderr] | __________________________________________^ [INFO] [stderr] 357 | | &PackStructAttribute::BitNumbering(b) => Some(b), [INFO] [stderr] 358 | | _ => None [INFO] [stderr] 359 | | }).next() [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] 356 | attributes.iter().filter_map(|a| match *a { [INFO] [stderr] 357 | PackStructAttribute::BitNumbering(b) => Some(b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:362:67 [INFO] [stderr] | [INFO] [stderr] 362 | let default_int_endianness = attributes.iter().filter_map(|a| match a { [INFO] [stderr] | ___________________________________________________________________^ [INFO] [stderr] 363 | | &PackStructAttribute::DefaultIntEndianness(i) => Some(i), [INFO] [stderr] 364 | | _ => None [INFO] [stderr] 365 | | }).next(); [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] 362 | let default_int_endianness = attributes.iter().filter_map(|a| match *a { [INFO] [stderr] 363 | PackStructAttribute::DefaultIntEndianness(i) => Some(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:368:9 [INFO] [stderr] | [INFO] [stderr] 368 | / if let &PackStructAttribute::SizeBytes(size_bytes) = a { [INFO] [stderr] 369 | | Some(size_bytes) [INFO] [stderr] 370 | | } else { [INFO] [stderr] 371 | | None [INFO] [stderr] 372 | | }}).next(); [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] 368 | if let PackStructAttribute::SizeBytes(size_bytes) = *a { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:422:57 [INFO] [stderr] | [INFO] [stderr] 422 | let last_bit = fields_parsed.iter().map(|f| match f { [INFO] [stderr] | _________________________________________________________^ [INFO] [stderr] 423 | | &FieldKind::Regular { ref field, .. } => field.bit_range_rust.end, [INFO] [stderr] 424 | | &FieldKind::Array { ref elements, .. } => elements.last().unwrap().bit_range_rust.end [INFO] [stderr] 425 | | }).max().unwrap(); [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] 422 | let last_bit = fields_parsed.iter().map(|f| match *f { [INFO] [stderr] 423 | FieldKind::Regular { ref field, .. } => field.bit_range_rust.end, [INFO] [stderr] 424 | FieldKind::Array { ref elements, .. } => elements.last().unwrap().bit_range_rust.end [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `bits` [INFO] [stderr] --> src/pack_parse.rs:441:26 [INFO] [stderr] | [INFO] [stderr] 441 | for i in range.start .. (range.end+1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 441 | for (i, ) in bits.iter_mut().enumerate().take((range.end+1)).skip(range.start) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/pack_parse.rs:441:26 [INFO] [stderr] | [INFO] [stderr] 441 | for i in range.start .. (range.end+1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `range.start..=range.end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:450:13 [INFO] [stderr] | [INFO] [stderr] 450 | / match field { [INFO] [stderr] 451 | | &FieldKind::Regular { ref field, ref ident } => { [INFO] [stderr] 452 | | find_overlaps(syn_to_string(ident), &field.bit_range); [INFO] [stderr] 453 | | }, [INFO] [stderr] ... | [INFO] [stderr] 458 | | } [INFO] [stderr] 459 | | } [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] 450 | match *field { [INFO] [stderr] 451 | FieldKind::Regular { ref field, ref ident } => { [INFO] [stderr] 452 | find_overlaps(syn_to_string(ident), &field.bit_range); [INFO] [stderr] 453 | }, [INFO] [stderr] 454 | FieldKind::Array { ref ident, ref elements, .. } => { [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/pack_parse_attributes.rs:12:22 [INFO] [stderr] | [INFO] [stderr] 12 | fn get_attr_name(&self) -> &'static str { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/pack_parse_attributes.rs:34:98 [INFO] [stderr] | [INFO] [stderr] 34 | return Ok(PackStructAttribute::DefaultIntEndianness(IntegerEndianness::from_str(val).expect(&format!("Invalid default int endian value: {}", val)))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Invalid default int endian value: {}", val))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [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/pack_parse_attributes.rs:57:34 [INFO] [stderr] | [INFO] [stderr] 57 | pub fn parse_all(attributes: &Vec<(String, String)>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(String, String)]` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/pack_parse_attributes.rs:81:22 [INFO] [stderr] | [INFO] [stderr] 81 | fn get_attr_name(&self) -> &'static str { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/pack_parse_attributes.rs:147:13 [INFO] [stderr] | [INFO] [stderr] 147 | / match val { [INFO] [stderr] 148 | | "enum" => { return Ok(PackFieldAttribute::Ty(TyKind::Enum)); }, [INFO] [stderr] 149 | | _ => () [INFO] [stderr] 150 | | } [INFO] [stderr] | |_____________^ help: try this: `if let "enum" = val { return Ok(PackFieldAttribute::Ty(TyKind::Enum)); }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/pack_parse_attributes.rs:156:34 [INFO] [stderr] | [INFO] [stderr] 156 | pub fn parse_all(attributes: &Vec<(String, String)>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(String, String)]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/pack_parse_attributes.rs:191:27 [INFO] [stderr] | [INFO] [stderr] 191 | } else if v.ends_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/pack_parse_attributes.rs:195:26 [INFO] [stderr] | [INFO] [stderr] 195 | } else if v.contains(":") || v.contains("..=") { [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: single-character string constant used as pattern [INFO] [stderr] --> src/pack_parse_attributes.rs:199:27 [INFO] [stderr] | [INFO] [stderr] 199 | if v.contains(":") { [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: single-character string constant used as pattern [INFO] [stderr] --> src/pack_parse_attributes.rs:200:25 [INFO] [stderr] | [INFO] [stderr] 200 | v.split(":").collect() [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/primitive_enum.rs:11:9 [INFO] [stderr] | [INFO] [stderr] 11 | let ref name = ast.ident; [INFO] [stderr] | ----^^^^^^^^------------- help: try: `let name = &ast.ident;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:63:28 [INFO] [stderr] | [INFO] [stderr] 63 | if n < ::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(::min_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: casting i16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:67:32 [INFO] [stderr] | [INFO] [stderr] 67 | if n < ::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(::min_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:69:39 [INFO] [stderr] | [INFO] [stderr] 69 | } else if n < ::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(::min_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:77:28 [INFO] [stderr] | [INFO] [stderr] 77 | if n > ::max_value() as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::max_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:79:35 [INFO] [stderr] | [INFO] [stderr] 79 | } else if n > ::max_value() as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::max_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:81:35 [INFO] [stderr] | [INFO] [stderr] 81 | } else if n > ::max_value() as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::max_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/primitive_enum.rs:222:5 [INFO] [stderr] | [INFO] [stderr] 222 | / match input.body { [INFO] [stderr] 223 | | syn::Body::Enum(ref variants) => { [INFO] [stderr] 224 | | let mut r = Vec::new(); [INFO] [stderr] 225 | | [INFO] [stderr] ... | [INFO] [stderr] 270 | | _ => () [INFO] [stderr] 271 | | } [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] 222 | if let syn::Body::Enum(ref variants) = input.body { [INFO] [stderr] 223 | let mut r = Vec::new(); [INFO] [stderr] 224 | [INFO] [stderr] 225 | let mut d = 0; [INFO] [stderr] 226 | let mut neg = false; [INFO] [stderr] 227 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the `p @ _` pattern can be written as just `p` [INFO] [stderr] --> src/primitive_enum.rs:241:29 [INFO] [stderr] | [INFO] [stderr] 241 | ref p @ _ => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `p @ _` pattern can be written as just `p` [INFO] [stderr] --> src/primitive_enum.rs:246:26 [INFO] [stderr] | [INFO] [stderr] 246 | Some(ref p @ _) => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/primitive_enum.rs:251:35 [INFO] [stderr] | [INFO] [stderr] 251 | (d-1, if d-1 == 0 { false } else { true }, syn::IntTy::Unsuffixed) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(d-1 == 0)` [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] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/utils.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / if let &Some(ref prev_range) = prev_range { [INFO] [stderr] 23 | | (prev_range.end + 1)..((prev_range.end + 1) + (packed_bit_width as usize) - 1) [INFO] [stderr] 24 | | } else { [INFO] [stderr] 25 | | 0..((packed_bit_width as usize) - 1) [INFO] [stderr] 26 | | } [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] 22 | if let Some(ref prev_range) = *prev_range { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_codegen.rs:57:13 [INFO] [stderr] | [INFO] [stderr] 57 | / match field { [INFO] [stderr] 58 | | &FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 59 | | reg(ident, ident, field); [INFO] [stderr] 60 | | [INFO] [stderr] ... | [INFO] [stderr] 79 | | } [INFO] [stderr] 80 | | } [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] 57 | match *field { [INFO] [stderr] 58 | FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 59 | reg(ident, ident, field); [INFO] [stderr] 60 | [INFO] [stderr] 61 | unpack_struct_set.push(quote! { [INFO] [stderr] 62 | #ident: #ident [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_codegen.rs:293:9 [INFO] [stderr] | [INFO] [stderr] 293 | / match wrapper { [INFO] [stderr] 294 | | &SerializationWrapper::PrimitiveEnumWrapper => { [INFO] [stderr] 295 | | output = quote! { [INFO] [stderr] 296 | | { [INFO] [stderr] ... | [INFO] [stderr] 325 | | } [INFO] [stderr] 326 | | } [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] 293 | match *wrapper { [INFO] [stderr] 294 | SerializationWrapper::PrimitiveEnumWrapper => { [INFO] [stderr] 295 | output = quote! { [INFO] [stderr] 296 | { [INFO] [stderr] 297 | use ::packed_struct::PrimitiveEnum; [INFO] [stderr] 298 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/pack_codegen.rs:394:12 [INFO] [stderr] | [INFO] [stderr] 394 | if wrappers.len() == 0 || i > wrappers.len() - 1 { break; } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `wrappers.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_codegen_docs.rs:27:9 [INFO] [stderr] | [INFO] [stderr] 27 | / match field { [INFO] [stderr] 28 | | &FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 29 | | let ref name_str = ident.as_ref().to_string(); [INFO] [stderr] 30 | | let bits = syn::parse_expr(&format!("{}..{}", field.bit_range.start, field.bit_range.end)).unwrap(); [INFO] [stderr] ... | [INFO] [stderr] 54 | | } [INFO] [stderr] 55 | | } [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] 27 | match *field { [INFO] [stderr] 28 | FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 29 | let ref name_str = ident.as_ref().to_string(); [INFO] [stderr] 30 | let bits = syn::parse_expr(&format!("{}..{}", field.bit_range.start, field.bit_range.end)).unwrap(); [INFO] [stderr] 31 | [INFO] [stderr] 32 | debug_fields.push(quote! { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/pack_codegen_docs.rs:29:21 [INFO] [stderr] | [INFO] [stderr] 29 | let ref name_str = ident.as_ref().to_string(); [INFO] [stderr] | ----^^^^^^^^^^^^------------------------------ help: try: `let name_str = &ident.as_ref().to_string();` [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] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_codegen_docs.rs:126:13 [INFO] [stderr] | [INFO] [stderr] 126 | / match field { [INFO] [stderr] 127 | | &FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 128 | | emit_field_docs(&field.bit_range, ident.as_ref().to_string(), &field.ty); [INFO] [stderr] 129 | | }, [INFO] [stderr] ... | [INFO] [stderr] 134 | | } [INFO] [stderr] 135 | | } [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] 126 | match *field { [INFO] [stderr] 127 | FieldKind::Regular { ref ident, ref field } => { [INFO] [stderr] 128 | emit_field_docs(&field.bit_range, ident.as_ref().to_string(), &field.ty); [INFO] [stderr] 129 | }, [INFO] [stderr] 130 | FieldKind::Array { ref ident, ref elements, .. } => { [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/pack_parse.rs:11:41 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn parse_sub_attributes(attributes: &Vec, main_attribute: &str) -> Vec<(String, String)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[syn::Attribute]` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | / if let &syn::Attribute { value: syn::MetaItem::List(ref ident, ref list), .. } = attr { [INFO] [stderr] 16 | | if ident.as_ref() != main_attribute { continue; } [INFO] [stderr] 17 | | [INFO] [stderr] 18 | | for item in list { [INFO] [stderr] ... | [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [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] 15 | if let syn::Attribute { value: syn::MetaItem::List(ref ident, ref list), .. } = *attr { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:19:17 [INFO] [stderr] | [INFO] [stderr] 19 | / if let &syn::NestedMetaItem::MetaItem(syn::MetaItem::NameValue(ref ident, ref lit)) = item { [INFO] [stderr] 20 | | let n = ident.as_ref(); [INFO] [stderr] 21 | | [INFO] [stderr] 22 | | if let &syn::Lit::Str(ref v, _) = lit { [INFO] [stderr] 23 | | r.push((n.to_string(), v.to_string())); [INFO] [stderr] 24 | | } [INFO] [stderr] 25 | | } [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] 19 | if let syn::NestedMetaItem::MetaItem(syn::MetaItem::NameValue(ref ident, ref lit)) = *item { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:22:21 [INFO] [stderr] | [INFO] [stderr] 22 | / if let &syn::Lit::Str(ref v, _) = lit { [INFO] [stderr] 23 | | r.push((n.to_string(), v.to_string())); [INFO] [stderr] 24 | | } [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] 22 | if let syn::Lit::Str(ref v, _) = *lit { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/pack_parse.rs:115:21 [INFO] [stderr] | [INFO] [stderr] 115 | let ref segment = segments[0]; [INFO] [stderr] | ----^^^^^^^^^^^--------------- help: try: `let segment = &segments[0];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:127:21 [INFO] [stderr] | [INFO] [stderr] 127 | / if let &syn::ConstExpr::Lit(syn::Lit::Int(size, _)) = size { [INFO] [stderr] 128 | | let ref segment = segments[0]; [INFO] [stderr] 129 | | bit_width_builtin = get_builtin_type_bit_width(segment); [INFO] [stderr] 130 | | array_size = size as usize; [INFO] [stderr] ... | [INFO] [stderr] 136 | | panic!("unsupported array size: {:?}", size); [INFO] [stderr] 137 | | } [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] 127 | if let syn::ConstExpr::Lit(syn::Lit::Int(size, _)) = *size { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/pack_parse.rs:128:29 [INFO] [stderr] | [INFO] [stderr] 128 | let ref segment = segments[0]; [INFO] [stderr] | ----^^^^^^^^^^^--------------- help: try: `let segment = &segments[0];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:151:64 [INFO] [stderr] | [INFO] [stderr] 151 | let bits_position = field_attributes.iter().filter_map(|a| match a { [INFO] [stderr] | ________________________________________________________________^ [INFO] [stderr] 152 | | &PackFieldAttribute::BitPosition(b) | &PackFieldAttribute::BytePosition(b) => Some(b), [INFO] [stderr] 153 | | _ => None [INFO] [stderr] 154 | | }).next().unwrap_or(BitsPositionParsed::Next); [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] 151 | let bits_position = field_attributes.iter().filter_map(|a| match *a { [INFO] [stderr] 152 | PackFieldAttribute::BitPosition(b) | PackFieldAttribute::BytePosition(b) => Some(b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:156:80 [INFO] [stderr] | [INFO] [stderr] 156 | let bit_width = if let Some(bits) = field_attributes.iter().filter_map(|a| if let &PackFieldAttribute::SizeBits(bits) = a { Some(bits) } else { None }).next() { [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] 156 | let bit_width = if let Some(bits) = field_attributes.iter().filter_map(|a| if let PackFieldAttribute::SizeBits(bits) = *a { Some(bits) } else { None }).next() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:159:71 [INFO] [stderr] | [INFO] [stderr] 159 | } else if let Some(bits) = field_attributes.iter().filter_map(|a| if let &PackFieldAttribute::ElementSizeBits(bits) = a { Some(bits) } else { None }).next() { [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] 159 | } else if let Some(bits) = field_attributes.iter().filter_map(|a| if let PackFieldAttribute::ElementSizeBits(bits) = *a { Some(bits) } else { None }).next() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:197:21 [INFO] [stderr] | [INFO] [stderr] 197 | / if let &syn::ConstExpr::Lit(syn::Lit::Int(size, _)) = size { [INFO] [stderr] 198 | | let ty = syn::parse_type(&syn_to_string(&segments[0])).expect("error parsing path segment to ty"); [INFO] [stderr] 199 | | [INFO] [stderr] 200 | | let element_size_bits: usize = mp.bit_width as usize / size as usize; [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] 197 | if let syn::ConstExpr::Lit(syn::Lit::Int(size, _)) = *size { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:235:61 [INFO] [stderr] | [INFO] [stderr] 235 | let is_enum_ty = field_attributes.iter().filter_map(|a| match a { [INFO] [stderr] | _____________________________________________________________^ [INFO] [stderr] 236 | | &PackFieldAttribute::Ty(TyKind::Enum) => Some(()), [INFO] [stderr] 237 | | _ => None [INFO] [stderr] 238 | | }).next().is_some(); [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] 235 | let is_enum_ty = field_attributes.iter().filter_map(|a| match *a { [INFO] [stderr] 236 | PackFieldAttribute::Ty(TyKind::Enum) => Some(()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/pack_parse.rs:265:9 [INFO] [stderr] | [INFO] [stderr] 265 | / let mut endiannes = if let Some(endiannes) = field_attributes [INFO] [stderr] 266 | | .iter() [INFO] [stderr] 267 | | .filter_map(|a| if let &PackFieldAttribute::IntEndiannes(endiannes) = a { [INFO] [stderr] 268 | | Some(endiannes) [INFO] [stderr] ... | [INFO] [stderr] 279 | | endiannes = Some(IntegerEndianness::Msb); [INFO] [stderr] 280 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 265 | let endiannes = if bit_width <= 8 { Some(IntegerEndianness::Msb) } else { if let Some(endiannes) = field_attributes [INFO] [stderr] 266 | .iter() [INFO] [stderr] 267 | .filter_map(|a| if let &PackFieldAttribute::IntEndiannes(endiannes) = a { [INFO] [stderr] 268 | Some(endiannes) [INFO] [stderr] 269 | } else { [INFO] [stderr] 270 | None [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:267:29 [INFO] [stderr] | [INFO] [stderr] 267 | .filter_map(|a| if let &PackFieldAttribute::IntEndiannes(endiannes) = a { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 268 | | Some(endiannes) [INFO] [stderr] 269 | | } else { [INFO] [stderr] 270 | | None [INFO] [stderr] 271 | | }).next() [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] 267 | .filter_map(|a| if let PackFieldAttribute::IntEndiannes(endiannes) = *a { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/pack_parse.rs:300:25 [INFO] [stderr] | [INFO] [stderr] 300 | bit_range_rust: bit_range.start..(bit_range.end + 1) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `bit_range.start..=bit_range.end` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/pack_parse.rs:333:44 [INFO] [stderr] | [INFO] [stderr] 333 | usize::from_str_radix(&s[2..], 16).expect(&format!("Invalid hex number: {:?}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Invalid hex number: {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/pack_parse.rs:335:19 [INFO] [stderr] | [INFO] [stderr] 335 | s.parse().expect(&format!("Invalid decimal number: {:?}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("Invalid decimal number: {:?}", s))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/pack_parse.rs:351:8 [INFO] [stderr] | [INFO] [stderr] 351 | if ast.generics.ty_params.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ast.generics.ty_params.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:356:42 [INFO] [stderr] | [INFO] [stderr] 356 | attributes.iter().filter_map(|a| match a { [INFO] [stderr] | __________________________________________^ [INFO] [stderr] 357 | | &PackStructAttribute::BitNumbering(b) => Some(b), [INFO] [stderr] 358 | | _ => None [INFO] [stderr] 359 | | }).next() [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] 356 | attributes.iter().filter_map(|a| match *a { [INFO] [stderr] 357 | PackStructAttribute::BitNumbering(b) => Some(b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:362:67 [INFO] [stderr] | [INFO] [stderr] 362 | let default_int_endianness = attributes.iter().filter_map(|a| match a { [INFO] [stderr] | ___________________________________________________________________^ [INFO] [stderr] 363 | | &PackStructAttribute::DefaultIntEndianness(i) => Some(i), [INFO] [stderr] 364 | | _ => None [INFO] [stderr] 365 | | }).next(); [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] 362 | let default_int_endianness = attributes.iter().filter_map(|a| match *a { [INFO] [stderr] 363 | PackStructAttribute::DefaultIntEndianness(i) => Some(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:368:9 [INFO] [stderr] | [INFO] [stderr] 368 | / if let &PackStructAttribute::SizeBytes(size_bytes) = a { [INFO] [stderr] 369 | | Some(size_bytes) [INFO] [stderr] 370 | | } else { [INFO] [stderr] 371 | | None [INFO] [stderr] 372 | | }}).next(); [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] 368 | if let PackStructAttribute::SizeBytes(size_bytes) = *a { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:422:57 [INFO] [stderr] | [INFO] [stderr] 422 | let last_bit = fields_parsed.iter().map(|f| match f { [INFO] [stderr] | _________________________________________________________^ [INFO] [stderr] 423 | | &FieldKind::Regular { ref field, .. } => field.bit_range_rust.end, [INFO] [stderr] 424 | | &FieldKind::Array { ref elements, .. } => elements.last().unwrap().bit_range_rust.end [INFO] [stderr] 425 | | }).max().unwrap(); [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] 422 | let last_bit = fields_parsed.iter().map(|f| match *f { [INFO] [stderr] 423 | FieldKind::Regular { ref field, .. } => field.bit_range_rust.end, [INFO] [stderr] 424 | FieldKind::Array { ref elements, .. } => elements.last().unwrap().bit_range_rust.end [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `bits` [INFO] [stderr] --> src/pack_parse.rs:441:26 [INFO] [stderr] | [INFO] [stderr] 441 | for i in range.start .. (range.end+1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 441 | for (i, ) in bits.iter_mut().enumerate().take((range.end+1)).skip(range.start) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/pack_parse.rs:441:26 [INFO] [stderr] | [INFO] [stderr] 441 | for i in range.start .. (range.end+1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `range.start..=range.end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/pack_parse.rs:450:13 [INFO] [stderr] | [INFO] [stderr] 450 | / match field { [INFO] [stderr] 451 | | &FieldKind::Regular { ref field, ref ident } => { [INFO] [stderr] 452 | | find_overlaps(syn_to_string(ident), &field.bit_range); [INFO] [stderr] 453 | | }, [INFO] [stderr] ... | [INFO] [stderr] 458 | | } [INFO] [stderr] 459 | | } [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] 450 | match *field { [INFO] [stderr] 451 | FieldKind::Regular { ref field, ref ident } => { [INFO] [stderr] 452 | find_overlaps(syn_to_string(ident), &field.bit_range); [INFO] [stderr] 453 | }, [INFO] [stderr] 454 | FieldKind::Array { ref ident, ref elements, .. } => { [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/pack_parse_attributes.rs:12:22 [INFO] [stderr] | [INFO] [stderr] 12 | fn get_attr_name(&self) -> &'static str { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/pack_parse_attributes.rs:34:98 [INFO] [stderr] | [INFO] [stderr] 34 | return Ok(PackStructAttribute::DefaultIntEndianness(IntegerEndianness::from_str(val).expect(&format!("Invalid default int endian value: {}", val)))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Invalid default int endian value: {}", val))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [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/pack_parse_attributes.rs:57:34 [INFO] [stderr] | [INFO] [stderr] 57 | pub fn parse_all(attributes: &Vec<(String, String)>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(String, String)]` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/pack_parse_attributes.rs:81:22 [INFO] [stderr] | [INFO] [stderr] 81 | fn get_attr_name(&self) -> &'static str { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/pack_parse_attributes.rs:147:13 [INFO] [stderr] | [INFO] [stderr] 147 | / match val { [INFO] [stderr] 148 | | "enum" => { return Ok(PackFieldAttribute::Ty(TyKind::Enum)); }, [INFO] [stderr] 149 | | _ => () [INFO] [stderr] 150 | | } [INFO] [stderr] | |_____________^ help: try this: `if let "enum" = val { return Ok(PackFieldAttribute::Ty(TyKind::Enum)); }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/pack_parse_attributes.rs:156:34 [INFO] [stderr] | [INFO] [stderr] 156 | pub fn parse_all(attributes: &Vec<(String, String)>) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(String, String)]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/pack_parse_attributes.rs:191:27 [INFO] [stderr] | [INFO] [stderr] 191 | } else if v.ends_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/pack_parse_attributes.rs:195:26 [INFO] [stderr] | [INFO] [stderr] 195 | } else if v.contains(":") || v.contains("..=") { [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: single-character string constant used as pattern [INFO] [stderr] --> src/pack_parse_attributes.rs:199:27 [INFO] [stderr] | [INFO] [stderr] 199 | if v.contains(":") { [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: single-character string constant used as pattern [INFO] [stderr] --> src/pack_parse_attributes.rs:200:25 [INFO] [stderr] | [INFO] [stderr] 200 | v.split(":").collect() [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/primitive_enum.rs:11:9 [INFO] [stderr] | [INFO] [stderr] 11 | let ref name = ast.ident; [INFO] [stderr] | ----^^^^^^^^------------- help: try: `let name = &ast.ident;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:63:28 [INFO] [stderr] | [INFO] [stderr] 63 | if n < ::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(::min_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: casting i16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:67:32 [INFO] [stderr] | [INFO] [stderr] 67 | if n < ::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(::min_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:69:39 [INFO] [stderr] | [INFO] [stderr] 69 | } else if n < ::min_value() as i64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(::min_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:77:28 [INFO] [stderr] | [INFO] [stderr] 77 | if n > ::max_value() as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::max_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:79:35 [INFO] [stderr] | [INFO] [stderr] 79 | } else if n > ::max_value() as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::max_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u64 may become silently lossy if types change [INFO] [stderr] --> src/primitive_enum.rs:81:35 [INFO] [stderr] | [INFO] [stderr] 81 | } else if n > ::max_value() as u64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(::max_value())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [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/primitive_enum.rs:222:5 [INFO] [stderr] | [INFO] [stderr] 222 | / match input.body { [INFO] [stderr] 223 | | syn::Body::Enum(ref variants) => { [INFO] [stderr] 224 | | let mut r = Vec::new(); [INFO] [stderr] 225 | | [INFO] [stderr] ... | [INFO] [stderr] 270 | | _ => () [INFO] [stderr] 271 | | } [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] 222 | if let syn::Body::Enum(ref variants) = input.body { [INFO] [stderr] 223 | let mut r = Vec::new(); [INFO] [stderr] 224 | [INFO] [stderr] 225 | let mut d = 0; [INFO] [stderr] 226 | let mut neg = false; [INFO] [stderr] 227 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the `p @ _` pattern can be written as just `p` [INFO] [stderr] --> src/primitive_enum.rs:241:29 [INFO] [stderr] | [INFO] [stderr] 241 | ref p @ _ => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: the `p @ _` pattern can be written as just `p` [INFO] [stderr] --> src/primitive_enum.rs:246:26 [INFO] [stderr] | [INFO] [stderr] 246 | Some(ref p @ _) => { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/primitive_enum.rs:251:35 [INFO] [stderr] | [INFO] [stderr] 251 | (d-1, if d-1 == 0 { false } else { true }, syn::IntTy::Unsuffixed) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(d-1 == 0)` [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] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/utils.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / if let &Some(ref prev_range) = prev_range { [INFO] [stderr] 23 | | (prev_range.end + 1)..((prev_range.end + 1) + (packed_bit_width as usize) - 1) [INFO] [stderr] 24 | | } else { [INFO] [stderr] 25 | | 0..((packed_bit_width as usize) - 1) [INFO] [stderr] 26 | | } [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] 22 | if let Some(ref prev_range) = *prev_range { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 20.16s [INFO] running `"docker" "inspect" "fe51a07f7886a97eda30910a8c966959a2dfd0cde1e01ff6b52745b605b51bab"` [INFO] running `"docker" "rm" "-f" "fe51a07f7886a97eda30910a8c966959a2dfd0cde1e01ff6b52745b605b51bab"` [INFO] [stdout] fe51a07f7886a97eda30910a8c966959a2dfd0cde1e01ff6b52745b605b51bab