[INFO] crate cbm 0.1.0 is already in cache [INFO] extracting crate cbm 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/cbm/0.1.0 [INFO] extracting crate cbm 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/cbm/0.1.0 [INFO] validating manifest of cbm-0.1.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 cbm-0.1.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 cbm-0.1.0 [INFO] finished frobbing cbm-0.1.0 [INFO] frobbed toml for cbm-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/cbm/0.1.0/Cargo.toml [INFO] started frobbing cbm-0.1.0 [INFO] finished frobbing cbm-0.1.0 [INFO] frobbed toml for cbm-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/cbm/0.1.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 cbm-0.1.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/cbm/0.1.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] 2424d8ad24aba8b29af016784f5aa9b5c1b6b39c4f15e282c176ae4c7cc5baa2 [INFO] running `"docker" "start" "-a" "2424d8ad24aba8b29af016784f5aa9b5c1b6b39c4f15e282c176ae4c7cc5baa2"` [INFO] [stderr] Checking clap v2.31.2 [INFO] [stderr] Checking cbm v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/disk/bam.rs:133:13 [INFO] [stderr] | [INFO] [stderr] 133 | free_sectors: free_sectors, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `free_sectors` [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/disk/bam.rs:134:13 [INFO] [stderr] | [INFO] [stderr] 134 | sector_map: sector_map, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sector_map` [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: using `writeln!(writer, "")` [INFO] [stderr] --> src/disk/block.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | writeln!(writer, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `writeln!(writer)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::writeln_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(writer, "")` [INFO] [stderr] --> src/disk/block.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | writeln!(writer, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `writeln!(writer)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/disk/chain.rs:71:13 [INFO] [stderr] | [INFO] [stderr] 71 | blocks: blocks, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `blocks` [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: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/disk/d64.rs:87:1 [INFO] [stderr] | [INFO] [stderr] 87 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/disk/d71.rs:89:1 [INFO] [stderr] | [INFO] [stderr] 89 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/disk/d81.rs:84:1 [INFO] [stderr] | [INFO] [stderr] 84 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/disk/directory.rs:609:17 [INFO] [stderr] | [INFO] [stderr] 609 | location: location, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `location` [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: literal with an empty format string [INFO] [stderr] --> src/disk/mod.rs:444:21 [INFO] [stderr] | [INFO] [stderr] 444 | 0, header.disk_name, header.disk_id, header.dos_type [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/petscii.rs:16:1 [INFO] [stderr] | [INFO] [stderr] 16 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/petscii.rs:253:13 [INFO] [stderr] | [INFO] [stderr] 253 | 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: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/sprite.rs:15:1 [INFO] [stderr] | [INFO] [stderr] 15 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/disk/bam.rs:133:13 [INFO] [stderr] | [INFO] [stderr] 133 | free_sectors: free_sectors, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `free_sectors` [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/disk/bam.rs:134:13 [INFO] [stderr] | [INFO] [stderr] 134 | sector_map: sector_map, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sector_map` [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: using `writeln!(writer, "")` [INFO] [stderr] --> src/disk/block.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | writeln!(writer, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `writeln!(writer)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::writeln_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `writeln!(writer, "")` [INFO] [stderr] --> src/disk/block.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | writeln!(writer, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `writeln!(writer)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/disk/chain.rs:71:13 [INFO] [stderr] | [INFO] [stderr] 71 | blocks: blocks, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `blocks` [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: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/disk/d64.rs:87:1 [INFO] [stderr] | [INFO] [stderr] 87 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/disk/d71.rs:89:1 [INFO] [stderr] | [INFO] [stderr] 89 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/disk/d81.rs:84:1 [INFO] [stderr] | [INFO] [stderr] 84 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/disk/directory.rs:609:17 [INFO] [stderr] | [INFO] [stderr] 609 | location: location, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `location` [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: literal with an empty format string [INFO] [stderr] --> src/disk/mod.rs:444:21 [INFO] [stderr] | [INFO] [stderr] 444 | 0, header.disk_name, header.disk_id, header.dos_type [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/petscii.rs:16:1 [INFO] [stderr] | [INFO] [stderr] 16 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/petscii.rs:253:13 [INFO] [stderr] | [INFO] [stderr] 253 | 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: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/sprite.rs:15:1 [INFO] [stderr] | [INFO] [stderr] 15 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/disk/geos/file.rs:186:16 [INFO] [stderr] | [INFO] [stderr] 186 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 187 | | if verbosity > 0 { [INFO] [stderr] 188 | | let locations = [INFO] [stderr] 189 | | ChainIterator::new(self.blocks.clone(), self.entry.first_sector).locations()?; [INFO] [stderr] ... | [INFO] [stderr] 195 | | } [INFO] [stderr] 196 | | } [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] 186 | } else if verbosity > 0 { [INFO] [stderr] 187 | let locations = [INFO] [stderr] 188 | ChainIterator::new(self.blocks.clone(), self.entry.first_sector).locations()?; [INFO] [stderr] 189 | writeln!( [INFO] [stderr] 190 | writer, [INFO] [stderr] 191 | "Occupied sectors: {}", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:99:20 [INFO] [stderr] | [INFO] [stderr] 99 | Ok(d64) => return Ok(Box::new(d64)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Box::new(d64))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:101:24 [INFO] [stderr] | [INFO] [stderr] 101 | Ok(d71) => return Ok(Box::new(d71)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Box::new(d71))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:103:17 [INFO] [stderr] | [INFO] [stderr] 103 | return Ok(Box::new(d81::D81::open(path, writable)?)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Box::new(d81::D81::open(path, writable)?))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:105:23 [INFO] [stderr] | [INFO] [stderr] 105 | Err(e) => return Err(e), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Err(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:107:19 [INFO] [stderr] | [INFO] [stderr] 107 | Err(e) => return Err(e), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Err(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/disk/bam.rs:389:42 [INFO] [stderr] | [INFO] [stderr] 389 | assert_eq!(bam_entry.sector_map, 0x17F9FF); [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0017_F9FF` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/disk/geos/file.rs:186:16 [INFO] [stderr] | [INFO] [stderr] 186 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 187 | | if verbosity > 0 { [INFO] [stderr] 188 | | let locations = [INFO] [stderr] 189 | | ChainIterator::new(self.blocks.clone(), self.entry.first_sector).locations()?; [INFO] [stderr] ... | [INFO] [stderr] 195 | | } [INFO] [stderr] 196 | | } [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] 186 | } else if verbosity > 0 { [INFO] [stderr] 187 | let locations = [INFO] [stderr] 188 | ChainIterator::new(self.blocks.clone(), self.entry.first_sector).locations()?; [INFO] [stderr] 189 | writeln!( [INFO] [stderr] 190 | writer, [INFO] [stderr] 191 | "Occupied sectors: {}", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:99:20 [INFO] [stderr] | [INFO] [stderr] 99 | Ok(d64) => return Ok(Box::new(d64)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Box::new(d64))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:101:24 [INFO] [stderr] | [INFO] [stderr] 101 | Ok(d71) => return Ok(Box::new(d71)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Box::new(d71))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:103:17 [INFO] [stderr] | [INFO] [stderr] 103 | return Ok(Box::new(d81::D81::open(path, writable)?)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Box::new(d81::D81::open(path, writable)?))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:105:23 [INFO] [stderr] | [INFO] [stderr] 105 | Err(e) => return Err(e), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Err(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/disk/mod.rs:107:19 [INFO] [stderr] | [INFO] [stderr] 107 | Err(e) => return Err(e), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Err(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u64 may become silently lossy if types change [INFO] [stderr] --> src/disk/bam.rs:129:46 [INFO] [stderr] | [INFO] [stderr] 129 | sector_map = (sector_map << 8) | bitmap[byte] as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(bitmap[byte])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `bitmap`. [INFO] [stderr] --> src/disk/bam.rs:142:18 [INFO] [stderr] | [INFO] [stderr] 142 | for i in 0..bitmap.len() { [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] 142 | for in &mut bitmap { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:144:13 [INFO] [stderr] | [INFO] [stderr] 144 | sector_map = sector_map >> 8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sector_map >>= 8` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | self.sector_map = self.sector_map & !(1u64 << sector); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.sector_map &= !(1u64 << sector)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:166:9 [INFO] [stderr] | [INFO] [stderr] 166 | self.sector_map = self.sector_map | (1u64 << sector); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.sector_map |= (1u64 << sector)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:177:13 [INFO] [stderr] | [INFO] [stderr] 177 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `free_sector_counts` [INFO] [stderr] --> src/disk/bam.rs:236:22 [INFO] [stderr] | [INFO] [stderr] 236 | for i in 0..section.tracks { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 236 | for (i, ) in free_sector_counts.iter().enumerate().take(section.tracks) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:335:17 [INFO] [stderr] | [INFO] [stderr] 335 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:349:17 [INFO] [stderr] | [INFO] [stderr] 349 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:370:17 [INFO] [stderr] | [INFO] [stderr] 370 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/block.rs:29:46 [INFO] [stderr] | [INFO] [stderr] 29 | fn read_position<'a>(&'a self, position: &Position) -> io::Result<&'a [u8]> { [INFO] [stderr] | ^^^^^^^^^ help: consider passing by value instead: `Position` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/disk/block.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | fn geometry<'a>(&'a self) -> &'a Geometry; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/disk/block.rs:109:5 [INFO] [stderr] | [INFO] [stderr] 109 | / fn geometry<'a>(&'a self) -> &'a Geometry { [INFO] [stderr] 110 | | self.geometry [INFO] [stderr] 111 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/block.rs:160:21 [INFO] [stderr] | [INFO] [stderr] 160 | pub fn to_bytes(&self, bytes: &mut [u8]) { [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: statement can be reduced [INFO] [stderr] --> src/disk/chain.rs:158:21 [INFO] [stderr] | [INFO] [stderr] 158 | &buf[0..nbytes].copy_from_slice(&block[0..nbytes]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `buf[0..nbytes].copy_from_slice(&block[0..nbytes]);` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_operation)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/disk/chain.rs:335:13 [INFO] [stderr] | [INFO] [stderr] 335 | &self.block[offset..offset + nbytes].copy_from_slice(&buf[0..nbytes]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.block[offset..offset + nbytes].copy_from_slice(&buf[0..nbytes]);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d64.rs:247:9 [INFO] [stderr] | [INFO] [stderr] 247 | / match &self.header { [INFO] [stderr] 248 | | &Some(ref header) => Ok(&header), [INFO] [stderr] 249 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 250 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 247 | match self.header { [INFO] [stderr] 248 | Some(ref header) => Ok(&header), [INFO] [stderr] 249 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/d64.rs:255:9 [INFO] [stderr] | [INFO] [stderr] 255 | / match &mut self.header { [INFO] [stderr] 256 | | &mut Some(ref mut header) => Ok(header), [INFO] [stderr] 257 | | &mut None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 258 | | } [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] 255 | match *(&mut self.header) { [INFO] [stderr] 256 | Some(ref mut header) => Ok(header), [INFO] [stderr] 257 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d64.rs:274:9 [INFO] [stderr] | [INFO] [stderr] 274 | / match &self.bam { [INFO] [stderr] 275 | | &Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 276 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 277 | | } [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] 274 | match self.bam { [INFO] [stderr] 275 | Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 276 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d71.rs:268:9 [INFO] [stderr] | [INFO] [stderr] 268 | / match &self.header { [INFO] [stderr] 269 | | &Some(ref header) => Ok(&header), [INFO] [stderr] 270 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 271 | | } [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] 268 | match self.header { [INFO] [stderr] 269 | Some(ref header) => Ok(&header), [INFO] [stderr] 270 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/d71.rs:276:9 [INFO] [stderr] | [INFO] [stderr] 276 | / match &mut self.header { [INFO] [stderr] 277 | | &mut Some(ref mut header) => Ok(header), [INFO] [stderr] 278 | | &mut None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 279 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 276 | match *(&mut self.header) { [INFO] [stderr] 277 | Some(ref mut header) => Ok(header), [INFO] [stderr] 278 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d71.rs:295:9 [INFO] [stderr] | [INFO] [stderr] 295 | / match &self.bam { [INFO] [stderr] 296 | | &Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 297 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 298 | | } [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] 295 | match self.bam { [INFO] [stderr] 296 | Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 297 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d81.rs:273:9 [INFO] [stderr] | [INFO] [stderr] 273 | / match &self.header { [INFO] [stderr] 274 | | &Some(ref header) => Ok(&header), [INFO] [stderr] 275 | | &None => Err(DiskError::Unformatted.into()), [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] 273 | match self.header { [INFO] [stderr] 274 | Some(ref header) => Ok(&header), [INFO] [stderr] 275 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/d81.rs:281:9 [INFO] [stderr] | [INFO] [stderr] 281 | / match &mut self.header { [INFO] [stderr] 282 | | &mut Some(ref mut header) => Ok(header), [INFO] [stderr] 283 | | &mut None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 284 | | } [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] 281 | match *(&mut self.header) { [INFO] [stderr] 282 | Some(ref mut header) => Ok(header), [INFO] [stderr] 283 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d81.rs:300:9 [INFO] [stderr] | [INFO] [stderr] 300 | / match &self.bam { [INFO] [stderr] 301 | | &Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 302 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 303 | | } [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] 300 | match self.bam { [INFO] [stderr] 301 | Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 302 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/disk/format.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | i >= &(self.first_track as usize) [INFO] [stderr] | ^^^^^---------------------------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `(self.first_track as usize)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/disk/format.rs:142:24 [INFO] [stderr] | [INFO] [stderr] 142 | && i <= &(self.last_track as usize) [INFO] [stderr] | ^^^^^--------------------------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `(self.last_track as usize)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/format.rs:193:13 [INFO] [stderr] | [INFO] [stderr] 193 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/header.rs:44:13 [INFO] [stderr] | [INFO] [stderr] 44 | id: &Id, [INFO] [stderr] | ^^^ help: consider passing by value instead: `Id` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/disk/header.rs:50:22 [INFO] [stderr] | [INFO] [stderr] 50 | disk_id: id.clone(), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*id` [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/disk/validation.rs:158:47 [INFO] [stderr] | [INFO] [stderr] 158 | let occupied_sectors = HashSet::from_iter(occupied_sector_map.keys().map(|l| l.clone())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `occupied_sector_map.keys().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: using `clone` on a `Copy` type [INFO] [stderr] --> src/disk/validation.rs:158:82 [INFO] [stderr] | [INFO] [stderr] 158 | let occupied_sectors = HashSet::from_iter(occupied_sector_map.keys().map(|l| l.clone())); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*l` [INFO] [stderr] | [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disk/validation.rs:182:14 [INFO] [stderr] | [INFO] [stderr] 182 | .unwrap_or("None".into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "None".into())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/disk/validation.rs:179:24 [INFO] [stderr] | [INFO] [stderr] 179 | let filename = occupied_sector_map [INFO] [stderr] | ________________________^ [INFO] [stderr] 180 | | .get(misoccupied_sector) [INFO] [stderr] 181 | | .map(|f| f.clone()) [INFO] [stderr] | |_______________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 179 | let filename = occupied_sector_map [INFO] [stderr] 180 | .get(misoccupied_sector).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/directory.rs:54:21 [INFO] [stderr] | [INFO] [stderr] 54 | f.write_str(match self { [INFO] [stderr] | _____________________^ [INFO] [stderr] 55 | | &FileType::DEL => "del", [INFO] [stderr] 56 | | &FileType::SEQ => "seq", [INFO] [stderr] 57 | | &FileType::PRG => "prg", [INFO] [stderr] ... | [INFO] [stderr] 60 | | &FileType::Unknown(_) => "unk", [INFO] [stderr] 61 | | }) [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] 54 | f.write_str(match *self { [INFO] [stderr] 55 | FileType::DEL => "del", [INFO] [stderr] 56 | FileType::SEQ => "seq", [INFO] [stderr] 57 | FileType::PRG => "prg", [INFO] [stderr] 58 | FileType::USR => "usr", [INFO] [stderr] 59 | FileType::REL => "rel", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/directory.rs:106:24 [INFO] [stderr] | [INFO] [stderr] 106 | let mut byte = match &self.file_type { [INFO] [stderr] | ________________________^ [INFO] [stderr] 107 | | &FileType::DEL => FILE_TYPE_DEL, [INFO] [stderr] 108 | | &FileType::SEQ => FILE_TYPE_SEQ, [INFO] [stderr] 109 | | &FileType::PRG => FILE_TYPE_PRG, [INFO] [stderr] ... | [INFO] [stderr] 112 | | &FileType::Unknown(b) => b, [INFO] [stderr] 113 | | }; [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] 106 | let mut byte = match self.file_type { [INFO] [stderr] 107 | FileType::DEL => FILE_TYPE_DEL, [INFO] [stderr] 108 | FileType::SEQ => FILE_TYPE_SEQ, [INFO] [stderr] 109 | FileType::PRG => FILE_TYPE_PRG, [INFO] [stderr] 110 | FileType::USR => FILE_TYPE_USR, [INFO] [stderr] 111 | FileType::REL => FILE_TYPE_REL, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/directory.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | byte = byte | FILE_ATTRIB_UNUSED_MASK [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `byte |= FILE_ATTRIB_UNUSED_MASK` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/directory.rs:118:13 [INFO] [stderr] | [INFO] [stderr] 118 | byte = byte | FILE_ATTRIB_SAVE_WITH_REPLACE_MASK [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `byte |= FILE_ATTRIB_SAVE_WITH_REPLACE_MASK` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/directory.rs:121:13 [INFO] [stderr] | [INFO] [stderr] 121 | byte = byte | FILE_ATTRIB_LOCKED_MASK [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `byte |= FILE_ATTRIB_LOCKED_MASK` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/directory.rs:124:13 [INFO] [stderr] | [INFO] [stderr] 124 | byte = byte | FILE_ATTRIB_CLOSED_MASK [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `byte |= FILE_ATTRIB_CLOSED_MASK` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/directory.rs:445:25 [INFO] [stderr] | [INFO] [stderr] 445 | file_size: ((bytes[ENTRY_FILE_SIZE_OFFSET + 1] as u16) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(bytes[ENTRY_FILE_SIZE_OFFSET + 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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/directory.rs:446:19 [INFO] [stderr] | [INFO] [stderr] 446 | | (bytes[ENTRY_FILE_SIZE_OFFSET] as u16), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(bytes[ENTRY_FILE_SIZE_OFFSET])` [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: the loop variable `offset` is only used to index `block`. [INFO] [stderr] --> src/disk/directory.rs:760:23 [INFO] [stderr] | [INFO] [stderr] 760 | for offset in 2..BLOCK_SIZE { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [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] 760 | for in block.iter_mut().take(BLOCK_SIZE).skip(2) { [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/disk/geos/file.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | / fn entry<'a>(&'a self) -> &'a DirectoryEntry { [INFO] [stderr] 87 | | &self.entry [INFO] [stderr] 88 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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 `unwrap_or` followed by a function call [INFO] [stderr] --> src/disk/geos/file.rs:156:18 [INFO] [stderr] | [INFO] [stderr] 156 | .unwrap_or(records.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| records.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/disk/geos/reader.rs:78:18 [INFO] [stderr] | [INFO] [stderr] 78 | .ok_or(DiskError::GEOSInfoNotFound.to_io_error())?, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| DiskError::GEOSInfoNotFound.to_io_error())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/disk/geos/reader.rs:215:13 [INFO] [stderr] | [INFO] [stderr] 215 | &mut buf[..bytes].copy_from_slice(&self.buffer[..bytes]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `buf[..bytes].copy_from_slice(&self.buffer[..bytes]);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/disk/geos/reader.rs:232:16 [INFO] [stderr] | [INFO] [stderr] 232 | if self.buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.buffer.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/geos/mod.rs:75:20 [INFO] [stderr] | [INFO] [stderr] 75 | pub fn to_byte(&self) -> u8 { [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/geos/mod.rs:140:20 [INFO] [stderr] | [INFO] [stderr] 140 | pub fn to_byte(&self) -> u8 { [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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/geos/mod.rs:238:6 [INFO] [stderr] | [INFO] [stderr] 238 | ((bytes[1] as u16) << 8) | (bytes[0] as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u16::from(bytes[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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/geos/mod.rs:238:32 [INFO] [stderr] | [INFO] [stderr] 238 | ((bytes[1] as u16) << 8) | (bytes[0] as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u16::from(bytes[0])` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/mod.rs:197:52 [INFO] [stderr] | [INFO] [stderr] 197 | fn write_format(&mut self, name: &Petscii, id: &Id) -> io::Result<()> { [INFO] [stderr] | ^^^ help: consider passing by value instead: `Id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the loop variable `offset` is only used to index `block`. [INFO] [stderr] --> src/disk/mod.rs:207:31 [INFO] [stderr] | [INFO] [stderr] 207 | for offset in 0..BLOCK_SIZE { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [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] 207 | for in block.iter_mut().take(BLOCK_SIZE) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disk/mod.rs:266:14 [INFO] [stderr] | [INFO] [stderr] 266 | .unwrap_or(Err(DiskError::NotFound.into())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Err(DiskError::NotFound.into()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/mod.rs:262:23 [INFO] [stderr] | [INFO] [stderr] 262 | .find(|x| match x { [INFO] [stderr] | _______________________^ [INFO] [stderr] 263 | | &Err(_) => true, [INFO] [stderr] 264 | | &Ok(ref entry) => entry.filename == *filename, [INFO] [stderr] 265 | | }) [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] 262 | .find(|x| match *x { [INFO] [stderr] 263 | Err(_) => true, [INFO] [stderr] 264 | Ok(ref entry) => entry.filename == *filename, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/disk/mod.rs:294:26 [INFO] [stderr] | [INFO] [stderr] 294 | _ => Err(e.into()), [INFO] [stderr] | ^^^^^^^^ help: consider removing `.into()`: `e` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/disk/mod.rs:391:20 [INFO] [stderr] | [INFO] [stderr] 391 | fn read_sector<'a>(&self, location: Location) -> io::Result> { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [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/disk/mod.rs:412:5 [INFO] [stderr] | [INFO] [stderr] 412 | / fn name<'a>(&'a self) -> Option<&'a Petscii> { [INFO] [stderr] 413 | | match &self.header() { [INFO] [stderr] 414 | | &Ok(ref header) => Some(&header.disk_name), [INFO] [stderr] 415 | | &Err(_) => None, [INFO] [stderr] 416 | | } [INFO] [stderr] 417 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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 both the expression and the patterns [INFO] [stderr] --> src/disk/mod.rs:413:9 [INFO] [stderr] | [INFO] [stderr] 413 | / match &self.header() { [INFO] [stderr] 414 | | &Ok(ref header) => Some(&header.disk_name), [INFO] [stderr] 415 | | &Err(_) => None, [INFO] [stderr] 416 | | } [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] 413 | match self.header() { [INFO] [stderr] 414 | Ok(ref header) => Some(&header.disk_name), [INFO] [stderr] 415 | Err(_) => None, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/mod.rs:439:9 [INFO] [stderr] | [INFO] [stderr] 439 | / match &self.header() { [INFO] [stderr] 440 | | &Ok(ref header) => { [INFO] [stderr] 441 | | write!( [INFO] [stderr] 442 | | f, [INFO] [stderr] ... | [INFO] [stderr] 451 | | &Err(ref e) => write!(f, "Cannot read header: {}", e), [INFO] [stderr] 452 | | } [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] 439 | match self.header() { [INFO] [stderr] 440 | Ok(ref header) => { [INFO] [stderr] 441 | write!( [INFO] [stderr] 442 | f, [INFO] [stderr] 443 | "{} \"{:16}\" {} {}", [INFO] [stderr] 444 | 0, header.disk_name, header.disk_id, header.dos_type [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/disk/mod.rs:582:16 [INFO] [stderr] | [INFO] [stderr] 582 | if bytes.len() > 0 { bytes[0] } else { 0 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes.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: item `petscii::Petscii` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/petscii.rs:95:1 [INFO] [stderr] | [INFO] [stderr] 95 | / impl Petscii { [INFO] [stderr] 96 | | pub fn from_bytes(bytes: &[u8]) -> Petscii { [INFO] [stderr] 97 | | Petscii(bytes.to_owned()) [INFO] [stderr] 98 | | } [INFO] [stderr] ... | [INFO] [stderr] 154 | | } [INFO] [stderr] 155 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/petscii.rs:115:5 [INFO] [stderr] | [INFO] [stderr] 115 | / pub fn from_str(string: &str) -> Petscii { [INFO] [stderr] 116 | | let mut petscii_bytes = Vec::with_capacity(string.len()); [INFO] [stderr] 117 | | 'outer: for c in string.chars() { [INFO] [stderr] 118 | | // This is inefficient, but hopefully seldom used. [INFO] [stderr] ... | [INFO] [stderr] 127 | | Petscii(petscii_bytes.to_owned()) [INFO] [stderr] 128 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: the loop variable `p` is used to index `PETSCII_TO_CHAR_MAP` [INFO] [stderr] --> src/petscii.rs:119:22 [INFO] [stderr] | [INFO] [stderr] 119 | for p in 0..PETSCII_TO_CHAR_MAP.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 119 | for (p, ) in PETSCII_TO_CHAR_MAP.iter().enumerate() { [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/petscii.rs:130:5 [INFO] [stderr] | [INFO] [stderr] 130 | / pub fn as_bytes<'a>(&'a self) -> &'a [u8] { [INFO] [stderr] 131 | | &self.0 [INFO] [stderr] 132 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/petscii.rs:148:13 [INFO] [stderr] | [INFO] [stderr] 148 | &bytes[..src_len].copy_from_slice(&self.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bytes[..src_len].copy_from_slice(&self.0);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `bytes`. [INFO] [stderr] --> src/petscii.rs:149:22 [INFO] [stderr] | [INFO] [stderr] 149 | for i in src_len..dst_len { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 149 | for in bytes.iter_mut().take(dst_len).skip(src_len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/petscii.rs:237:19 [INFO] [stderr] | [INFO] [stderr] 237 | (&self.0).into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util/mod.rs:12:8 [INFO] [stderr] | [INFO] [stderr] 12 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.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: casting u8 to u64 may become silently lossy if types change [INFO] [stderr] --> src/disk/bam.rs:129:46 [INFO] [stderr] | [INFO] [stderr] 129 | sector_map = (sector_map << 8) | bitmap[byte] as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(bitmap[byte])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `bitmap`. [INFO] [stderr] --> src/disk/bam.rs:142:18 [INFO] [stderr] | [INFO] [stderr] 142 | for i in 0..bitmap.len() { [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] 142 | for in &mut bitmap { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:144:13 [INFO] [stderr] | [INFO] [stderr] 144 | sector_map = sector_map >> 8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sector_map >>= 8` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | self.sector_map = self.sector_map & !(1u64 << sector); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.sector_map &= !(1u64 << sector)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:166:9 [INFO] [stderr] | [INFO] [stderr] 166 | self.sector_map = self.sector_map | (1u64 << sector); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.sector_map |= (1u64 << sector)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:177:13 [INFO] [stderr] | [INFO] [stderr] 177 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `free_sector_counts` [INFO] [stderr] --> src/disk/bam.rs:236:22 [INFO] [stderr] | [INFO] [stderr] 236 | for i in 0..section.tracks { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 236 | for (i, ) in free_sector_counts.iter().enumerate().take(section.tracks) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:335:17 [INFO] [stderr] | [INFO] [stderr] 335 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:349:17 [INFO] [stderr] | [INFO] [stderr] 349 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/bam.rs:370:17 [INFO] [stderr] | [INFO] [stderr] 370 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/block.rs:29:46 [INFO] [stderr] | [INFO] [stderr] 29 | fn read_position<'a>(&'a self, position: &Position) -> io::Result<&'a [u8]> { [INFO] [stderr] | ^^^^^^^^^ help: consider passing by value instead: `Position` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/disk/block.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | fn geometry<'a>(&'a self) -> &'a Geometry; [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/disk/block.rs:109:5 [INFO] [stderr] | [INFO] [stderr] 109 | / fn geometry<'a>(&'a self) -> &'a Geometry { [INFO] [stderr] 110 | | self.geometry [INFO] [stderr] 111 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/block.rs:160:21 [INFO] [stderr] | [INFO] [stderr] 160 | pub fn to_bytes(&self, bytes: &mut [u8]) { [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: statement can be reduced [INFO] [stderr] --> src/disk/chain.rs:158:21 [INFO] [stderr] | [INFO] [stderr] 158 | &buf[0..nbytes].copy_from_slice(&block[0..nbytes]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `buf[0..nbytes].copy_from_slice(&block[0..nbytes]);` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_operation)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/disk/chain.rs:335:13 [INFO] [stderr] | [INFO] [stderr] 335 | &self.block[offset..offset + nbytes].copy_from_slice(&buf[0..nbytes]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.block[offset..offset + nbytes].copy_from_slice(&buf[0..nbytes]);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d64.rs:247:9 [INFO] [stderr] | [INFO] [stderr] 247 | / match &self.header { [INFO] [stderr] 248 | | &Some(ref header) => Ok(&header), [INFO] [stderr] 249 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 250 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 247 | match self.header { [INFO] [stderr] 248 | Some(ref header) => Ok(&header), [INFO] [stderr] 249 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/d64.rs:255:9 [INFO] [stderr] | [INFO] [stderr] 255 | / match &mut self.header { [INFO] [stderr] 256 | | &mut Some(ref mut header) => Ok(header), [INFO] [stderr] 257 | | &mut None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 258 | | } [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] 255 | match *(&mut self.header) { [INFO] [stderr] 256 | Some(ref mut header) => Ok(header), [INFO] [stderr] 257 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d64.rs:274:9 [INFO] [stderr] | [INFO] [stderr] 274 | / match &self.bam { [INFO] [stderr] 275 | | &Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 276 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 277 | | } [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] 274 | match self.bam { [INFO] [stderr] 275 | Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 276 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/d64.rs:298:30 [INFO] [stderr] | [INFO] [stderr] 298 | sector_offset += track.sectors as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(track.sectors)` [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 u32 may become silently lossy if types change [INFO] [stderr] --> src/disk/d64.rs:299:28 [INFO] [stderr] | [INFO] [stderr] 299 | byte_offset += track.sectors as u32 * BLOCK_SIZE as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(track.sectors)` [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 don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d71.rs:268:9 [INFO] [stderr] | [INFO] [stderr] 268 | / match &self.header { [INFO] [stderr] 269 | | &Some(ref header) => Ok(&header), [INFO] [stderr] 270 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 271 | | } [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] 268 | match self.header { [INFO] [stderr] 269 | Some(ref header) => Ok(&header), [INFO] [stderr] 270 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/d71.rs:276:9 [INFO] [stderr] | [INFO] [stderr] 276 | / match &mut self.header { [INFO] [stderr] 277 | | &mut Some(ref mut header) => Ok(header), [INFO] [stderr] 278 | | &mut None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 279 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 276 | match *(&mut self.header) { [INFO] [stderr] 277 | Some(ref mut header) => Ok(header), [INFO] [stderr] 278 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d71.rs:295:9 [INFO] [stderr] | [INFO] [stderr] 295 | / match &self.bam { [INFO] [stderr] 296 | | &Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 297 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 298 | | } [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] 295 | match self.bam { [INFO] [stderr] 296 | Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 297 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/d71.rs:319:30 [INFO] [stderr] | [INFO] [stderr] 319 | sector_offset += track.sectors as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(track.sectors)` [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 u32 may become silently lossy if types change [INFO] [stderr] --> src/disk/d71.rs:320:28 [INFO] [stderr] | [INFO] [stderr] 320 | byte_offset += track.sectors as u32 * BLOCK_SIZE as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(track.sectors)` [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 don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d81.rs:273:9 [INFO] [stderr] | [INFO] [stderr] 273 | / match &self.header { [INFO] [stderr] 274 | | &Some(ref header) => Ok(&header), [INFO] [stderr] 275 | | &None => Err(DiskError::Unformatted.into()), [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] 273 | match self.header { [INFO] [stderr] 274 | Some(ref header) => Ok(&header), [INFO] [stderr] 275 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/d81.rs:281:9 [INFO] [stderr] | [INFO] [stderr] 281 | / match &mut self.header { [INFO] [stderr] 282 | | &mut Some(ref mut header) => Ok(header), [INFO] [stderr] 283 | | &mut None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 284 | | } [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] 281 | match *(&mut self.header) { [INFO] [stderr] 282 | Some(ref mut header) => Ok(header), [INFO] [stderr] 283 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/d81.rs:300:9 [INFO] [stderr] | [INFO] [stderr] 300 | / match &self.bam { [INFO] [stderr] 301 | | &Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 302 | | &None => Err(DiskError::Unformatted.into()), [INFO] [stderr] 303 | | } [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] 300 | match self.bam { [INFO] [stderr] 301 | Some(ref bam) => Ok(bam.clone()), [INFO] [stderr] 302 | None => Err(DiskError::Unformatted.into()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/d81.rs:324:30 [INFO] [stderr] | [INFO] [stderr] 324 | sector_offset += track.sectors as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(track.sectors)` [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 u32 may become silently lossy if types change [INFO] [stderr] --> src/disk/d81.rs:325:28 [INFO] [stderr] | [INFO] [stderr] 325 | byte_offset += track.sectors as u32 * BLOCK_SIZE as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(track.sectors)` [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: taken reference of right operand [INFO] [stderr] --> src/disk/format.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | i >= &(self.first_track as usize) [INFO] [stderr] | ^^^^^---------------------------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `(self.first_track as usize)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/disk/format.rs:142:24 [INFO] [stderr] | [INFO] [stderr] 142 | && i <= &(self.last_track as usize) [INFO] [stderr] | ^^^^^--------------------------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `(self.last_track as usize)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/format.rs:193:13 [INFO] [stderr] | [INFO] [stderr] 193 | map = map >> 1; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `map >>= 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/header.rs:44:13 [INFO] [stderr] | [INFO] [stderr] 44 | id: &Id, [INFO] [stderr] | ^^^ help: consider passing by value instead: `Id` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/disk/header.rs:50:22 [INFO] [stderr] | [INFO] [stderr] 50 | disk_id: id.clone(), [INFO] [stderr] | ^^^^^^^^^^ help: try dereferencing it: `*id` [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/disk/validation.rs:158:47 [INFO] [stderr] | [INFO] [stderr] 158 | let occupied_sectors = HashSet::from_iter(occupied_sector_map.keys().map(|l| l.clone())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `occupied_sector_map.keys().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: using `clone` on a `Copy` type [INFO] [stderr] --> src/disk/validation.rs:158:82 [INFO] [stderr] | [INFO] [stderr] 158 | let occupied_sectors = HashSet::from_iter(occupied_sector_map.keys().map(|l| l.clone())); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*l` [INFO] [stderr] | [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disk/validation.rs:182:14 [INFO] [stderr] | [INFO] [stderr] 182 | .unwrap_or("None".into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "None".into())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/disk/validation.rs:179:24 [INFO] [stderr] | [INFO] [stderr] 179 | let filename = occupied_sector_map [INFO] [stderr] | ________________________^ [INFO] [stderr] 180 | | .get(misoccupied_sector) [INFO] [stderr] 181 | | .map(|f| f.clone()) [INFO] [stderr] | |_______________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 179 | let filename = occupied_sector_map [INFO] [stderr] 180 | .get(misoccupied_sector).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/directory.rs:54:21 [INFO] [stderr] | [INFO] [stderr] 54 | f.write_str(match self { [INFO] [stderr] | _____________________^ [INFO] [stderr] 55 | | &FileType::DEL => "del", [INFO] [stderr] 56 | | &FileType::SEQ => "seq", [INFO] [stderr] 57 | | &FileType::PRG => "prg", [INFO] [stderr] ... | [INFO] [stderr] 60 | | &FileType::Unknown(_) => "unk", [INFO] [stderr] 61 | | }) [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] 54 | f.write_str(match *self { [INFO] [stderr] 55 | FileType::DEL => "del", [INFO] [stderr] 56 | FileType::SEQ => "seq", [INFO] [stderr] 57 | FileType::PRG => "prg", [INFO] [stderr] 58 | FileType::USR => "usr", [INFO] [stderr] 59 | FileType::REL => "rel", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/directory.rs:106:24 [INFO] [stderr] | [INFO] [stderr] 106 | let mut byte = match &self.file_type { [INFO] [stderr] | ________________________^ [INFO] [stderr] 107 | | &FileType::DEL => FILE_TYPE_DEL, [INFO] [stderr] 108 | | &FileType::SEQ => FILE_TYPE_SEQ, [INFO] [stderr] 109 | | &FileType::PRG => FILE_TYPE_PRG, [INFO] [stderr] ... | [INFO] [stderr] 112 | | &FileType::Unknown(b) => b, [INFO] [stderr] 113 | | }; [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] 106 | let mut byte = match self.file_type { [INFO] [stderr] 107 | FileType::DEL => FILE_TYPE_DEL, [INFO] [stderr] 108 | FileType::SEQ => FILE_TYPE_SEQ, [INFO] [stderr] 109 | FileType::PRG => FILE_TYPE_PRG, [INFO] [stderr] 110 | FileType::USR => FILE_TYPE_USR, [INFO] [stderr] 111 | FileType::REL => FILE_TYPE_REL, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/directory.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | byte = byte | FILE_ATTRIB_UNUSED_MASK [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `byte |= FILE_ATTRIB_UNUSED_MASK` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/directory.rs:118:13 [INFO] [stderr] | [INFO] [stderr] 118 | byte = byte | FILE_ATTRIB_SAVE_WITH_REPLACE_MASK [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `byte |= FILE_ATTRIB_SAVE_WITH_REPLACE_MASK` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/directory.rs:121:13 [INFO] [stderr] | [INFO] [stderr] 121 | byte = byte | FILE_ATTRIB_LOCKED_MASK [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `byte |= FILE_ATTRIB_LOCKED_MASK` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/disk/directory.rs:124:13 [INFO] [stderr] | [INFO] [stderr] 124 | byte = byte | FILE_ATTRIB_CLOSED_MASK [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `byte |= FILE_ATTRIB_CLOSED_MASK` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/directory.rs:445:25 [INFO] [stderr] | [INFO] [stderr] 445 | file_size: ((bytes[ENTRY_FILE_SIZE_OFFSET + 1] as u16) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(bytes[ENTRY_FILE_SIZE_OFFSET + 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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/directory.rs:446:19 [INFO] [stderr] | [INFO] [stderr] 446 | | (bytes[ENTRY_FILE_SIZE_OFFSET] as u16), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(bytes[ENTRY_FILE_SIZE_OFFSET])` [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: the loop variable `offset` is only used to index `block`. [INFO] [stderr] --> src/disk/directory.rs:760:23 [INFO] [stderr] | [INFO] [stderr] 760 | for offset in 2..BLOCK_SIZE { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [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] 760 | for in block.iter_mut().take(BLOCK_SIZE).skip(2) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 41 [INFO] [stderr] --> src/disk/directory.rs:844:5 [INFO] [stderr] | [INFO] [stderr] 844 | / fn test_directory_entry() { [INFO] [stderr] 845 | | // All bits cleared [INFO] [stderr] 846 | | static BUFFER1: [u8; ENTRY_SIZE] = [0u8; ENTRY_SIZE]; [INFO] [stderr] 847 | | let entry = DirectoryEntry::from_bytes(&BUFFER1); [INFO] [stderr] ... | [INFO] [stderr] 936 | | assert_eq!(entry.file_size, 0x0006); [INFO] [stderr] 937 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/directory.rs:885:14 [INFO] [stderr] | [INFO] [stderr] 885 | ((PADDING_BYTE as u16) << 8) | (PADDING_BYTE as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(PADDING_BYTE)` [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 u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/directory.rs:885:44 [INFO] [stderr] | [INFO] [stderr] 885 | ((PADDING_BYTE as u16) << 8) | (PADDING_BYTE as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(PADDING_BYTE)` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/disk/geos/file.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | / fn entry<'a>(&'a self) -> &'a DirectoryEntry { [INFO] [stderr] 87 | | &self.entry [INFO] [stderr] 88 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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 `unwrap_or` followed by a function call [INFO] [stderr] --> src/disk/geos/file.rs:156:18 [INFO] [stderr] | [INFO] [stderr] 156 | .unwrap_or(records.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| records.len())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/disk/geos/reader.rs:78:18 [INFO] [stderr] | [INFO] [stderr] 78 | .ok_or(DiskError::GEOSInfoNotFound.to_io_error())?, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| DiskError::GEOSInfoNotFound.to_io_error())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/disk/geos/reader.rs:215:13 [INFO] [stderr] | [INFO] [stderr] 215 | &mut buf[..bytes].copy_from_slice(&self.buffer[..bytes]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `buf[..bytes].copy_from_slice(&self.buffer[..bytes]);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/disk/geos/reader.rs:232:16 [INFO] [stderr] | [INFO] [stderr] 232 | if self.buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.buffer.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/geos/mod.rs:75:20 [INFO] [stderr] | [INFO] [stderr] 75 | pub fn to_byte(&self) -> u8 { [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/geos/mod.rs:140:20 [INFO] [stderr] | [INFO] [stderr] 140 | pub fn to_byte(&self) -> u8 { [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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/geos/mod.rs:238:6 [INFO] [stderr] | [INFO] [stderr] 238 | ((bytes[1] as u16) << 8) | (bytes[0] as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u16::from(bytes[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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/disk/geos/mod.rs:238:32 [INFO] [stderr] | [INFO] [stderr] 238 | ((bytes[1] as u16) << 8) | (bytes[0] as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u16::from(bytes[0])` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/disk/mod.rs:197:52 [INFO] [stderr] | [INFO] [stderr] 197 | fn write_format(&mut self, name: &Petscii, id: &Id) -> io::Result<()> { [INFO] [stderr] | ^^^ help: consider passing by value instead: `Id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the loop variable `offset` is only used to index `block`. [INFO] [stderr] --> src/disk/mod.rs:207:31 [INFO] [stderr] | [INFO] [stderr] 207 | for offset in 0..BLOCK_SIZE { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [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] 207 | for in block.iter_mut().take(BLOCK_SIZE) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/disk/mod.rs:266:14 [INFO] [stderr] | [INFO] [stderr] 266 | .unwrap_or(Err(DiskError::NotFound.into())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Err(DiskError::NotFound.into()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/disk/mod.rs:262:23 [INFO] [stderr] | [INFO] [stderr] 262 | .find(|x| match x { [INFO] [stderr] | _______________________^ [INFO] [stderr] 263 | | &Err(_) => true, [INFO] [stderr] 264 | | &Ok(ref entry) => entry.filename == *filename, [INFO] [stderr] 265 | | }) [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] 262 | .find(|x| match *x { [INFO] [stderr] 263 | Err(_) => true, [INFO] [stderr] 264 | Ok(ref entry) => entry.filename == *filename, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/disk/mod.rs:294:26 [INFO] [stderr] | [INFO] [stderr] 294 | _ => Err(e.into()), [INFO] [stderr] | ^^^^^^^^ help: consider removing `.into()`: `e` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/disk/mod.rs:391:20 [INFO] [stderr] | [INFO] [stderr] 391 | fn read_sector<'a>(&self, location: Location) -> io::Result> { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [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/disk/mod.rs:412:5 [INFO] [stderr] | [INFO] [stderr] 412 | / fn name<'a>(&'a self) -> Option<&'a Petscii> { [INFO] [stderr] 413 | | match &self.header() { [INFO] [stderr] 414 | | &Ok(ref header) => Some(&header.disk_name), [INFO] [stderr] 415 | | &Err(_) => None, [INFO] [stderr] 416 | | } [INFO] [stderr] 417 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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 both the expression and the patterns [INFO] [stderr] --> src/disk/mod.rs:413:9 [INFO] [stderr] | [INFO] [stderr] 413 | / match &self.header() { [INFO] [stderr] 414 | | &Ok(ref header) => Some(&header.disk_name), [INFO] [stderr] 415 | | &Err(_) => None, [INFO] [stderr] 416 | | } [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] 413 | match self.header() { [INFO] [stderr] 414 | Ok(ref header) => Some(&header.disk_name), [INFO] [stderr] 415 | Err(_) => None, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/disk/mod.rs:439:9 [INFO] [stderr] | [INFO] [stderr] 439 | / match &self.header() { [INFO] [stderr] 440 | | &Ok(ref header) => { [INFO] [stderr] 441 | | write!( [INFO] [stderr] 442 | | f, [INFO] [stderr] ... | [INFO] [stderr] 451 | | &Err(ref e) => write!(f, "Cannot read header: {}", e), [INFO] [stderr] 452 | | } [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] 439 | match self.header() { [INFO] [stderr] 440 | Ok(ref header) => { [INFO] [stderr] 441 | write!( [INFO] [stderr] 442 | f, [INFO] [stderr] 443 | "{} \"{:16}\" {} {}", [INFO] [stderr] 444 | 0, header.disk_name, header.disk_id, header.dos_type [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/disk/mod.rs:582:16 [INFO] [stderr] | [INFO] [stderr] 582 | if bytes.len() > 0 { bytes[0] } else { 0 }, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes.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: item `petscii::Petscii` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/petscii.rs:95:1 [INFO] [stderr] | [INFO] [stderr] 95 | / impl Petscii { [INFO] [stderr] 96 | | pub fn from_bytes(bytes: &[u8]) -> Petscii { [INFO] [stderr] 97 | | Petscii(bytes.to_owned()) [INFO] [stderr] 98 | | } [INFO] [stderr] ... | [INFO] [stderr] 154 | | } [INFO] [stderr] 155 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/petscii.rs:115:5 [INFO] [stderr] | [INFO] [stderr] 115 | / pub fn from_str(string: &str) -> Petscii { [INFO] [stderr] 116 | | let mut petscii_bytes = Vec::with_capacity(string.len()); [INFO] [stderr] 117 | | 'outer: for c in string.chars() { [INFO] [stderr] 118 | | // This is inefficient, but hopefully seldom used. [INFO] [stderr] ... | [INFO] [stderr] 127 | | Petscii(petscii_bytes.to_owned()) [INFO] [stderr] 128 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: the loop variable `p` is used to index `PETSCII_TO_CHAR_MAP` [INFO] [stderr] --> src/petscii.rs:119:22 [INFO] [stderr] | [INFO] [stderr] 119 | for p in 0..PETSCII_TO_CHAR_MAP.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 119 | for (p, ) in PETSCII_TO_CHAR_MAP.iter().enumerate() { [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/petscii.rs:130:5 [INFO] [stderr] | [INFO] [stderr] 130 | / pub fn as_bytes<'a>(&'a self) -> &'a [u8] { [INFO] [stderr] 131 | | &self.0 [INFO] [stderr] 132 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: statement can be reduced [INFO] [stderr] --> src/petscii.rs:148:13 [INFO] [stderr] | [INFO] [stderr] 148 | &bytes[..src_len].copy_from_slice(&self.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bytes[..src_len].copy_from_slice(&self.0);` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `bytes`. [INFO] [stderr] --> src/petscii.rs:149:22 [INFO] [stderr] | [INFO] [stderr] 149 | for i in src_len..dst_len { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 149 | for in bytes.iter_mut().take(dst_len).skip(src_len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/petscii.rs:237:19 [INFO] [stderr] | [INFO] [stderr] 237 | (&self.0).into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/petscii.rs:310:21 [INFO] [stderr] | [INFO] [stderr] 310 | assert!(bytes_expected.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes_expected.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/petscii.rs:318:21 [INFO] [stderr] | [INFO] [stderr] 318 | assert!(bytes_expected.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes_expected.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/util/mod.rs:12:8 [INFO] [stderr] | [INFO] [stderr] 12 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.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: an exclusive range would be more readable [INFO] [stderr] --> src/bin/cdisk.rs:297:21 [INFO] [stderr] | [INFO] [stderr] 297 | None => 0..=(format.sectors_in_track(track) - 1), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `0..format.sectors_in_track(track)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_minus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_minus_one [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> tests/integration_test.rs:40:52 [INFO] [stderr] | [INFO] [stderr] 40 | fn random_available_name(rng: &mut impl Rng, disk: &Box) -> Petscii { [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Disk` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> tests/integration_test.rs:71:48 [INFO] [stderr] | [INFO] [stderr] 71 | fn new_disk(mut rng: &mut impl Rng, disk_type: &DiskType) -> Box { [INFO] [stderr] | ^^^^^^^^^ help: consider passing by value instead: `DiskType` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> tests/integration_test.rs:101:45 [INFO] [stderr] | [INFO] [stderr] 101 | fn new(mut rng: &mut XorShiftRng, disk: &Box) -> RandomFile { [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Disk` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> tests/integration_test.rs:119:27 [INFO] [stderr] | [INFO] [stderr] 119 | fn write(&self, disk: &mut Box) -> io::Result<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `&mut Disk` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: an exclusive range would be more readable [INFO] [stderr] --> src/bin/cdisk.rs:297:21 [INFO] [stderr] | [INFO] [stderr] 297 | None => 0..=(format.sectors_in_track(track) - 1), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `0..format.sectors_in_track(track)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_minus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_minus_one [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> tests/integration_test.rs:127:28 [INFO] [stderr] | [INFO] [stderr] 127 | fn verify(&self, disk: &Box) -> io::Result<()> { [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Disk` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> tests/integration_test.rs:157:47 [INFO] [stderr] | [INFO] [stderr] 157 | fn verify_disk_state(disk: &Box, files: &Vec) -> io::Result<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: change this to: `&[RandomFile]` [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 seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> tests/integration_test.rs:157:28 [INFO] [stderr] | [INFO] [stderr] 157 | fn verify_disk_state(disk: &Box, files: &Vec) -> io::Result<()> { [INFO] [stderr] | ^^^^^^^^^^ help: try: `&Disk` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 10.09s [INFO] running `"docker" "inspect" "2424d8ad24aba8b29af016784f5aa9b5c1b6b39c4f15e282c176ae4c7cc5baa2"` [INFO] running `"docker" "rm" "-f" "2424d8ad24aba8b29af016784f5aa9b5c1b6b39c4f15e282c176ae4c7cc5baa2"` [INFO] [stdout] 2424d8ad24aba8b29af016784f5aa9b5c1b6b39c4f15e282c176ae4c7cc5baa2