[INFO] cloning repository https://github.com/PiotrBieszczad/CS4535-Constraint-Solving [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/PiotrBieszczad/CS4535-Constraint-Solving" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FPiotrBieszczad%2FCS4535-Constraint-Solving", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FPiotrBieszczad%2FCS4535-Constraint-Solving'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] d31a359126a184184e074e56745ef483831590a3 [INFO] linting PiotrBieszczad/CS4535-Constraint-Solving against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FPiotrBieszczad%2FCS4535-Constraint-Solving" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/PiotrBieszczad/CS4535-Constraint-Solving [INFO] finished tweaking git repo https://github.com/PiotrBieszczad/CS4535-Constraint-Solving [INFO] tweaked toml for git repo https://github.com/PiotrBieszczad/CS4535-Constraint-Solving written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/PiotrBieszczad/CS4535-Constraint-Solving on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/PiotrBieszczad/CS4535-Constraint-Solving already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded proc-macro2 v1.0.93 [INFO] [stderr] Downloaded rand_core v0.6.4 [INFO] [stderr] Downloaded quote v1.0.38 [INFO] [stderr] Downloaded unicode-ident v1.0.15 [INFO] [stderr] Downloaded signal-hook-registry v1.4.2 [INFO] [stderr] Downloaded signal-hook v0.3.17 [INFO] [stderr] Downloaded anstyle-query v1.1.2 [INFO] [stderr] Downloaded is_terminal_polyfill v1.70.1 [INFO] [stderr] Downloaded utf8parse v0.2.2 [INFO] [stderr] Downloaded anstyle-wincon v3.0.7 [INFO] [stderr] Downloaded clap_lex v0.7.4 [INFO] [stderr] Downloaded strsim v0.11.1 [INFO] [stderr] Downloaded colorchoice v1.0.3 [INFO] [stderr] Downloaded anstyle-parse v0.2.6 [INFO] [stderr] Downloaded bitfield v0.14.0 [INFO] [stderr] Downloaded anyhow v1.0.97 [INFO] [stderr] Downloaded darling_core v0.20.10 [INFO] [stderr] Downloaded minimal-lexical v0.2.1 [INFO] [stderr] Downloaded memchr v2.7.4 [INFO] [stderr] Downloaded clap v4.5.32 [INFO] [stderr] Downloaded winnow v0.6.24 [INFO] [stderr] Downloaded clap_builder v4.5.32 [INFO] [stderr] Downloaded nom v7.1.3 [INFO] [stderr] Downloaded syn v2.0.96 [INFO] [stderr] Downloaded proptest v1.6.0 [INFO] [stderr] Downloaded zerocopy v0.7.35 [INFO] [stderr] Downloaded num-traits v0.2.19 [INFO] [stderr] Downloaded bitflags v2.8.0 [INFO] [stderr] Downloaded env_logger v0.10.2 [INFO] [stderr] Downloaded log v0.4.25 [INFO] [stderr] Downloaded once_cell v1.20.2 [INFO] [stderr] Downloaded zerocopy-derive v0.7.35 [INFO] [stderr] Downloaded getrandom v0.2.15 [INFO] [stderr] Downloaded anstream v0.6.18 [INFO] [stderr] Downloaded clap_derive v4.5.32 [INFO] [stderr] Downloaded bit-vec v0.8.0 [INFO] [stderr] Downloaded rustix v0.38.44 [INFO] [stderr] Downloaded enumset v1.1.5 [INFO] [stderr] Downloaded ppv-lite86 v0.2.20 [INFO] [stderr] Downloaded bit-set v0.8.0 [INFO] [stderr] Downloaded autocfg v1.4.0 [INFO] [stderr] Downloaded tempfile v3.15.0 [INFO] [stderr] Downloaded humantime v2.1.0 [INFO] [stderr] Downloaded termcolor v1.4.1 [INFO] [stderr] Downloaded wasi v0.11.0+wasi-snapshot-preview1 [INFO] [stderr] Downloaded anstyle v1.0.10 [INFO] [stderr] Downloaded heck v0.5.0 [INFO] [stderr] Downloaded lazy_static v1.5.0 [INFO] [stderr] Downloaded rand_xorshift v0.3.0 [INFO] [stderr] Downloaded errno v0.3.10 [INFO] [stderr] Downloaded hermit-abi v0.4.0 [INFO] [stderr] Downloaded is-terminal v0.4.15 [INFO] [stderr] Downloaded libc v0.2.169 [INFO] [stderr] Downloaded dzn-rs v0.2.2 [INFO] [stderr] Downloaded rusty-fork v0.3.0 [INFO] [stderr] Downloaded fastrand v2.3.0 [INFO] [stderr] Downloaded unarray v0.1.4 [INFO] [stderr] Downloaded darling v0.20.10 [INFO] [stderr] Downloaded byteorder v1.5.0 [INFO] [stderr] Downloaded rand_chacha v0.3.1 [INFO] [stderr] Downloaded quick-error v1.2.3 [INFO] [stderr] Downloaded ident_case v1.0.1 [INFO] [stderr] Downloaded darling_macro v0.20.10 [INFO] [stderr] Downloaded enumset_derive v0.10.0 [INFO] [stderr] Downloaded wait-timeout v0.2.0 [INFO] [stderr] Downloaded rand v0.8.5 [INFO] [stderr] Downloaded linux-raw-sys v0.4.15 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 62e2fdb0dc858ba99e7de12b8a4457ed06bc0726da57e49dd707d11342f83e66 [INFO] running `Command { std: "docker" "start" "-a" "62e2fdb0dc858ba99e7de12b8a4457ed06bc0726da57e49dd707d11342f83e66", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "62e2fdb0dc858ba99e7de12b8a4457ed06bc0726da57e49dd707d11342f83e66", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "62e2fdb0dc858ba99e7de12b8a4457ed06bc0726da57e49dd707d11342f83e66", kill_on_drop: false }` [INFO] [stdout] 62e2fdb0dc858ba99e7de12b8a4457ed06bc0726da57e49dd707d11342f83e66 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 97e0d5b600a87d7bdfd695ace4e5af7c415796c2ed156782f8bc22c4063b2092 [INFO] running `Command { std: "docker" "start" "-a" "97e0d5b600a87d7bdfd695ace4e5af7c415796c2ed156782f8bc22c4063b2092", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.93 [INFO] [stderr] Compiling unicode-ident v1.0.15 [INFO] [stderr] Compiling libc v0.2.169 [INFO] [stderr] Checking cfg-if v1.0.0 [INFO] [stderr] Checking memchr v2.7.4 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Checking utf8parse v0.2.2 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Checking byteorder v1.5.0 [INFO] [stderr] Checking anstyle-parse v0.2.6 [INFO] [stderr] Checking anstyle v1.0.10 [INFO] [stderr] Checking minimal-lexical v0.2.1 [INFO] [stderr] Checking linux-raw-sys v0.4.15 [INFO] [stderr] Checking colorchoice v1.0.3 [INFO] [stderr] Checking is_terminal_polyfill v1.70.1 [INFO] [stderr] Compiling fnv v1.0.7 [INFO] [stderr] Compiling autocfg v1.4.0 [INFO] [stderr] Checking anstyle-query v1.1.2 [INFO] [stderr] Checking bitflags v2.8.0 [INFO] [stderr] Compiling ident_case v1.0.1 [INFO] [stderr] Checking regex-syntax v0.8.5 [INFO] [stderr] Checking anstream v0.6.18 [INFO] [stderr] Compiling heck v0.5.0 [INFO] [stderr] Checking nom v7.1.3 [INFO] [stderr] Checking once_cell v1.20.2 [INFO] [stderr] Checking clap_lex v0.7.4 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling anyhow v1.0.97 [INFO] [stderr] Checking fastrand v2.3.0 [INFO] [stderr] Checking getrandom v0.2.15 [INFO] [stderr] Compiling quote v1.0.38 [INFO] [stderr] Checking strsim v0.11.1 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Compiling syn v2.0.96 [INFO] [stderr] Checking clap_builder v4.5.32 [INFO] [stderr] Checking wait-timeout v0.2.0 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Checking bit-vec v0.8.0 [INFO] [stderr] Checking quick-error v1.2.3 [INFO] [stderr] Checking bit-set v0.8.0 [INFO] [stderr] Checking rand_xorshift v0.3.0 [INFO] [stderr] Checking lazy_static v1.5.0 [INFO] [stderr] Checking unarray v0.1.4 [INFO] [stderr] Compiling signal-hook v0.3.17 [INFO] [stderr] Checking tempfile v3.15.0 [INFO] [stderr] Checking signal-hook-registry v1.4.2 [INFO] [stderr] Checking is-terminal v0.4.15 [INFO] [stderr] Checking termcolor v1.4.1 [INFO] [stderr] Checking winnow v0.6.24 [INFO] [stderr] Checking log v0.4.25 [INFO] [stderr] Checking rusty-fork v0.3.0 [INFO] [stderr] Checking humantime v2.1.0 [INFO] [stderr] Checking regex-automata v0.4.9 [INFO] [stderr] Checking bitfield v0.14.0 [INFO] [stderr] Compiling darling_core v0.20.10 [INFO] [stderr] Checking regex v1.11.1 [INFO] [stderr] Compiling zerocopy-derive v0.7.35 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling clap_derive v4.5.32 [INFO] [stderr] Checking env_logger v0.10.2 [INFO] [stderr] Checking zerocopy v0.7.35 [INFO] [stderr] Checking drcp-format v0.1.0 (/opt/rustwide/workdir/drcp-format) [INFO] [stderr] Checking ppv-lite86 v0.2.20 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Compiling darling_macro v0.20.10 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Compiling darling v0.20.10 [INFO] [stderr] Compiling enumset_derive v0.10.0 [INFO] [stderr] Checking clap v4.5.32 [INFO] [stderr] Checking drcp-debugger v0.1.0 (/opt/rustwide/workdir/drcp-debugger) [INFO] [stderr] Checking proptest v1.6.0 [INFO] [stderr] Checking enumset v1.1.5 [INFO] [stderr] Checking dzn-rs v0.2.2 [INFO] [stderr] Checking munchkin v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: lint `clippy::string_to_string` has been removed: `clippy::implicit_clone` covers those cases [INFO] [stdout] | [INFO] [stdout] = note: requested on the command line with `-W clippy::string_to_string` [INFO] [stdout] = note: `#[warn(renamed_and_removed_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `clippy::string_to_string` has been removed: `clippy::implicit_clone` covers those cases [INFO] [stdout] | [INFO] [stdout] = note: requested on the command line with `-W clippy::string_to_string` [INFO] [stdout] = note: `#[warn(renamed_and_removed_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `literals` [INFO] [stdout] --> src/engine/conflict_analysis/all_decision_learning.rs:126:14 [INFO] [stdout] | [INFO] [stdout] 126 | for i in 1..literals.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 126 - for i in 1..literals.len() { [INFO] [stdout] 126 + for (i, ) in literals.iter().enumerate().skip(1) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `learned_nogood.literals.get(0)` [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:32:35 [INFO] [stdout] | [INFO] [stdout] 32 | _ = atomic_labels.insert(*learned_nogood.literals.get(0).unwrap(), AtomicLabels::Keep); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `learned_nogood.literals.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:44:35 [INFO] [stdout] | [INFO] [stdout] 44 | if *atomic_labels.get(&literal).unwrap() == AtomicLabels::Seen { [INFO] [stdout] | ^^^^^^^^ help: change this to: `literal` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:46:35 [INFO] [stdout] | [INFO] [stdout] 46 | check_literal(&literal, &mut context, learned_nogood, &mut atomic_labels); [INFO] [stdout] | ^^^^^^^^ help: change this to: `literal` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:65:50 [INFO] [stdout] | [INFO] [stdout] 65 | if let Some(&assignment) = atomic_labels.get(&literal) { [INFO] [stdout] | ^^^^^^^^ help: change this to: `literal` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: parameter is only used in recursion [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:61:5 [INFO] [stdout] | [INFO] [stdout] 61 | learned_nogood: &mut LearnedNogood, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_learned_nogood` [INFO] [stdout] | [INFO] [stdout] note: parameter used here [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:80:68 [INFO] [stdout] | [INFO] [stdout] 80 | let antecedent_label = check_literal(&antecedent, context, learned_nogood, atomic_labels); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#only_used_in_recursion [INFO] [stdout] = note: `#[warn(clippy::only_used_in_recursion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `j` is only used to index `lits` [INFO] [stdout] --> src/engine/minimisation/semantic_minimisation.rs:29:26 [INFO] [stdout] | [INFO] [stdout] 29 | for j in 0..lits.len() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 29 - for j in 0..lits.len() { [INFO] [stdout] 29 + for in &lits { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `j` is only used to index `lits` [INFO] [stdout] --> src/engine/minimisation/semantic_minimisation.rs:100:26 [INFO] [stdout] | [INFO] [stdout] 100 | for j in 0..lits.len() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 100 - for j in 0..lits.len() { [INFO] [stdout] 100 + for in &lits { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/engine/minimisation/semantic_minimisation.rs:114:20 [INFO] [stdout] | [INFO] [stdout] 114 | && !context.get_predicates_for_literal(literal).next().is_none() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `context.get_predicates_for_literal(literal).next().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/engine/sat/clausal_propagator.rs:377:17 [INFO] [stdout] | [INFO] [stdout] 377 | / clause [INFO] [stdout] 378 | | .get_literal_slice() [INFO] [stdout] 379 | | .iter() [INFO] [stdout] 380 | | .any(|lit| *lit == x.cached_literal) [INFO] [stdout] | |________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains [INFO] [stdout] = note: `#[warn(clippy::manual_contains)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 377 ~ clause [INFO] [stdout] 378 + .get_literal_slice().contains(&x.cached_literal) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/proof/checking/inferences/all_different.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 56 - return Ok(()); [INFO] [stdout] 56 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for copying elements [INFO] [stdout] --> src/proof/checking/inferences/all_different.rs:16:27 [INFO] [stdout] | [INFO] [stdout] 16 | let proof_variables = variables [INFO] [stdout] | ___________________________^ [INFO] [stdout] 17 | | .iter() [INFO] [stdout] 18 | | .filter(|&&x| { [INFO] [stdout] 19 | | context.is_part_of_proof_step_left_hand_side(x) || context.is_proof_step_conclusion(x) [INFO] [stdout] 20 | | }) [INFO] [stdout] 21 | | .map(|&v| v) [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `copied` method [INFO] [stdout] | [INFO] [stdout] 16 ~ let proof_variables = variables [INFO] [stdout] 17 + .iter() [INFO] [stdout] 18 + .filter(|&&x| { [INFO] [stdout] 19 + context.is_part_of_proof_step_left_hand_side(x) || context.is_proof_step_conclusion(x) [INFO] [stdout] 20 + }).copied() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/proof/checking/inferences/all_different.rs:31:13 [INFO] [stdout] | [INFO] [stdout] 31 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/proof/checking/inferences/all_different.rs:45:21 [INFO] [stdout] | [INFO] [stdout] 44 | let node = graph.add_node(value.to_string()); [INFO] [stdout] | --------------------------------------------- unnecessary `let` binding [INFO] [stdout] 45 | node [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 44 ~ [INFO] [stdout] 45 ~ graph.add_node(value.to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:20:9 [INFO] [stdout] | [INFO] [stdout] 20 | / if !nodes.contains_key(&id_) { [INFO] [stdout] 21 | | let node = graph_prime.add_node(id); [INFO] [stdout] 22 | | _ = nodes.insert(id_, node); [INFO] [stdout] 23 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 20 ~ if let std::collections::hash_map::Entry::Vacant(e) = nodes.entry(id_) { [INFO] [stdout] 21 + let node = graph_prime.add_node(id); [INFO] [stdout] 22 + _ = { e.insert(node); None }; [INFO] [stdout] 23 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:26:17 [INFO] [stdout] | [INFO] [stdout] 26 | / if !nodes.contains_key(&(target as usize)) { [INFO] [stdout] 27 | | let target_node = graph_prime.add_node(target as usize); [INFO] [stdout] 28 | | _ = nodes.insert(target as usize, target_node); [INFO] [stdout] 29 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 26 ~ if let std::collections::hash_map::Entry::Vacant(e) = nodes.entry((target as usize)) { [INFO] [stdout] 27 + let target_node = graph_prime.add_node(target as usize); [INFO] [stdout] 28 + _ = { e.insert(target_node); None }; [INFO] [stdout] 29 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:37:12 [INFO] [stdout] | [INFO] [stdout] 37 | if assigned != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `assigned.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:38:13 [INFO] [stdout] | [INFO] [stdout] 38 | / if !nodes.contains_key(&(assigned.unwrap() as usize)) { [INFO] [stdout] 39 | | let target_node = graph_prime.add_node(assigned.unwrap() as usize); [INFO] [stdout] 40 | | _ = nodes.insert(assigned.unwrap() as usize, target_node); [INFO] [stdout] 41 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 38 ~ if let std::collections::hash_map::Entry::Vacant(e) = nodes.entry((assigned.unwrap() as usize)) { [INFO] [stdout] 39 + let target_node = graph_prime.add_node(assigned.unwrap() as usize); [INFO] [stdout] 40 + _ = { e.insert(target_node); None }; [INFO] [stdout] 41 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:83:5 [INFO] [stdout] | [INFO] [stdout] 83 | return sccs; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 83 - return sccs; [INFO] [stdout] 83 + sccs [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:87:1 [INFO] [stdout] | [INFO] [stdout] 87 | / fn strong_connect( [INFO] [stdout] 88 | | graph: &Graph, [INFO] [stdout] 89 | | node: NodeIndex, [INFO] [stdout] 90 | | index: &mut HashMap, [INFO] [stdout] ... | [INFO] [stdout] 95 | | current_index: &mut usize, [INFO] [stdout] 96 | | ) { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/proof/checking/mod.rs:62:26 [INFO] [stdout] | [INFO] [stdout] 62 | .map(|atomic| to_int_atomic(atomic)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `to_int_atomic` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/proof/checking/mod.rs:66:26 [INFO] [stdout] | [INFO] [stdout] 66 | .map(|propagated| to_int_atomic(propagated)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `to_int_atomic` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/proof/checking/mod.rs:76:26 [INFO] [stdout] | [INFO] [stdout] 76 | .map(|atomic| to_int_atomic(atomic)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `to_int_atomic` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/propagators/all_different.rs:92:25 [INFO] [stdout] | [INFO] [stdout] 91 | let node = graph.add_node(value.to_string()); [INFO] [stdout] | --------------------------------------------- unnecessary `let` binding [INFO] [stdout] 92 | node [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 91 ~ [INFO] [stdout] 92 ~ graph.add_node(value.to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `HashSet` [INFO] [stdout] --> src/propagators/all_different.rs:183:17 [INFO] [stdout] | [INFO] [stdout] 183 | scc.into_iter().for_each(|&v| { [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/propagators/all_different.rs:186:42 [INFO] [stdout] | [INFO] [stdout] 186 | _ = sccs_vars.insert(node_weight[1..].parse::().unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/propagators/all_different.rs:185:17 [INFO] [stdout] | [INFO] [stdout] 185 | if node_weight.starts_with("x") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 185 ~ if let Some() = node_weight.strip_prefix("x") { [INFO] [stdout] 186 ~ _ = sccs_vars.insert(.parse::().unwrap()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `intersecting_vars.get(0)` [INFO] [stdout] --> src/propagators/arithmetic/maximum.rs:88:24 [INFO] [stdout] | [INFO] [stdout] 88 | let var = *intersecting_vars.get(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `intersecting_vars.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/propagators/arithmetic/maximum.rs:110:12 [INFO] [stdout] | [INFO] [stdout] 110 | if self.array.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.array.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/propagators/arithmetic/maximum.rs:208:13 [INFO] [stdout] | [INFO] [stdout] 208 | &context, [INFO] [stdout] | ^^^^^^^^ help: change this to: `context` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/propagators/arithmetic/maximum.rs:217:13 [INFO] [stdout] | [INFO] [stdout] 217 | &context, [INFO] [stdout] | ^^^^^^^^ help: change this to: `context` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/propagators/circuit/dfs.rs:89:13 [INFO] [stdout] | [INFO] [stdout] 89 | / match check(context.as_readonly(), &self.successor, i, n).3 { [INFO] [stdout] 90 | | Some(_) => { [INFO] [stdout] 91 | | return Err(self [INFO] [stdout] 92 | | .explain_conflict( [INFO] [stdout] ... | [INFO] [stdout] 100 | | _ => {} [INFO] [stdout] 101 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 89 ~ if let Some(_) = check(context.as_readonly(), &self.successor, i, n).3 { [INFO] [stdout] 90 + return Err(self [INFO] [stdout] 91 + .explain_conflict( [INFO] [stdout] 92 + &context.as_readonly(), [INFO] [stdout] 93 + SubCircuit, [INFO] [stdout] 94 + &self.successor[i], [INFO] [stdout] 95 + i as i32, [INFO] [stdout] 96 + ) [INFO] [stdout] 97 + .into()); [INFO] [stdout] 98 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> src/propagators/circuit/dfs.rs:238:1 [INFO] [stdout] | [INFO] [stdout] 238 | / fn dfs>( [INFO] [stdout] 239 | | context: &mut PropagationContextMut, [INFO] [stdout] 240 | | v: usize, [INFO] [stdout] 241 | | successor: &[T], [INFO] [stdout] ... | [INFO] [stdout] 247 | | prop: &P, [INFO] [stdout] 248 | | ) -> Result, Inconsistency> { [INFO] [stdout] | |_______________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:74:16 [INFO] [stdout] | [INFO] [stdout] 74 | if let Some(_) = conflict { [INFO] [stdout] | -------^^^^^^^----------- help: try: `if conflict.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `basic_types::propositional_conjunction::PropositionalConjunction` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:77:17 [INFO] [stdout] | [INFO] [stdout] 77 | / self.explain_conflict(&context, SubCircuit, &self.successor[fixed], fixed as i32) [INFO] [stdout] 78 | | .into(), [INFO] [stdout] | |___________________________^ help: consider removing `.into()`: `self.explain_conflict(&context, SubCircuit, &self.successor[fixed], fixed as i32)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `fixed` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:89:18 [INFO] [stdout] | [INFO] [stdout] 89 | for i in 0..n { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 89 - for i in 0..n { [INFO] [stdout] 89 + for (i, ) in fixed.iter_mut().enumerate().take(n) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:118:20 [INFO] [stdout] | [INFO] [stdout] 118 | if let Some(_) = conflict { [INFO] [stdout] | -------^^^^^^^----------- help: try: `if conflict.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:140:20 [INFO] [stdout] | [INFO] [stdout] 140 | if let Some(_) = conflict { [INFO] [stdout] | -------^^^^^^^----------- help: try: `if conflict.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `visited` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:163:22 [INFO] [stdout] | [INFO] [stdout] 163 | for i in 0..n { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 163 - for i in 0..n { [INFO] [stdout] 163 + for (i, ) in visited.iter().enumerate().take(n) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `mandatory_energies` [INFO] [stdout] --> src/propagators/cumulative/energetic_reasoning.rs:65:22 [INFO] [stdout] | [INFO] [stdout] 65 | for i in 0..n { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 65 - for i in 0..n { [INFO] [stdout] 65 + for (i, ) in mandatory_energies.iter_mut().enumerate().take(n) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `propagators::explanations::TimeTableExplanation` [INFO] [stdout] --> src/propagators/cumulative/time_table.rs:129:15 [INFO] [stdout] | [INFO] [stdout] 129 | match e.into() { [INFO] [stdout] | ^^^^^^^^ help: consider removing `.into()`: `e` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/propagators/cumulative/time_table.rs:192:43 [INFO] [stdout] | [INFO] [stdout] 192 | .explain_conflict(&context, Overload, &start_times[i], t) [INFO] [stdout] | ^^^^^^^^ help: change this to: `context` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/propagators/domain_utils.rs:36:1 [INFO] [stdout] | [INFO] [stdout] 36 | / pub(crate) fn intersect>( [INFO] [stdout] 37 | | context: &mut PropagationContextMut, [INFO] [stdout] 38 | | var_a: &A, [INFO] [stdout] 39 | | var_b: &B, [INFO] [stdout] ... | [INFO] [stdout] 48 | | B: IntegerVariable, [INFO] [stdout] 49 | | E: Debug + Clone, [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/propagators/graph_utils.rs:26:13 [INFO] [stdout] | [INFO] [stdout] 26 | / if label.starts_with("x") { [INFO] [stdout] 27 | | if left[&u] == NodeIndex::end() { [INFO] [stdout] 28 | | if dfs(graph, u, &mut dist, &mut left, &mut right) { [INFO] [stdout] 29 | | iter += 1; [INFO] [stdout] ... | [INFO] [stdout] 32 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 26 ~ if label.starts_with("x") [INFO] [stdout] 27 ~ && left[&u] == NodeIndex::end() { [INFO] [stdout] 28 | if dfs(graph, u, &mut dist, &mut left, &mut right) { [INFO] [stdout] 29 | iter += 1; [INFO] [stdout] 30 | } [INFO] [stdout] 31 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/propagators/graph_utils.rs:27:17 [INFO] [stdout] | [INFO] [stdout] 27 | / if left[&u] == NodeIndex::end() { [INFO] [stdout] 28 | | if dfs(graph, u, &mut dist, &mut left, &mut right) { [INFO] [stdout] 29 | | iter += 1; [INFO] [stdout] 30 | | } [INFO] [stdout] 31 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 27 ~ if left[&u] == NodeIndex::end() [INFO] [stdout] 28 ~ && dfs(graph, u, &mut dist, &mut left, &mut right) { [INFO] [stdout] 29 | iter += 1; [INFO] [stdout] 30 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> src/propagators/graph_utils.rs:221:1 [INFO] [stdout] | [INFO] [stdout] 221 | / fn strong_connect( [INFO] [stdout] 222 | | graph: &Graph, [INFO] [stdout] 223 | | node: NodeIndex, [INFO] [stdout] 224 | | index: &mut HashMap, [INFO] [stdout] ... | [INFO] [stdout] 230 | | current_index: &mut usize, [INFO] [stdout] 231 | | ) { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `scc_idx` is only used to index `scc_adj` [INFO] [stdout] --> src/propagators/graph_utils.rs:342:20 [INFO] [stdout] | [INFO] [stdout] 342 | for scc_idx in 0..scc_adj.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 342 - for scc_idx in 0..scc_adj.len() { [INFO] [stdout] 342 + for in &scc_adj { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/basic_types/trail.rs:35:31 [INFO] [stdout] | [INFO] [stdout] 35 | pub(crate) fn synchronise(&mut self, new_decision_level: usize) -> Rev> { [INFO] [stdout] | ^^^^^^^^^ the lifetime is elided here ^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 35 | pub(crate) fn synchronise(&mut self, new_decision_level: usize) -> Rev> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/api/outputs/solution_iterator.rs:41:26 [INFO] [stdout] | [INFO] [stdout] 41 | pub fn next_solution(&mut self) -> IteratedSolution { [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 41 | pub fn next_solution(&mut self) -> IteratedSolution<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `clippy::string_to_string` has been removed: `clippy::implicit_clone` covers those cases [INFO] [stdout] | [INFO] [stdout] = note: requested on the command line with `-W clippy::string_to_string` [INFO] [stdout] = note: `#[warn(renamed_and_removed_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `clippy::string_to_string` has been removed: `clippy::implicit_clone` covers those cases [INFO] [stdout] | [INFO] [stdout] = note: requested on the command line with `-W clippy::string_to_string` [INFO] [stdout] = note: `#[warn(renamed_and_removed_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `clippy::string_to_string` has been removed: `clippy::implicit_clone` covers those cases [INFO] [stdout] | [INFO] [stdout] = note: requested on the command line with `-W clippy::string_to_string` [INFO] [stdout] = note: `#[warn(renamed_and_removed_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `literals` [INFO] [stdout] --> src/engine/conflict_analysis/all_decision_learning.rs:126:14 [INFO] [stdout] | [INFO] [stdout] 126 | for i in 1..literals.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 126 - for i in 1..literals.len() { [INFO] [stdout] 126 + for (i, ) in literals.iter().enumerate().skip(1) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `learned_nogood.literals.get(0)` [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:32:35 [INFO] [stdout] | [INFO] [stdout] 32 | _ = atomic_labels.insert(*learned_nogood.literals.get(0).unwrap(), AtomicLabels::Keep); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `learned_nogood.literals.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:44:35 [INFO] [stdout] | [INFO] [stdout] 44 | if *atomic_labels.get(&literal).unwrap() == AtomicLabels::Seen { [INFO] [stdout] | ^^^^^^^^ help: change this to: `literal` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:46:35 [INFO] [stdout] | [INFO] [stdout] 46 | check_literal(&literal, &mut context, learned_nogood, &mut atomic_labels); [INFO] [stdout] | ^^^^^^^^ help: change this to: `literal` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:65:50 [INFO] [stdout] | [INFO] [stdout] 65 | if let Some(&assignment) = atomic_labels.get(&literal) { [INFO] [stdout] | ^^^^^^^^ help: change this to: `literal` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: parameter is only used in recursion [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:61:5 [INFO] [stdout] | [INFO] [stdout] 61 | learned_nogood: &mut LearnedNogood, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_learned_nogood` [INFO] [stdout] | [INFO] [stdout] note: parameter used here [INFO] [stdout] --> src/engine/minimisation/recursive_minimisation.rs:80:68 [INFO] [stdout] | [INFO] [stdout] 80 | let antecedent_label = check_literal(&antecedent, context, learned_nogood, atomic_labels); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#only_used_in_recursion [INFO] [stdout] = note: `#[warn(clippy::only_used_in_recursion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `j` is only used to index `lits` [INFO] [stdout] --> src/engine/minimisation/semantic_minimisation.rs:29:26 [INFO] [stdout] | [INFO] [stdout] 29 | for j in 0..lits.len() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 29 - for j in 0..lits.len() { [INFO] [stdout] 29 + for in &lits { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `j` is only used to index `lits` [INFO] [stdout] --> src/engine/minimisation/semantic_minimisation.rs:100:26 [INFO] [stdout] | [INFO] [stdout] 100 | for j in 0..lits.len() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 100 - for j in 0..lits.len() { [INFO] [stdout] 100 + for in &lits { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/engine/minimisation/semantic_minimisation.rs:114:20 [INFO] [stdout] | [INFO] [stdout] 114 | && !context.get_predicates_for_literal(literal).next().is_none() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `context.get_predicates_for_literal(literal).next().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/engine/sat/clausal_propagator.rs:377:17 [INFO] [stdout] | [INFO] [stdout] 377 | / clause [INFO] [stdout] 378 | | .get_literal_slice() [INFO] [stdout] 379 | | .iter() [INFO] [stdout] 380 | | .any(|lit| *lit == x.cached_literal) [INFO] [stdout] | |________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains [INFO] [stdout] = note: `#[warn(clippy::manual_contains)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 377 ~ clause [INFO] [stdout] 378 + .get_literal_slice().contains(&x.cached_literal) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/proof/checking/inferences/all_different.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 56 - return Ok(()); [INFO] [stdout] 56 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for copying elements [INFO] [stdout] --> src/proof/checking/inferences/all_different.rs:16:27 [INFO] [stdout] | [INFO] [stdout] 16 | let proof_variables = variables [INFO] [stdout] | ___________________________^ [INFO] [stdout] 17 | | .iter() [INFO] [stdout] 18 | | .filter(|&&x| { [INFO] [stdout] 19 | | context.is_part_of_proof_step_left_hand_side(x) || context.is_proof_step_conclusion(x) [INFO] [stdout] 20 | | }) [INFO] [stdout] 21 | | .map(|&v| v) [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `copied` method [INFO] [stdout] | [INFO] [stdout] 16 ~ let proof_variables = variables [INFO] [stdout] 17 + .iter() [INFO] [stdout] 18 + .filter(|&&x| { [INFO] [stdout] 19 + context.is_part_of_proof_step_left_hand_side(x) || context.is_proof_step_conclusion(x) [INFO] [stdout] 20 + }).copied() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/proof/checking/inferences/all_different.rs:31:13 [INFO] [stdout] | [INFO] [stdout] 31 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/proof/checking/inferences/all_different.rs:45:21 [INFO] [stdout] | [INFO] [stdout] 44 | let node = graph.add_node(value.to_string()); [INFO] [stdout] | --------------------------------------------- unnecessary `let` binding [INFO] [stdout] 45 | node [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 44 ~ [INFO] [stdout] 45 ~ graph.add_node(value.to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:20:9 [INFO] [stdout] | [INFO] [stdout] 20 | / if !nodes.contains_key(&id_) { [INFO] [stdout] 21 | | let node = graph_prime.add_node(id); [INFO] [stdout] 22 | | _ = nodes.insert(id_, node); [INFO] [stdout] 23 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 20 ~ if let std::collections::hash_map::Entry::Vacant(e) = nodes.entry(id_) { [INFO] [stdout] 21 + let node = graph_prime.add_node(id); [INFO] [stdout] 22 + _ = { e.insert(node); None }; [INFO] [stdout] 23 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:26:17 [INFO] [stdout] | [INFO] [stdout] 26 | / if !nodes.contains_key(&(target as usize)) { [INFO] [stdout] 27 | | let target_node = graph_prime.add_node(target as usize); [INFO] [stdout] 28 | | _ = nodes.insert(target as usize, target_node); [INFO] [stdout] 29 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 26 ~ if let std::collections::hash_map::Entry::Vacant(e) = nodes.entry((target as usize)) { [INFO] [stdout] 27 + let target_node = graph_prime.add_node(target as usize); [INFO] [stdout] 28 + _ = { e.insert(target_node); None }; [INFO] [stdout] 29 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:37:12 [INFO] [stdout] | [INFO] [stdout] 37 | if assigned != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `assigned.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:38:13 [INFO] [stdout] | [INFO] [stdout] 38 | / if !nodes.contains_key(&(assigned.unwrap() as usize)) { [INFO] [stdout] 39 | | let target_node = graph_prime.add_node(assigned.unwrap() as usize); [INFO] [stdout] 40 | | _ = nodes.insert(assigned.unwrap() as usize, target_node); [INFO] [stdout] 41 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 38 ~ if let std::collections::hash_map::Entry::Vacant(e) = nodes.entry((assigned.unwrap() as usize)) { [INFO] [stdout] 39 + let target_node = graph_prime.add_node(assigned.unwrap() as usize); [INFO] [stdout] 40 + _ = { e.insert(target_node); None }; [INFO] [stdout] 41 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:83:5 [INFO] [stdout] | [INFO] [stdout] 83 | return sccs; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 83 - return sccs; [INFO] [stdout] 83 + sccs [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/proof/checking/inferences/circuit_prevent_and_check.rs:87:1 [INFO] [stdout] | [INFO] [stdout] 87 | / fn strong_connect( [INFO] [stdout] 88 | | graph: &Graph, [INFO] [stdout] 89 | | node: NodeIndex, [INFO] [stdout] 90 | | index: &mut HashMap, [INFO] [stdout] ... | [INFO] [stdout] 95 | | current_index: &mut usize, [INFO] [stdout] 96 | | ) { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/proof/checking/mod.rs:62:26 [INFO] [stdout] | [INFO] [stdout] 62 | .map(|atomic| to_int_atomic(atomic)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `to_int_atomic` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/proof/checking/mod.rs:66:26 [INFO] [stdout] | [INFO] [stdout] 66 | .map(|propagated| to_int_atomic(propagated)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `to_int_atomic` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/proof/checking/mod.rs:76:26 [INFO] [stdout] | [INFO] [stdout] 76 | .map(|atomic| to_int_atomic(atomic)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `to_int_atomic` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/propagators/all_different.rs:92:25 [INFO] [stdout] | [INFO] [stdout] 91 | let node = graph.add_node(value.to_string()); [INFO] [stdout] | --------------------------------------------- unnecessary `let` binding [INFO] [stdout] 92 | node [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 91 ~ [INFO] [stdout] 92 ~ graph.add_node(value.to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `HashSet` [INFO] [stdout] --> src/propagators/all_different.rs:183:17 [INFO] [stdout] | [INFO] [stdout] 183 | scc.into_iter().for_each(|&v| { [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/propagators/all_different.rs:186:42 [INFO] [stdout] | [INFO] [stdout] 186 | _ = sccs_vars.insert(node_weight[1..].parse::().unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/propagators/all_different.rs:185:17 [INFO] [stdout] | [INFO] [stdout] 185 | if node_weight.starts_with("x") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 185 ~ if let Some() = node_weight.strip_prefix("x") { [INFO] [stdout] 186 ~ _ = sccs_vars.insert(.parse::().unwrap()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `intersecting_vars.get(0)` [INFO] [stdout] --> src/propagators/arithmetic/maximum.rs:88:24 [INFO] [stdout] | [INFO] [stdout] 88 | let var = *intersecting_vars.get(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `intersecting_vars.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/propagators/arithmetic/maximum.rs:110:12 [INFO] [stdout] | [INFO] [stdout] 110 | if self.array.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.array.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/propagators/arithmetic/maximum.rs:208:13 [INFO] [stdout] | [INFO] [stdout] 208 | &context, [INFO] [stdout] | ^^^^^^^^ help: change this to: `context` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/propagators/arithmetic/maximum.rs:217:13 [INFO] [stdout] | [INFO] [stdout] 217 | &context, [INFO] [stdout] | ^^^^^^^^ help: change this to: `context` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/propagators/circuit/dfs.rs:89:13 [INFO] [stdout] | [INFO] [stdout] 89 | / match check(context.as_readonly(), &self.successor, i, n).3 { [INFO] [stdout] 90 | | Some(_) => { [INFO] [stdout] 91 | | return Err(self [INFO] [stdout] 92 | | .explain_conflict( [INFO] [stdout] ... | [INFO] [stdout] 100 | | _ => {} [INFO] [stdout] 101 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 89 ~ if let Some(_) = check(context.as_readonly(), &self.successor, i, n).3 { [INFO] [stdout] 90 + return Err(self [INFO] [stdout] 91 + .explain_conflict( [INFO] [stdout] 92 + &context.as_readonly(), [INFO] [stdout] 93 + SubCircuit, [INFO] [stdout] 94 + &self.successor[i], [INFO] [stdout] 95 + i as i32, [INFO] [stdout] 96 + ) [INFO] [stdout] 97 + .into()); [INFO] [stdout] 98 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> src/propagators/circuit/dfs.rs:238:1 [INFO] [stdout] | [INFO] [stdout] 238 | / fn dfs>( [INFO] [stdout] 239 | | context: &mut PropagationContextMut, [INFO] [stdout] 240 | | v: usize, [INFO] [stdout] 241 | | successor: &[T], [INFO] [stdout] ... | [INFO] [stdout] 247 | | prop: &P, [INFO] [stdout] 248 | | ) -> Result, Inconsistency> { [INFO] [stdout] | |_______________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:74:16 [INFO] [stdout] | [INFO] [stdout] 74 | if let Some(_) = conflict { [INFO] [stdout] | -------^^^^^^^----------- help: try: `if conflict.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `basic_types::propositional_conjunction::PropositionalConjunction` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:77:17 [INFO] [stdout] | [INFO] [stdout] 77 | / self.explain_conflict(&context, SubCircuit, &self.successor[fixed], fixed as i32) [INFO] [stdout] 78 | | .into(), [INFO] [stdout] | |___________________________^ help: consider removing `.into()`: `self.explain_conflict(&context, SubCircuit, &self.successor[fixed], fixed as i32)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `fixed` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:89:18 [INFO] [stdout] | [INFO] [stdout] 89 | for i in 0..n { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 89 - for i in 0..n { [INFO] [stdout] 89 + for (i, ) in fixed.iter_mut().enumerate().take(n) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:118:20 [INFO] [stdout] | [INFO] [stdout] 118 | if let Some(_) = conflict { [INFO] [stdout] | -------^^^^^^^----------- help: try: `if conflict.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:140:20 [INFO] [stdout] | [INFO] [stdout] 140 | if let Some(_) = conflict { [INFO] [stdout] | -------^^^^^^^----------- help: try: `if conflict.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `visited` [INFO] [stdout] --> src/propagators/circuit/forward_checking.rs:163:22 [INFO] [stdout] | [INFO] [stdout] 163 | for i in 0..n { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 163 - for i in 0..n { [INFO] [stdout] 163 + for (i, ) in visited.iter().enumerate().take(n) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `mandatory_energies` [INFO] [stdout] --> src/propagators/cumulative/energetic_reasoning.rs:65:22 [INFO] [stdout] | [INFO] [stdout] 65 | for i in 0..n { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 65 - for i in 0..n { [INFO] [stdout] 65 + for (i, ) in mandatory_energies.iter_mut().enumerate().take(n) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `propagators::explanations::TimeTableExplanation` [INFO] [stdout] --> src/propagators/cumulative/time_table.rs:129:15 [INFO] [stdout] | [INFO] [stdout] 129 | match e.into() { [INFO] [stdout] | ^^^^^^^^ help: consider removing `.into()`: `e` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/propagators/cumulative/time_table.rs:192:43 [INFO] [stdout] | [INFO] [stdout] 192 | .explain_conflict(&context, Overload, &start_times[i], t) [INFO] [stdout] | ^^^^^^^^ help: change this to: `context` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/propagators/domain_utils.rs:36:1 [INFO] [stdout] | [INFO] [stdout] 36 | / pub(crate) fn intersect>( [INFO] [stdout] 37 | | context: &mut PropagationContextMut, [INFO] [stdout] 38 | | var_a: &A, [INFO] [stdout] 39 | | var_b: &B, [INFO] [stdout] ... | [INFO] [stdout] 48 | | B: IntegerVariable, [INFO] [stdout] 49 | | E: Debug + Clone, [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/propagators/graph_utils.rs:26:13 [INFO] [stdout] | [INFO] [stdout] 26 | / if label.starts_with("x") { [INFO] [stdout] 27 | | if left[&u] == NodeIndex::end() { [INFO] [stdout] 28 | | if dfs(graph, u, &mut dist, &mut left, &mut right) { [INFO] [stdout] 29 | | iter += 1; [INFO] [stdout] ... | [INFO] [stdout] 32 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 26 ~ if label.starts_with("x") [INFO] [stdout] 27 ~ && left[&u] == NodeIndex::end() { [INFO] [stdout] 28 | if dfs(graph, u, &mut dist, &mut left, &mut right) { [INFO] [stdout] 29 | iter += 1; [INFO] [stdout] 30 | } [INFO] [stdout] 31 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/propagators/graph_utils.rs:27:17 [INFO] [stdout] | [INFO] [stdout] 27 | / if left[&u] == NodeIndex::end() { [INFO] [stdout] 28 | | if dfs(graph, u, &mut dist, &mut left, &mut right) { [INFO] [stdout] 29 | | iter += 1; [INFO] [stdout] 30 | | } [INFO] [stdout] 31 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 27 ~ if left[&u] == NodeIndex::end() [INFO] [stdout] 28 ~ && dfs(graph, u, &mut dist, &mut left, &mut right) { [INFO] [stdout] 29 | iter += 1; [INFO] [stdout] 30 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> src/propagators/graph_utils.rs:221:1 [INFO] [stdout] | [INFO] [stdout] 221 | / fn strong_connect( [INFO] [stdout] 222 | | graph: &Graph, [INFO] [stdout] 223 | | node: NodeIndex, [INFO] [stdout] 224 | | index: &mut HashMap, [INFO] [stdout] ... | [INFO] [stdout] 230 | | current_index: &mut usize, [INFO] [stdout] 231 | | ) { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `scc_idx` is only used to index `scc_adj` [INFO] [stdout] --> src/propagators/graph_utils.rs:342:20 [INFO] [stdout] | [INFO] [stdout] 342 | for scc_idx in 0..scc_adj.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 342 - for scc_idx in 0..scc_adj.len() { [INFO] [stdout] 342 + for in &scc_adj { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Literal` which implements the `Copy` trait [INFO] [stdout] --> src/tests/proof_checking/processing.rs:113:14 [INFO] [stdout] | [INFO] [stdout] 113 | vec![literal_2.clone(), literal_7.clone()], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `literal_2` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Literal` which implements the `Copy` trait [INFO] [stdout] --> src/tests/proof_checking/processing.rs:113:33 [INFO] [stdout] | [INFO] [stdout] 113 | vec![literal_2.clone(), literal_7.clone()], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `literal_7` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Literal` which implements the `Copy` trait [INFO] [stdout] --> src/tests/proof_checking/processing.rs:114:14 [INFO] [stdout] | [INFO] [stdout] 114 | vec![literal_6.clone(), literal_2.clone()], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `literal_6` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Literal` which implements the `Copy` trait [INFO] [stdout] --> src/tests/proof_checking/processing.rs:114:33 [INFO] [stdout] | [INFO] [stdout] 114 | vec![literal_6.clone(), literal_2.clone()], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `literal_2` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Literal` which implements the `Copy` trait [INFO] [stdout] --> src/tests/proof_checking/processing.rs:115:14 [INFO] [stdout] | [INFO] [stdout] 115 | vec![literal_2.clone()], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `literal_2` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> src/tests/proof_checking/processing.rs:142:62 [INFO] [stdout] | [INFO] [stdout] 142 | for (proof_l, expected_l) in lines_proof.into_iter().zip(lines_expected.into_iter()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/iterator.rs:629:11 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 142 - for (proof_l, expected_l) in lines_proof.into_iter().zip(lines_expected.into_iter()) { [INFO] [stdout] 142 + for (proof_l, expected_l) in lines_proof.into_iter().zip(lines_expected) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/basic_types/trail.rs:35:31 [INFO] [stdout] | [INFO] [stdout] 35 | pub(crate) fn synchronise(&mut self, new_decision_level: usize) -> Rev> { [INFO] [stdout] | ^^^^^^^^^ the lifetime is elided here ^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 35 | pub(crate) fn synchronise(&mut self, new_decision_level: usize) -> Rev> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/api/outputs/solution_iterator.rs:41:26 [INFO] [stdout] | [INFO] [stdout] 41 | pub fn next_solution(&mut self) -> IteratedSolution { [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 41 | pub fn next_solution(&mut self) -> IteratedSolution<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 26.15s [INFO] running `Command { std: "docker" "inspect" "97e0d5b600a87d7bdfd695ace4e5af7c415796c2ed156782f8bc22c4063b2092", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "97e0d5b600a87d7bdfd695ace4e5af7c415796c2ed156782f8bc22c4063b2092", kill_on_drop: false }` [INFO] [stdout] 97e0d5b600a87d7bdfd695ace4e5af7c415796c2ed156782f8bc22c4063b2092