[INFO] fetching crate ice-tool 0.1.4... [INFO] linting ice-tool-0.1.4 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate ice-tool 0.1.4 into /workspace/builds/worker-0-tc1/source [INFO] started tweaking crates.io crate ice-tool 0.1.4 [INFO] finished tweaking crates.io crate ice-tool 0.1.4 [INFO] tweaked toml for crates.io crate ice-tool 0.1.4 written to /workspace/builds/worker-0-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate ice-tool 0.1.4 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 crates.io crate ice-tool 0.1.4 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] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Locking 1 package to latest Rust 1.96.0-nightly compatible version [INFO] [stderr] Adding capulus v0.1.0 (available: v0.2.1) [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded names v0.14.0 [INFO] [stderr] Downloaded toml v1.0.6+spec-1.1.0 [INFO] [stderr] Downloaded capulus v0.1.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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] 476c059a197961575fd675f9bb0efa78b701add2741ec1b9ed3e67cfb9d80bf1 [INFO] running `Command { std: "docker" "start" "-a" "476c059a197961575fd675f9bb0efa78b701add2741ec1b9ed3e67cfb9d80bf1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "476c059a197961575fd675f9bb0efa78b701add2741ec1b9ed3e67cfb9d80bf1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "476c059a197961575fd675f9bb0efa78b701add2741ec1b9ed3e67cfb9d80bf1", kill_on_drop: false }` [INFO] [stdout] 476c059a197961575fd675f9bb0efa78b701add2741ec1b9ed3e67cfb9d80bf1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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] bb9d44f58b6c9da836522dc4f21c2aec592d24c19b89b85f989af143baf3539e [INFO] running `Command { std: "docker" "start" "-a" "bb9d44f58b6c9da836522dc4f21c2aec592d24c19b89b85f989af143baf3539e", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.182 [INFO] [stderr] Checking mio v1.1.1 [INFO] [stderr] Checking socket2 v0.6.3 [INFO] [stderr] Compiling aws-lc-rs v1.16.1 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling zerocopy v0.8.40 [INFO] [stderr] Checking simd-adler32 v0.3.8 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Checking rand_core v0.10.0 [INFO] [stderr] Compiling rustls v0.23.37 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking futures-util v0.3.32 [INFO] [stderr] Checking compression-core v0.4.31 [INFO] [stderr] Checking console v0.16.2 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Checking winnow v0.7.15 [INFO] [stderr] Checking cpufeatures v0.3.0 [INFO] [stderr] Checking miniz_oxide v0.8.9 [INFO] [stderr] Checking rustls-native-certs v0.8.3 [INFO] [stderr] Checking dirs-sys v0.5.0 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking chacha20 v0.10.0 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Checking serde_spanned v1.0.4 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Checking toml_datetime v1.0.0+spec-1.1.0 [INFO] [stderr] Compiling litrs v1.0.0 [INFO] [stderr] Compiling names v0.14.0 [INFO] [stderr] Checking clap_builder v4.5.60 [INFO] [stderr] Checking indicatif v0.18.4 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking tokio v1.50.0 [INFO] [stderr] Checking signal-hook-mio v0.2.5 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking time v0.3.47 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Checking rand v0.10.0 [INFO] [stderr] Checking flate2 v1.1.9 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking dirs v6.0.0 [INFO] [stderr] Checking csv-core v0.1.13 [INFO] [stderr] Checking derive_more v2.1.1 [INFO] [stderr] Compiling document-features v0.2.12 [INFO] [stderr] Checking fs2 v0.4.3 [INFO] [stderr] Checking chrono v0.4.44 [INFO] [stderr] Checking compression-codecs v0.4.37 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Checking csv v1.4.0 [INFO] [stderr] Checking webbrowser v1.1.0 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Checking toml_parser v1.0.9+spec-1.1.0 [INFO] [stderr] Compiling cmake v0.1.57 [INFO] [stderr] Checking tempfile v3.26.0 [INFO] [stderr] Checking xattr v1.6.1 [INFO] [stderr] Checking crossterm v0.29.0 [INFO] [stderr] Compiling aws-lc-sys v0.38.0 [INFO] [stderr] Checking dialoguer v0.12.0 [INFO] [stderr] Checking clap v4.5.60 [INFO] [stderr] Checking tar v0.4.44 [INFO] [stderr] Checking toml v1.0.6+spec-1.1.0 [INFO] [stderr] Checking capulus v0.1.0 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking async-compression v0.4.41 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking tower v0.5.3 [INFO] [stderr] Checking tower-http v0.6.8 [INFO] [stderr] Checking hyper-util v0.1.20 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking rustls-webpki v0.103.9 [INFO] [stderr] Checking tokio-rustls v0.26.4 [INFO] [stderr] Checking rustls-platform-verifier v0.6.2 [INFO] [stderr] Checking hyper-rustls v0.27.7 [INFO] [stderr] Checking reqwest v0.13.2 [INFO] [stderr] Checking ice-tool v0.1.4 (/opt/rustwide/workdir) [INFO] [stdout] warning: bound is defined in more than one place [INFO] [stdout] --> src/app.rs:322:26 [INFO] [stdout] | [INFO] [stdout] 322 | fn create_market_machine( [INFO] [stdout] | ^ [INFO] [stdout] ... [INFO] [stdout] 328 | P: 'static, [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations [INFO] [stdout] = note: `#[warn(clippy::multiple_bound_locations)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: bound is defined in more than one place [INFO] [stdout] --> src/app.rs:322:26 [INFO] [stdout] | [INFO] [stdout] 322 | fn create_market_machine( [INFO] [stdout] | ^ [INFO] [stdout] ... [INFO] [stdout] 328 | P: 'static, [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations [INFO] [stdout] = note: `#[warn(clippy::multiple_bound_locations)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `expect` on `verified_candidate` after checking its variant with `is_some` [INFO] [stdout] --> src/app.rs:736:41 [INFO] [stdout] | [INFO] [stdout] 732 | ... if verified_candidate.is_some() { [INFO] [stdout] | ------------------------------- help: try: `if let Some() = verified_candidate` [INFO] [stdout] ... [INFO] [stdout] 736 | ... verified_candidate.expect("verified candidate"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/config_store.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 61 | if !supported_config_keys() [INFO] [stdout] | _________^ [INFO] [stdout] 62 | | .iter() [INFO] [stdout] 63 | | .any(|candidate| *candidate == key) [INFO] [stdout] | |___________________________________________^ help: try: `supported_config_keys().contains(&key)` [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] [INFO] [stdout] [INFO] [stdout] warning: items after a test module [INFO] [stdout] --> src/app.rs:976:1 [INFO] [stdout] | [INFO] [stdout] 976 | mod tests { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1067 | fn login_local() -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1075 | fn login_vast(config: &mut IceConfig, force: bool) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1117 | fn login_gcp(config: &mut IceConfig, force: bool) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1214 | fn login_aws(config: &mut IceConfig, force: bool) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1288 | fn detect_gcp_project(config: &IceConfig, include_cached: bool) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1292 | fn detect_gcp_credentials_path(config: &IceConfig, include_cached: bool) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1299 | fn gcp_has_active_account() -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1303 | fn detect_aws_env_keypair() -> Option<(String, String)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1314 | fn aws_identity_detected(config: &IceConfig, include_cached: bool) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#items_after_test_module [INFO] [stdout] = note: `#[warn(clippy::items_after_test_module)]` on by default [INFO] [stdout] = help: move the items to before the test module was defined [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `expect` on `verified_candidate` after checking its variant with `is_some` [INFO] [stdout] --> src/app.rs:736:41 [INFO] [stdout] | [INFO] [stdout] 732 | ... if verified_candidate.is_some() { [INFO] [stdout] | ------------------------------- help: try: `if let Some() = verified_candidate` [INFO] [stdout] ... [INFO] [stdout] 736 | ... verified_candidate.expect("verified candidate"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/config_store.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 61 | if !supported_config_keys() [INFO] [stdout] | _________^ [INFO] [stdout] 62 | | .iter() [INFO] [stdout] 63 | | .any(|candidate| *candidate == key) [INFO] [stdout] | |___________________________________________^ help: try: `supported_config_keys().contains(&key)` [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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/providers/aws.rs:707:60 [INFO] [stdout] | [INFO] [stdout] 707 | return Ok(vec![describe_image_requirements(config, ®ion, ami)?]); [INFO] [stdout] | ^^^^^^^ help: change this to: `region` [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: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/providers/catalog.rs:44:34 [INFO] [stdout] | [INFO] [stdout] 44 | pub(crate) fn build_index_by_key<'a, T, K, F>( [INFO] [stdout] | ^^ [INFO] [stdout] 45 | entries: &'a [T], [INFO] [stdout] | ^^ [INFO] [stdout] ... [INFO] [stdout] 48 | ) -> Result> [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 44 ~ pub(crate) fn build_index_by_key( [INFO] [stdout] 45 ~ entries: &[T], [INFO] [stdout] 46 | mut key_fn: F, [INFO] [stdout] 47 | mut duplicate_error: impl FnMut(&K) -> String, [INFO] [stdout] 48 ~ ) -> Result> [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/providers/catalog.rs:63:42 [INFO] [stdout] | [INFO] [stdout] 63 | pub(crate) fn build_machine_region_index<'a, T>( [INFO] [stdout] | ^^ [INFO] [stdout] 64 | entries: &'a [T], [INFO] [stdout] | ^^ [INFO] [stdout] 65 | duplicate_error: impl FnMut(&MachineRegionKey) -> String, [INFO] [stdout] 66 | ) -> Result> [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 63 ~ pub(crate) fn build_machine_region_index( [INFO] [stdout] 64 ~ entries: &[T], [INFO] [stdout] 65 | duplicate_error: impl FnMut(&MachineRegionKey) -> String, [INFO] [stdout] 66 ~ ) -> Result> [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct update has no effect, all the fields in the struct have already been specified [INFO] [stdout] --> src/providers/gcp.rs:1122:11 [INFO] [stdout] | [INFO] [stdout] 1122 | ..CatalogPricingOutcome::default() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_update [INFO] [stdout] = note: `#[warn(clippy::needless_update)]` 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/providers/aws.rs:707:60 [INFO] [stdout] | [INFO] [stdout] 707 | return Ok(vec![describe_image_requirements(config, ®ion, ami)?]); [INFO] [stdout] | ^^^^^^^ help: change this to: `region` [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 boolean expression can be simplified [INFO] [stdout] --> src/providers/local.rs:137:12 [INFO] [stdout] | [INFO] [stdout] 137 | if refreshed.is_stopped() == !running { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `refreshed.is_stopped() != running` [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: consider using `sort_by_key` [INFO] [stdout] --> src/providers/vast.rs:892:9 [INFO] [stdout] | [INFO] [stdout] 892 | instances.sort_by(|left, right| right.id.cmp(&left.id)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 892 - instances.sort_by(|left, right| right.id.cmp(&left.id)); [INFO] [stdout] 892 + instances.sort_by_key(|right| std::cmp::Reverse(right.id)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/providers/catalog.rs:44:34 [INFO] [stdout] | [INFO] [stdout] 44 | pub(crate) fn build_index_by_key<'a, T, K, F>( [INFO] [stdout] | ^^ [INFO] [stdout] 45 | entries: &'a [T], [INFO] [stdout] | ^^ [INFO] [stdout] ... [INFO] [stdout] 48 | ) -> Result> [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 44 ~ pub(crate) fn build_index_by_key( [INFO] [stdout] 45 ~ entries: &[T], [INFO] [stdout] 46 | mut key_fn: F, [INFO] [stdout] 47 | mut duplicate_error: impl FnMut(&K) -> String, [INFO] [stdout] 48 ~ ) -> Result> [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/providers/catalog.rs:63:42 [INFO] [stdout] | [INFO] [stdout] 63 | pub(crate) fn build_machine_region_index<'a, T>( [INFO] [stdout] | ^^ [INFO] [stdout] 64 | entries: &'a [T], [INFO] [stdout] | ^^ [INFO] [stdout] 65 | duplicate_error: impl FnMut(&MachineRegionKey) -> String, [INFO] [stdout] 66 | ) -> Result> [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 63 ~ pub(crate) fn build_machine_region_index( [INFO] [stdout] 64 ~ entries: &[T], [INFO] [stdout] 65 | duplicate_error: impl FnMut(&MachineRegionKey) -> String, [INFO] [stdout] 66 ~ ) -> Result> [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: items after a test module [INFO] [stdout] --> src/providers/gcp.rs:2073:1 [INFO] [stdout] | [INFO] [stdout] 2073 | mod tests { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2471 | pub(crate) fn list_instances(config: &IceConfig) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2486 | pub(crate) fn resolve_instance(config: &IceConfig, identifier: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2509 | / pub(crate) fn set_instance_state( [INFO] [stdout] 2510 | | config: &IceConfig, [INFO] [stdout] 2511 | | instance: &GcpInstance, [INFO] [stdout] 2512 | | running: bool, [INFO] [stdout] 2513 | | ) -> Result<()> { [INFO] [stdout] | |_______________^ [INFO] [stdout] ... [INFO] [stdout] 2535 | / pub(crate) fn wait_for_state( [INFO] [stdout] 2536 | | config: &IceConfig, [INFO] [stdout] 2537 | | name: &str, [INFO] [stdout] 2538 | | zone: &str, [INFO] [stdout] 2539 | | desired_state: &str, [INFO] [stdout] 2540 | | timeout: Duration, [INFO] [stdout] 2541 | | ) -> Result { [INFO] [stdout] | |________________________^ [INFO] [stdout] ... [INFO] [stdout] 2555 | pub(crate) fn open_shell(config: &IceConfig, instance: &GcpInstance) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2559 | fn shell_remote_command(instance: &GcpInstance) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2572 | fn build_shell_connect_command(config: &IceConfig, instance: &GcpInstance) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2599 | / pub(crate) fn download( [INFO] [stdout] 2600 | | config: &IceConfig, [INFO] [stdout] 2601 | | instance: &GcpInstance, [INFO] [stdout] 2602 | | remote_path: &str, [INFO] [stdout] 2603 | | local_path: Option<&Path>, [INFO] [stdout] 2604 | | ) -> Result<()> { [INFO] [stdout] | |_______________^ [INFO] [stdout] ... [INFO] [stdout] 2626 | / pub(crate) fn upload( [INFO] [stdout] 2627 | | config: &IceConfig, [INFO] [stdout] 2628 | | instance: &GcpInstance, [INFO] [stdout] 2629 | | local_path: &Path, [INFO] [stdout] 2630 | | remote_path: Option<&str>, [INFO] [stdout] 2631 | | ) -> Result<()> { [INFO] [stdout] | |_______________^ [INFO] [stdout] ... [INFO] [stdout] 2649 | pub(crate) fn delete_instance(config: &IceConfig, instance: &GcpInstance) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2664 | / pub(crate) fn create_instance( [INFO] [stdout] 2665 | | config: &IceConfig, [INFO] [stdout] 2666 | | candidate: &CloudMachineCandidate, [INFO] [stdout] 2667 | | hours: f64, [INFO] [stdout] 2668 | | workload: &InstanceWorkload, [INFO] [stdout] 2669 | | ) -> Result { [INFO] [stdout] | |________________________^ [INFO] [stdout] ... [INFO] [stdout] 2784 | fn registry_access_token(config: &IceConfig) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2792 | fn service_account_email(config: &IceConfig) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2808 | fn command(config: &IceConfig) -> Command { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2812 | fn maybe_add_project_arg(command: &mut Command, config: &IceConfig) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2820 | fn parse_instances(value: Value) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2827 | fn parse_instance_row(row: &Value) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2863 | fn instance_metadata_value<'a>(row: &'a Value, key: &str) -> Option<&'a str> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2875 | fn describe_instance(config: &IceConfig, name: &str, zone: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2893 | / fn resolve_instance_from_list( [INFO] [stdout] 2894 | | instances: Vec, [INFO] [stdout] 2895 | | identifier: &str, [INFO] [stdout] 2896 | | ) -> Result { [INFO] [stdout] | |________________________^ [INFO] [stdout] ... [INFO] [stdout] 2914 | / fn run_ssh_command( [INFO] [stdout] 2915 | | config: &IceConfig, [INFO] [stdout] 2916 | | instance: &GcpInstance, [INFO] [stdout] 2917 | | remote_command: &str, [INFO] [stdout] 2918 | | allocate_tty: bool, [INFO] [stdout] 2919 | | ) -> Result<()> { [INFO] [stdout] | |_______________^ [INFO] [stdout] ... [INFO] [stdout] 2939 | fn wait_for_ssh_ready(config: &IceConfig, instance: &GcpInstance, timeout: Duration) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 2965 | / fn upload_unpack_bundle( [INFO] [stdout] 2966 | | config: &IceConfig, [INFO] [stdout] 2967 | | instance: &GcpInstance, [INFO] [stdout] 2968 | | bundle_root: &Path, [INFO] [stdout] 2969 | | remote_dir: &str, [INFO] [stdout] 2970 | | ) -> Result<()> { [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#items_after_test_module [INFO] [stdout] = help: move the items to before the test module was defined [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/providers/vast.rs:1996:5 [INFO] [stdout] | [INFO] [stdout] 1996 | / if value.is_object() { [INFO] [stdout] 1997 | | if let Ok(parsed) = serde_json::from_value::(value.clone()) { [INFO] [stdout] 1998 | | return Ok(Some(parsed)); [INFO] [stdout] 1999 | | } [INFO] [stdout] 2000 | | } [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] 1996 ~ if value.is_object() [INFO] [stdout] 1997 ~ && let Ok(parsed) = serde_json::from_value::(value.clone()) { [INFO] [stdout] 1998 | return Ok(Some(parsed)); [INFO] [stdout] 1999 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/provision.rs:40:6 [INFO] [stdout] | [INFO] [stdout] 40 | ) -> ( [INFO] [stdout] | ______^ [INFO] [stdout] 41 | | &mut Option, [INFO] [stdout] 42 | | &mut Option, [INFO] [stdout] 43 | | &mut Option>, [INFO] [stdout] 44 | | &mut Option, [INFO] [stdout] 45 | | ) { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/provision.rs:72:6 [INFO] [stdout] | [INFO] [stdout] 72 | ) -> ( [INFO] [stdout] | ______^ [INFO] [stdout] 73 | | &Option, [INFO] [stdout] 74 | | &Option, [INFO] [stdout] 75 | | &Option>, [INFO] [stdout] 76 | | &Option, [INFO] [stdout] 77 | | ) { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/provision.rs:657:17 [INFO] [stdout] | [INFO] [stdout] 657 | / if cursor_index + 1 < options.len() { [INFO] [stdout] 658 | | cursor_index += 1; [INFO] [stdout] 659 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 656 ~ Key::ArrowDown | Key::Char('j') | Key::Char('J') [INFO] [stdout] 657 ~ if cursor_index + 1 < options.len() => { [INFO] [stdout] 658 | cursor_index += 1; [INFO] [stdout] 659 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/provision.rs:665:17 [INFO] [stdout] | [INFO] [stdout] 665 | / if !options.is_empty() { [INFO] [stdout] 666 | | cursor_index = (cursor_index + page_size).min(options.len() - 1); [INFO] [stdout] 667 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 664 ~ Key::PageDown | Key::Char('n') | Key::Char('N') [INFO] [stdout] 665 ~ if !options.is_empty() => { [INFO] [stdout] 666 | cursor_index = (cursor_index + page_size).min(options.len() - 1); [INFO] [stdout] 667 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/provision.rs:676:17 [INFO] [stdout] | [INFO] [stdout] 676 | / if !options.is_empty() { [INFO] [stdout] 677 | | cursor_index = options.len() - 1; [INFO] [stdout] 678 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 675 ~ Key::End [INFO] [stdout] 676 ~ if !options.is_empty() => { [INFO] [stdout] 677 | cursor_index = options.len() - 1; [INFO] [stdout] 678 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/support.rs:461:30 [INFO] [stdout] | [INFO] [stdout] 461 | let plain_retry_budget = plain_total.min(RANDOM_NAME_COLLISION_RETRIES).max(1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `plain_total.clamp(1, RANDOM_NAME_COLLISION_RETRIES)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/support.rs:487:33 [INFO] [stdout] | [INFO] [stdout] 487 | let numbered_retry_budget = numbered_total.min(NUMBERED_NAME_COLLISION_RETRIES).max(1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `numbered_total.clamp(1, NUMBERED_NAME_COLLISION_RETRIES)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/support.rs:568:5 [INFO] [stdout] | [INFO] [stdout] 568 | / if let Ok(value) = serde_json::from_str::(body) { [INFO] [stdout] 569 | | if let Some(message) = value [INFO] [stdout] 570 | | .get("msg") [INFO] [stdout] 571 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 577 | | } [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] 568 ~ if let Ok(value) = serde_json::from_str::(body) [INFO] [stdout] 569 ~ && let Some(message) = value [INFO] [stdout] 570 | .get("msg") [INFO] [stdout] ... [INFO] [stdout] 575 | return message.to_owned(); [INFO] [stdout] 576 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct update has no effect, all the fields in the struct have already been specified [INFO] [stdout] --> src/providers/gcp.rs:1122:11 [INFO] [stdout] | [INFO] [stdout] 1122 | ..CatalogPricingOutcome::default() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_update [INFO] [stdout] = note: `#[warn(clippy::needless_update)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/unpack.rs:468:53 [INFO] [stdout] | [INFO] [stdout] 468 | if destination.exists() && !entry_type.is_dir() { [INFO] [stdout] | _____________________________________________________^ [INFO] [stdout] 469 | | remove_path_if_exists(&destination)?; [INFO] [stdout] 470 | | } else if destination.exists() && entry_type.is_dir() && !destination.is_dir() { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/unpack.rs:470:84 [INFO] [stdout] | [INFO] [stdout] 470 | } else if destination.exists() && entry_type.is_dir() && !destination.is_dir() { [INFO] [stdout] | ____________________________________________________________________________________^ [INFO] [stdout] 471 | | remove_path_if_exists(&destination)?; [INFO] [stdout] 472 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/unpack.rs:651:5 [INFO] [stdout] | [INFO] [stdout] 651 | / format!( [INFO] [stdout] 652 | | "{}{}", [INFO] [stdout] 653 | | ICE_UNPACK_ROOT_DIR, [INFO] [stdout] 654 | | format!("/vast-{}", instance.id) [INFO] [stdout] 655 | | ) [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] = note: `#[warn(clippy::format_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/unpack.rs:659:5 [INFO] [stdout] | [INFO] [stdout] 659 | / format!( [INFO] [stdout] 660 | | "{}{}", [INFO] [stdout] 661 | | ICE_UNPACK_ROOT_DIR, [INFO] [stdout] 662 | | format!("/gcp-{}", instance.name) [INFO] [stdout] 663 | | ) [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/unpack.rs:667:5 [INFO] [stdout] | [INFO] [stdout] 667 | / format!( [INFO] [stdout] 668 | | "{}{}", [INFO] [stdout] 669 | | ICE_UNPACK_ROOT_DIR, [INFO] [stdout] 670 | | format!("/aws-{}", instance.instance_id) [INFO] [stdout] 671 | | ) [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/providers/local.rs:137:12 [INFO] [stdout] | [INFO] [stdout] 137 | if refreshed.is_stopped() == !running { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `refreshed.is_stopped() != running` [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: consider using `sort_by_key` [INFO] [stdout] --> src/providers/vast.rs:892:9 [INFO] [stdout] | [INFO] [stdout] 892 | instances.sort_by(|left, right| right.id.cmp(&left.id)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 892 - instances.sort_by(|left, right| right.id.cmp(&left.id)); [INFO] [stdout] 892 + instances.sort_by_key(|right| std::cmp::Reverse(right.id)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/providers/vast.rs:1996:5 [INFO] [stdout] | [INFO] [stdout] 1996 | / if value.is_object() { [INFO] [stdout] 1997 | | if let Ok(parsed) = serde_json::from_value::(value.clone()) { [INFO] [stdout] 1998 | | return Ok(Some(parsed)); [INFO] [stdout] 1999 | | } [INFO] [stdout] 2000 | | } [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] 1996 ~ if value.is_object() [INFO] [stdout] 1997 ~ && let Ok(parsed) = serde_json::from_value::(value.clone()) { [INFO] [stdout] 1998 | return Ok(Some(parsed)); [INFO] [stdout] 1999 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/provision.rs:40:6 [INFO] [stdout] | [INFO] [stdout] 40 | ) -> ( [INFO] [stdout] | ______^ [INFO] [stdout] 41 | | &mut Option, [INFO] [stdout] 42 | | &mut Option, [INFO] [stdout] 43 | | &mut Option>, [INFO] [stdout] 44 | | &mut Option, [INFO] [stdout] 45 | | ) { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/provision.rs:72:6 [INFO] [stdout] | [INFO] [stdout] 72 | ) -> ( [INFO] [stdout] | ______^ [INFO] [stdout] 73 | | &Option, [INFO] [stdout] 74 | | &Option, [INFO] [stdout] 75 | | &Option>, [INFO] [stdout] 76 | | &Option, [INFO] [stdout] 77 | | ) { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/provision.rs:657:17 [INFO] [stdout] | [INFO] [stdout] 657 | / if cursor_index + 1 < options.len() { [INFO] [stdout] 658 | | cursor_index += 1; [INFO] [stdout] 659 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 656 ~ Key::ArrowDown | Key::Char('j') | Key::Char('J') [INFO] [stdout] 657 ~ if cursor_index + 1 < options.len() => { [INFO] [stdout] 658 | cursor_index += 1; [INFO] [stdout] 659 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/provision.rs:665:17 [INFO] [stdout] | [INFO] [stdout] 665 | / if !options.is_empty() { [INFO] [stdout] 666 | | cursor_index = (cursor_index + page_size).min(options.len() - 1); [INFO] [stdout] 667 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 664 ~ Key::PageDown | Key::Char('n') | Key::Char('N') [INFO] [stdout] 665 ~ if !options.is_empty() => { [INFO] [stdout] 666 | cursor_index = (cursor_index + page_size).min(options.len() - 1); [INFO] [stdout] 667 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/provision.rs:676:17 [INFO] [stdout] | [INFO] [stdout] 676 | / if !options.is_empty() { [INFO] [stdout] 677 | | cursor_index = options.len() - 1; [INFO] [stdout] 678 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 675 ~ Key::End [INFO] [stdout] 676 ~ if !options.is_empty() => { [INFO] [stdout] 677 | cursor_index = options.len() - 1; [INFO] [stdout] 678 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/support.rs:461:30 [INFO] [stdout] | [INFO] [stdout] 461 | let plain_retry_budget = plain_total.min(RANDOM_NAME_COLLISION_RETRIES).max(1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `plain_total.clamp(1, RANDOM_NAME_COLLISION_RETRIES)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/support.rs:487:33 [INFO] [stdout] | [INFO] [stdout] 487 | let numbered_retry_budget = numbered_total.min(NUMBERED_NAME_COLLISION_RETRIES).max(1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `numbered_total.clamp(1, NUMBERED_NAME_COLLISION_RETRIES)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/support.rs:568:5 [INFO] [stdout] | [INFO] [stdout] 568 | / if let Ok(value) = serde_json::from_str::(body) { [INFO] [stdout] 569 | | if let Some(message) = value [INFO] [stdout] 570 | | .get("msg") [INFO] [stdout] 571 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 577 | | } [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] 568 ~ if let Ok(value) = serde_json::from_str::(body) [INFO] [stdout] 569 ~ && let Some(message) = value [INFO] [stdout] 570 | .get("msg") [INFO] [stdout] ... [INFO] [stdout] 575 | return message.to_owned(); [INFO] [stdout] 576 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/unpack.rs:468:53 [INFO] [stdout] | [INFO] [stdout] 468 | if destination.exists() && !entry_type.is_dir() { [INFO] [stdout] | _____________________________________________________^ [INFO] [stdout] 469 | | remove_path_if_exists(&destination)?; [INFO] [stdout] 470 | | } else if destination.exists() && entry_type.is_dir() && !destination.is_dir() { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/unpack.rs:470:84 [INFO] [stdout] | [INFO] [stdout] 470 | } else if destination.exists() && entry_type.is_dir() && !destination.is_dir() { [INFO] [stdout] | ____________________________________________________________________________________^ [INFO] [stdout] 471 | | remove_path_if_exists(&destination)?; [INFO] [stdout] 472 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/unpack.rs:651:5 [INFO] [stdout] | [INFO] [stdout] 651 | / format!( [INFO] [stdout] 652 | | "{}{}", [INFO] [stdout] 653 | | ICE_UNPACK_ROOT_DIR, [INFO] [stdout] 654 | | format!("/vast-{}", instance.id) [INFO] [stdout] 655 | | ) [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] = note: `#[warn(clippy::format_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/unpack.rs:659:5 [INFO] [stdout] | [INFO] [stdout] 659 | / format!( [INFO] [stdout] 660 | | "{}{}", [INFO] [stdout] 661 | | ICE_UNPACK_ROOT_DIR, [INFO] [stdout] 662 | | format!("/gcp-{}", instance.name) [INFO] [stdout] 663 | | ) [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `format!` args [INFO] [stdout] --> src/unpack.rs:667:5 [INFO] [stdout] | [INFO] [stdout] 667 | / format!( [INFO] [stdout] 668 | | "{}{}", [INFO] [stdout] 669 | | ICE_UNPACK_ROOT_DIR, [INFO] [stdout] 670 | | format!("/aws-{}", instance.instance_id) [INFO] [stdout] 671 | | ) [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `format!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 03s [INFO] running `Command { std: "docker" "inspect" "bb9d44f58b6c9da836522dc4f21c2aec592d24c19b89b85f989af143baf3539e", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "bb9d44f58b6c9da836522dc4f21c2aec592d24c19b89b85f989af143baf3539e", kill_on_drop: false }` [INFO] [stdout] bb9d44f58b6c9da836522dc4f21c2aec592d24c19b89b85f989af143baf3539e