[INFO] crate xc2par 0.0.1 is already in cache [INFO] extracting crate xc2par 0.0.1 into work/ex/clippy-test-run/sources/stable/reg/xc2par/0.0.1 [INFO] extracting crate xc2par 0.0.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/xc2par/0.0.1 [INFO] validating manifest of xc2par-0.0.1 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of xc2par-0.0.1 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing xc2par-0.0.1 [INFO] finished frobbing xc2par-0.0.1 [INFO] frobbed toml for xc2par-0.0.1 written to work/ex/clippy-test-run/sources/stable/reg/xc2par/0.0.1/Cargo.toml [INFO] started frobbing xc2par-0.0.1 [INFO] finished frobbing xc2par-0.0.1 [INFO] frobbed toml for xc2par-0.0.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/xc2par/0.0.1/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting xc2par-0.0.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/xc2par/0.0.1:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-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] 1a0357cb7b89475c3bdf91ed3f59f3a7dfc409a021fcda5e79707bd95ba631ea [INFO] running `"docker" "start" "-a" "1a0357cb7b89475c3bdf91ed3f59f3a7dfc409a021fcda5e79707bd95ba631ea"` [INFO] [stderr] Compiling xc2bit v0.0.3 [INFO] [stderr] Checking jedec v0.0.2 [INFO] [stderr] Compiling xc2par v0.0.1 (/opt/crater/workdir) [INFO] [stderr] Compiling syn v0.13.11 [INFO] [stderr] Checking term v0.5.1 [INFO] [stderr] Checking yosys-netlist-json v0.0.2 [INFO] [stderr] Checking slog-scope v4.1.1 [INFO] [stderr] Checking slog-term v2.4.0 [INFO] [stderr] Checking slog-stdlog v3.0.2 [INFO] [stderr] Compiling bittwiddler v0.0.1 [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/objpool.rs:87:28 [INFO] [stderr] | [INFO] [stderr] 87 | ObjPoolIndex:: {i: i, type_marker: PhantomData} [INFO] [stderr] | ^^^^ help: replace it with: `i` [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/objpool.rs:132:28 [INFO] [stderr] | [INFO] [stderr] 132 | ObjPoolIndex:: {i: i, type_marker: PhantomData} [INFO] [stderr] | ^^^^ help: replace it with: `i` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/objpool.rs:87:28 [INFO] [stderr] | [INFO] [stderr] 87 | ObjPoolIndex:: {i: i, type_marker: PhantomData} [INFO] [stderr] | ^^^^ help: replace it with: `i` [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/objpool.rs:132:28 [INFO] [stderr] | [INFO] [stderr] 132 | ObjPoolIndex:: {i: i, type_marker: PhantomData} [INFO] [stderr] | ^^^^ help: replace it with: `i` [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: unneeded return statement [INFO] [stderr] --> src/frontend.rs:462:17 [INFO] [stderr] | [INFO] [stderr] 462 | return Ok(result); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(result)` [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/frontend.rs:482:17 [INFO] [stderr] | [INFO] [stderr] 482 | return Ok(Some(result)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Some(result))` [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/frontend.rs:504:17 [INFO] [stderr] | [INFO] [stderr] 504 | return Ok(result); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(result)` [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/engine.rs:678:9 [INFO] [stderr] | [INFO] [stderr] 678 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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/engine.rs:882:9 [INFO] [stderr] | [INFO] [stderr] 882 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/engine.rs:1276:16 [INFO] [stderr] | [INFO] [stderr] 1276 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 1277 | | if let PARMCAssignment::MC(mc_idx) = macrocell_placement[move_fb as usize][move_mc as usize].1 { [INFO] [stderr] 1278 | | mc_idx [INFO] [stderr] 1279 | | } else { [INFO] [stderr] 1280 | | unreachable!(); [INFO] [stderr] 1281 | | } [INFO] [stderr] 1282 | | }; [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] 1276 | } else if let PARMCAssignment::MC(mc_idx) = macrocell_placement[move_fb as usize][move_mc as usize].1 { [INFO] [stderr] 1277 | mc_idx [INFO] [stderr] 1278 | } else { [INFO] [stderr] 1279 | unreachable!(); [INFO] [stderr] 1280 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/frontend.rs:462:17 [INFO] [stderr] | [INFO] [stderr] 462 | return Ok(result); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(result)` [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/frontend.rs:482:17 [INFO] [stderr] | [INFO] [stderr] 482 | return Ok(Some(result)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(Some(result))` [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/frontend.rs:504:17 [INFO] [stderr] | [INFO] [stderr] 504 | return Ok(result); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(result)` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/netlist.rs:238:16 [INFO] [stderr] | [INFO] [stderr] 238 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 239 | | if self.reg_bits.is_some() { [INFO] [stderr] 240 | | InputGraphMacrocellType::BuriedReg [INFO] [stderr] 241 | | } else { [INFO] [stderr] 242 | | InputGraphMacrocellType::BuriedComb [INFO] [stderr] 243 | | } [INFO] [stderr] 244 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 238 | } else if self.reg_bits.is_some() { [INFO] [stderr] 239 | InputGraphMacrocellType::BuriedReg [INFO] [stderr] 240 | } else { [INFO] [stderr] 241 | InputGraphMacrocellType::BuriedComb [INFO] [stderr] 242 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/netlist.rs:231:20 [INFO] [stderr] | [INFO] [stderr] 231 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 232 | | if self.reg_bits.is_some() { [INFO] [stderr] 233 | | InputGraphMacrocellType::PinInputReg [INFO] [stderr] 234 | | } else { [INFO] [stderr] 235 | | InputGraphMacrocellType::PinInputUnreg [INFO] [stderr] 236 | | } [INFO] [stderr] 237 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 231 | } else if self.reg_bits.is_some() { [INFO] [stderr] 232 | InputGraphMacrocellType::PinInputReg [INFO] [stderr] 233 | } else { [INFO] [stderr] 234 | InputGraphMacrocellType::PinInputUnreg [INFO] [stderr] 235 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/netlist.rs:301:16 [INFO] [stderr] | [INFO] [stderr] 301 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 302 | | if old_.i.is_none() { [INFO] [stderr] 303 | | Ok(additional) [INFO] [stderr] 304 | | } else if new.i.is_none() { [INFO] [stderr] ... | [INFO] [stderr] 318 | | } [INFO] [stderr] 319 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 301 | } else if old_.i.is_none() { [INFO] [stderr] 302 | Ok(additional) [INFO] [stderr] 303 | } else if new.i.is_none() { [INFO] [stderr] 304 | Ok(old) [INFO] [stderr] 305 | } else { [INFO] [stderr] 306 | let old_i = old_.i.unwrap(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/netlist.rs:552:36 [INFO] [stderr] | [INFO] [stderr] 552 | } else { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 553 | | if old_input.is_some() && old_input.unwrap() == s.g.vss_net { [INFO] [stderr] 554 | | Some(InputGraphIOOEType::OpenDrain) [INFO] [stderr] 555 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 567 | | } [INFO] [stderr] 568 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 552 | } else if old_input.is_some() && old_input.unwrap() == s.g.vss_net { [INFO] [stderr] 553 | Some(InputGraphIOOEType::OpenDrain) [INFO] [stderr] 554 | } else { [INFO] [stderr] 555 | let oe_n = s.g.nets.get(oe.unwrap()).source.unwrap(); [INFO] [stderr] 556 | let oe_newg_n = process_one_intermed_node(s, oe_n, logger)?; [INFO] [stderr] 557 | Some(match oe_newg_n { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/engine.rs:678:9 [INFO] [stderr] | [INFO] [stderr] 678 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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/engine.rs:882:9 [INFO] [stderr] | [INFO] [stderr] 882 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1218 | xor.andterm_input = Some(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1218 | xor.andterm_input = Some(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1226 | xor.orterm_inputs[i] = clone_pterm!(pterm); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1226 | xor.orterm_inputs[i] = clone_pterm!(pterm); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1237 | reg.ce_input = Some(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1237 | reg.ce_input = Some(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1244 | reg.clk_input = InputGraphRegClockType::PTerm(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1244 | reg.clk_input = InputGraphRegClockType::PTerm(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1251 | reg.set_input = Some(InputGraphRegRSType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1251 | reg.set_input = Some(InputGraphRegRSType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1258 | reg.reset_input = Some(InputGraphRegRSType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1258 | reg.reset_input = Some(InputGraphRegRSType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1269 | io.oe = Some(InputGraphIOOEType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1269 | io.oe = Some(InputGraphIOOEType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/engine.rs:1276:16 [INFO] [stderr] | [INFO] [stderr] 1276 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 1277 | | if let PARMCAssignment::MC(mc_idx) = macrocell_placement[move_fb as usize][move_mc as usize].1 { [INFO] [stderr] 1278 | | mc_idx [INFO] [stderr] 1279 | | } else { [INFO] [stderr] 1280 | | unreachable!(); [INFO] [stderr] 1281 | | } [INFO] [stderr] 1282 | | }; [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] 1276 | } else if let PARMCAssignment::MC(mc_idx) = macrocell_placement[move_fb as usize][move_mc as usize].1 { [INFO] [stderr] 1277 | mc_idx [INFO] [stderr] 1278 | } else { [INFO] [stderr] 1279 | unreachable!(); [INFO] [stderr] 1280 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/netlist.rs:238:16 [INFO] [stderr] | [INFO] [stderr] 238 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 239 | | if self.reg_bits.is_some() { [INFO] [stderr] 240 | | InputGraphMacrocellType::BuriedReg [INFO] [stderr] 241 | | } else { [INFO] [stderr] 242 | | InputGraphMacrocellType::BuriedComb [INFO] [stderr] 243 | | } [INFO] [stderr] 244 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 238 | } else if self.reg_bits.is_some() { [INFO] [stderr] 239 | InputGraphMacrocellType::BuriedReg [INFO] [stderr] 240 | } else { [INFO] [stderr] 241 | InputGraphMacrocellType::BuriedComb [INFO] [stderr] 242 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/netlist.rs:231:20 [INFO] [stderr] | [INFO] [stderr] 231 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 232 | | if self.reg_bits.is_some() { [INFO] [stderr] 233 | | InputGraphMacrocellType::PinInputReg [INFO] [stderr] 234 | | } else { [INFO] [stderr] 235 | | InputGraphMacrocellType::PinInputUnreg [INFO] [stderr] 236 | | } [INFO] [stderr] 237 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 231 | } else if self.reg_bits.is_some() { [INFO] [stderr] 232 | InputGraphMacrocellType::PinInputReg [INFO] [stderr] 233 | } else { [INFO] [stderr] 234 | InputGraphMacrocellType::PinInputUnreg [INFO] [stderr] 235 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/netlist.rs:301:16 [INFO] [stderr] | [INFO] [stderr] 301 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 302 | | if old_.i.is_none() { [INFO] [stderr] 303 | | Ok(additional) [INFO] [stderr] 304 | | } else if new.i.is_none() { [INFO] [stderr] ... | [INFO] [stderr] 318 | | } [INFO] [stderr] 319 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 301 | } else if old_.i.is_none() { [INFO] [stderr] 302 | Ok(additional) [INFO] [stderr] 303 | } else if new.i.is_none() { [INFO] [stderr] 304 | Ok(old) [INFO] [stderr] 305 | } else { [INFO] [stderr] 306 | let old_i = old_.i.unwrap(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/netlist.rs:552:36 [INFO] [stderr] | [INFO] [stderr] 552 | } else { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 553 | | if old_input.is_some() && old_input.unwrap() == s.g.vss_net { [INFO] [stderr] 554 | | Some(InputGraphIOOEType::OpenDrain) [INFO] [stderr] 555 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 567 | | } [INFO] [stderr] 568 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 552 | } else if old_input.is_some() && old_input.unwrap() == s.g.vss_net { [INFO] [stderr] 553 | Some(InputGraphIOOEType::OpenDrain) [INFO] [stderr] 554 | } else { [INFO] [stderr] 555 | let oe_n = s.g.nets.get(oe.unwrap()).source.unwrap(); [INFO] [stderr] 556 | let oe_newg_n = process_one_intermed_node(s, oe_n, logger)?; [INFO] [stderr] 557 | Some(match oe_newg_n { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1218 | xor.andterm_input = Some(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1218 | xor.andterm_input = Some(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1226 | xor.orterm_inputs[i] = clone_pterm!(pterm); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1226 | xor.orterm_inputs[i] = clone_pterm!(pterm); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1237 | reg.ce_input = Some(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1237 | reg.ce_input = Some(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1244 | reg.clk_input = InputGraphRegClockType::PTerm(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1244 | reg.clk_input = InputGraphRegClockType::PTerm(clone_pterm!(pterm)); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1251 | reg.set_input = Some(InputGraphRegRSType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1251 | reg.set_input = Some(InputGraphRegRSType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1258 | reg.reset_input = Some(InputGraphRegRSType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1258 | reg.reset_input = Some(InputGraphRegRSType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/netlist.rs:1209:21 [INFO] [stderr] | [INFO] [stderr] 1209 | new_pterm [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1269 | io.oe = Some(InputGraphIOOEType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/netlist.rs:1208:37 [INFO] [stderr] | [INFO] [stderr] 1208 | let new_pterm = self.pterms.insert(cloned_pterm); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 1269 | io.oe = Some(InputGraphIOOEType::PTerm(clone_pterm!(pterm))); [INFO] [stderr] | ------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler_driver.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | / match self { [INFO] [stderr] 96 | | &PARFlowError::SerdeError(_) => "json read failed", [INFO] [stderr] 97 | | &PARFlowError::FrontendError(_) => "frontend pass failed", [INFO] [stderr] 98 | | &PARFlowError::IntermedToInputError(_) => "intermediate pass failed", [INFO] [stderr] ... | [INFO] [stderr] 101 | | &PARFlowError::PARSanityCheckFailed(_) => "PAR sanity check failed", [INFO] [stderr] 102 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 95 | match *self { [INFO] [stderr] 96 | PARFlowError::SerdeError(_) => "json read failed", [INFO] [stderr] 97 | PARFlowError::FrontendError(_) => "frontend pass failed", [INFO] [stderr] 98 | PARFlowError::IntermedToInputError(_) => "intermediate pass failed", [INFO] [stderr] 99 | PARFlowError::OutputWriteError(_) => "writing output failed", [INFO] [stderr] 100 | PARFlowError::PARIterationsExceeded => "maximum iterations exceeded", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler_driver.rs:106:9 [INFO] [stderr] | [INFO] [stderr] 106 | / match self { [INFO] [stderr] 107 | | &PARFlowError::SerdeError(ref inner) => { [INFO] [stderr] 108 | | Some(inner) [INFO] [stderr] 109 | | }, [INFO] [stderr] ... | [INFO] [stderr] 119 | | _ => None, [INFO] [stderr] 120 | | } [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] 106 | match *self { [INFO] [stderr] 107 | PARFlowError::SerdeError(ref inner) => { [INFO] [stderr] 108 | Some(inner) [INFO] [stderr] 109 | }, [INFO] [stderr] 110 | PARFlowError::FrontendError(ref inner) => { [INFO] [stderr] 111 | Some(inner) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler_driver.rs:126:9 [INFO] [stderr] | [INFO] [stderr] 126 | / match self { [INFO] [stderr] 127 | | &PARFlowError::PARIterationsExceeded | [INFO] [stderr] 128 | | &PARFlowError::PARSanityCheckFailed(_) => { [INFO] [stderr] 129 | | write!(f, "{}", self.description()) [INFO] [stderr] ... | [INFO] [stderr] 133 | | } [INFO] [stderr] 134 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 126 | match *self { [INFO] [stderr] 127 | PARFlowError::PARIterationsExceeded | [INFO] [stderr] 128 | PARFlowError::PARSanityCheckFailed(_) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/compiler_driver.rs:165:32 [INFO] [stderr] | [INFO] [stderr] 165 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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: function is never used: `run_one_reftest` [INFO] [stderr] --> src/frontend.rs:1095:5 [INFO] [stderr] | [INFO] [stderr] 1095 | fn run_one_reftest(input_filename: &'static str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `run_one_reftest` [INFO] [stderr] --> src/engine.rs:1439:5 [INFO] [stderr] | [INFO] [stderr] 1439 | fn run_one_reftest(input_filename: &'static str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `run_one_reftest` [INFO] [stderr] --> src/netlist.rs:1288:5 [INFO] [stderr] | [INFO] [stderr] 1288 | fn run_one_reftest(input_filename: &'static str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler_driver.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | / match self { [INFO] [stderr] 96 | | &PARFlowError::SerdeError(_) => "json read failed", [INFO] [stderr] 97 | | &PARFlowError::FrontendError(_) => "frontend pass failed", [INFO] [stderr] 98 | | &PARFlowError::IntermedToInputError(_) => "intermediate pass failed", [INFO] [stderr] ... | [INFO] [stderr] 101 | | &PARFlowError::PARSanityCheckFailed(_) => "PAR sanity check failed", [INFO] [stderr] 102 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 95 | match *self { [INFO] [stderr] 96 | PARFlowError::SerdeError(_) => "json read failed", [INFO] [stderr] 97 | PARFlowError::FrontendError(_) => "frontend pass failed", [INFO] [stderr] 98 | PARFlowError::IntermedToInputError(_) => "intermediate pass failed", [INFO] [stderr] 99 | PARFlowError::OutputWriteError(_) => "writing output failed", [INFO] [stderr] 100 | PARFlowError::PARIterationsExceeded => "maximum iterations exceeded", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler_driver.rs:106:9 [INFO] [stderr] | [INFO] [stderr] 106 | / match self { [INFO] [stderr] 107 | | &PARFlowError::SerdeError(ref inner) => { [INFO] [stderr] 108 | | Some(inner) [INFO] [stderr] 109 | | }, [INFO] [stderr] ... | [INFO] [stderr] 119 | | _ => None, [INFO] [stderr] 120 | | } [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] 106 | match *self { [INFO] [stderr] 107 | PARFlowError::SerdeError(ref inner) => { [INFO] [stderr] 108 | Some(inner) [INFO] [stderr] 109 | }, [INFO] [stderr] 110 | PARFlowError::FrontendError(ref inner) => { [INFO] [stderr] 111 | Some(inner) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/compiler_driver.rs:126:9 [INFO] [stderr] | [INFO] [stderr] 126 | / match self { [INFO] [stderr] 127 | | &PARFlowError::PARIterationsExceeded | [INFO] [stderr] 128 | | &PARFlowError::PARSanityCheckFailed(_) => { [INFO] [stderr] 129 | | write!(f, "{}", self.description()) [INFO] [stderr] ... | [INFO] [stderr] 133 | | } [INFO] [stderr] 134 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 126 | match *self { [INFO] [stderr] 127 | PARFlowError::PARIterationsExceeded | [INFO] [stderr] 128 | PARFlowError::PARSanityCheckFailed(_) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/compiler_driver.rs:165:32 [INFO] [stderr] | [INFO] [stderr] 165 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:140:9 [INFO] [stderr] | [INFO] [stderr] 140 | / match self { [INFO] [stderr] 141 | | &FrontendError::MultipleToplevelModules => "multiple top-level modules", [INFO] [stderr] 142 | | &FrontendError::NoToplevelModules => "no top-level modules", [INFO] [stderr] 143 | | &FrontendError::UnsupportedCellType(_) => "unsupported cell type", [INFO] [stderr] ... | [INFO] [stderr] 154 | | &FrontendError::ParseIntError(_) => "integer parse error", [INFO] [stderr] 155 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 140 | match *self { [INFO] [stderr] 141 | FrontendError::MultipleToplevelModules => "multiple top-level modules", [INFO] [stderr] 142 | FrontendError::NoToplevelModules => "no top-level modules", [INFO] [stderr] 143 | FrontendError::UnsupportedCellType(_) => "unsupported cell type", [INFO] [stderr] 144 | FrontendError::MultipleNetDrivers(_) => "multiple drivers for net", [INFO] [stderr] 145 | FrontendError::NoNetDrivers(_) => "no drivers for net", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:159:9 [INFO] [stderr] | [INFO] [stderr] 159 | / match self { [INFO] [stderr] 160 | | &FrontendError::ParseIntError(ref inner) => Some(inner), [INFO] [stderr] 161 | | _ => None, [INFO] [stderr] 162 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 159 | match *self { [INFO] [stderr] 160 | FrontendError::ParseIntError(ref inner) => Some(inner), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:168:9 [INFO] [stderr] | [INFO] [stderr] 168 | / match self { [INFO] [stderr] 169 | | &FrontendError::UnsupportedCellType(ref s) | [INFO] [stderr] 170 | | &FrontendError::MultipleNetDrivers(ref s) | [INFO] [stderr] 171 | | &FrontendError::NoNetDrivers(ref s) | [INFO] [stderr] ... | [INFO] [stderr] 190 | | } [INFO] [stderr] 191 | | } [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] 168 | match *self { [INFO] [stderr] 169 | FrontendError::UnsupportedCellType(ref s) | [INFO] [stderr] 170 | FrontendError::MultipleNetDrivers(ref s) | [INFO] [stderr] 171 | FrontendError::NoNetDrivers(ref s) | [INFO] [stderr] 172 | FrontendError::MalformedLoc(ref s) | [INFO] [stderr] 173 | FrontendError::IllegalStringAttributeValue(ref s) | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 62 [INFO] [stderr] --> src/frontend.rs:202:5 [INFO] [stderr] | [INFO] [stderr] 202 | / pub fn from_yosys_netlist>>( [INFO] [stderr] 203 | | yosys_net: &yosys_netlist_json::Netlist, logger: L) -> Result { [INFO] [stderr] 204 | | [INFO] [stderr] 205 | | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] ... | [INFO] [stderr] 815 | | }) [INFO] [stderr] 816 | | } [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:140:9 [INFO] [stderr] | [INFO] [stderr] 140 | / match self { [INFO] [stderr] 141 | | &FrontendError::MultipleToplevelModules => "multiple top-level modules", [INFO] [stderr] 142 | | &FrontendError::NoToplevelModules => "no top-level modules", [INFO] [stderr] 143 | | &FrontendError::UnsupportedCellType(_) => "unsupported cell type", [INFO] [stderr] ... | [INFO] [stderr] 154 | | &FrontendError::ParseIntError(_) => "integer parse error", [INFO] [stderr] 155 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/frontend.rs:205:36 [INFO] [stderr] | [INFO] [stderr] 205 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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] | [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:213:17 [INFO] [stderr] | [INFO] [stderr] 213 | / if let &yosys_netlist_json::AttributeVal::N(n) = top_attr { [INFO] [stderr] 214 | | if n != 0 { [INFO] [stderr] 215 | | // Claims to be a top-level module [INFO] [stderr] 216 | | debug!(logger, "found toplevel yosys netlist module"; "module name" => module_name); [INFO] [stderr] ... | [INFO] [stderr] 226 | | } [INFO] [stderr] 227 | | } [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] 213 | if let yosys_netlist_json::AttributeVal::N(n) = *top_attr { [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] 140 | match *self { [INFO] [stderr] 141 | FrontendError::MultipleToplevelModules => "multiple top-level modules", [INFO] [stderr] 142 | FrontendError::NoToplevelModules => "no top-level modules", [INFO] [stderr] 143 | FrontendError::UnsupportedCellType(_) => "unsupported cell type", [INFO] [stderr] 144 | FrontendError::MultipleNetDrivers(_) => "multiple drivers for net", [INFO] [stderr] 145 | FrontendError::NoNetDrivers(_) => "no drivers for net", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:159:9 [INFO] [stderr] | [INFO] [stderr] 159 | / match self { [INFO] [stderr] 160 | | &FrontendError::ParseIntError(ref inner) => Some(inner), [INFO] [stderr] 161 | | _ => None, [INFO] [stderr] 162 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/frontend.rs:235:26 [INFO] [stderr] | [INFO] [stderr] 235 | let top_module = yosys_net.modules.get(top_module_name).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&yosys_net.modules[top_module_name]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/frontend.rs:258:26 [INFO] [stderr] | [INFO] [stderr] 258 | for (_, port) in &top_module.ports { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 258 | for port in top_module.ports.values() { [INFO] [stderr] | ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:260:17 [INFO] [stderr] | [INFO] [stderr] 260 | / if let &yosys_netlist_json::BitVal::N(n) = yosys_edge_idx { [INFO] [stderr] 261 | | module_ports.insert(n); [INFO] [stderr] 262 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 260 | if let yosys_netlist_json::BitVal::N(n) = *yosys_edge_idx { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:278:21 [INFO] [stderr] | [INFO] [stderr] 278 | / if let &yosys_netlist_json::BitVal::N(yosys_edge_idx) = connection { [INFO] [stderr] 279 | | // Don't create nets for the pad side of io buffers [INFO] [stderr] 280 | | if module_ports.contains(&yosys_edge_idx) { [INFO] [stderr] 281 | | debug!(logger, "nets - skipping module port for cell"; [INFO] [stderr] ... | [INFO] [stderr] 300 | | } [INFO] [stderr] 301 | | } [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] 278 | if let yosys_netlist_json::BitVal::N(yosys_edge_idx) = *connection { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 159 | match *self { [INFO] [stderr] 160 | FrontendError::ParseIntError(ref inner) => Some(inner), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:313:17 [INFO] [stderr] | [INFO] [stderr] 313 | / if let &yosys_netlist_json::BitVal::N(yosys_edge_idx) = yosys_edge_idx { [INFO] [stderr] 314 | | // Don't create nets for the pad side of io buffers [INFO] [stderr] 315 | | if module_ports.contains(&yosys_edge_idx) { [INFO] [stderr] 316 | | debug!(logger, "nets - skipping module port for netname"; [INFO] [stderr] ... | [INFO] [stderr] 347 | | } [INFO] [stderr] 348 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:168:9 [INFO] [stderr] | [INFO] [stderr] 168 | / match self { [INFO] [stderr] 169 | | &FrontendError::UnsupportedCellType(ref s) | [INFO] [stderr] 170 | | &FrontendError::MultipleNetDrivers(ref s) | [INFO] [stderr] 171 | | &FrontendError::NoNetDrivers(ref s) | [INFO] [stderr] ... | [INFO] [stderr] 190 | | } [INFO] [stderr] 191 | | } [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] 168 | match *self { [INFO] [stderr] 169 | FrontendError::UnsupportedCellType(ref s) | [INFO] [stderr] 170 | FrontendError::MultipleNetDrivers(ref s) | [INFO] [stderr] 171 | FrontendError::NoNetDrivers(ref s) | [INFO] [stderr] 172 | FrontendError::MalformedLoc(ref s) | [INFO] [stderr] 173 | FrontendError::IllegalStringAttributeValue(ref s) | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 313 | if let yosys_netlist_json::BitVal::N(yosys_edge_idx) = *yosys_edge_idx { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/frontend.rs:338:52 [INFO] [stderr] | [INFO] [stderr] 338 | let existing_net_our_idx = net_map.get(&yosys_edge_idx).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&net_map[&yosys_edge_idx]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 62 [INFO] [stderr] --> src/frontend.rs:202:5 [INFO] [stderr] | [INFO] [stderr] 202 | / pub fn from_yosys_netlist>>( [INFO] [stderr] 203 | | yosys_net: &yosys_netlist_json::Netlist, logger: L) -> Result { [INFO] [stderr] 204 | | [INFO] [stderr] 205 | | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] ... | [INFO] [stderr] 815 | | }) [INFO] [stderr] 816 | | } [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/frontend.rs:357:57 [INFO] [stderr] | [INFO] [stderr] 357 | yosys_netlist_json::BitVal::N(n) => Ok(*net_map.get(&n).unwrap()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&net_map[&n]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:385:17 [INFO] [stderr] | [INFO] [stderr] 385 | / if let &yosys_netlist_json::AttributeVal::N(n) = param_option.unwrap() { [INFO] [stderr] 386 | | debug!(logger, "cells - numeric parameter"; [INFO] [stderr] 387 | | "name" => name, [INFO] [stderr] 388 | | "value" => n); [INFO] [stderr] ... | [INFO] [stderr] 394 | | return Err(FrontendError::IllegalAttributeValue(param_option_copy.clone())); [INFO] [stderr] 395 | | }; [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] 385 | if let yosys_netlist_json::AttributeVal::N(n) = *param_option.unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:405:17 [INFO] [stderr] | [INFO] [stderr] 405 | / if let &yosys_netlist_json::AttributeVal::S(ref s) = param_option.unwrap() { [INFO] [stderr] 406 | | debug!(logger, "cells - string parameter"; [INFO] [stderr] 407 | | "name" => name, [INFO] [stderr] 408 | | "value" => s); [INFO] [stderr] ... | [INFO] [stderr] 414 | | return Err(FrontendError::IllegalAttributeValue(param_option_copy.clone())); [INFO] [stderr] 415 | | }; [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] 405 | if let yosys_netlist_json::AttributeVal::S(ref s) = *param_option.unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:457:44 [INFO] [stderr] | [INFO] [stderr] 457 | let result = bitval_to_net(conn_obj[0].clone(), name, logger)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `conn_obj[0]` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:460:40 [INFO] [stderr] | [INFO] [stderr] 460 | "yosys net idx" => conn_obj[0].clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `conn_obj[0]` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:477:44 [INFO] [stderr] | [INFO] [stderr] 477 | let result = bitval_to_net(conn_obj[0].clone(), name, logger)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `conn_obj[0]` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:480:40 [INFO] [stderr] | [INFO] [stderr] 480 | "yosys net idx" => conn_obj[0].clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `conn_obj[0]` [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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/frontend.rs:494:37 [INFO] [stderr] | [INFO] [stderr] 494 | let conn_obj_copy = conn_obj.as_ref().unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 494 | let conn_obj_copy = &(*conn_obj.as_ref().unwrap()).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 494 | let conn_obj_copy = &std::vec::Vec::clone(conn_obj.as_ref().unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:496:47 [INFO] [stderr] | [INFO] [stderr] 496 | result.push(bitval_to_net(x.clone(), name, logger)?); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*x` [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/frontend.rs:205:36 [INFO] [stderr] | [INFO] [stderr] 205 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/frontend.rs:678:21 [INFO] [stderr] | [INFO] [stderr] 678 | / let mut ce_input = None; [INFO] [stderr] 679 | | if mode == XC2MCRegMode::DFFCE { [INFO] [stderr] 680 | | ce_input = Some(single_required_connection("CE", &logger)?); [INFO] [stderr] 681 | | } [INFO] [stderr] | |_____________________^ help: it is more idiomatic to write: `let ce_input = if mode == XC2MCRegMode::DFFCE { Some(single_required_connection("CE", &logger)?) } else { None };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:213:17 [INFO] [stderr] | [INFO] [stderr] 213 | / if let &yosys_netlist_json::AttributeVal::N(n) = top_attr { [INFO] [stderr] 214 | | if n != 0 { [INFO] [stderr] 215 | | // Claims to be a top-level module [INFO] [stderr] 216 | | debug!(logger, "found toplevel yosys netlist module"; "module name" => module_name); [INFO] [stderr] ... | [INFO] [stderr] 226 | | } [INFO] [stderr] 227 | | } [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] 213 | if let yosys_netlist_json::AttributeVal::N(n) = *top_attr { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/frontend.rs:235:26 [INFO] [stderr] | [INFO] [stderr] 235 | let top_module = yosys_net.modules.get(top_module_name).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&yosys_net.modules[top_module_name]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/frontend.rs:258:26 [INFO] [stderr] | [INFO] [stderr] 258 | for (_, port) in &top_module.ports { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 258 | for port in top_module.ports.values() { [INFO] [stderr] | ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:260:17 [INFO] [stderr] | [INFO] [stderr] 260 | / if let &yosys_netlist_json::BitVal::N(n) = yosys_edge_idx { [INFO] [stderr] 261 | | module_ports.insert(n); [INFO] [stderr] 262 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 260 | if let yosys_netlist_json::BitVal::N(n) = *yosys_edge_idx { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:278:21 [INFO] [stderr] | [INFO] [stderr] 278 | / if let &yosys_netlist_json::BitVal::N(yosys_edge_idx) = connection { [INFO] [stderr] 279 | | // Don't create nets for the pad side of io buffers [INFO] [stderr] 280 | | if module_ports.contains(&yosys_edge_idx) { [INFO] [stderr] 281 | | debug!(logger, "nets - skipping module port for cell"; [INFO] [stderr] ... | [INFO] [stderr] 300 | | } [INFO] [stderr] 301 | | } [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] 278 | if let yosys_netlist_json::BitVal::N(yosys_edge_idx) = *connection { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:313:17 [INFO] [stderr] | [INFO] [stderr] 313 | / if let &yosys_netlist_json::BitVal::N(yosys_edge_idx) = yosys_edge_idx { [INFO] [stderr] 314 | | // Don't create nets for the pad side of io buffers [INFO] [stderr] 315 | | if module_ports.contains(&yosys_edge_idx) { [INFO] [stderr] 316 | | debug!(logger, "nets - skipping module port for netname"; [INFO] [stderr] ... | [INFO] [stderr] 347 | | } [INFO] [stderr] 348 | | } [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] 313 | if let yosys_netlist_json::BitVal::N(yosys_edge_idx) = *yosys_edge_idx { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/frontend.rs:338:52 [INFO] [stderr] | [INFO] [stderr] 338 | let existing_net_our_idx = net_map.get(&yosys_edge_idx).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&net_map[&yosys_edge_idx]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 34 [INFO] [stderr] --> src/frontend.rs:818:5 [INFO] [stderr] | [INFO] [stderr] 818 | / pub fn gather_macrocells>>(&self, logger: L) [INFO] [stderr] 819 | | -> Result>, GatherMacrocellError> { [INFO] [stderr] 820 | | [INFO] [stderr] 821 | | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] ... | [INFO] [stderr] 983 | | Ok(ret) [INFO] [stderr] 984 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/frontend.rs:357:57 [INFO] [stderr] | [INFO] [stderr] 357 | yosys_netlist_json::BitVal::N(n) => Ok(*net_map.get(&n).unwrap()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&net_map[&n]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:385:17 [INFO] [stderr] | [INFO] [stderr] 385 | / if let &yosys_netlist_json::AttributeVal::N(n) = param_option.unwrap() { [INFO] [stderr] 386 | | debug!(logger, "cells - numeric parameter"; [INFO] [stderr] 387 | | "name" => name, [INFO] [stderr] 388 | | "value" => n); [INFO] [stderr] ... | [INFO] [stderr] 394 | | return Err(FrontendError::IllegalAttributeValue(param_option_copy.clone())); [INFO] [stderr] 395 | | }; [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] 385 | if let yosys_netlist_json::AttributeVal::N(n) = *param_option.unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:405:17 [INFO] [stderr] | [INFO] [stderr] 405 | / if let &yosys_netlist_json::AttributeVal::S(ref s) = param_option.unwrap() { [INFO] [stderr] 406 | | debug!(logger, "cells - string parameter"; [INFO] [stderr] 407 | | "name" => name, [INFO] [stderr] 408 | | "value" => s); [INFO] [stderr] ... | [INFO] [stderr] 414 | | return Err(FrontendError::IllegalAttributeValue(param_option_copy.clone())); [INFO] [stderr] 415 | | }; [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] 405 | if let yosys_netlist_json::AttributeVal::S(ref s) = *param_option.unwrap() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/frontend.rs:821:36 [INFO] [stderr] | [INFO] [stderr] 821 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:457:44 [INFO] [stderr] | [INFO] [stderr] 457 | let result = bitval_to_net(conn_obj[0].clone(), name, logger)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `conn_obj[0]` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:460:40 [INFO] [stderr] | [INFO] [stderr] 460 | "yosys net idx" => conn_obj[0].clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `conn_obj[0]` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:995:9 [INFO] [stderr] | [INFO] [stderr] 995 | / match self { [INFO] [stderr] 996 | | &GatherMacrocellError::IllegalNodeDriver(_) => "node is driven by illegal type of node", [INFO] [stderr] 997 | | &GatherMacrocellError::IllegalNodeSink(_) => "node sinks to too many nodes", [INFO] [stderr] 998 | | } [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] 995 | match *self { [INFO] [stderr] 996 | GatherMacrocellError::IllegalNodeDriver(_) => "node is driven by illegal type of node", [INFO] [stderr] 997 | GatherMacrocellError::IllegalNodeSink(_) => "node sinks to too many nodes", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:1008:9 [INFO] [stderr] | [INFO] [stderr] 1008 | / match self { [INFO] [stderr] 1009 | | &GatherMacrocellError::IllegalNodeDriver(ref s) | [INFO] [stderr] 1010 | | &GatherMacrocellError::IllegalNodeSink(ref s) => { [INFO] [stderr] 1011 | | write!(f, "{} - {}", self.description(), s) [INFO] [stderr] 1012 | | }, [INFO] [stderr] 1013 | | } [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] 1008 | match *self { [INFO] [stderr] 1009 | GatherMacrocellError::IllegalNodeDriver(ref s) | [INFO] [stderr] 1010 | GatherMacrocellError::IllegalNodeSink(ref s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:477:44 [INFO] [stderr] | [INFO] [stderr] 477 | let result = bitval_to_net(conn_obj[0].clone(), name, logger)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `conn_obj[0]` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:480:40 [INFO] [stderr] | [INFO] [stderr] 480 | "yosys net idx" => conn_obj[0].clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `conn_obj[0]` [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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/frontend.rs:494:37 [INFO] [stderr] | [INFO] [stderr] 494 | let conn_obj_copy = conn_obj.as_ref().unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 494 | let conn_obj_copy = &(*conn_obj.as_ref().unwrap()).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 494 | let conn_obj_copy = &std::vec::Vec::clone(conn_obj.as_ref().unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/frontend.rs:496:47 [INFO] [stderr] | [INFO] [stderr] 496 | result.push(bitval_to_net(x.clone(), name, logger)?); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*x` [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: single-character string constant used as pattern [INFO] [stderr] --> src/frontend.rs:1033:42 [INFO] [stderr] | [INFO] [stderr] 1033 | let loc_fb_i = loc.split("_").collect::>(); [INFO] [stderr] | ^^^ help: try using a char instead: `'_'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/frontend.rs:1044:49 [INFO] [stderr] | [INFO] [stderr] 1044 | if !loc_fb_i[1].starts_with("P") { [INFO] [stderr] | ^^^ help: try using a char instead: `'P'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/frontend.rs:678:21 [INFO] [stderr] | [INFO] [stderr] 678 | / let mut ce_input = None; [INFO] [stderr] 679 | | if mode == XC2MCRegMode::DFFCE { [INFO] [stderr] 680 | | ce_input = Some(single_required_connection("CE", &logger)?); [INFO] [stderr] 681 | | } [INFO] [stderr] | |_____________________^ help: it is more idiomatic to write: `let ce_input = if mode == XC2MCRegMode::DFFCE { Some(single_required_connection("CE", &logger)?) } else { None };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 34 [INFO] [stderr] --> src/frontend.rs:818:5 [INFO] [stderr] | [INFO] [stderr] 818 | / pub fn gather_macrocells>>(&self, logger: L) [INFO] [stderr] 819 | | -> Result>, GatherMacrocellError> { [INFO] [stderr] 820 | | [INFO] [stderr] 821 | | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] ... | [INFO] [stderr] 983 | | Ok(ret) [INFO] [stderr] 984 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/frontend.rs:821:36 [INFO] [stderr] | [INFO] [stderr] 821 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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: the function has a cyclomatic complexity of 117 [INFO] [stderr] --> src/engine.rs:188:1 [INFO] [stderr] | [INFO] [stderr] 188 | / pub fn greedy_initial_placement(g: &mut InputGraph, go: &mut OutputGraph, device_type: XC2DeviceSpeedPackage, [INFO] [stderr] 189 | | logger: &slog::Logger) -> Option> { [INFO] [stderr] 190 | | [INFO] [stderr] 191 | | let mut ret = Vec::new(); [INFO] [stderr] ... | [INFO] [stderr] 533 | | Some(ret) [INFO] [stderr] 534 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:995:9 [INFO] [stderr] | [INFO] [stderr] 995 | / match self { [INFO] [stderr] 996 | | &GatherMacrocellError::IllegalNodeDriver(_) => "node is driven by illegal type of node", [INFO] [stderr] 997 | | &GatherMacrocellError::IllegalNodeSink(_) => "node sinks to too many nodes", [INFO] [stderr] 998 | | } [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] 995 | match *self { [INFO] [stderr] 996 | GatherMacrocellError::IllegalNodeDriver(_) => "node is driven by illegal type of node", [INFO] [stderr] 997 | GatherMacrocellError::IllegalNodeSink(_) => "node sinks to too many nodes", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/frontend.rs:1008:9 [INFO] [stderr] | [INFO] [stderr] 1008 | / match self { [INFO] [stderr] 1009 | | &GatherMacrocellError::IllegalNodeDriver(ref s) | [INFO] [stderr] 1010 | | &GatherMacrocellError::IllegalNodeSink(ref s) => { [INFO] [stderr] 1011 | | write!(f, "{} - {}", self.description(), s) [INFO] [stderr] 1012 | | }, [INFO] [stderr] 1013 | | } [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] 1008 | match *self { [INFO] [stderr] 1009 | GatherMacrocellError::IllegalNodeDriver(ref s) | [INFO] [stderr] 1010 | GatherMacrocellError::IllegalNodeSink(ref s) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/frontend.rs:1033:42 [INFO] [stderr] | [INFO] [stderr] 1033 | let loc_fb_i = loc.split("_").collect::>(); [INFO] [stderr] | ^^^ help: try using a char instead: `'_'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/frontend.rs:1044:49 [INFO] [stderr] | [INFO] [stderr] 1044 | if !loc_fb_i[1].starts_with("P") { [INFO] [stderr] | ^^^ help: try using a char instead: `'P'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `fb` is used to index `ret` [INFO] [stderr] --> src/engine.rs:463:23 [INFO] [stderr] | [INFO] [stderr] 463 | for fb in 0..num_fbs { [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] 463 | for (fb, ) in ret.iter().enumerate().take(num_fbs) { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 31 [INFO] [stderr] --> src/engine.rs:543:1 [INFO] [stderr] | [INFO] [stderr] 543 | / pub fn try_assign_andterms(g: &InputGraph, go: &mut OutputGraph, mc_assignment: &PARFBAssignment, fb_i: u32) [INFO] [stderr] 544 | | -> AndTermAssignmentResult { [INFO] [stderr] 545 | | [INFO] [stderr] 546 | | let mut ret = [None; ANDTERMS_PER_FB]; [INFO] [stderr] ... | [INFO] [stderr] 728 | | AndTermAssignmentResult::Success [INFO] [stderr] 729 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the loop variable `mc_i` is used to index `mc_assignment` [INFO] [stderr] --> src/engine.rs:558:17 [INFO] [stderr] | [INFO] [stderr] 558 | for mc_i in 0..MCS_PER_FB { [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] 558 | for (mc_i, ) in mc_assignment.iter().enumerate().take(MCS_PER_FB) { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `mc_i` is only used to index `mc_assignment`. [INFO] [stderr] --> src/engine.rs:635:17 [INFO] [stderr] | [INFO] [stderr] 635 | for mc_i in 0..MCS_PER_FB { [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] 635 | for in mc_assignment.iter().take(MCS_PER_FB) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 117 [INFO] [stderr] --> src/engine.rs:188:1 [INFO] [stderr] | [INFO] [stderr] 188 | / pub fn greedy_initial_placement(g: &mut InputGraph, go: &mut OutputGraph, device_type: XC2DeviceSpeedPackage, [INFO] [stderr] 189 | | logger: &slog::Logger) -> Option> { [INFO] [stderr] 190 | | [INFO] [stderr] 191 | | let mut ret = Vec::new(); [INFO] [stderr] ... | [INFO] [stderr] 533 | | Some(ret) [INFO] [stderr] 534 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the loop variable `candidate_pt_i` is only used to index `ret`. [INFO] [stderr] --> src/engine.rs:690:31 [INFO] [stderr] | [INFO] [stderr] 690 | for candidate_pt_i in 0..ANDTERMS_PER_FB { [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] 690 | for in ret.iter_mut().take(ANDTERMS_PER_FB) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `pterm_i` is used to index `ret` [INFO] [stderr] --> src/engine.rs:709:20 [INFO] [stderr] | [INFO] [stderr] 709 | for pterm_i in 0..ANDTERMS_PER_FB { [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] 709 | for (pterm_i, ) in ret.iter().enumerate().take(ANDTERMS_PER_FB) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `mc_i` is only used to index `mc_assignment`. [INFO] [stderr] --> src/engine.rs:745:17 [INFO] [stderr] | [INFO] [stderr] 745 | for mc_i in 0..MCS_PER_FB { [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] 745 | for in mc_assignment.iter().take(MCS_PER_FB) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:896:51 [INFO] [stderr] | [INFO] [stderr] 896 | andterm_node_go.inputs_true_zia.push(*input_to_row_map.get(input_net).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&input_to_row_map[input_net]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:899:51 [INFO] [stderr] | [INFO] [stderr] 899 | andterm_node_go.inputs_comp_zia.push(*input_to_row_map.get(input_net).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&input_to_row_map[input_net]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: parameter of type `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/engine.rs:952:33 [INFO] [stderr] | [INFO] [stderr] 952 | constraint_violations: &mut HashMap, device_type: XC2DeviceSpeedPackage) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 951 | pub fn try_assign_fb(g: &InputGraph, go: &mut OutputGraph, mc_assignments: &[PARFBAssignment], fb_i: u32, [INFO] [stderr] 952 | constraint_violations: &mut HashMap, device_type: XC2DeviceSpeedPackage) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 29 [INFO] [stderr] --> src/engine.rs:1042:1 [INFO] [stderr] | [INFO] [stderr] 1042 | / pub fn do_par_sanity_check(g: &mut InputGraph, device_type: XC2DeviceSpeedPackage, logger: &slog::Logger) [INFO] [stderr] 1043 | | -> PARSanityResult { [INFO] [stderr] 1044 | | [INFO] [stderr] 1045 | | // Check if everything fits in the device [INFO] [stderr] ... | [INFO] [stderr] 1157 | | PARSanityResult::Ok [INFO] [stderr] 1158 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 39 [INFO] [stderr] --> src/engine.rs:1189:1 [INFO] [stderr] | [INFO] [stderr] 1189 | / pub fn do_par>>(g: &mut InputGraph, device_type: XC2DeviceSpeedPackage, [INFO] [stderr] 1190 | | options: &XC2ParOptions, logger: L) -> PARResult { [INFO] [stderr] 1191 | | [INFO] [stderr] 1192 | | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] ... | [INFO] [stderr] 1426 | | PARResult::FailureIterationsExceeded [INFO] [stderr] 1427 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/engine.rs:1192:32 [INFO] [stderr] | [INFO] [stderr] 1192 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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: the loop variable `fb` is used to index `ret` [INFO] [stderr] --> src/engine.rs:463:23 [INFO] [stderr] | [INFO] [stderr] 463 | for fb in 0..num_fbs { [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] 463 | for (fb, ) in ret.iter().enumerate().take(num_fbs) { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/engine.rs:1218:12 [INFO] [stderr] | [INFO] [stderr] 1218 | if best_placement_violations.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `best_placement_violations.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: the loop variable `i` is only used to index `best_par_results_per_fb`. [INFO] [stderr] --> src/engine.rs:1221:22 [INFO] [stderr] | [INFO] [stderr] 1221 | for i in 0..device_type.dev.num_fbs() { [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] 1221 | for in best_par_results_per_fb.iter_mut().take(device_type.dev.num_fbs()) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 31 [INFO] [stderr] --> src/engine.rs:543:1 [INFO] [stderr] | [INFO] [stderr] 543 | / pub fn try_assign_andterms(g: &InputGraph, go: &mut OutputGraph, mc_assignment: &PARFBAssignment, fb_i: u32) [INFO] [stderr] 544 | | -> AndTermAssignmentResult { [INFO] [stderr] 545 | | [INFO] [stderr] 546 | | let mut ret = [None; ANDTERMS_PER_FB]; [INFO] [stderr] ... | [INFO] [stderr] 728 | | AndTermAssignmentResult::Success [INFO] [stderr] 729 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/engine.rs:1388:24 [INFO] [stderr] | [INFO] [stderr] 1388 | if best_placement_violations.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `best_placement_violations.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: the loop variable `mc_i` is used to index `mc_assignment` [INFO] [stderr] --> src/engine.rs:558:17 [INFO] [stderr] | [INFO] [stderr] 558 | for mc_i in 0..MCS_PER_FB { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/engine.rs:1398:16 [INFO] [stderr] | [INFO] [stderr] 1398 | if best_placement_violations.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `best_placement_violations.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] | [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] 558 | for (mc_i, ) in mc_assignment.iter().enumerate().take(MCS_PER_FB) { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `mc_i` is only used to index `mc_assignment`. [INFO] [stderr] --> src/engine.rs:635:17 [INFO] [stderr] | [INFO] [stderr] 635 | for mc_i in 0..MCS_PER_FB { [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] 635 | for in mc_assignment.iter().take(MCS_PER_FB) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `candidate_pt_i` is only used to index `ret`. [INFO] [stderr] --> src/engine.rs:690:31 [INFO] [stderr] | [INFO] [stderr] 690 | for candidate_pt_i in 0..ANDTERMS_PER_FB { [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] 690 | for in ret.iter_mut().take(ANDTERMS_PER_FB) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `pterm_i` is used to index `ret` [INFO] [stderr] --> src/engine.rs:709:20 [INFO] [stderr] | [INFO] [stderr] 709 | for pterm_i in 0..ANDTERMS_PER_FB { [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] 709 | for (pterm_i, ) in ret.iter().enumerate().take(ANDTERMS_PER_FB) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `mc_i` is only used to index `mc_assignment`. [INFO] [stderr] --> src/engine.rs:745:17 [INFO] [stderr] | [INFO] [stderr] 745 | for mc_i in 0..MCS_PER_FB { [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] 745 | for in mc_assignment.iter().take(MCS_PER_FB) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:896:51 [INFO] [stderr] | [INFO] [stderr] 896 | andterm_node_go.inputs_true_zia.push(*input_to_row_map.get(input_net).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&input_to_row_map[input_net]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:899:51 [INFO] [stderr] | [INFO] [stderr] 899 | andterm_node_go.inputs_comp_zia.push(*input_to_row_map.get(input_net).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&input_to_row_map[input_net]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: parameter of type `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/engine.rs:952:33 [INFO] [stderr] | [INFO] [stderr] 952 | constraint_violations: &mut HashMap, device_type: XC2DeviceSpeedPackage) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 951 | pub fn try_assign_fb(g: &InputGraph, go: &mut OutputGraph, mc_assignments: &[PARFBAssignment], fb_i: u32, [INFO] [stderr] 952 | constraint_violations: &mut HashMap, device_type: XC2DeviceSpeedPackage) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 29 [INFO] [stderr] --> src/engine.rs:1042:1 [INFO] [stderr] | [INFO] [stderr] 1042 | / pub fn do_par_sanity_check(g: &mut InputGraph, device_type: XC2DeviceSpeedPackage, logger: &slog::Logger) [INFO] [stderr] 1043 | | -> PARSanityResult { [INFO] [stderr] 1044 | | [INFO] [stderr] 1045 | | // Check if everything fits in the device [INFO] [stderr] ... | [INFO] [stderr] 1157 | | PARSanityResult::Ok [INFO] [stderr] 1158 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 39 [INFO] [stderr] --> src/engine.rs:1189:1 [INFO] [stderr] | [INFO] [stderr] 1189 | / pub fn do_par>>(g: &mut InputGraph, device_type: XC2DeviceSpeedPackage, [INFO] [stderr] 1190 | | options: &XC2ParOptions, logger: L) -> PARResult { [INFO] [stderr] 1191 | | [INFO] [stderr] 1192 | | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] ... | [INFO] [stderr] 1426 | | PARResult::FailureIterationsExceeded [INFO] [stderr] 1427 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/engine.rs:1192:32 [INFO] [stderr] | [INFO] [stderr] 1192 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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: length comparison to zero [INFO] [stderr] --> src/engine.rs:1218:12 [INFO] [stderr] | [INFO] [stderr] 1218 | if best_placement_violations.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `best_placement_violations.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: the loop variable `i` is only used to index `best_par_results_per_fb`. [INFO] [stderr] --> src/engine.rs:1221:22 [INFO] [stderr] | [INFO] [stderr] 1221 | for i in 0..device_type.dev.num_fbs() { [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] 1221 | for in best_par_results_per_fb.iter_mut().take(device_type.dev.num_fbs()) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/engine.rs:1388:24 [INFO] [stderr] | [INFO] [stderr] 1388 | if best_placement_violations.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `best_placement_violations.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/engine.rs:1398:16 [INFO] [stderr] | [INFO] [stderr] 1398 | if best_placement_violations.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `best_placement_violations.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/netlist.rs:130:24 [INFO] [stderr] | [INFO] [stderr] 130 | pub fn is_pininput(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/netlist.rs:131:9 [INFO] [stderr] | [INFO] [stderr] 131 | / match self { [INFO] [stderr] 132 | | &InputGraphMacrocellType::PinOutput | [INFO] [stderr] 133 | | &InputGraphMacrocellType::BuriedComb | [INFO] [stderr] 134 | | &InputGraphMacrocellType::BuriedReg => false, [INFO] [stderr] 135 | | &InputGraphMacrocellType::PinInputReg | [INFO] [stderr] 136 | | &InputGraphMacrocellType::PinInputUnreg => true, [INFO] [stderr] 137 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 131 | match *self { [INFO] [stderr] 132 | InputGraphMacrocellType::PinOutput | [INFO] [stderr] 133 | InputGraphMacrocellType::BuriedComb | [INFO] [stderr] 134 | InputGraphMacrocellType::BuriedReg => false, [INFO] [stderr] 135 | InputGraphMacrocellType::PinInputReg | [INFO] [stderr] 136 | InputGraphMacrocellType::PinInputUnreg => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/netlist.rs:130:24 [INFO] [stderr] | [INFO] [stderr] 130 | pub fn is_pininput(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/netlist.rs:131:9 [INFO] [stderr] | [INFO] [stderr] 131 | / match self { [INFO] [stderr] 132 | | &InputGraphMacrocellType::PinOutput | [INFO] [stderr] 133 | | &InputGraphMacrocellType::BuriedComb | [INFO] [stderr] 134 | | &InputGraphMacrocellType::BuriedReg => false, [INFO] [stderr] 135 | | &InputGraphMacrocellType::PinInputReg | [INFO] [stderr] 136 | | &InputGraphMacrocellType::PinInputUnreg => true, [INFO] [stderr] 137 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 131 | match *self { [INFO] [stderr] 132 | InputGraphMacrocellType::PinOutput | [INFO] [stderr] 133 | InputGraphMacrocellType::BuriedComb | [INFO] [stderr] 134 | InputGraphMacrocellType::BuriedReg => false, [INFO] [stderr] 135 | InputGraphMacrocellType::PinInputReg | [INFO] [stderr] 136 | InputGraphMacrocellType::PinInputUnreg => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/netlist.rs:201:9 [INFO] [stderr] | [INFO] [stderr] 201 | / match self { [INFO] [stderr] 202 | | &InputGraphAnyPoolIdx::Macrocell(i) => { [INFO] [stderr] 203 | | serializer.emit_usize(key, i.get_raw_i())?; [INFO] [stderr] 204 | | serializer.emit_str("inputgraph type", "macrocell") [INFO] [stderr] ... | [INFO] [stderr] 221 | | }, [INFO] [stderr] 222 | | } [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] 201 | match *self { [INFO] [stderr] 202 | InputGraphAnyPoolIdx::Macrocell(i) => { [INFO] [stderr] 203 | serializer.emit_usize(key, i.get_raw_i())?; [INFO] [stderr] 204 | serializer.emit_str("inputgraph type", "macrocell") [INFO] [stderr] 205 | }, [INFO] [stderr] 206 | InputGraphAnyPoolIdx::PTerm(i) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/netlist.rs:336:9 [INFO] [stderr] | [INFO] [stderr] 336 | / match self { [INFO] [stderr] 337 | | &IntermedToInputError::WrongConnectionType(_) => "node is connected to another node of the wrong type", [INFO] [stderr] 338 | | &IntermedToInputError::WrongTiedValue(_) => "node input is tied to a disallowed constant", [INFO] [stderr] 339 | | &IntermedToInputError::WrongPTermInputs(_) => "p-term inputs incorrect (duplicate or in true+comp)", [INFO] [stderr] ... | [INFO] [stderr] 343 | | &IntermedToInputError::SanityCheckError(_) => "sanity check failed", [INFO] [stderr] 344 | | } [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] 336 | match *self { [INFO] [stderr] 337 | IntermedToInputError::WrongConnectionType(_) => "node is connected to another node of the wrong type", [INFO] [stderr] 338 | IntermedToInputError::WrongTiedValue(_) => "node input is tied to a disallowed constant", [INFO] [stderr] 339 | IntermedToInputError::WrongPTermInputs(_) => "p-term inputs incorrect (duplicate or in true+comp)", [INFO] [stderr] 340 | IntermedToInputError::TooManyFeedbacksUsed(_) => "too many feedback paths used (XOR + register + IO)", [INFO] [stderr] 341 | IntermedToInputError::LocMismatchedFB(_, _) => "two LOC constraints have mismatched FB index", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/netlist.rs:354:9 [INFO] [stderr] | [INFO] [stderr] 354 | / match self { [INFO] [stderr] 355 | | &IntermedToInputError::WrongConnectionType(ref s) | [INFO] [stderr] 356 | | &IntermedToInputError::WrongTiedValue(ref s) | [INFO] [stderr] 357 | | &IntermedToInputError::WrongPTermInputs(ref s) | [INFO] [stderr] ... | [INFO] [stderr] 367 | | }, [INFO] [stderr] 368 | | } [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] 354 | match *self { [INFO] [stderr] 355 | IntermedToInputError::WrongConnectionType(ref s) | [INFO] [stderr] 356 | IntermedToInputError::WrongTiedValue(ref s) | [INFO] [stderr] 357 | IntermedToInputError::WrongPTermInputs(ref s) | [INFO] [stderr] 358 | IntermedToInputError::TooManyFeedbacksUsed(ref s) => { [INFO] [stderr] 359 | write!(f, "{} - {}", self.description(), s) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/netlist.rs:376:36 [INFO] [stderr] | [INFO] [stderr] 376 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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: the loop variable `i` is only used to index `gathered_mcs`. [INFO] [stderr] --> src/netlist.rs:403:18 [INFO] [stderr] | [INFO] [stderr] 403 | for i in 0..gathered_mcs.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] 403 | for in &gathered_mcs { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 70 [INFO] [stderr] --> src/netlist.rs:439:9 [INFO] [stderr] | [INFO] [stderr] 439 | / fn process_one_intermed_node<'a>(s: &mut process_one_intermed_node_state<'a>, [INFO] [stderr] 440 | | n_idx: ObjPoolIndex, logger: &slog::Logger) [INFO] [stderr] 441 | | -> Result { [INFO] [stderr] 442 | | [INFO] [stderr] ... | [INFO] [stderr] 1037 | | } [INFO] [stderr] 1038 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/netlist.rs:201:9 [INFO] [stderr] | [INFO] [stderr] 201 | / match self { [INFO] [stderr] 202 | | &InputGraphAnyPoolIdx::Macrocell(i) => { [INFO] [stderr] 203 | | serializer.emit_usize(key, i.get_raw_i())?; [INFO] [stderr] 204 | | serializer.emit_str("inputgraph type", "macrocell") [INFO] [stderr] ... | [INFO] [stderr] 221 | | }, [INFO] [stderr] 222 | | } [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] 201 | match *self { [INFO] [stderr] 202 | InputGraphAnyPoolIdx::Macrocell(i) => { [INFO] [stderr] 203 | serializer.emit_usize(key, i.get_raw_i())?; [INFO] [stderr] 204 | serializer.emit_str("inputgraph type", "macrocell") [INFO] [stderr] 205 | }, [INFO] [stderr] 206 | InputGraphAnyPoolIdx::PTerm(i) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/netlist.rs:336:9 [INFO] [stderr] | [INFO] [stderr] 336 | / match self { [INFO] [stderr] 337 | | &IntermedToInputError::WrongConnectionType(_) => "node is connected to another node of the wrong type", [INFO] [stderr] 338 | | &IntermedToInputError::WrongTiedValue(_) => "node input is tied to a disallowed constant", [INFO] [stderr] 339 | | &IntermedToInputError::WrongPTermInputs(_) => "p-term inputs incorrect (duplicate or in true+comp)", [INFO] [stderr] ... | [INFO] [stderr] 343 | | &IntermedToInputError::SanityCheckError(_) => "sanity check failed", [INFO] [stderr] 344 | | } [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] 336 | match *self { [INFO] [stderr] 337 | IntermedToInputError::WrongConnectionType(_) => "node is connected to another node of the wrong type", [INFO] [stderr] 338 | IntermedToInputError::WrongTiedValue(_) => "node input is tied to a disallowed constant", [INFO] [stderr] 339 | IntermedToInputError::WrongPTermInputs(_) => "p-term inputs incorrect (duplicate or in true+comp)", [INFO] [stderr] 340 | IntermedToInputError::TooManyFeedbacksUsed(_) => "too many feedback paths used (XOR + register + IO)", [INFO] [stderr] 341 | IntermedToInputError::LocMismatchedFB(_, _) => "two LOC constraints have mismatched FB index", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/netlist.rs:354:9 [INFO] [stderr] | [INFO] [stderr] 354 | / match self { [INFO] [stderr] 355 | | &IntermedToInputError::WrongConnectionType(ref s) | [INFO] [stderr] 356 | | &IntermedToInputError::WrongTiedValue(ref s) | [INFO] [stderr] 357 | | &IntermedToInputError::WrongPTermInputs(ref s) | [INFO] [stderr] ... | [INFO] [stderr] 367 | | }, [INFO] [stderr] 368 | | } [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] 354 | match *self { [INFO] [stderr] 355 | IntermedToInputError::WrongConnectionType(ref s) | [INFO] [stderr] 356 | IntermedToInputError::WrongTiedValue(ref s) | [INFO] [stderr] 357 | IntermedToInputError::WrongPTermInputs(ref s) | [INFO] [stderr] 358 | IntermedToInputError::TooManyFeedbacksUsed(ref s) => { [INFO] [stderr] 359 | write!(f, "{} - {}", self.description(), s) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/netlist.rs:376:36 [INFO] [stderr] | [INFO] [stderr] 376 | let logger = logger.into().unwrap_or(slog::Logger::root(slog_stdlog::StdLog.fuse(), o!())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| slog::Logger::root(slog_stdlog::StdLog.fuse(), o!()))` [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: the loop variable `i` is only used to index `gathered_mcs`. [INFO] [stderr] --> src/netlist.rs:403:18 [INFO] [stderr] | [INFO] [stderr] 403 | for i in 0..gathered_mcs.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] 403 | for in &gathered_mcs { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 70 [INFO] [stderr] --> src/netlist.rs:439:9 [INFO] [stderr] | [INFO] [stderr] 439 | / fn process_one_intermed_node<'a>(s: &mut process_one_intermed_node_state<'a>, [INFO] [stderr] 440 | | n_idx: ObjPoolIndex, logger: &slog::Logger) [INFO] [stderr] 441 | | -> Result { [INFO] [stderr] 442 | | [INFO] [stderr] ... | [INFO] [stderr] 1037 | | } [INFO] [stderr] 1038 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 36 [INFO] [stderr] --> src/netlist.rs:1082:5 [INFO] [stderr] | [INFO] [stderr] 1082 | / fn sanity_check(&self, logger: &slog::Logger) -> Result<(), IntermedToInputError> { [INFO] [stderr] 1083 | | // Check various connectivity rules in the CPLD [INFO] [stderr] 1084 | | for x in self.mcs.iter() { [INFO] [stderr] 1085 | | if x.io_feedback_used && x.io_bits.is_none() { [INFO] [stderr] ... | [INFO] [stderr] 1194 | | Ok(()) [INFO] [stderr] 1195 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/netlist.rs:1198:5 [INFO] [stderr] | [INFO] [stderr] 1198 | / fn unfuse_pterms(&mut self, logger: &slog::Logger) { [INFO] [stderr] 1199 | | let mut used_pterms = HashSet::new(); [INFO] [stderr] 1200 | | [INFO] [stderr] 1201 | | for mc in self.mcs.iter_mut() { [INFO] [stderr] ... | [INFO] [stderr] 1274 | | } [INFO] [stderr] 1275 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 36 [INFO] [stderr] --> src/netlist.rs:1082:5 [INFO] [stderr] | [INFO] [stderr] 1082 | / fn sanity_check(&self, logger: &slog::Logger) -> Result<(), IntermedToInputError> { [INFO] [stderr] 1083 | | // Check various connectivity rules in the CPLD [INFO] [stderr] 1084 | | for x in self.mcs.iter() { [INFO] [stderr] 1085 | | if x.io_feedback_used && x.io_bits.is_none() { [INFO] [stderr] ... | [INFO] [stderr] 1194 | | Ok(()) [INFO] [stderr] 1195 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/objpool.rs:61:22 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn get_raw_i(&self) -> usize { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `objpool::ObjPool` [INFO] [stderr] --> src/objpool.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | / pub fn new() -> ObjPool { [INFO] [stderr] 79 | | ObjPool {storage: Vec::new()} [INFO] [stderr] 80 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 73 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 54 [INFO] [stderr] --> src/output.rs:31:1 [INFO] [stderr] | [INFO] [stderr] 31 | / pub fn produce_bitstream(device_type: XC2DeviceSpeedPackage, g: &InputGraph, go: &OutputGraph) -> XC2Bitstream { [INFO] [stderr] 32 | | let mut result = XC2Bitstream::blank_bitstream(device_type); [INFO] [stderr] 33 | | [INFO] [stderr] 34 | | { [INFO] [stderr] ... | [INFO] [stderr] 298 | | result [INFO] [stderr] 299 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/netlist.rs:1198:5 [INFO] [stderr] | [INFO] [stderr] 1198 | / fn unfuse_pterms(&mut self, logger: &slog::Logger) { [INFO] [stderr] 1199 | | let mut used_pterms = HashSet::new(); [INFO] [stderr] 1200 | | [INFO] [stderr] 1201 | | for mc in self.mcs.iter_mut() { [INFO] [stderr] ... | [INFO] [stderr] 1274 | | } [INFO] [stderr] 1275 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the loop variable `fb_i` is used to index `fb_bits` [INFO] [stderr] --> src/output.rs:38:21 [INFO] [stderr] | [INFO] [stderr] 38 | for fb_i in 0..go.zia.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] 38 | for (fb_i, ) in fb_bits.iter_mut().enumerate().take(go.zia.len()) { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/objpool.rs:61:22 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn get_raw_i(&self) -> usize { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `objpool::ObjPool` [INFO] [stderr] --> src/objpool.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | / pub fn new() -> ObjPool { [INFO] [stderr] 79 | | ObjPool {storage: Vec::new()} [INFO] [stderr] 80 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 73 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 54 [INFO] [stderr] --> src/output.rs:31:1 [INFO] [stderr] | [INFO] [stderr] 31 | / pub fn produce_bitstream(device_type: XC2DeviceSpeedPackage, g: &InputGraph, go: &OutputGraph) -> XC2Bitstream { [INFO] [stderr] 32 | | let mut result = XC2Bitstream::blank_bitstream(device_type); [INFO] [stderr] 33 | | [INFO] [stderr] 34 | | { [INFO] [stderr] ... | [INFO] [stderr] 298 | | result [INFO] [stderr] 299 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: the loop variable `fb_i` is used to index `fb_bits` [INFO] [stderr] --> src/output.rs:38:21 [INFO] [stderr] | [INFO] [stderr] 38 | for fb_i in 0..go.zia.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] 38 | for (fb_i, ) in fb_bits.iter_mut().enumerate().take(go.zia.len()) { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: Could not compile `xc2par`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `xc2par`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "1a0357cb7b89475c3bdf91ed3f59f3a7dfc409a021fcda5e79707bd95ba631ea"` [INFO] running `"docker" "rm" "-f" "1a0357cb7b89475c3bdf91ed3f59f3a7dfc409a021fcda5e79707bd95ba631ea"` [INFO] [stdout] 1a0357cb7b89475c3bdf91ed3f59f3a7dfc409a021fcda5e79707bd95ba631ea