[INFO] updating cached repository Pctg-x8/spirv-autoform [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/Pctg-x8/spirv-autoform [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/Pctg-x8/spirv-autoform" "work/ex/clippy-test-run/sources/stable/gh/Pctg-x8/spirv-autoform"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/Pctg-x8/spirv-autoform'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/Pctg-x8/spirv-autoform" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Pctg-x8/spirv-autoform"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Pctg-x8/spirv-autoform'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 92d66c14dfec4ce44d526b0f8a9787eb1ed36fca [INFO] sha for GitHub repo Pctg-x8/spirv-autoform: 92d66c14dfec4ce44d526b0f8a9787eb1ed36fca [INFO] validating manifest of Pctg-x8/spirv-autoform 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 Pctg-x8/spirv-autoform 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 Pctg-x8/spirv-autoform [INFO] finished frobbing Pctg-x8/spirv-autoform [INFO] frobbed toml for Pctg-x8/spirv-autoform written to work/ex/clippy-test-run/sources/stable/gh/Pctg-x8/spirv-autoform/Cargo.toml [INFO] started frobbing Pctg-x8/spirv-autoform [INFO] finished frobbing Pctg-x8/spirv-autoform [INFO] frobbed toml for Pctg-x8/spirv-autoform written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Pctg-x8/spirv-autoform/Cargo.toml [INFO] crate Pctg-x8/spirv-autoform has a lockfile. skipping [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 Pctg-x8/spirv-autoform against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Pctg-x8/spirv-autoform:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dclippy::into_iter_on_array" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] f7b1aadfdc17137ff89e9c871152e37ca4717d1d48a74b742d64d4d3b4c5787b [INFO] running `"docker" "start" "-a" "f7b1aadfdc17137ff89e9c871152e37ca4717d1d48a74b742d64d4d3b4c5787b"` [INFO] [stderr] Checking spirv-autoform v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/module_loader.rs:171:4 [INFO] [stderr] | [INFO] [stderr] 171 | 0x07230203 => Ok(false), 0x03022307 => Ok(true), _ => Err(SpirvReadError::InvalidMagic.into()) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0723_0203` [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/module_loader.rs:171:29 [INFO] [stderr] | [INFO] [stderr] 171 | 0x07230203 => Ok(false), 0x03022307 => Ok(true), _ => Err(SpirvReadError::InvalidMagic.into()) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0302_2307` [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/module_loader.rs:174:54 [INFO] [stderr] | [INFO] [stderr] 174 | fn deconstruct_version(v: u32) -> (u8, u8) { (((v & 0x00ff0000) >> 16) as _, ((v & 0x0000ff00) >> 8) as _) } [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x00ff_0000` [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/module_loader.rs:174:85 [INFO] [stderr] | [INFO] [stderr] 174 | fn deconstruct_version(v: u32) -> (u8, u8) { (((v & 0x00ff0000) >> 16) as _, ((v & 0x0000ff00) >> 8) as _) } [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_ff00` [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/module_loader.rs:171:4 [INFO] [stderr] | [INFO] [stderr] 171 | 0x07230203 => Ok(false), 0x03022307 => Ok(true), _ => Err(SpirvReadError::InvalidMagic.into()) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0723_0203` [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/module_loader.rs:171:29 [INFO] [stderr] | [INFO] [stderr] 171 | 0x07230203 => Ok(false), 0x03022307 => Ok(true), _ => Err(SpirvReadError::InvalidMagic.into()) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0302_2307` [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/module_loader.rs:174:54 [INFO] [stderr] | [INFO] [stderr] 174 | fn deconstruct_version(v: u32) -> (u8, u8) { (((v & 0x00ff0000) >> 16) as _, ((v & 0x0000ff00) >> 8) as _) } [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x00ff_0000` [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/module_loader.rs:174:85 [INFO] [stderr] | [INFO] [stderr] 174 | fn deconstruct_version(v: u32) -> (u8, u8) { (((v & 0x00ff0000) >> 16) as _, ((v & 0x0000ff00) >> 8) as _) } [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_ff00` [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 should consider deriving a `Default` implementation for `container_ext::autosize_vec::AutosizeVec` [INFO] [stderr] --> src/container_ext.rs:24:3 [INFO] [stderr] | [INFO] [stderr] 24 | pub fn new() -> Self { AutosizeVec(Vec::new()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 21 | #[derive(Default)] [INFO] [stderr] 22 | pub struct AutosizeVec(Vec); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `container_ext::autosize_vec::AutosizeVec` [INFO] [stderr] --> src/container_ext.rs:24:3 [INFO] [stderr] | [INFO] [stderr] 24 | pub fn new() -> Self { AutosizeVec(Vec::new()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 21 | #[derive(Default)] [INFO] [stderr] 22 | pub struct AutosizeVec(Vec); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spv/types.rs:29:9 [INFO] [stderr] | [INFO] [stderr] 29 | / match self [INFO] [stderr] 30 | | { [INFO] [stderr] 31 | | &Type::Void => write!(fmt, "void"), [INFO] [stderr] 32 | | &Type::Bool => write!(fmt, "bool"), [INFO] [stderr] ... | [INFO] [stderr] 45 | | &Type::Function(ref r, ref p) => write!(fmt, "({}) => {}", p.iter().map(ToString::to_string).collect::>().join(", "), r) [INFO] [stderr] 46 | | } [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] 29 | match *self [INFO] [stderr] 30 | { [INFO] [stderr] 31 | Type::Void => write!(fmt, "void"), [INFO] [stderr] 32 | Type::Bool => write!(fmt, "bool"), [INFO] [stderr] 33 | Type::Int(bits, true) => write!(fmt, "int{}", bits), [INFO] [stderr] 34 | Type::Int(bits, false) => write!(fmt, "uint{}", bits), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spv/types.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | / match self [INFO] [stderr] 54 | | { [INFO] [stderr] 55 | | &Typedef { name: Some(ref name), def: Type::Structure(ref m) } => write!(fmt, "struct {} {{ {} }}", name, m.members.iter().map(ToString::to_string).collect::>().join(", ")), [INFO] [stderr] 56 | | &Typedef { def: Type::Structure(ref m), .. } => write!(fmt, "struct {{ {} }}", m.members.iter().map(ToString::to_string).collect::>().join(", ")), [INFO] [stderr] 57 | | &Typedef { ref def, .. } => def.fmt(fmt) [INFO] [stderr] 58 | | } [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] 53 | match *self [INFO] [stderr] 54 | { [INFO] [stderr] 55 | Typedef { name: Some(ref name), def: Type::Structure(ref m) } => write!(fmt, "struct {} {{ {} }}", name, m.members.iter().map(ToString::to_string).collect::>().join(", ")), [INFO] [stderr] 56 | Typedef { def: Type::Structure(ref m), .. } => write!(fmt, "struct {{ {} }}", m.members.iter().map(ToString::to_string).collect::>().join(", ")), [INFO] [stderr] 57 | Typedef { ref def, .. } => def.fmt(fmt) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spv/types.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | if let &Type::Structure(ref s) = self { Some(s) } else { None } [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] 83 | if let Type::Structure(ref s) = *self { Some(s) } else { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: transmute from a reference to a reference [INFO] [stderr] --> src/module_loader.rs:18:32 [INFO] [stderr] | [INFO] [stderr] 18 | self.src.read_exact(unsafe { std::mem::transmute::<_, &mut [u8; 4]>(&mut word) }).map(|_| if self.require_conversion { word.swap_bytes() } else { word }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *(&mut word as *mut u32 as *mut [u8; 4])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/module_loader.rs:52:3 [INFO] [stderr] | [INFO] [stderr] 52 | match self [INFO] [stderr] | _________^ [INFO] [stderr] 53 | | { [INFO] [stderr] 54 | | &SpirvReadError::InvalidMagic => "Invalid Magic Number" [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] 52 | match *self [INFO] [stderr] 53 | { [INFO] [stderr] 54 | SpirvReadError::InvalidMagic => "Invalid Magic Number" [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `BTreeMap` [INFO] [stderr] --> src/module_loader.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | / if self.0.contains_key(&id) { println!("Warn: Duplicating Decoration {:?}", dec); } [INFO] [stderr] 72 | | else { self.0.insert(id, dec); } [INFO] [stderr] | |________________________________________^ help: consider using: `self.0.entry(id)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: transmute from a reference to a reference [INFO] [stderr] --> src/module_loader.rs:168:26 [INFO] [stderr] | [INFO] [stderr] 168 | fp.read_exact(unsafe { std::mem::transmute::<_, &mut [u8; 4]>(&mut magic) })?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *(&mut magic as *mut u32 as *mut [u8; 4])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spv/types.rs:29:9 [INFO] [stderr] | [INFO] [stderr] 29 | / match self [INFO] [stderr] 30 | | { [INFO] [stderr] 31 | | &Type::Void => write!(fmt, "void"), [INFO] [stderr] 32 | | &Type::Bool => write!(fmt, "bool"), [INFO] [stderr] ... | [INFO] [stderr] 45 | | &Type::Function(ref r, ref p) => write!(fmt, "({}) => {}", p.iter().map(ToString::to_string).collect::>().join(", "), r) [INFO] [stderr] 46 | | } [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] 29 | match *self [INFO] [stderr] 30 | { [INFO] [stderr] 31 | Type::Void => write!(fmt, "void"), [INFO] [stderr] 32 | Type::Bool => write!(fmt, "bool"), [INFO] [stderr] 33 | Type::Int(bits, true) => write!(fmt, "int{}", bits), [INFO] [stderr] 34 | Type::Int(bits, false) => write!(fmt, "uint{}", bits), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spv/types.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | / match self [INFO] [stderr] 54 | | { [INFO] [stderr] 55 | | &Typedef { name: Some(ref name), def: Type::Structure(ref m) } => write!(fmt, "struct {} {{ {} }}", name, m.members.iter().map(ToString::to_string).collect::>().join(", ")), [INFO] [stderr] 56 | | &Typedef { def: Type::Structure(ref m), .. } => write!(fmt, "struct {{ {} }}", m.members.iter().map(ToString::to_string).collect::>().join(", ")), [INFO] [stderr] 57 | | &Typedef { ref def, .. } => def.fmt(fmt) [INFO] [stderr] 58 | | } [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] 53 | match *self [INFO] [stderr] 54 | { [INFO] [stderr] 55 | Typedef { name: Some(ref name), def: Type::Structure(ref m) } => write!(fmt, "struct {} {{ {} }}", name, m.members.iter().map(ToString::to_string).collect::>().join(", ")), [INFO] [stderr] 56 | Typedef { def: Type::Structure(ref m), .. } => write!(fmt, "struct {{ {} }}", m.members.iter().map(ToString::to_string).collect::>().join(", ")), [INFO] [stderr] 57 | Typedef { ref def, .. } => def.fmt(fmt) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/module_loader.rs:325:123 [INFO] [stderr] | [INFO] [stderr] 325 | Load => Operation::Load { result: TypedResult { ty: args[0], id: args[1] }, from_ptr: args[2], memory_access: args.get(3).map(|&x| x).unwrap_or(0) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `args.get(3).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/module_loader.rs:326:94 [INFO] [stderr] | [INFO] [stderr] 326 | Store => Operation::Store { into_ptr: args[0], from_ptr: args[1], memory_access: args.get(2).map(|&x| x).unwrap_or(0) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `args.get(2).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/module_loader.rs:341:9 [INFO] [stderr] | [INFO] [stderr] 341 | / match self [INFO] [stderr] 342 | | { [INFO] [stderr] 343 | | &Operation::TypeVoid { .. } | &Operation::TypeBool { .. } | &Operation::TypeInt { .. } | &Operation::TypeFloat { .. } [INFO] [stderr] 344 | | | &Operation::TypeVector { .. } | &Operation::TypeMatrix { .. } | &Operation::TypeArray { .. } | &Operation::TypeRuntimeArray { .. } [INFO] [stderr] ... | [INFO] [stderr] 348 | | _ => false [INFO] [stderr] 349 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/spv/types.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | if let &Type::Structure(ref s) = self { Some(s) } else { None } [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] 83 | if let Type::Structure(ref s) = *self { Some(s) } else { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [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] 341 | match *self [INFO] [stderr] 342 | { [INFO] [stderr] 343 | Operation::TypeVoid { .. } | Operation::TypeBool { .. } | Operation::TypeInt { .. } | Operation::TypeFloat { .. } [INFO] [stderr] 344 | | Operation::TypeVector { .. } | Operation::TypeMatrix { .. } | Operation::TypeArray { .. } | Operation::TypeRuntimeArray { .. } [INFO] [stderr] 345 | | Operation::TypeStruct { .. } | Operation::TypeImage { .. } | Operation::TypeSampler { .. } | Operation::TypeSampledImage { .. } [INFO] [stderr] 346 | | Operation::TypePointer { .. } | Operation::TypeOpaque { .. } | Operation::TypeEvent { .. } | Operation::TypeDeviceEvent { .. } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/module_loader.rs:353:3 [INFO] [stderr] | [INFO] [stderr] 353 | match self [INFO] [stderr] | _________^ [INFO] [stderr] 354 | | { [INFO] [stderr] 355 | | &Operation::Constant { .. } | &Operation::ConstantTrue { .. } | &Operation::ConstantFalse { .. } | [INFO] [stderr] 356 | | &Operation::ConstantComposite { .. } | &Operation::ConstantSampler { .. } | &Operation::ConstantNull { .. } | [INFO] [stderr] ... | [INFO] [stderr] 359 | | _ => false [INFO] [stderr] 360 | | } [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] 353 | match *self [INFO] [stderr] 354 | { [INFO] [stderr] 355 | Operation::Constant { .. } | Operation::ConstantTrue { .. } | Operation::ConstantFalse { .. } | [INFO] [stderr] 356 | Operation::ConstantComposite { .. } | Operation::ConstantSampler { .. } | Operation::ConstantNull { .. } | [INFO] [stderr] 357 | Operation::SpecConstant { .. } | Operation::SpecConstantTrue { .. } | Operation::SpecConstantFalse { .. } | [INFO] [stderr] 358 | Operation::SpecConstantOp { .. } | Operation::SpecConstantComposite { .. } => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: transmute from a reference to a reference [INFO] [stderr] --> src/module_loader.rs:18:32 [INFO] [stderr] | [INFO] [stderr] 18 | self.src.read_exact(unsafe { std::mem::transmute::<_, &mut [u8; 4]>(&mut word) }).map(|_| if self.require_conversion { word.swap_bytes() } else { word }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *(&mut word as *mut u32 as *mut [u8; 4])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_ptr_to_ptr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/module_loader.rs:52:3 [INFO] [stderr] | [INFO] [stderr] 52 | match self [INFO] [stderr] | _________^ [INFO] [stderr] 53 | | { [INFO] [stderr] 54 | | &SpirvReadError::InvalidMagic => "Invalid Magic Number" [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] 52 | match *self [INFO] [stderr] 53 | { [INFO] [stderr] 54 | SpirvReadError::InvalidMagic => "Invalid Magic Number" [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `BTreeMap` [INFO] [stderr] --> src/module_loader.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | / if self.0.contains_key(&id) { println!("Warn: Duplicating Decoration {:?}", dec); } [INFO] [stderr] 72 | | else { self.0.insert(id, dec); } [INFO] [stderr] | |________________________________________^ help: consider using: `self.0.entry(id)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `collector::ErrorReporter` [INFO] [stderr] --> src/collector.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | pub fn new() -> Self { ErrorReporter { has_error: false, context_stack: Vec::new() } } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 17 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `writeln!(stderr(), ...).unwrap()`. Consider using `eprintln!` instead [INFO] [stderr] --> src/collector.rs:27:9 [INFO] [stderr] | [INFO] [stderr] 27 | writeln!(std::io::stderr(), "*Error* {}", msg).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_write)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_write [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/collector.rs:66:93 [INFO] [stderr] | [INFO] [stderr] 66 | pub fn at(&self, index: Id) -> Option<&'m Operation> { if index < self.0.len() as u32 { self.0[index as usize].clone() } else { None } } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.0[index as usize]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `BTreeMap` [INFO] [stderr] --> src/collector.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | / if t.0.contains_key(&(n as Id)) { err.report(format!("Type Definition for #{} has been found once more.", n)); } [INFO] [stderr] 79 | | else [INFO] [stderr] 80 | | { [INFO] [stderr] 81 | | let r = t.try_resolve(ops, names, n as Id, &op.unwrap()); [INFO] [stderr] 82 | | t.0.insert(n as Id, r); [INFO] [stderr] 83 | | } [INFO] [stderr] | |_____________^ help: consider using: `t.0.entry(n as Id)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: transmute from a reference to a reference [INFO] [stderr] --> src/module_loader.rs:168:26 [INFO] [stderr] | [INFO] [stderr] 168 | fp.read_exact(unsafe { std::mem::transmute::<_, &mut [u8; 4]>(&mut magic) })?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&mut *(&mut magic as *mut u32 as *mut [u8; 4])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_ptr_to_ptr [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `BTreeMap` [INFO] [stderr] --> src/collector.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | / if !self.0.contains_key(&id) [INFO] [stderr] 96 | | { [INFO] [stderr] 97 | | let resolved = self.try_resolve(ops, names, id, ops[id as usize].as_ref().unwrap()); [INFO] [stderr] 98 | | self.0.insert(id, resolved); [INFO] [stderr] 99 | | } [INFO] [stderr] | |_________^ help: consider using: `self.0.entry(id)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/collector.rs:100:9 [INFO] [stderr] | [INFO] [stderr] 100 | self.0.get(&id).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.0[&id]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/collector.rs:186:66 [INFO] [stderr] | [INFO] [stderr] 186 | impl FromLiterals for u64 { fn from_literals(v: &[u32]) -> u64 { v[0] as u64 | ((v[1] as u64) << 32) } } [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u64::from(v[0])` [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 u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/collector.rs:186:81 [INFO] [stderr] | [INFO] [stderr] 186 | impl FromLiterals for u64 { fn from_literals(v: &[u32]) -> u64 { v[0] as u64 | ((v[1] as u64) << 32) } } [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u64::from(v[1])` [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: transmute from a `u32` to a `f32` [INFO] [stderr] --> src/collector.rs:191:75 [INFO] [stderr] | [INFO] [stderr] 191 | impl FromLiterals for f32 { fn from_literals(v: &[u32]) -> f32 { unsafe { std::mem::transmute(v[0]) } } } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f32::from_bits(v[0])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_int_to_float)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_int_to_float [INFO] [stderr] [INFO] [stderr] warning: transmute from a `u64` to a `f64` [INFO] [stderr] --> src/collector.rs:192:75 [INFO] [stderr] | [INFO] [stderr] 192 | impl FromLiterals for f64 { fn from_literals(v: &[u32]) -> f64 { unsafe { std::mem::transmute(u64::from_literals(v)) } } } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f64::from_bits(u64::from_literals(v))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_int_to_float [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:231:9 [INFO] [stderr] | [INFO] [stderr] 231 | / match &ty.def [INFO] [stderr] 232 | | { [INFO] [stderr] 233 | | "e_spvt!(bool) => Ok(Box::new(const_undef::())), [INFO] [stderr] 234 | | "e_spvt!(i8) => Ok(Box::new(const_undef::())), [INFO] [stderr] ... | [INFO] [stderr] 244 | | _ => Err(ParsingError::InvalidType("OpUndef")) [INFO] [stderr] 245 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/module_loader.rs:325:123 [INFO] [stderr] | [INFO] [stderr] 325 | Load => Operation::Load { result: TypedResult { ty: args[0], id: args[1] }, from_ptr: args[2], memory_access: args.get(3).map(|&x| x).unwrap_or(0) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `args.get(3).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/module_loader.rs:326:94 [INFO] [stderr] | [INFO] [stderr] 326 | Store => Operation::Store { into_ptr: args[0], from_ptr: args[1], memory_access: args.get(2).map(|&x| x).unwrap_or(0) }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `args.get(2).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/module_loader.rs:341:9 [INFO] [stderr] | [INFO] [stderr] 341 | / match self [INFO] [stderr] 342 | | { [INFO] [stderr] 343 | | &Operation::TypeVoid { .. } | &Operation::TypeBool { .. } | &Operation::TypeInt { .. } | &Operation::TypeFloat { .. } [INFO] [stderr] 344 | | | &Operation::TypeVector { .. } | &Operation::TypeMatrix { .. } | &Operation::TypeArray { .. } | &Operation::TypeRuntimeArray { .. } [INFO] [stderr] ... | [INFO] [stderr] 348 | | _ => false [INFO] [stderr] 349 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 231 | match ty.def [INFO] [stderr] 232 | { [INFO] [stderr] 233 | ::spv::Type::Bool => Ok(Box::new(const_undef::())), [INFO] [stderr] 234 | ::spv::Type::Int(8, true) => Ok(Box::new(const_undef::())), [INFO] [stderr] 235 | ::spv::Type::Int(8, false) => Ok(Box::new(const_undef::())), [INFO] [stderr] 236 | ::spv::Type::Int(16, true) => Ok(Box::new(const_undef::())), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:249:9 [INFO] [stderr] | [INFO] [stderr] 249 | / match &ty.def [INFO] [stderr] 250 | | { [INFO] [stderr] 251 | | "e_spvt!(i8) => Ok(Box::new(Constant(i8::from_literals(literals)))), [INFO] [stderr] 252 | | "e_spvt!(u8) => Ok(Box::new(Constant(u8::from_literals(literals)))), [INFO] [stderr] ... | [INFO] [stderr] 261 | | _ => Err(ParsingError::InvalidType("OpConstant")) [INFO] [stderr] 262 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 249 | match ty.def [INFO] [stderr] 250 | { [INFO] [stderr] 251 | ::spv::Type::Int(8, true) => Ok(Box::new(Constant(i8::from_literals(literals)))), [INFO] [stderr] 252 | ::spv::Type::Int(8, false) => Ok(Box::new(Constant(u8::from_literals(literals)))), [INFO] [stderr] 253 | ::spv::Type::Int(16, true) => Ok(Box::new(Constant(i16::from_literals(literals)))), [INFO] [stderr] 254 | ::spv::Type::Int(16, false) => Ok(Box::new(Constant(u16::from_literals(literals)))), [INFO] [stderr] ... [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] 341 | match *self [INFO] [stderr] 342 | { [INFO] [stderr] 343 | Operation::TypeVoid { .. } | Operation::TypeBool { .. } | Operation::TypeInt { .. } | Operation::TypeFloat { .. } [INFO] [stderr] 344 | | Operation::TypeVector { .. } | Operation::TypeMatrix { .. } | Operation::TypeArray { .. } | Operation::TypeRuntimeArray { .. } [INFO] [stderr] 345 | | Operation::TypeStruct { .. } | Operation::TypeImage { .. } | Operation::TypeSampler { .. } | Operation::TypeSampledImage { .. } [INFO] [stderr] 346 | | Operation::TypePointer { .. } | Operation::TypeOpaque { .. } | Operation::TypeEvent { .. } | Operation::TypeDeviceEvent { .. } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/module_loader.rs:353:3 [INFO] [stderr] | [INFO] [stderr] 353 | match self [INFO] [stderr] | _________^ [INFO] [stderr] 354 | | { [INFO] [stderr] 355 | | &Operation::Constant { .. } | &Operation::ConstantTrue { .. } | &Operation::ConstantFalse { .. } | [INFO] [stderr] 356 | | &Operation::ConstantComposite { .. } | &Operation::ConstantSampler { .. } | &Operation::ConstantNull { .. } | [INFO] [stderr] ... | [INFO] [stderr] 359 | | _ => false [INFO] [stderr] 360 | | } [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] 353 | match *self [INFO] [stderr] 354 | { [INFO] [stderr] 355 | Operation::Constant { .. } | Operation::ConstantTrue { .. } | Operation::ConstantFalse { .. } | [INFO] [stderr] 356 | Operation::ConstantComposite { .. } | Operation::ConstantSampler { .. } | Operation::ConstantNull { .. } | [INFO] [stderr] 357 | Operation::SpecConstant { .. } | Operation::SpecConstantTrue { .. } | Operation::SpecConstantFalse { .. } | [INFO] [stderr] 358 | Operation::SpecConstantOp { .. } | Operation::SpecConstantComposite { .. } => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:270:9 [INFO] [stderr] | [INFO] [stderr] 270 | / match &ty.def [INFO] [stderr] 271 | | { [INFO] [stderr] 272 | | "e_spvt![ref td, n] => match &td.def [INFO] [stderr] 273 | | { [INFO] [stderr] ... | [INFO] [stderr] 286 | | _ => Err(ParsingError::InvalidType("OpConstantComposite")) [INFO] [stderr] 287 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 270 | match ty.def [INFO] [stderr] 271 | { [INFO] [stderr] 272 | ::spv::Type::Array($n, $t) => match &td.def [INFO] [stderr] 273 | { [INFO] [stderr] 274 | "e_spvt!(i8) => Ok(Box::new(const_composite::(values[..n as usize].to_owned()))), [INFO] [stderr] 275 | _ => Err(ParsingError::UnknownType { type_ref: &td.def, op: "OpTypeArray" }) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:272:40 [INFO] [stderr] | [INFO] [stderr] 272 | "e_spvt![ref td, n] => match &td.def [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 273 | | { [INFO] [stderr] 274 | | "e_spvt!(i8) => Ok(Box::new(const_composite::(values[..n as usize].to_owned()))), [INFO] [stderr] 275 | | _ => Err(ParsingError::UnknownType { type_ref: &td.def, op: "OpTypeArray" }) [INFO] [stderr] 276 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 272 | "e_spvt![ref td, n] => match td.def [INFO] [stderr] 273 | { [INFO] [stderr] 274 | ::spv::Type::Int(8, true) => Ok(Box::new(const_composite::(values[..n as usize].to_owned()))), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:279:17 [INFO] [stderr] | [INFO] [stderr] 279 | / match &td.def [INFO] [stderr] 280 | | { [INFO] [stderr] 281 | | "e_spvt!(f32) => Ok(Box::new(const_composite::(values.to_owned()))), [INFO] [stderr] 282 | | _ => Err(ParsingError::UnknownType { type_ref: &td.def, op: "OpTypeVector" }) [INFO] [stderr] 283 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 279 | match td.def [INFO] [stderr] 280 | { [INFO] [stderr] 281 | ::spv::Type::Float(32) => Ok(Box::new(const_composite::(values.to_owned()))), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/shader_interface.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | if let &Descriptor::UniformBuffer(b) = self { Some(b) } else { None } [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 Descriptor::UniformBuffer(b) = *self { Some(b) } else { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `collector::ErrorReporter` [INFO] [stderr] --> src/collector.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | pub fn new() -> Self { ErrorReporter { has_error: false, context_stack: Vec::new() } } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 17 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/shader_interface.rs:73:5 [INFO] [stderr] | [INFO] [stderr] 73 | / pub fn decorations<'m>(self, module: &'m SpirvModule) -> Option> [INFO] [stderr] 74 | | { [INFO] [stderr] 75 | | let baseid = match self { NameId::Toplevel(id) | NameId::Member(id, _) => id }; [INFO] [stderr] 76 | | let basedeco = module.decorations.lookup_in_toplevel(baseid); [INFO] [stderr] ... | [INFO] [stderr] 84 | | } [INFO] [stderr] 85 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: use of `writeln!(stderr(), ...).unwrap()`. Consider using `eprintln!` instead [INFO] [stderr] --> src/collector.rs:27:9 [INFO] [stderr] | [INFO] [stderr] 27 | writeln!(std::io::stderr(), "*Error* {}", msg).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_write)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_write [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/collector.rs:66:93 [INFO] [stderr] | [INFO] [stderr] 66 | pub fn at(&self, index: Id) -> Option<&'m Operation> { if index < self.0.len() as u32 { self.0[index as usize].clone() } else { None } } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.0[index as usize]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `BTreeMap` [INFO] [stderr] --> src/collector.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | / if t.0.contains_key(&(n as Id)) { err.report(format!("Type Definition for #{} has been found once more.", n)); } [INFO] [stderr] 79 | | else [INFO] [stderr] 80 | | { [INFO] [stderr] 81 | | let r = t.try_resolve(ops, names, n as Id, &op.unwrap()); [INFO] [stderr] 82 | | t.0.insert(n as Id, r); [INFO] [stderr] 83 | | } [INFO] [stderr] | |_____________^ help: consider using: `t.0.entry(n as Id)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `BTreeMap` [INFO] [stderr] --> src/collector.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | / if !self.0.contains_key(&id) [INFO] [stderr] 96 | | { [INFO] [stderr] 97 | | let resolved = self.try_resolve(ops, names, id, ops[id as usize].as_ref().unwrap()); [INFO] [stderr] 98 | | self.0.insert(id, resolved); [INFO] [stderr] 99 | | } [INFO] [stderr] | |_________^ help: consider using: `self.0.entry(id)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/collector.rs:100:9 [INFO] [stderr] | [INFO] [stderr] 100 | self.0.get(&id).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.0[&id]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/shader_interface.rs:174:108 [INFO] [stderr] | [INFO] [stderr] 174 | Operation::TypePointer { storage: spvdefs::StorageClass::Output, _type: parent_id, .. } => if let &spv::Typedef { def: spv::Type::Structure(ref m), .. } = collected.types.require(parent_id) [INFO] [stderr] | ____________________________________________________________________________________________________________^ [INFO] [stderr] 175 | | { [INFO] [stderr] 176 | | for (nid, m) in m.members.iter().enumerate().map(|(n, m)| (NameId::Member(parent_id, n as _), m)) [INFO] [stderr] 177 | | { [INFO] [stderr] ... | [INFO] [stderr] 184 | | } [INFO] [stderr] 185 | | }, [INFO] [stderr] | |_________________^ [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/collector.rs:186:66 [INFO] [stderr] | [INFO] [stderr] 186 | impl FromLiterals for u64 { fn from_literals(v: &[u32]) -> u64 { v[0] as u64 | ((v[1] as u64) << 32) } } [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u64::from(v[0])` [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 u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/collector.rs:186:81 [INFO] [stderr] | [INFO] [stderr] 186 | impl FromLiterals for u64 { fn from_literals(v: &[u32]) -> u64 { v[0] as u64 | ((v[1] as u64) << 32) } } [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u64::from(v[1])` [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: transmute from a `u32` to a `f32` [INFO] [stderr] --> src/collector.rs:191:75 [INFO] [stderr] | [INFO] [stderr] 191 | impl FromLiterals for f32 { fn from_literals(v: &[u32]) -> f32 { unsafe { std::mem::transmute(v[0]) } } } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f32::from_bits(v[0])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::transmute_int_to_float)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_int_to_float [INFO] [stderr] [INFO] [stderr] warning: transmute from a `u64` to a `f64` [INFO] [stderr] --> src/collector.rs:192:75 [INFO] [stderr] | [INFO] [stderr] 192 | impl FromLiterals for f64 { fn from_literals(v: &[u32]) -> f64 { unsafe { std::mem::transmute(u64::from_literals(v)) } } } [INFO] [stderr] | [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `f64::from_bits(u64::from_literals(v))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#transmute_int_to_float [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] 174 | Operation::TypePointer { storage: spvdefs::StorageClass::Output, _type: parent_id, .. } => if let spv::Typedef { def: spv::Type::Structure(ref m), .. } = *collected.types.require(parent_id) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/shader_interface.rs:186:107 [INFO] [stderr] | [INFO] [stderr] 186 | Operation::TypePointer { storage: spvdefs::StorageClass::Input, _type: parent_id, .. } => if let &spv::Typedef { def: spv::Type::Structure(ref m), .. } = collected.types.require(parent_id) [INFO] [stderr] | ___________________________________________________________________________________________________________^ [INFO] [stderr] 187 | | { [INFO] [stderr] 188 | | for (nid, m) in m.members.iter().enumerate().map(|(n, m)| (NameId::Member(parent_id, n as _), m)) [INFO] [stderr] 189 | | { [INFO] [stderr] ... | [INFO] [stderr] 196 | | } [INFO] [stderr] 197 | | }, [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] 186 | Operation::TypePointer { storage: spvdefs::StorageClass::Input, _type: parent_id, .. } => if let spv::Typedef { def: spv::Type::Structure(ref m), .. } = *collected.types.require(parent_id) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:231:9 [INFO] [stderr] | [INFO] [stderr] 231 | / match &ty.def [INFO] [stderr] 232 | | { [INFO] [stderr] 233 | | "e_spvt!(bool) => Ok(Box::new(const_undef::())), [INFO] [stderr] 234 | | "e_spvt!(i8) => Ok(Box::new(const_undef::())), [INFO] [stderr] ... | [INFO] [stderr] 244 | | _ => Err(ParsingError::InvalidType("OpUndef")) [INFO] [stderr] 245 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 231 | match ty.def [INFO] [stderr] 232 | { [INFO] [stderr] 233 | ::spv::Type::Bool => Ok(Box::new(const_undef::())), [INFO] [stderr] 234 | ::spv::Type::Int(8, true) => Ok(Box::new(const_undef::())), [INFO] [stderr] 235 | ::spv::Type::Int(8, false) => Ok(Box::new(const_undef::())), [INFO] [stderr] 236 | ::spv::Type::Int(16, true) => Ok(Box::new(const_undef::())), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:249:9 [INFO] [stderr] | [INFO] [stderr] 249 | / match &ty.def [INFO] [stderr] 250 | | { [INFO] [stderr] 251 | | "e_spvt!(i8) => Ok(Box::new(Constant(i8::from_literals(literals)))), [INFO] [stderr] 252 | | "e_spvt!(u8) => Ok(Box::new(Constant(u8::from_literals(literals)))), [INFO] [stderr] ... | [INFO] [stderr] 261 | | _ => Err(ParsingError::InvalidType("OpConstant")) [INFO] [stderr] 262 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 249 | match ty.def [INFO] [stderr] 250 | { [INFO] [stderr] 251 | ::spv::Type::Int(8, true) => Ok(Box::new(Constant(i8::from_literals(literals)))), [INFO] [stderr] 252 | ::spv::Type::Int(8, false) => Ok(Box::new(Constant(u8::from_literals(literals)))), [INFO] [stderr] 253 | ::spv::Type::Int(16, true) => Ok(Box::new(Constant(i16::from_literals(literals)))), [INFO] [stderr] 254 | ::spv::Type::Int(16, false) => Ok(Box::new(Constant(u16::from_literals(literals)))), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:270:9 [INFO] [stderr] | [INFO] [stderr] 270 | / match &ty.def [INFO] [stderr] 271 | | { [INFO] [stderr] 272 | | "e_spvt![ref td, n] => match &td.def [INFO] [stderr] 273 | | { [INFO] [stderr] ... | [INFO] [stderr] 286 | | _ => Err(ParsingError::InvalidType("OpConstantComposite")) [INFO] [stderr] 287 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 270 | match ty.def [INFO] [stderr] 271 | { [INFO] [stderr] 272 | ::spv::Type::Array($n, $t) => match &td.def [INFO] [stderr] 273 | { [INFO] [stderr] 274 | "e_spvt!(i8) => Ok(Box::new(const_composite::(values[..n as usize].to_owned()))), [INFO] [stderr] 275 | _ => Err(ParsingError::UnknownType { type_ref: &td.def, op: "OpTypeArray" }) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:272:40 [INFO] [stderr] | [INFO] [stderr] 272 | "e_spvt![ref td, n] => match &td.def [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 273 | | { [INFO] [stderr] 274 | | "e_spvt!(i8) => Ok(Box::new(const_composite::(values[..n as usize].to_owned()))), [INFO] [stderr] 275 | | _ => Err(ParsingError::UnknownType { type_ref: &td.def, op: "OpTypeArray" }) [INFO] [stderr] 276 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 272 | "e_spvt![ref td, n] => match td.def [INFO] [stderr] 273 | { [INFO] [stderr] 274 | ::spv::Type::Int(8, true) => Ok(Box::new(const_composite::(values[..n as usize].to_owned()))), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/collector.rs:279:17 [INFO] [stderr] | [INFO] [stderr] 279 | / match &td.def [INFO] [stderr] 280 | | { [INFO] [stderr] 281 | | "e_spvt!(f32) => Ok(Box::new(const_composite::(values.to_owned()))), [INFO] [stderr] 282 | | _ => Err(ParsingError::UnknownType { type_ref: &td.def, op: "OpTypeVector" }) [INFO] [stderr] 283 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 279 | match td.def [INFO] [stderr] 280 | { [INFO] [stderr] 281 | ::spv::Type::Float(32) => Ok(Box::new(const_composite::(values.to_owned()))), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/shader_interface.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | if let &Descriptor::UniformBuffer(b) = self { Some(b) } else { None } [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 Descriptor::UniformBuffer(b) = *self { Some(b) } else { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/shader_interface.rs:73:5 [INFO] [stderr] | [INFO] [stderr] 73 | / pub fn decorations<'m>(self, module: &'m SpirvModule) -> Option> [INFO] [stderr] 74 | | { [INFO] [stderr] 75 | | let baseid = match self { NameId::Toplevel(id) | NameId::Member(id, _) => id }; [INFO] [stderr] 76 | | let basedeco = module.decorations.lookup_in_toplevel(baseid); [INFO] [stderr] ... | [INFO] [stderr] 84 | | } [INFO] [stderr] 85 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/shader_interface.rs:174:108 [INFO] [stderr] | [INFO] [stderr] 174 | Operation::TypePointer { storage: spvdefs::StorageClass::Output, _type: parent_id, .. } => if let &spv::Typedef { def: spv::Type::Structure(ref m), .. } = collected.types.require(parent_id) [INFO] [stderr] | ____________________________________________________________________________________________________________^ [INFO] [stderr] 175 | | { [INFO] [stderr] 176 | | for (nid, m) in m.members.iter().enumerate().map(|(n, m)| (NameId::Member(parent_id, n as _), m)) [INFO] [stderr] 177 | | { [INFO] [stderr] ... | [INFO] [stderr] 184 | | } [INFO] [stderr] 185 | | }, [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] 174 | Operation::TypePointer { storage: spvdefs::StorageClass::Output, _type: parent_id, .. } => if let spv::Typedef { def: spv::Type::Structure(ref m), .. } = *collected.types.require(parent_id) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/shader_interface.rs:186:107 [INFO] [stderr] | [INFO] [stderr] 186 | Operation::TypePointer { storage: spvdefs::StorageClass::Input, _type: parent_id, .. } => if let &spv::Typedef { def: spv::Type::Structure(ref m), .. } = collected.types.require(parent_id) [INFO] [stderr] | ___________________________________________________________________________________________________________^ [INFO] [stderr] 187 | | { [INFO] [stderr] 188 | | for (nid, m) in m.members.iter().enumerate().map(|(n, m)| (NameId::Member(parent_id, n as _), m)) [INFO] [stderr] 189 | | { [INFO] [stderr] ... | [INFO] [stderr] 196 | | } [INFO] [stderr] 197 | | }, [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] 186 | Operation::TypePointer { storage: spvdefs::StorageClass::Input, _type: parent_id, .. } => if let spv::Typedef { def: spv::Type::Structure(ref m), .. } = *collected.types.require(parent_id) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/bin/main.rs:90:13 [INFO] [stderr] | [INFO] [stderr] 90 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/bin/main.rs:90:13 [INFO] [stderr] | [INFO] [stderr] 90 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 3.06s [INFO] running `"docker" "inspect" "f7b1aadfdc17137ff89e9c871152e37ca4717d1d48a74b742d64d4d3b4c5787b"` [INFO] running `"docker" "rm" "-f" "f7b1aadfdc17137ff89e9c871152e37ca4717d1d48a74b742d64d4d3b4c5787b"` [INFO] [stdout] f7b1aadfdc17137ff89e9c871152e37ca4717d1d48a74b742d64d4d3b4c5787b