[INFO] cloning repository https://github.com/blkerby/Z3OverworldEditor [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/blkerby/Z3OverworldEditor" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fblkerby%2FZ3OverworldEditor", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fblkerby%2FZ3OverworldEditor'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 5a0aad6e47db8560e527ca191f345c33503dada1 [INFO] linting blkerby/Z3OverworldEditor against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fblkerby%2FZ3OverworldEditor" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/blkerby/Z3OverworldEditor [INFO] finished tweaking git repo https://github.com/blkerby/Z3OverworldEditor [INFO] tweaked toml for git repo https://github.com/blkerby/Z3OverworldEditor written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/blkerby/Z3OverworldEditor 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/blkerby/Z3OverworldEditor 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] Downloading crates ... [INFO] [stderr] Downloaded zvariant_utils v3.2.0 [INFO] [stderr] Downloaded ctor-lite v0.1.0 [INFO] [stderr] Downloaded zvariant_derive v5.5.1 [INFO] [stderr] Downloaded wayland-cursor v0.31.10 [INFO] [stderr] Downloaded drm-ffi v0.8.0 [INFO] [stderr] Downloaded wayland-sys v0.31.6 [INFO] [stderr] Downloaded xmlwriter v0.1.0 [INFO] [stderr] Downloaded value-bag v1.11.1 [INFO] [stderr] Downloaded libloading v0.8.6 [INFO] [stderr] Downloaded xcursor v0.3.8 [INFO] [stderr] Downloaded iced_winit v0.13.0 [INFO] [stderr] Downloaded json-pretty-compact v0.1.2 [INFO] [stderr] Downloaded imagesize v0.12.0 [INFO] [stderr] Downloaded dark-light v2.0.0 [INFO] [stderr] Downloaded window_clipboard v0.4.1 [INFO] [stderr] Downloaded directories v6.0.0 [INFO] [stderr] Downloaded drm v0.12.0 [INFO] [stderr] Downloaded clap v4.5.38 [INFO] [stderr] Downloaded jiff-static v0.2.13 [INFO] [stderr] Downloaded fontdb v0.18.0 [INFO] [stderr] Downloaded ashpd v0.10.3 [INFO] [stderr] Downloaded wgpu v0.19.4 [INFO] [stderr] Downloaded clap_builder v4.5.38 [INFO] [stderr] Downloaded wayland-protocols v0.32.8 [INFO] [stderr] Downloaded lyon_tessellation v1.0.15 [INFO] [stderr] Downloaded iced_glyphon v0.6.0 [INFO] [stderr] Downloaded swash v0.1.19 [INFO] [stderr] Downloaded wgpu-hal v0.19.5 [INFO] [stderr] Downloaded zerocopy v0.8.25 [INFO] [stderr] Downloaded skrifa v0.22.3 [INFO] [stderr] Downloaded async-std v1.13.1 [INFO] [stderr] Downloaded read-fonts v0.22.7 [INFO] [stderr] Downloaded rustix v0.37.28 [INFO] [stderr] Downloaded rustybuzz v0.14.1 [INFO] [stderr] Downloaded iced_graphics v0.13.0 [INFO] [stderr] Downloaded wgpu-core v0.19.4 [INFO] [stderr] Downloaded iced v0.13.1 [INFO] [stderr] Downloaded libm v0.2.14 [INFO] [stderr] Downloaded kurbo v0.11.2 [INFO] [stderr] Downloaded hashbrown v0.15.3 [INFO] [stderr] Downloaded toml_edit v0.22.26 [INFO] [stderr] Downloaded winnow v0.7.9 [INFO] [stderr] Downloaded naga v0.19.2 [INFO] [stderr] Downloaded owned_ttf_parser v0.25.0 [INFO] [stderr] Downloaded winit v0.30.10 [INFO] [stderr] Downloaded fontdb v0.16.2 [INFO] [stderr] Downloaded usvg v0.42.0 [INFO] [stderr] Downloaded zbus v5.6.0 [INFO] [stderr] Downloaded iced_widget v0.13.4 [INFO] [stderr] Downloaded cc v1.2.21 [INFO] [stderr] Downloaded zerocopy-derive v0.8.25 [INFO] [stderr] Downloaded detect-desktop-environment v0.2.0 [INFO] [stderr] Downloaded ashpd v0.11.0 [INFO] [stderr] Downloaded libc v0.2.172 [INFO] [stderr] Downloaded kamadak-exif v0.5.5 [INFO] [stderr] Downloaded jiff v0.2.13 [INFO] [stderr] Downloaded resvg v0.42.0 [INFO] [stderr] Downloaded wgpu-types v0.19.2 [INFO] [stderr] Downloaded iced_wgpu v0.13.5 [INFO] [stderr] Downloaded iced_core v0.13.2 [INFO] [stderr] Downloaded smol v1.3.0 [INFO] [stderr] Downloaded zvariant v5.5.1 [INFO] [stderr] Downloaded wayland-backend v0.3.10 [INFO] [stderr] Downloaded wayland-client v0.31.10 [INFO] [stderr] Downloaded rangemap v1.5.1 [INFO] [stderr] Downloaded lyon_geom v1.0.6 [INFO] [stderr] Downloaded fontconfig-parser v0.5.7 [INFO] [stderr] Downloaded bytemuck v1.23.0 [INFO] [stderr] Downloaded xml-rs v0.8.26 [INFO] [stderr] Downloaded notify v8.0.0 [INFO] [stderr] Downloaded futures-lite v2.6.0 [INFO] [stderr] Downloaded zbus_macros v5.6.0 [INFO] [stderr] Downloaded clipboard_x11 v0.4.2 [INFO] [stderr] Downloaded wayland-scanner v0.31.6 [INFO] [stderr] Downloaded iced_tiny_skia v0.13.0 [INFO] [stderr] Downloaded self_cell v1.2.0 [INFO] [stderr] Downloaded yazi v0.1.6 [INFO] [stderr] Downloaded lyon_path v1.0.7 [INFO] [stderr] Downloaded data-url v0.3.1 [INFO] [stderr] Downloaded simplecss v0.2.2 [INFO] [stderr] Downloaded svgtypes v0.15.3 [INFO] [stderr] Downloaded unicode-script v0.5.7 [INFO] [stderr] Downloaded wayland-protocols-wlr v0.3.8 [INFO] [stderr] Downloaded wayland-protocols-plasma v0.3.8 [INFO] [stderr] Downloaded d3d12 v0.19.0 [INFO] [stderr] Downloaded iced_fonts v0.1.1 [INFO] [stderr] Downloaded iced_renderer v0.13.0 [INFO] [stderr] Downloaded async-net v1.8.0 [INFO] [stderr] Downloaded iced_runtime v0.13.2 [INFO] [stderr] Downloaded inotify v0.11.0 [INFO] [stderr] Downloaded kqueue-sys v1.0.4 [INFO] [stderr] Downloaded iced_fonts v0.2.1 [INFO] [stderr] Downloaded notify-types v2.0.0 [INFO] [stderr] Downloaded rfd v0.15.3 [INFO] [stderr] Downloaded heuristic-graph-coloring v0.1.0 [INFO] [stderr] Downloaded error-code v3.3.1 [INFO] [stderr] Downloaded ab_glyph v0.2.29 [INFO] [stderr] Downloaded font-types v0.7.3 [INFO] [stderr] Downloaded zeno v0.2.3 [INFO] [stderr] Downloaded mutate_once v0.1.1 [INFO] [stderr] Downloaded lyon_algorithms v1.0.5 [INFO] [stderr] Downloaded lyon v1.0.1 [INFO] [stderr] Downloaded unicode-bidi-mirroring v0.2.0 [INFO] [stderr] Downloaded redox_syscall v0.5.12 [INFO] [stderr] Downloaded kqueue v1.1.1 [INFO] [stderr] Downloaded unicode-ccc v0.2.0 [INFO] [stderr] Downloaded unicode-vo v0.1.0 [INFO] [stderr] Downloaded dconf_rs v0.3.0 [INFO] [stderr] Downloaded drm-fourcc v2.2.0 [INFO] [stderr] Downloaded dark-light v1.1.1 [INFO] [stderr] Downloaded iced_futures v0.13.2 [INFO] [stderr] Downloaded linux-raw-sys v0.6.5 [INFO] [stderr] Downloaded fsevent-sys v4.1.0 [INFO] [stderr] Downloaded async-executor v1.13.2 [INFO] [stderr] Downloaded enumflags2_derive v0.7.11 [INFO] [stderr] Downloaded toml_datetime v0.6.9 [INFO] [stderr] Downloaded dispatch2 v0.2.0 [INFO] [stderr] Downloaded drm-sys v0.7.0 [INFO] [stderr] Downloaded enumflags2 v0.7.11 [INFO] [stderr] Downloaded cosmic-text v0.12.1 [INFO] [stderr] Downloaded metal v0.27.0 [INFO] [stderr] Downloaded iced_aw v0.12.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] 7aa33d7230abb493c6ad9078f142535ab6dfeefa4f08e818fa2e7e106bb3cbfc [INFO] running `Command { std: "docker" "start" "-a" "7aa33d7230abb493c6ad9078f142535ab6dfeefa4f08e818fa2e7e106bb3cbfc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "7aa33d7230abb493c6ad9078f142535ab6dfeefa4f08e818fa2e7e106bb3cbfc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "7aa33d7230abb493c6ad9078f142535ab6dfeefa4f08e818fa2e7e106bb3cbfc", kill_on_drop: false }` [INFO] [stdout] 7aa33d7230abb493c6ad9078f142535ab6dfeefa4f08e818fa2e7e106bb3cbfc [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] cb3195eeb843a45dcae08f7fd81d4f90d2649edaf670811e96c77ca68f486c99 [INFO] running `Command { std: "docker" "start" "-a" "cb3195eeb843a45dcae08f7fd81d4f90d2649edaf670811e96c77ca68f486c99", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.95 [INFO] [stderr] Compiling libc v0.2.172 [INFO] [stderr] Compiling autocfg v1.4.0 [INFO] [stderr] Checking bitflags v2.9.0 [INFO] [stderr] Checking once_cell v1.21.3 [INFO] [stderr] Checking pin-project-lite v0.2.16 [INFO] [stderr] Checking value-bag v1.11.1 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Checking linux-raw-sys v0.4.15 [INFO] [stderr] Checking smallvec v1.15.0 [INFO] [stderr] Checking log v0.4.27 [INFO] [stderr] Compiling slab v0.4.9 [INFO] [stderr] Checking futures-core v0.3.31 [INFO] [stderr] Checking parking v2.2.1 [INFO] [stderr] Checking tracing-core v0.1.33 [INFO] [stderr] Checking futures-io v0.3.31 [INFO] [stderr] Compiling libm v0.2.14 [INFO] [stderr] Checking memchr v2.7.4 [INFO] [stderr] Checking fastrand v2.3.0 [INFO] [stderr] Checking concurrent-queue v2.5.0 [INFO] [stderr] Checking libloading v0.8.6 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Checking event-listener v5.4.0 [INFO] [stderr] Checking futures-lite v2.6.0 [INFO] [stderr] Compiling winnow v0.7.9 [INFO] [stderr] Compiling syn v2.0.101 [INFO] [stderr] Checking event-listener-strategy v0.5.4 [INFO] [stderr] Compiling hashbrown v0.15.3 [INFO] [stderr] Compiling toml_datetime v0.6.9 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling pkg-config v0.3.32 [INFO] [stderr] Checking async-task v4.7.1 [INFO] [stderr] Checking async-lock v3.4.0 [INFO] [stderr] Compiling indexmap v2.9.0 [INFO] [stderr] Checking async-channel v2.3.1 [INFO] [stderr] Checking getrandom v0.2.16 [INFO] [stderr] Checking atomic-waker v1.1.2 [INFO] [stderr] Compiling cfg_aliases v0.2.1 [INFO] [stderr] Checking piper v0.2.4 [INFO] [stderr] Checking arrayvec v0.7.6 [INFO] [stderr] Checking blocking v1.6.1 [INFO] [stderr] Compiling zerocopy v0.8.25 [INFO] [stderr] Compiling shlex v1.3.0 [INFO] [stderr] Compiling wayland-sys v0.31.6 [INFO] [stderr] Checking dlib v0.5.2 [INFO] [stderr] Compiling cc v1.2.21 [INFO] [stderr] Checking endi v1.1.0 [INFO] [stderr] Checking async-executor v1.13.2 [INFO] [stderr] Compiling memoffset v0.9.1 [INFO] [stderr] Checking futures-sink v0.3.31 [INFO] [stderr] Checking futures-channel v0.3.31 [INFO] [stderr] Compiling nix v0.29.0 [INFO] [stderr] Checking memmap2 v0.9.5 [INFO] [stderr] Checking futures-task v0.3.31 [INFO] [stderr] Compiling typenum v1.18.0 [INFO] [stderr] Checking bitflags v1.3.2 [INFO] [stderr] Checking scoped-tls v1.0.1 [INFO] [stderr] Checking downcast-rs v1.2.1 [INFO] [stderr] Checking simd-adler32 v0.3.7 [INFO] [stderr] Compiling toml_edit v0.22.26 [INFO] [stderr] Compiling generic-array v0.14.7 [INFO] [stderr] Compiling wayland-client v0.31.10 [INFO] [stderr] Compiling quick-xml v0.37.5 [INFO] [stderr] Checking signal-hook-registry v1.4.5 [INFO] [stderr] Compiling wayland-backend v0.3.10 [INFO] [stderr] Checking async-broadcast v0.7.2 [INFO] [stderr] Checking ordered-stream v0.2.0 [INFO] [stderr] Checking adler2 v2.0.0 [INFO] [stderr] Checking miniz_oxide v0.8.8 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Checking async-fs v2.1.2 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking crossbeam-epoch v0.9.18 [INFO] [stderr] Compiling ahash v0.7.8 [INFO] [stderr] Checking stable_deref_trait v1.2.0 [INFO] [stderr] Compiling wayland-scanner v0.31.6 [INFO] [stderr] Checking siphasher v1.0.1 [INFO] [stderr] Compiling rayon-core v1.12.1 [INFO] [stderr] Checking raw-window-handle v0.6.2 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking crc32fast v1.4.2 [INFO] [stderr] Checking crossbeam-deque v0.8.6 [INFO] [stderr] Compiling proc-macro-crate v3.3.0 [INFO] [stderr] Compiling io-lifetimes v1.0.11 [INFO] [stderr] Compiling phf_shared v0.11.3 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking flate2 v1.1.1 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling zvariant_utils v2.1.0 [INFO] [stderr] Checking crypto-common v0.1.6 [INFO] [stderr] Checking block-buffer v0.10.4 [INFO] [stderr] Checking euclid v0.22.11 [INFO] [stderr] Compiling polling v2.8.0 [INFO] [stderr] Compiling slotmap v1.0.7 [INFO] [stderr] Compiling rustix v0.37.28 [INFO] [stderr] Checking fastrand v1.9.0 [INFO] [stderr] Checking waker-fn v1.2.0 [INFO] [stderr] Checking either v1.15.0 [INFO] [stderr] Checking futures-lite v1.13.0 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Compiling phf_generator v0.11.3 [INFO] [stderr] Checking hashbrown v0.12.3 [INFO] [stderr] Checking async-lock v2.8.0 [INFO] [stderr] Compiling async-io v1.13.0 [INFO] [stderr] Compiling ahash v0.8.11 [INFO] [stderr] Compiling cfg_aliases v0.1.1 [INFO] [stderr] Checking roxmltree v0.20.0 [INFO] [stderr] Checking tinyvec_macros v0.1.1 [INFO] [stderr] Checking dlv-list v0.3.0 [INFO] [stderr] Checking linux-raw-sys v0.3.8 [INFO] [stderr] Checking tinyvec v1.9.0 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Checking ordered-multimap v0.4.3 [INFO] [stderr] Checking rayon v1.10.0 [INFO] [stderr] Checking fontconfig-parser v0.5.7 [INFO] [stderr] Checking fdeflate v0.3.7 [INFO] [stderr] Checking socket2 v0.4.10 [INFO] [stderr] Checking xdg-home v1.3.0 [INFO] [stderr] Checking dirs-sys v0.3.7 [INFO] [stderr] Compiling dark-light v1.1.1 [INFO] [stderr] Checking allocator-api2 v0.2.21 [INFO] [stderr] Checking float-cmp v0.9.0 [INFO] [stderr] Compiling by_address v1.2.1 [INFO] [stderr] Compiling tracing-attributes v0.1.28 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling enumflags2_derive v0.7.11 [INFO] [stderr] Compiling bytemuck_derive v1.9.3 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling async-trait v0.1.88 [INFO] [stderr] Checking bytemuck v1.23.0 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking tracing v0.1.41 [INFO] [stderr] Compiling serde_repr v0.1.20 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Checking polling v3.7.4 [INFO] [stderr] Compiling yoke-derive v0.7.5 [INFO] [stderr] Compiling zerovec-derive v0.10.3 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling zvariant_derive v4.2.0 [INFO] [stderr] Checking async-io v2.4.0 [INFO] [stderr] Checking async-signal v0.2.10 [INFO] [stderr] Compiling zbus_macros v4.4.0 [INFO] [stderr] Compiling phf_macros v0.11.3 [INFO] [stderr] Checking litemap v0.7.5 [INFO] [stderr] Checking rustc-hash v1.1.0 [INFO] [stderr] Checking ttf-parser v0.21.1 [INFO] [stderr] Checking writeable v0.5.5 [INFO] [stderr] Compiling icu_locid_transform_data v1.5.1 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Compiling palette v0.7.6 [INFO] [stderr] Checking zerocopy v0.7.35 [INFO] [stderr] Checking phf v0.11.3 [INFO] [stderr] Checking yoke v0.7.5 [INFO] [stderr] Checking font-types v0.7.3 [INFO] [stderr] Checking zerovec v0.10.4 [INFO] [stderr] Compiling palette_derive v0.7.6 [INFO] [stderr] Checking strict-num v0.1.1 [INFO] [stderr] Compiling icu_provider_macros v1.5.0 [INFO] [stderr] Checking dirs v4.0.0 [INFO] [stderr] Checking png v0.17.16 [INFO] [stderr] Checking rust-ini v0.18.0 [INFO] [stderr] Checking serde v1.0.219 [INFO] [stderr] Checking async-channel v1.9.0 [INFO] [stderr] Checking approx v0.5.1 [INFO] [stderr] Checking tinystr v0.7.6 [INFO] [stderr] Compiling async-fs v1.6.0 [INFO] [stderr] Checking unicode-ccc v0.2.0 [INFO] [stderr] Checking arrayref v0.3.9 [INFO] [stderr] Checking unicode-bidi-mirroring v0.2.0 [INFO] [stderr] Checking unicode-script v0.5.7 [INFO] [stderr] Checking dconf_rs v0.3.0 [INFO] [stderr] Checking icu_locid v1.5.0 [INFO] [stderr] Checking smol_str v0.2.2 [INFO] [stderr] Checking unicode-properties v0.1.3 [INFO] [stderr] Checking rustc-hash v2.1.1 [INFO] [stderr] Compiling icu_properties_data v1.5.1 [INFO] [stderr] Checking detect-desktop-environment v0.2.0 [INFO] [stderr] Checking fast-srgb8 v1.0.0 [INFO] [stderr] Checking tiny-skia-path v0.11.4 [INFO] [stderr] Checking read-fonts v0.22.7 [INFO] [stderr] Checking rustybuzz v0.14.1 [INFO] [stderr] Checking icu_provider v1.5.0 [INFO] [stderr] Checking lyon_geom v1.0.6 [INFO] [stderr] Checking num_cpus v1.16.0 [INFO] [stderr] Checking event-listener v3.1.0 [INFO] [stderr] Compiling lock_api v0.4.12 [INFO] [stderr] Checking unicode-bidi v0.3.18 [INFO] [stderr] Checking web-time v1.1.0 [INFO] [stderr] Checking bytes v1.10.1 [INFO] [stderr] Checking glam v0.25.0 [INFO] [stderr] Compiling parking_lot_core v0.9.10 [INFO] [stderr] Checking percent-encoding v2.3.1 [INFO] [stderr] Checking foldhash v0.1.5 [INFO] [stderr] Compiling icu_normalizer_data v1.5.1 [INFO] [stderr] Checking enumflags2 v0.7.11 [INFO] [stderr] Checking weezl v0.1.8 [INFO] [stderr] Checking as-raw-xcb-connection v1.0.1 [INFO] [stderr] Checking zvariant v4.2.0 [INFO] [stderr] Checking lyon_path v1.0.7 [INFO] [stderr] Checking async-process v1.8.1 [INFO] [stderr] Checking futures-executor v0.3.31 [INFO] [stderr] Checking icu_locid_transform v1.5.0 [INFO] [stderr] Checking icu_collections v1.5.0 [INFO] [stderr] Checking async-net v1.8.0 [INFO] [stderr] Checking jpeg-decoder v0.3.1 [INFO] [stderr] Checking scopeguard v1.2.0 [INFO] [stderr] Compiling ash v0.37.3+1.3.251 [INFO] [stderr] Checking bit-vec v0.6.3 [INFO] [stderr] Checking termcolor v1.4.1 [INFO] [stderr] Checking unicode-width v0.1.14 [INFO] [stderr] Checking ttf-parser v0.20.0 [INFO] [stderr] Compiling khronos-egl v6.0.0 [INFO] [stderr] Checking x11rb-protocol v0.13.1 [INFO] [stderr] Checking yazi v0.1.6 [INFO] [stderr] Checking color_quant v1.1.0 [INFO] [stderr] Checking zeno v0.2.3 [INFO] [stderr] Checking gif v0.13.1 [INFO] [stderr] Checking codespan-reporting v0.11.1 [INFO] [stderr] Checking bit-set v0.5.3 [INFO] [stderr] Checking icu_properties v1.5.1 [INFO] [stderr] Checking zbus_names v3.0.0 [INFO] [stderr] Compiling zvariant_utils v3.2.0 [INFO] [stderr] Checking smol v1.3.0 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking zbus v4.4.0 [INFO] [stderr] Checking tiny-skia v0.11.4 [INFO] [stderr] Checking fontdb v0.16.2 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Checking wayland-protocols v0.32.8 [INFO] [stderr] Compiling wgpu-hal v0.19.5 [INFO] [stderr] Checking zune-inflate v0.2.54 [INFO] [stderr] Checking gpu-alloc-types v0.3.0 [INFO] [stderr] Checking spirv v0.3.0+sdk-1.3.268.0 [INFO] [stderr] Checking gpu-descriptor-types v0.1.2 [INFO] [stderr] Checking half v2.6.0 [INFO] [stderr] Checking libloading v0.7.4 [INFO] [stderr] Checking bit_field v0.10.2 [INFO] [stderr] Checking rangemap v1.5.1 [INFO] [stderr] Checking utf16_iter v1.0.5 [INFO] [stderr] Checking unicode-ident v1.0.18 [INFO] [stderr] Checking unicode-segmentation v1.12.0 [INFO] [stderr] Compiling drm-sys v0.7.0 [INFO] [stderr] Checking skrifa v0.22.3 [INFO] [stderr] Checking unicode-linebreak v0.1.5 [INFO] [stderr] Checking sys-locale v0.3.2 [INFO] [stderr] Checking utf8_iter v1.0.4 [INFO] [stderr] Checking lebe v0.5.2 [INFO] [stderr] Checking hexf-parse v0.2.1 [INFO] [stderr] Checking write16 v1.0.0 [INFO] [stderr] Checking self_cell v1.2.0 [INFO] [stderr] Checking unicode-xid v0.2.6 [INFO] [stderr] Checking exr v1.73.0 [INFO] [stderr] Checking icu_normalizer v1.5.0 [INFO] [stderr] Checking naga v0.19.2 [INFO] [stderr] Checking gpu-descriptor v0.2.4 [INFO] [stderr] Checking gpu-alloc v0.6.0 [INFO] [stderr] Checking parking_lot v0.12.3 [INFO] [stderr] Compiling zvariant_derive v5.5.1 [INFO] [stderr] Checking swash v0.1.19 [INFO] [stderr] Checking tiff v0.9.1 [INFO] [stderr] Checking calloop v0.13.0 [INFO] [stderr] Checking qoi v0.4.1 [INFO] [stderr] Compiling wgpu-core v0.19.4 [INFO] [stderr] Checking iced_core v0.13.2 [INFO] [stderr] Checking kurbo v0.11.2 [INFO] [stderr] Checking wgpu-types v0.19.2 [INFO] [stderr] Checking renderdoc-sys v1.1.0 [INFO] [stderr] Checking xcursor v0.3.8 [INFO] [stderr] Compiling drm-fourcc v2.2.0 [INFO] [stderr] Checking linux-raw-sys v0.6.5 [INFO] [stderr] Checking byteorder v1.5.0 [INFO] [stderr] Compiling smithay-client-toolkit v0.19.2 [INFO] [stderr] Checking profiling v1.0.16 [INFO] [stderr] Checking glow v0.13.1 [INFO] [stderr] Checking xkeysym v0.2.1 [INFO] [stderr] Checking cursor-icon v1.1.0 [INFO] [stderr] Checking mutate_once v0.1.1 [INFO] [stderr] Checking kamadak-exif v0.5.5 [INFO] [stderr] Checking cosmic-text v0.12.1 [INFO] [stderr] Checking iced_futures v0.13.2 [INFO] [stderr] Checking wayland-csd-frame v0.3.0 [INFO] [stderr] Checking svgtypes v0.15.3 [INFO] [stderr] Checking image v0.24.9 [INFO] [stderr] Checking wayland-cursor v0.31.10 [INFO] [stderr] Checking wayland-protocols-wlr v0.3.8 [INFO] [stderr] Checking calloop-wayland-source v0.3.0 [INFO] [stderr] Checking idna_adapter v1.2.0 [INFO] [stderr] Checking fontdb v0.18.0 [INFO] [stderr] Compiling wgpu v0.19.4 [INFO] [stderr] Compiling tiny-xlib v0.2.4 [INFO] [stderr] Checking simplecss v0.2.2 [INFO] [stderr] Checking imagesize v0.12.0 [INFO] [stderr] Checking unicode-vo v0.1.0 [INFO] [stderr] Checking xmlwriter v0.1.0 [INFO] [stderr] Checking pico-args v0.5.0 [INFO] [stderr] Checking data-url v0.3.1 [INFO] [stderr] Checking svg_fmt v0.4.5 [INFO] [stderr] Checking idna v1.0.3 [INFO] [stderr] Checking usvg v0.42.0 [INFO] [stderr] Checking drm-ffi v0.8.0 [INFO] [stderr] Checking form_urlencoded v1.2.1 [INFO] [stderr] Checking rgb v0.8.50 [INFO] [stderr] Compiling softbuffer v0.4.6 [INFO] [stderr] Checking x11rb v0.13.1 [INFO] [stderr] Compiling proc-macro2-diagnostics v0.10.1 [INFO] [stderr] Checking ctor-lite v0.1.0 [INFO] [stderr] Compiling getrandom v0.3.2 [INFO] [stderr] Checking float_next_after v1.0.0 [INFO] [stderr] Checking lyon_tessellation v1.0.15 [INFO] [stderr] Checking resvg v0.42.0 [INFO] [stderr] Compiling zvariant v5.5.1 [INFO] [stderr] Checking url v2.5.4 [INFO] [stderr] Checking iced_graphics v0.13.0 [INFO] [stderr] Checking drm v0.12.0 [INFO] [stderr] Checking etagere v0.2.15 [INFO] [stderr] Checking lyon_algorithms v1.0.5 [INFO] [stderr] Checking lru v0.12.5 [INFO] [stderr] Checking ttf-parser v0.25.1 [INFO] [stderr] Compiling yansi v1.0.1 [INFO] [stderr] Checking lyon v1.0.1 [INFO] [stderr] Checking guillotiere v0.6.2 [INFO] [stderr] Checking kurbo v0.10.4 [INFO] [stderr] Compiling x11-dl v2.21.0 [INFO] [stderr] Checking ab_glyph_rasterizer v0.1.8 [INFO] [stderr] Compiling heck v0.4.1 [INFO] [stderr] Checking smithay-clipboard v0.7.2 [INFO] [stderr] Checking iced_runtime v0.13.2 [INFO] [stderr] Compiling ouroboros_macro v0.18.5 [INFO] [stderr] Checking async-process v2.3.0 [INFO] [stderr] Compiling winit v0.30.10 [INFO] [stderr] Checking iced_tiny_skia v0.13.0 [INFO] [stderr] Checking aliasable v0.1.3 [INFO] [stderr] Checking clipboard_wayland v0.2.2 [INFO] [stderr] Checking rand_core v0.9.3 [INFO] [stderr] Checking clipboard_x11 v0.4.2 [INFO] [stderr] Checking xkbcommon-dl v0.4.2 [INFO] [stderr] Checking wayland-protocols-plasma v0.3.8 [INFO] [stderr] Compiling zbus_names v4.2.0 [INFO] [stderr] Checking async-net v2.0.0 [INFO] [stderr] Checking owned_ttf_parser v0.25.0 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Checking ouroboros v0.18.5 [INFO] [stderr] Checking regex-syntax v0.8.5 [INFO] [stderr] Checking ab_glyph v0.2.29 [INFO] [stderr] Checking sctk-adwaita v0.10.1 [INFO] [stderr] Compiling zbus_macros v5.6.0 [INFO] [stderr] Checking dpi v0.1.2 [INFO] [stderr] Checking window_clipboard v0.4.1 [INFO] [stderr] Checking rand_chacha v0.9.0 [INFO] [stderr] Compiling serde_json v1.0.140 [INFO] [stderr] Checking rand v0.9.1 [INFO] [stderr] Checking async-global-executor v2.4.1 [INFO] [stderr] Checking inotify-sys v0.1.5 [INFO] [stderr] Checking regex-automata v0.4.9 [INFO] [stderr] Checking kv-log-macro v1.0.7 [INFO] [stderr] Compiling dark-light v2.0.0 [INFO] [stderr] Checking same-file v1.0.6 [INFO] [stderr] Checking option-ext v0.2.0 [INFO] [stderr] Compiling rfd v0.15.3 [INFO] [stderr] Compiling anyhow v1.0.98 [INFO] [stderr] Checking dirs-sys v0.5.0 [INFO] [stderr] Checking walkdir v2.5.0 [INFO] [stderr] Checking async-std v1.13.1 [INFO] [stderr] Checking clap_builder v4.5.38 [INFO] [stderr] Compiling clap_derive v4.5.32 [INFO] [stderr] Checking inotify v0.11.0 [INFO] [stderr] Checking num-format v0.4.4 [INFO] [stderr] Checking iced_fonts v0.1.1 [INFO] [stderr] Checking filetime v0.2.25 [INFO] [stderr] Checking regex v1.11.1 [INFO] [stderr] Checking mio v1.0.3 [INFO] [stderr] Checking jiff v0.2.13 [INFO] [stderr] Checking urlencoding v2.1.3 [INFO] [stderr] Checking env_filter v0.1.3 [INFO] [stderr] Checking pollster v0.4.0 [INFO] [stderr] Checking zbus v5.6.0 [INFO] [stderr] Checking notify-types v2.0.0 [INFO] [stderr] Checking json-pretty-compact v0.1.2 [INFO] [stderr] Checking notify v8.0.0 [INFO] [stderr] Checking directories v6.0.0 [INFO] [stderr] Checking itertools v0.14.0 [INFO] [stderr] Checking heuristic-graph-coloring v0.1.0 [INFO] [stderr] Checking glob v0.3.2 [INFO] [stderr] Checking clap v4.5.38 [INFO] [stderr] Checking iced_winit v0.13.0 [INFO] [stderr] Checking env_logger v0.11.8 [INFO] [stderr] Checking ashpd v0.11.0 [INFO] [stderr] Checking ashpd v0.10.3 [INFO] [stderr] Checking iced_glyphon v0.6.0 [INFO] [stderr] Checking iced_wgpu v0.13.5 [INFO] [stderr] Checking iced_renderer v0.13.0 [INFO] [stderr] Checking iced_widget v0.13.4 [INFO] [stderr] Checking iced v0.13.1 [INFO] [stderr] Checking iced_fonts v0.2.1 [INFO] [stderr] Checking iced_aw v0.12.2 [INFO] [stderr] Checking z3_overworld_editor v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/update.rs:738:21 [INFO] [stdout] | [INFO] [stdout] 738 | color_idx: color_idx, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `color_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/update.rs:738:21 [INFO] [stdout] | [INFO] [stdout] 738 | color_idx: color_idx, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `color_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/update.rs:750:21 [INFO] [stdout] | [INFO] [stdout] 750 | color_idx: color_idx, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `color_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/update.rs:762:21 [INFO] [stdout] | [INFO] [stdout] 762 | color_idx: color_idx, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `color_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/update.rs:750:21 [INFO] [stdout] | [INFO] [stdout] 750 | color_idx: color_idx, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `color_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/update.rs:762:21 [INFO] [stdout] | [INFO] [stdout] 762 | color_idx: color_idx, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `color_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/view/graphics.rs:89:29 [INFO] [stdout] | [INFO] [stdout] 89 | ... color_idx: color_idx, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `color_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/view/graphics.rs:89:29 [INFO] [stdout] | [INFO] [stdout] 89 | ... color_idx: color_idx, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `color_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/import.rs:309:12 [INFO] [stdout] | [INFO] [stdout] 309 | Ok(self.data[addr.0 as usize] as u8) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.data[addr.0 as usize]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `tile` [INFO] [stdout] --> src/import.rs:514:30 [INFO] [stdout] | [INFO] [stdout] 514 | for x in 0..8 { [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] 514 - for x in 0..8 { [INFO] [stdout] 514 + for (x, ) in tile.iter_mut().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `y` is used to index `block` [INFO] [stdout] --> src/import.rs:606:22 [INFO] [stdout] | [INFO] [stdout] 606 | for y in 0..16 { [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] 606 - for y in 0..16 { [INFO] [stdout] 606 + for (y, ) in block.iter_mut().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `block` [INFO] [stdout] --> src/import.rs:607:26 [INFO] [stdout] | [INFO] [stdout] 607 | for x in 0..16 { [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] 607 - for x in 0..16 { [INFO] [stdout] 607 + for (x, ) in block.iter_mut().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `palette_idx` is used to index `tile_lookup` [INFO] [stdout] --> src/import.rs:794:28 [INFO] [stdout] | [INFO] [stdout] 794 | for palette_idx in 0..self.state.palettes.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 and enumerate() [INFO] [stdout] | [INFO] [stdout] 794 - for palette_idx in 0..self.state.palettes.len() { [INFO] [stdout] 794 + for (palette_idx, ) in tile_lookup.iter_mut().enumerate().take(self.state.palettes.len()) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/import.rs:309:12 [INFO] [stdout] | [INFO] [stdout] 309 | Ok(self.data[addr.0 as usize] as u8) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.data[addr.0 as usize]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Tile` which implements the `Copy` trait [INFO] [stdout] --> src/import.rs:798:55 [INFO] [stdout] | [INFO] [stdout] 798 | strip_tile(flip.apply_to_tile(tile.clone())), [INFO] [stdout] | ^^^^^^^^^^^^ help: try dereferencing it: `*tile` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/import.rs:880:44 [INFO] [stdout] | [INFO] [stdout] 880 | let map_idx = parent + my as usize * 8 + mx as usize; [INFO] [stdout] | ^^^^^^^^^^^ help: try: `my` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/import.rs:880:62 [INFO] [stdout] | [INFO] [stdout] 880 | let map_idx = parent + my as usize * 8 + mx as usize; [INFO] [stdout] | ^^^^^^^^^^^ help: try: `mx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `ty` is used to index `tiles` [INFO] [stdout] --> src/import.rs:882:31 [INFO] [stdout] | [INFO] [stdout] 882 | for ty in 0..16 { [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] 882 - for ty in 0..16 { [INFO] [stdout] 882 + for (ty, ) in tiles.iter().enumerate().take(16) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `tx` is used to index `tiles` [INFO] [stdout] --> src/import.rs:883:35 [INFO] [stdout] | [INFO] [stdout] 883 | for tx in 0..16 { [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] 883 - for tx in 0..16 { [INFO] [stdout] 883 + for (tx, ) in tiles.iter().enumerate().take(16) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Tile` which implements the `Copy` trait [INFO] [stdout] --> src/import.rs:947:83 [INFO] [stdout] | [INFO] [stdout] 947 | ... strip_tile(flip.apply_to_tile(tile.clone())), [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `tile` [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: casting to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/import.rs:977:71 [INFO] [stdout] | [INFO] [stdout] 977 | ... area.set_tile(x as u16, y as u16, tile_idx as u16).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `tile_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/import.rs:1007:25 [INFO] [stdout] | [INFO] [stdout] 1007 | let size = ((pal.tiles.len() + 15) / 16 * 16).max(16); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `pal.tiles.len().div_ceil(16)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `tile` [INFO] [stdout] --> src/import.rs:514:30 [INFO] [stdout] | [INFO] [stdout] 514 | for x in 0..8 { [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] 514 - for x in 0..8 { [INFO] [stdout] 514 + for (x, ) in tile.iter_mut().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `y` is used to index `block` [INFO] [stdout] --> src/import.rs:606:22 [INFO] [stdout] | [INFO] [stdout] 606 | for y in 0..16 { [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] 606 - for y in 0..16 { [INFO] [stdout] 606 + for (y, ) in block.iter_mut().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `block` [INFO] [stdout] --> src/import.rs:607:26 [INFO] [stdout] | [INFO] [stdout] 607 | for x in 0..16 { [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] 607 - for x in 0..16 { [INFO] [stdout] 607 + for (x, ) in block.iter_mut().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `c` is only used to index `color_bytes` [INFO] [stdout] --> src/persist.rs:81:18 [INFO] [stdout] | [INFO] [stdout] 81 | for c in 0..16 { [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] 81 - for c in 0..16 { [INFO] [stdout] 81 + for in color_bytes.iter().take(16) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stdout] --> src/persist.rs:90:9 [INFO] [stdout] | [INFO] [stdout] 90 | let ref mut w = BufWriter::new(file); [INFO] [stdout] | ----^^^^^^^^^------------------------ help: try: `let w = &mut BufWriter::new(file);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stdout] = note: `#[warn(clippy::toplevel_ref_arg)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/persist.rs:110:20 [INFO] [stdout] | [INFO] [stdout] 110 | let num_rows = (tiles.len() + num_cols - 1) / num_cols; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `tiles.len().div_ceil(num_cols)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stdout] --> src/persist.rs:134:9 [INFO] [stdout] | [INFO] [stdout] 134 | let ref mut w = BufWriter::new(file); [INFO] [stdout] | ----^^^^^^^^^------------------------ help: try: `let w = &mut BufWriter::new(file);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `palette_idx` is used to index `tile_lookup` [INFO] [stdout] --> src/import.rs:794:28 [INFO] [stdout] | [INFO] [stdout] 794 | for palette_idx in 0..self.state.palettes.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 and enumerate() [INFO] [stdout] | [INFO] [stdout] 794 - for palette_idx in 0..self.state.palettes.len() { [INFO] [stdout] 794 + for (palette_idx, ) in tile_lookup.iter_mut().enumerate().take(self.state.palettes.len()) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `[[u8; 3]; 16]` which implements the `Copy` trait [INFO] [stdout] --> src/persist.rs:263:26 [INFO] [stdout] | [INFO] [stdout] 263 | let mut colors = state.palettes[i].colors.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `state.palettes[i].colors` [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stdout] --> src/persist.rs:318:9 [INFO] [stdout] | [INFO] [stdout] 318 | let ref mut w = BufWriter::new(file); [INFO] [stdout] | ----^^^^^^^^^------------------------ help: try: `let w = &mut BufWriter::new(file);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Tile` which implements the `Copy` trait [INFO] [stdout] --> src/import.rs:798:55 [INFO] [stdout] | [INFO] [stdout] 798 | strip_tile(flip.apply_to_tile(tile.clone())), [INFO] [stdout] | ^^^^^^^^^^^^ help: try dereferencing it: `*tile` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/import.rs:880:44 [INFO] [stdout] | [INFO] [stdout] 880 | let map_idx = parent + my as usize * 8 + mx as usize; [INFO] [stdout] | ^^^^^^^^^^^ help: try: `my` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/import.rs:880:62 [INFO] [stdout] | [INFO] [stdout] 880 | let map_idx = parent + my as usize * 8 + mx as usize; [INFO] [stdout] | ^^^^^^^^^^^ help: try: `mx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `ty` is used to index `tiles` [INFO] [stdout] --> src/import.rs:882:31 [INFO] [stdout] | [INFO] [stdout] 882 | for ty in 0..16 { [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] 882 - for ty in 0..16 { [INFO] [stdout] 882 + for (ty, ) in tiles.iter().enumerate().take(16) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `tx` is used to index `tiles` [INFO] [stdout] --> src/import.rs:883:35 [INFO] [stdout] | [INFO] [stdout] 883 | for tx in 0..16 { [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] 883 - for tx in 0..16 { [INFO] [stdout] 883 + for (tx, ) in tiles.iter().enumerate().take(16) { [INFO] [stdout] | [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/persist.rs:526:9 [INFO] [stdout] | [INFO] [stdout] 526 | / match e.kind { [INFO] [stdout] 527 | | notify::EventKind::Modify(_) => { [INFO] [stdout] 528 | | let mut data = self.modified.lock().unwrap(); [INFO] [stdout] 529 | | *data = true; [INFO] [stdout] 530 | | } [INFO] [stdout] 531 | | _ => {} [INFO] [stdout] 532 | | } [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] 526 ~ if let notify::EventKind::Modify(_) = e.kind { [INFO] [stdout] 527 + let mut data = self.modified.lock().unwrap(); [INFO] [stdout] 528 + *data = true; [INFO] [stdout] 529 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Tile` which implements the `Copy` trait [INFO] [stdout] --> src/import.rs:947:83 [INFO] [stdout] | [INFO] [stdout] 947 | ... strip_tile(flip.apply_to_tile(tile.clone())), [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `tile` [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: casting to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/import.rs:977:71 [INFO] [stdout] | [INFO] [stdout] 977 | ... area.set_tile(x as u16, y as u16, tile_idx as u16).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `tile_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/import.rs:1007:25 [INFO] [stdout] | [INFO] [stdout] 1007 | let size = ((pal.tiles.len() + 15) / 16 * 16).max(16); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `pal.tiles.len().div_ceil(16)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `c` is only used to index `color_bytes` [INFO] [stdout] --> src/persist.rs:81:18 [INFO] [stdout] | [INFO] [stdout] 81 | for c in 0..16 { [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] 81 - for c in 0..16 { [INFO] [stdout] 81 + for in color_bytes.iter().take(16) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stdout] --> src/persist.rs:90:9 [INFO] [stdout] | [INFO] [stdout] 90 | let ref mut w = BufWriter::new(file); [INFO] [stdout] | ----^^^^^^^^^------------------------ help: try: `let w = &mut BufWriter::new(file);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stdout] = note: `#[warn(clippy::toplevel_ref_arg)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/persist.rs:110:20 [INFO] [stdout] | [INFO] [stdout] 110 | let num_rows = (tiles.len() + num_cols - 1) / num_cols; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `tiles.len().div_ceil(num_cols)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stdout] --> src/persist.rs:134:9 [INFO] [stdout] | [INFO] [stdout] 134 | let ref mut w = BufWriter::new(file); [INFO] [stdout] | ----^^^^^^^^^------------------------ help: try: `let w = &mut BufWriter::new(file);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `[[u8; 3]; 16]` which implements the `Copy` trait [INFO] [stdout] --> src/persist.rs:263:26 [INFO] [stdout] | [INFO] [stdout] 263 | let mut colors = state.palettes[i].colors.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `state.palettes[i].colors` [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stdout] --> src/persist.rs:318:9 [INFO] [stdout] | [INFO] [stdout] 318 | let ref mut w = BufWriter::new(file); [INFO] [stdout] | ----^^^^^^^^^------------------------ help: try: `let w = &mut BufWriter::new(file);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [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/persist.rs:526:9 [INFO] [stdout] | [INFO] [stdout] 526 | / match e.kind { [INFO] [stdout] 527 | | notify::EventKind::Modify(_) => { [INFO] [stdout] 528 | | let mut data = self.modified.lock().unwrap(); [INFO] [stdout] 529 | | *data = true; [INFO] [stdout] 530 | | } [INFO] [stdout] 531 | | _ => {} [INFO] [stdout] 532 | | } [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] 526 ~ if let notify::EventKind::Modify(_) = e.kind { [INFO] [stdout] 527 + let mut data = self.modified.lock().unwrap(); [INFO] [stdout] 528 + *data = true; [INFO] [stdout] 529 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/state.rs:516:8 [INFO] [stdout] | [INFO] [stdout] 516 | if state.theme_names.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `state.theme_names.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: length comparison to zero [INFO] [stdout] --> src/state.rs:522:8 [INFO] [stdout] | [INFO] [stdout] 522 | if state.area_names.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `state.area_names.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] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/state.rs:525:9 [INFO] [stdout] | [INFO] [stdout] 525 | area.name = "Example".to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `state::Area { name: "Example".to_string(), theme: "Base".to_string(), size: (2, 2), ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/state.rs:524:9 [INFO] [stdout] | [INFO] [stdout] 524 | let mut area = Area::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] = note: `#[warn(clippy::field_reassign_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/state.rs:545:8 [INFO] [stdout] | [INFO] [stdout] 545 | if state.palettes.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `state.palettes.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] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/state.rs:547:9 [INFO] [stdout] | [INFO] [stdout] 547 | pal.modified = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `state::Palette { modified: true, name: "Default".to_string(), tiles: vec![ [INFO] [stdout] Tile { [INFO] [stdout] id: None, [INFO] [stdout] priority: false, [INFO] [stdout] collision: 0, [INFO] [stdout] h_flippable: true, [INFO] [stdout] v_flippable: true, [INFO] [stdout] pixels: [[0; 8]; 8] [INFO] [stdout] }; [INFO] [stdout] 16 [INFO] [stdout] ], ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/state.rs:546:9 [INFO] [stdout] | [INFO] [stdout] 546 | let mut pal = Palette::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/undo.rs:189:13 [INFO] [stdout] | [INFO] [stdout] 183 | / let msg = UndoAction::Ok(Message::TilesetBrush { [INFO] [stdout] 184 | | palette_id, [INFO] [stdout] 185 | | coords: Point { x: x0, y: y0 }, [INFO] [stdout] 186 | | selected_gfx: s, [INFO] [stdout] 187 | | tile_block: None, [INFO] [stdout] 188 | | }); [INFO] [stdout] | |_______________- unnecessary `let` binding [INFO] [stdout] 189 | msg [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] 183 ~ [INFO] [stdout] 184 ~ UndoAction::Ok(Message::TilesetBrush { [INFO] [stdout] 185 + palette_id, [INFO] [stdout] 186 + coords: Point { x: x0, y: y0 }, [INFO] [stdout] 187 + selected_gfx: s, [INFO] [stdout] 188 + tile_block: None, [INFO] [stdout] 189 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a struct pattern where every field's pattern takes a reference [INFO] [stdout] --> src/undo.rs:226:9 [INFO] [stdout] | [INFO] [stdout] 226 | / &Message::EditAreaBGColor { [INFO] [stdout] 227 | | ref area_id, [INFO] [stdout] 228 | | color: _, [INFO] [stdout] 229 | | } => UndoAction::Ok(Message::EditAreaBGColor { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 226 ~ Message::EditAreaBGColor { [INFO] [stdout] 227 ~ area_id, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/update.rs:51:17 [INFO] [stdout] | [INFO] [stdout] 51 | / return palette_id == last_palette_id [INFO] [stdout] 52 | | && color_idx == last_color_idx [INFO] [stdout] 53 | | && color == last_color; [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] 51 ~ palette_id == last_palette_id [INFO] [stdout] 52 + && color_idx == last_color_idx [INFO] [stdout] 53 ~ && color == last_color [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/update.rs:395:21 [INFO] [stdout] | [INFO] [stdout] 395 | / match c.as_str() { [INFO] [stdout] 396 | | "r" => { [INFO] [stdout] 397 | | return Ok(Some(Task::done(Message::RebuildProjectDialogue))); [INFO] [stdout] ... | [INFO] [stdout] 400 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 395 ~ if c.as_str() == "r" { [INFO] [stdout] 396 + return Ok(Some(Task::done(Message::RebuildProjectDialogue))); [INFO] [stdout] 397 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/state.rs:516:8 [INFO] [stdout] | [INFO] [stdout] 516 | if state.theme_names.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `state.theme_names.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: length comparison to zero [INFO] [stdout] --> src/state.rs:522:8 [INFO] [stdout] | [INFO] [stdout] 522 | if state.area_names.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `state.area_names.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] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/state.rs:525:9 [INFO] [stdout] | [INFO] [stdout] 525 | area.name = "Example".to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `state::Area { name: "Example".to_string(), theme: "Base".to_string(), size: (2, 2), ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/state.rs:524:9 [INFO] [stdout] | [INFO] [stdout] 524 | let mut area = Area::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] = note: `#[warn(clippy::field_reassign_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/state.rs:545:8 [INFO] [stdout] | [INFO] [stdout] 545 | if state.palettes.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `state.palettes.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] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/state.rs:547:9 [INFO] [stdout] | [INFO] [stdout] 547 | pal.modified = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `state::Palette { modified: true, name: "Default".to_string(), tiles: vec![ [INFO] [stdout] Tile { [INFO] [stdout] id: None, [INFO] [stdout] priority: false, [INFO] [stdout] collision: 0, [INFO] [stdout] h_flippable: true, [INFO] [stdout] v_flippable: true, [INFO] [stdout] pixels: [[0; 8]; 8] [INFO] [stdout] }; [INFO] [stdout] 16 [INFO] [stdout] ], ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/state.rs:546:9 [INFO] [stdout] | [INFO] [stdout] 546 | let mut pal = Palette::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [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/update.rs:598:49 [INFO] [stdout] | [INFO] [stdout] 598 | Message::SetAddPaletteName(new_name) => match &mut state.dialogue { [INFO] [stdout] | _________________________________________________^ [INFO] [stdout] 599 | | Some(Dialogue::AddPalette { name, .. }) => { [INFO] [stdout] 600 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 603 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 598 ~ Message::SetAddPaletteName(new_name) => if let Some(Dialogue::AddPalette { name, .. }) = &mut state.dialogue { [INFO] [stdout] 599 + *name = new_name.clone(); [INFO] [stdout] 600 ~ }, [INFO] [stdout] | [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/update.rs:604:46 [INFO] [stdout] | [INFO] [stdout] 604 | &Message::SetAddPaletteID(new_id) => match &mut state.dialogue { [INFO] [stdout] | ______________________________________________^ [INFO] [stdout] 605 | | Some(Dialogue::AddPalette { id, .. }) => { [INFO] [stdout] 606 | | *id = new_id; [INFO] [stdout] ... | [INFO] [stdout] 609 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 604 ~ &Message::SetAddPaletteID(new_id) => if let Some(Dialogue::AddPalette { id, .. }) = &mut state.dialogue { [INFO] [stdout] 605 + *id = new_id; [INFO] [stdout] 606 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:611:16 [INFO] [stdout] | [INFO] [stdout] 611 | if name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `name.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] [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/update.rs:642:52 [INFO] [stdout] | [INFO] [stdout] 642 | Message::SetRenamePaletteName(new_name) => match &mut state.dialogue { [INFO] [stdout] | ____________________________________________________^ [INFO] [stdout] 643 | | Some(Dialogue::RenamePalette { name }) => { [INFO] [stdout] 644 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 647 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 642 ~ Message::SetRenamePaletteName(new_name) => if let Some(Dialogue::RenamePalette { name }) = &mut state.dialogue { [INFO] [stdout] 643 + *name = new_name.clone(); [INFO] [stdout] 644 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:649:16 [INFO] [stdout] | [INFO] [stdout] 649 | if name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `name.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] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:716:51 [INFO] [stdout] | [INFO] [stdout] 716 | state.selected_color = state.palettes[pal_idx as usize].colors[color_idx as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `pal_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/undo.rs:189:13 [INFO] [stdout] | [INFO] [stdout] 183 | / let msg = UndoAction::Ok(Message::TilesetBrush { [INFO] [stdout] 184 | | palette_id, [INFO] [stdout] 185 | | coords: Point { x: x0, y: y0 }, [INFO] [stdout] 186 | | selected_gfx: s, [INFO] [stdout] 187 | | tile_block: None, [INFO] [stdout] 188 | | }); [INFO] [stdout] | |_______________- unnecessary `let` binding [INFO] [stdout] 189 | msg [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] 183 ~ [INFO] [stdout] 184 ~ UndoAction::Ok(Message::TilesetBrush { [INFO] [stdout] 185 + palette_id, [INFO] [stdout] 186 + coords: Point { x: x0, y: y0 }, [INFO] [stdout] 187 + selected_gfx: s, [INFO] [stdout] 188 + tile_block: None, [INFO] [stdout] 189 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a struct pattern where every field's pattern takes a reference [INFO] [stdout] --> src/undo.rs:226:9 [INFO] [stdout] | [INFO] [stdout] 226 | / &Message::EditAreaBGColor { [INFO] [stdout] 227 | | ref area_id, [INFO] [stdout] 228 | | color: _, [INFO] [stdout] 229 | | } => UndoAction::Ok(Message::EditAreaBGColor { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 226 ~ Message::EditAreaBGColor { [INFO] [stdout] 227 ~ area_id, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:873:42 [INFO] [stdout] | [INFO] [stdout] 873 | let mut tile = s[y as usize][x as usize]; [INFO] [stdout] | ^^^^^^^^^^ help: try: `{ y }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/update.rs:51:17 [INFO] [stdout] | [INFO] [stdout] 51 | / return palette_id == last_palette_id [INFO] [stdout] 52 | | && color_idx == last_color_idx [INFO] [stdout] 53 | | && color == last_color; [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] 51 ~ palette_id == last_palette_id [INFO] [stdout] 52 + && color_idx == last_color_idx [INFO] [stdout] 53 ~ && color == last_color [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:873:54 [INFO] [stdout] | [INFO] [stdout] 873 | let mut tile = s[y as usize][x as usize]; [INFO] [stdout] | ^^^^^^^^^^ help: try: `x` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [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/update.rs:948:46 [INFO] [stdout] | [INFO] [stdout] 948 | Message::SetAddAreaName(new_name) => match &mut state.dialogue { [INFO] [stdout] | ______________________________________________^ [INFO] [stdout] 949 | | Some(Dialogue::AddArea { name, .. }) => { [INFO] [stdout] 950 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 953 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 948 ~ Message::SetAddAreaName(new_name) => if let Some(Dialogue::AddArea { name, .. }) = &mut state.dialogue { [INFO] [stdout] 949 + *name = new_name.clone(); [INFO] [stdout] 950 ~ }, [INFO] [stdout] | [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/update.rs:954:45 [INFO] [stdout] | [INFO] [stdout] 954 | &Message::SetAddAreaSizeX(new_x) => match &mut state.dialogue { [INFO] [stdout] | _____________________________________________^ [INFO] [stdout] 955 | | Some(Dialogue::AddArea { size, .. }) => { [INFO] [stdout] 956 | | size.0 = new_x; [INFO] [stdout] ... | [INFO] [stdout] 959 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 954 ~ &Message::SetAddAreaSizeX(new_x) => if let Some(Dialogue::AddArea { size, .. }) = &mut state.dialogue { [INFO] [stdout] 955 + size.0 = new_x; [INFO] [stdout] 956 ~ }, [INFO] [stdout] | [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/update.rs:960:45 [INFO] [stdout] | [INFO] [stdout] 960 | &Message::SetAddAreaSizeY(new_y) => match &mut state.dialogue { [INFO] [stdout] | _____________________________________________^ [INFO] [stdout] 961 | | Some(Dialogue::AddArea { size, .. }) => { [INFO] [stdout] 962 | | size.1 = new_y; [INFO] [stdout] ... | [INFO] [stdout] 965 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 960 ~ &Message::SetAddAreaSizeY(new_y) => if let Some(Dialogue::AddArea { size, .. }) = &mut state.dialogue { [INFO] [stdout] 961 + size.1 = new_y; [INFO] [stdout] 962 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:967:16 [INFO] [stdout] | [INFO] [stdout] 967 | if name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `name.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] [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/update.rs:1011:47 [INFO] [stdout] | [INFO] [stdout] 1011 | Message::SetEditAreaName(new_name) => match &mut state.dialogue { [INFO] [stdout] | _______________________________________________^ [INFO] [stdout] 1012 | | Some(Dialogue::EditArea { name }) => { [INFO] [stdout] 1013 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 1016 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 1011 ~ Message::SetEditAreaName(new_name) => if let Some(Dialogue::EditArea { name }) = &mut state.dialogue { [INFO] [stdout] 1012 + *name = new_name.clone(); [INFO] [stdout] 1013 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:1018:16 [INFO] [stdout] | [INFO] [stdout] 1018 | if new_name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `new_name.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] [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/update.rs:1128:47 [INFO] [stdout] | [INFO] [stdout] 1128 | Message::SetAddThemeName(new_name) => match &mut state.dialogue { [INFO] [stdout] | _______________________________________________^ [INFO] [stdout] 1129 | | Some(Dialogue::AddTheme { name }) => { [INFO] [stdout] 1130 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 1133 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 1128 ~ Message::SetAddThemeName(new_name) => if let Some(Dialogue::AddTheme { name }) = &mut state.dialogue { [INFO] [stdout] 1129 + *name = new_name.clone(); [INFO] [stdout] 1130 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:1135:16 [INFO] [stdout] | [INFO] [stdout] 1135 | if theme_name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `theme_name.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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/update.rs:1148:63 [INFO] [stdout] | [INFO] [stdout] 1148 | copy_area_theme(state, area_name, &old_theme, &theme_name)?; [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `theme_name` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/update.rs:1167:50 [INFO] [stdout] | [INFO] [stdout] 1167 | Message::SetRenameThemeName(new_name) => match &mut state.dialogue { [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 1168 | | Some(Dialogue::RenameTheme { name }) => { [INFO] [stdout] 1169 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 1172 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 1167 ~ Message::SetRenameThemeName(new_name) => if let Some(Dialogue::RenameTheme { name }) = &mut state.dialogue { [INFO] [stdout] 1168 + *name = new_name.clone(); [INFO] [stdout] 1169 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/update.rs:395:21 [INFO] [stdout] | [INFO] [stdout] 395 | / match c.as_str() { [INFO] [stdout] 396 | | "r" => { [INFO] [stdout] 397 | | return Ok(Some(Task::done(Message::RebuildProjectDialogue))); [INFO] [stdout] ... | [INFO] [stdout] 400 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 395 ~ if c.as_str() == "r" { [INFO] [stdout] 396 + return Ok(Some(Task::done(Message::RebuildProjectDialogue))); [INFO] [stdout] 397 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:1174:16 [INFO] [stdout] | [INFO] [stdout] 1174 | if new_name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `new_name.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] [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/update.rs:598:49 [INFO] [stdout] | [INFO] [stdout] 598 | Message::SetAddPaletteName(new_name) => match &mut state.dialogue { [INFO] [stdout] | _________________________________________________^ [INFO] [stdout] 599 | | Some(Dialogue::AddPalette { name, .. }) => { [INFO] [stdout] 600 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 603 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 598 ~ Message::SetAddPaletteName(new_name) => if let Some(Dialogue::AddPalette { name, .. }) = &mut state.dialogue { [INFO] [stdout] 599 + *name = new_name.clone(); [INFO] [stdout] 600 ~ }, [INFO] [stdout] | [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/update.rs:604:46 [INFO] [stdout] | [INFO] [stdout] 604 | &Message::SetAddPaletteID(new_id) => match &mut state.dialogue { [INFO] [stdout] | ______________________________________________^ [INFO] [stdout] 605 | | Some(Dialogue::AddPalette { id, .. }) => { [INFO] [stdout] 606 | | *id = new_id; [INFO] [stdout] ... | [INFO] [stdout] 609 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 604 ~ &Message::SetAddPaletteID(new_id) => if let Some(Dialogue::AddPalette { id, .. }) = &mut state.dialogue { [INFO] [stdout] 605 + *id = new_id; [INFO] [stdout] 606 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:611:16 [INFO] [stdout] | [INFO] [stdout] 611 | if name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `name.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] [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/update.rs:642:52 [INFO] [stdout] | [INFO] [stdout] 642 | Message::SetRenamePaletteName(new_name) => match &mut state.dialogue { [INFO] [stdout] | ____________________________________________________^ [INFO] [stdout] 643 | | Some(Dialogue::RenamePalette { name }) => { [INFO] [stdout] 644 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 647 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 642 ~ Message::SetRenamePaletteName(new_name) => if let Some(Dialogue::RenamePalette { name }) = &mut state.dialogue { [INFO] [stdout] 643 + *name = new_name.clone(); [INFO] [stdout] 644 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:649:16 [INFO] [stdout] | [INFO] [stdout] 649 | if name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `name.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] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/update.rs:1534:13 [INFO] [stdout] | [INFO] [stdout] 1534 | return Task::none(); [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] 1534 - return Task::none(); [INFO] [stdout] 1534 + Task::none() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:716:51 [INFO] [stdout] | [INFO] [stdout] 716 | state.selected_color = state.palettes[pal_idx as usize].colors[color_idx as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `pal_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/update.rs:1541:5 [INFO] [stdout] | [INFO] [stdout] 1541 | state.palettes.sort_by(|x, y| x.id.cmp(&y.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] 1541 - state.palettes.sort_by(|x, y| x.id.cmp(&y.id)); [INFO] [stdout] 1541 + state.palettes.sort_by_key(|x| x.id); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:1560:57 [INFO] [stdout] | [INFO] [stdout] 1560 | if (tile_idx as usize) < state.palettes[idx as usize].tiles.len() { [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:1561:55 [INFO] [stdout] | [INFO] [stdout] 1561 | flip.apply_to_tile(state.palettes[idx as usize].tiles[tile_idx as usize]) [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:873:42 [INFO] [stdout] | [INFO] [stdout] 873 | let mut tile = s[y as usize][x as usize]; [INFO] [stdout] | ^^^^^^^^^^ help: try: `{ y }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:873:54 [INFO] [stdout] | [INFO] [stdout] 873 | let mut tile = s[y as usize][x as usize]; [INFO] [stdout] | ^^^^^^^^^^ help: try: `x` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [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/update.rs:948:46 [INFO] [stdout] | [INFO] [stdout] 948 | Message::SetAddAreaName(new_name) => match &mut state.dialogue { [INFO] [stdout] | ______________________________________________^ [INFO] [stdout] 949 | | Some(Dialogue::AddArea { name, .. }) => { [INFO] [stdout] 950 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 953 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 948 ~ Message::SetAddAreaName(new_name) => if let Some(Dialogue::AddArea { name, .. }) = &mut state.dialogue { [INFO] [stdout] 949 + *name = new_name.clone(); [INFO] [stdout] 950 ~ }, [INFO] [stdout] | [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/update.rs:954:45 [INFO] [stdout] | [INFO] [stdout] 954 | &Message::SetAddAreaSizeX(new_x) => match &mut state.dialogue { [INFO] [stdout] | _____________________________________________^ [INFO] [stdout] 955 | | Some(Dialogue::AddArea { size, .. }) => { [INFO] [stdout] 956 | | size.0 = new_x; [INFO] [stdout] ... | [INFO] [stdout] 959 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 954 ~ &Message::SetAddAreaSizeX(new_x) => if let Some(Dialogue::AddArea { size, .. }) = &mut state.dialogue { [INFO] [stdout] 955 + size.0 = new_x; [INFO] [stdout] 956 ~ }, [INFO] [stdout] | [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/update.rs:960:45 [INFO] [stdout] | [INFO] [stdout] 960 | &Message::SetAddAreaSizeY(new_y) => match &mut state.dialogue { [INFO] [stdout] | _____________________________________________^ [INFO] [stdout] 961 | | Some(Dialogue::AddArea { size, .. }) => { [INFO] [stdout] 962 | | size.1 = new_y; [INFO] [stdout] ... | [INFO] [stdout] 965 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 960 ~ &Message::SetAddAreaSizeY(new_y) => if let Some(Dialogue::AddArea { size, .. }) = &mut state.dialogue { [INFO] [stdout] 961 + size.1 = new_y; [INFO] [stdout] 962 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:967:16 [INFO] [stdout] | [INFO] [stdout] 967 | if name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `name.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] [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/view/area.rs:107:9 [INFO] [stdout] | [INFO] [stdout] 107 | / match event { [INFO] [stdout] 108 | | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] 109 | | mouse::Event::ButtonPressed(btn @ (mouse::Button::Left | mouse::Button::Right)) => { [INFO] [stdout] 110 | | if let Some(p) = cursor.position_over(bounds) { [INFO] [stdout] ... | [INFO] [stdout] 238 | | _ => {} [INFO] [stdout] 239 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 107 ~ if let canvas::Event::Mouse(mouse_event) = event { match mouse_event { [INFO] [stdout] 108 + mouse::Event::ButtonPressed(btn @ (mouse::Button::Left | mouse::Button::Right)) => { [INFO] [stdout] 109 + if let Some(p) = cursor.position_over(bounds) { [INFO] [stdout] 110 + match (self.tool, btn) { [INFO] [stdout] 111 + (Tool::Brush, mouse::Button::Left) => { [INFO] [stdout] 112 + state.action = InternalStateAction::Brushing; [INFO] [stdout] 113 + let coords = clamped_position_in( [INFO] [stdout] 114 + p, [INFO] [stdout] 115 + bounds, [INFO] [stdout] 116 + self.area.size, [INFO] [stdout] 117 + self.pixel_size, [INFO] [stdout] 118 + self.snap_grid_16, [INFO] [stdout] 119 + ); [INFO] [stdout] 120 + return ( [INFO] [stdout] 121 + canvas::event::Status::Captured, [INFO] [stdout] 122 + Some(Message::AreaBrush { [INFO] [stdout] 123 + position: self.position, [INFO] [stdout] 124 + area_id: self.area_id.clone(), [INFO] [stdout] 125 + coords, [INFO] [stdout] 126 + selection: self.tile_block.clone(), [INFO] [stdout] 127 + palette_only: self.palette_only_brush, [INFO] [stdout] 128 + }), [INFO] [stdout] 129 + ); [INFO] [stdout] 130 + } [INFO] [stdout] 131 + (Tool::Select, mouse::Button::Left | mouse::Button::Right) [INFO] [stdout] 132 + | (Tool::Brush, mouse::Button::Right) => { [INFO] [stdout] 133 + state.action = InternalStateAction::Selecting; [INFO] [stdout] 134 + return ( [INFO] [stdout] 135 + canvas::event::Status::Captured, [INFO] [stdout] 136 + Some(Message::StartTileSelection( [INFO] [stdout] 137 + clamped_position_in( [INFO] [stdout] 138 + p, [INFO] [stdout] 139 + bounds, [INFO] [stdout] 140 + self.area.size, [INFO] [stdout] 141 + self.pixel_size, [INFO] [stdout] 142 + self.snap_grid_16, [INFO] [stdout] 143 + ), [INFO] [stdout] 144 + crate::message::SelectionSource::Area(self.position), [INFO] [stdout] 145 + )), [INFO] [stdout] 146 + ); [INFO] [stdout] 147 + } [INFO] [stdout] 148 + _ => {} [INFO] [stdout] 149 + } [INFO] [stdout] 150 + }; [INFO] [stdout] 151 + } [INFO] [stdout] 152 + mouse::Event::ButtonReleased(mouse::Button::Left | mouse::Button::Right) => { [INFO] [stdout] 153 + let state0 = *state; [INFO] [stdout] 154 + state.action = InternalStateAction::None; [INFO] [stdout] 155 + if state0.action == InternalStateAction::Selecting { [INFO] [stdout] 156 + let coords = if let Some(p) = cursor.position() { [INFO] [stdout] 157 + clamped_position_in( [INFO] [stdout] 158 + p, [INFO] [stdout] 159 + bounds, [INFO] [stdout] 160 + self.area.size, [INFO] [stdout] 161 + self.pixel_size, [INFO] [stdout] 162 + self.snap_grid_16, [INFO] [stdout] 163 + ) [INFO] [stdout] 164 + } else if let Some(c) = self.end_coords { [INFO] [stdout] 165 + Point::new(c.0, c.1) [INFO] [stdout] 166 + } else { [INFO] [stdout] 167 + return (canvas::event::Status::Ignored, None); [INFO] [stdout] 168 + }; [INFO] [stdout] 169 + return ( [INFO] [stdout] 170 + canvas::event::Status::Captured, [INFO] [stdout] 171 + Some(Message::EndTileSelection(coords)), [INFO] [stdout] 172 + ); [INFO] [stdout] 173 + } [INFO] [stdout] 174 + } [INFO] [stdout] 175 + mouse::Event::CursorMoved { .. } => match state.action { [INFO] [stdout] 176 + InternalStateAction::None => { [INFO] [stdout] 177 + if let Some(p) = cursor.position() { [INFO] [stdout] 178 + return ( [INFO] [stdout] 179 + canvas::event::Status::Captured, [INFO] [stdout] 180 + Some(Message::HoverArea(clamped_position_in( [INFO] [stdout] 181 + p, [INFO] [stdout] 182 + bounds, [INFO] [stdout] 183 + self.area.size, [INFO] [stdout] 184 + self.pixel_size, [INFO] [stdout] 185 + self.snap_grid_16, [INFO] [stdout] 186 + ))), [INFO] [stdout] 187 + ); [INFO] [stdout] 188 + } else { [INFO] [stdout] 189 + return (canvas::event::Status::Ignored, None); [INFO] [stdout] 190 + } [INFO] [stdout] 191 + } [INFO] [stdout] 192 + InternalStateAction::Selecting => { [INFO] [stdout] 193 + if let Some(p) = cursor.position() { [INFO] [stdout] 194 + return ( [INFO] [stdout] 195 + canvas::event::Status::Captured, [INFO] [stdout] 196 + Some(Message::ProgressTileSelection(clamped_position_in( [INFO] [stdout] 197 + p, [INFO] [stdout] 198 + bounds, [INFO] [stdout] 199 + self.area.size, [INFO] [stdout] 200 + self.pixel_size, [INFO] [stdout] 201 + self.snap_grid_16, [INFO] [stdout] 202 + ))), [INFO] [stdout] 203 + ); [INFO] [stdout] 204 + } else { [INFO] [stdout] 205 + return (canvas::event::Status::Captured, Some(Message::HoverAreaEnd)); [INFO] [stdout] 206 + } [INFO] [stdout] 207 + } [INFO] [stdout] 208 + InternalStateAction::Brushing => { [INFO] [stdout] 209 + if let Some(p) = cursor.position() { [INFO] [stdout] 210 + let coords = clamped_position_in( [INFO] [stdout] 211 + p, [INFO] [stdout] 212 + bounds, [INFO] [stdout] 213 + self.area.size, [INFO] [stdout] 214 + self.pixel_size, [INFO] [stdout] 215 + self.snap_grid_16, [INFO] [stdout] 216 + ); [INFO] [stdout] 217 + return ( [INFO] [stdout] 218 + canvas::event::Status::Captured, [INFO] [stdout] 219 + Some(Message::AreaBrush { [INFO] [stdout] 220 + position: self.position, [INFO] [stdout] 221 + area_id: self.area_id.clone(), [INFO] [stdout] 222 + coords, [INFO] [stdout] 223 + selection: self.tile_block.clone(), [INFO] [stdout] 224 + palette_only: self.palette_only_brush, [INFO] [stdout] 225 + }), [INFO] [stdout] 226 + ); [INFO] [stdout] 227 + } else { [INFO] [stdout] 228 + return (canvas::event::Status::Captured, Some(Message::HoverAreaEnd)); [INFO] [stdout] 229 + } [INFO] [stdout] 230 + } [INFO] [stdout] 231 + }, [INFO] [stdout] 232 + mouse::Event::CursorLeft => { [INFO] [stdout] 233 + return (canvas::event::Status::Captured, Some(Message::HoverAreaEnd)); [INFO] [stdout] 234 + } [INFO] [stdout] 235 + _ => {} [INFO] [stdout] 236 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `[[u8; 3]; 16]` which implements the `Copy` trait [INFO] [stdout] --> src/view/area.rs:255:30 [INFO] [stdout] | [INFO] [stdout] 255 | let mut colors = self.palettes[i].colors.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.palettes[i].colors` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/update.rs:1011:47 [INFO] [stdout] | [INFO] [stdout] 1011 | Message::SetEditAreaName(new_name) => match &mut state.dialogue { [INFO] [stdout] | _______________________________________________^ [INFO] [stdout] 1012 | | Some(Dialogue::EditArea { name }) => { [INFO] [stdout] 1013 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 1016 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 1011 ~ Message::SetEditAreaName(new_name) => if let Some(Dialogue::EditArea { name }) = &mut state.dialogue { [INFO] [stdout] 1012 + *name = new_name.clone(); [INFO] [stdout] 1013 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:1018:16 [INFO] [stdout] | [INFO] [stdout] 1018 | if new_name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `new_name.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] [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/update.rs:1128:47 [INFO] [stdout] | [INFO] [stdout] 1128 | Message::SetAddThemeName(new_name) => match &mut state.dialogue { [INFO] [stdout] | _______________________________________________^ [INFO] [stdout] 1129 | | Some(Dialogue::AddTheme { name }) => { [INFO] [stdout] 1130 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 1133 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 1128 ~ Message::SetAddThemeName(new_name) => if let Some(Dialogue::AddTheme { name }) = &mut state.dialogue { [INFO] [stdout] 1129 + *name = new_name.clone(); [INFO] [stdout] 1130 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:1135:16 [INFO] [stdout] | [INFO] [stdout] 1135 | if theme_name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `theme_name.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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/update.rs:1148:63 [INFO] [stdout] | [INFO] [stdout] 1148 | copy_area_theme(state, area_name, &old_theme, &theme_name)?; [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `theme_name` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/update.rs:1167:50 [INFO] [stdout] | [INFO] [stdout] 1167 | Message::SetRenameThemeName(new_name) => match &mut state.dialogue { [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 1168 | | Some(Dialogue::RenameTheme { name }) => { [INFO] [stdout] 1169 | | *name = new_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 1172 | | }, [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] help: try [INFO] [stdout] | [INFO] [stdout] 1167 ~ Message::SetRenameThemeName(new_name) => if let Some(Dialogue::RenameTheme { name }) = &mut state.dialogue { [INFO] [stdout] 1168 + *name = new_name.clone(); [INFO] [stdout] 1169 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/update.rs:1174:16 [INFO] [stdout] | [INFO] [stdout] 1174 | if new_name.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `new_name.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] [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/view/area.rs:579:5 [INFO] [stdout] | [INFO] [stdout] 579 | / match (state.start_coords, state.end_coords) { [INFO] [stdout] 580 | | (Some(p0), Some(p1)) => { [INFO] [stdout] 581 | | left = p0.0.min(p1.0); [INFO] [stdout] 582 | | right = p0.0.max(p1.0); [INFO] [stdout] ... | [INFO] [stdout] 586 | | _ => {} [INFO] [stdout] 587 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 579 ~ if let (Some(p0), Some(p1)) = (state.start_coords, state.end_coords) { [INFO] [stdout] 580 + left = p0.0.min(p1.0); [INFO] [stdout] 581 + right = p0.0.max(p1.0); [INFO] [stdout] 582 + top = p0.1.min(p1.1); [INFO] [stdout] 583 + bottom = p0.1.max(p1.1); [INFO] [stdout] 584 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/view/area.rs:599:23 [INFO] [stdout] | [INFO] [stdout] 599 | area: &state.area(position), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `state.area(position)` [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: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/area.rs:703:28 [INFO] [stdout] | [INFO] [stdout] 703 | pub fn add_area_view(name: &String, size: (u8, u8)) -> Element { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 703 ~ pub fn add_area_view(name: &str, size: (u8, u8)) -> Element { [INFO] [stdout] 704 | let add_area_msg = Message::AddArea { [INFO] [stdout] 705 ~ name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/area.rs:744:50 [INFO] [stdout] | [INFO] [stdout] 744 | pub fn edit_area_view(state: &EditorState, name: &String) -> Element<'static, Message> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 744 ~ pub fn edit_area_view(state: &EditorState, name: &str) -> Element<'static, Message> { [INFO] [stdout] 745 | let old_name = state.main_area().name.clone(); [INFO] [stdout] ... [INFO] [stdout] 748 | old_name: old_name.clone(), [INFO] [stdout] 749 ~ new_name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/area.rs:826:29 [INFO] [stdout] | [INFO] [stdout] 826 | pub fn add_theme_view(name: &String) -> Element { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 826 ~ pub fn add_theme_view(name: &str) -> Element { [INFO] [stdout] 827 | container( [INFO] [stdout] ... [INFO] [stdout] 834 | .on_input(Message::SetAddThemeName) [INFO] [stdout] 835 ~ .on_submit(Message::AddTheme(name.to_owned())) [INFO] [stdout] 836 | ] [INFO] [stdout] ... [INFO] [stdout] 840 | .style(button::success) [INFO] [stdout] 841 ~ .on_press(Message::AddTheme(name.to_owned())), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/update.rs:1534:13 [INFO] [stdout] | [INFO] [stdout] 1534 | return Task::none(); [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] 1534 - return Task::none(); [INFO] [stdout] 1534 + Task::none() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/area.rs:851:53 [INFO] [stdout] | [INFO] [stdout] 851 | pub fn rename_theme_view(state: &EditorState, name: &String) -> Element<'static, Message> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 851 ~ pub fn rename_theme_view(state: &EditorState, name: &str) -> Element<'static, Message> { [INFO] [stdout] 852 | let old_name = state.main_area().theme.clone(); [INFO] [stdout] 853 | let rename_msg = Message::RenameTheme { [INFO] [stdout] 854 | old_name: old_name.clone(), [INFO] [stdout] 855 ~ new_name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/update.rs:1541:5 [INFO] [stdout] | [INFO] [stdout] 1541 | state.palettes.sort_by(|x, y| x.id.cmp(&y.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] 1541 - state.palettes.sort_by(|x, y| x.id.cmp(&y.id)); [INFO] [stdout] 1541 + state.palettes.sort_by_key(|x| x.id); [INFO] [stdout] | [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/view/graphics.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 50 | / match event { [INFO] [stdout] 51 | | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] 52 | | mouse::Event::ButtonPressed(mouse::Button::Left) => { [INFO] [stdout] 53 | | state.clicking = true; [INFO] [stdout] ... | [INFO] [stdout] 69 | | _ => {} [INFO] [stdout] 70 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 50 ~ if let canvas::Event::Mouse(mouse_event) = event { match mouse_event { [INFO] [stdout] 51 + mouse::Event::ButtonPressed(mouse::Button::Left) => { [INFO] [stdout] 52 + state.clicking = true; [INFO] [stdout] 53 + click = true; [INFO] [stdout] 54 + } [INFO] [stdout] 55 + mouse::Event::ButtonReleased(mouse::Button::Left) => { [INFO] [stdout] 56 + state.clicking = false; [INFO] [stdout] 57 + } [INFO] [stdout] 58 + mouse::Event::CursorMoved { .. } => { [INFO] [stdout] 59 + if state.clicking { [INFO] [stdout] 60 + click = true; [INFO] [stdout] 61 + } [INFO] [stdout] 62 + } [INFO] [stdout] 63 + mouse::Event::CursorLeft => { [INFO] [stdout] 64 + state.clicking = false; [INFO] [stdout] 65 + } [INFO] [stdout] 66 + _ => {} [INFO] [stdout] 67 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/view/graphics.rs:60:21 [INFO] [stdout] | [INFO] [stdout] 60 | / if state.clicking { [INFO] [stdout] 61 | | click = true; [INFO] [stdout] 62 | | } [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] 59 ~ mouse::Event::CursorMoved { .. } [INFO] [stdout] 60 ~ if state.clicking => { [INFO] [stdout] 61 | click = true; [INFO] [stdout] 62 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!Range::contains` implementation [INFO] [stdout] --> src/view/graphics.rs:75:35 [INFO] [stdout] | [INFO] [stdout] 75 | if x < 0 || x >= 8 || y < 0 || y >= 8 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: use: `!(0..8).contains(&y)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!Range::contains` implementation [INFO] [stdout] --> src/view/graphics.rs:75:16 [INFO] [stdout] | [INFO] [stdout] 75 | if x < 0 || x >= 8 || y < 0 || y >= 8 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: use: `!(0..8).contains(&x)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:1560:57 [INFO] [stdout] | [INFO] [stdout] 1560 | if (tile_idx as usize) < state.palettes[idx as usize].tiles.len() { [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/update.rs:1561:55 [INFO] [stdout] | [INFO] [stdout] 1561 | flip.apply_to_tile(state.palettes[idx as usize].tiles[tile_idx as usize]) [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` can be collapsed into the outer `match` [INFO] [stdout] --> src/view/palette.rs:49:50 [INFO] [stdout] | [INFO] [stdout] 49 | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 50 | | mouse::Event::ButtonPressed(button) => { [INFO] [stdout] 51 | | let message = match button { [INFO] [stdout] 52 | | mouse::Button::Left => { [INFO] [stdout] ... | [INFO] [stdout] 69 | | _ => (canvas::event::Status::Ignored, None), [INFO] [stdout] 70 | | }, [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> src/view/palette.rs:49:34 [INFO] [stdout] | [INFO] [stdout] 49 | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] | ^^^^^^^^^^^ replace this binding [INFO] [stdout] 50 | mouse::Event::ButtonPressed(button) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [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/view/area.rs:107:9 [INFO] [stdout] | [INFO] [stdout] 107 | / match event { [INFO] [stdout] 108 | | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] 109 | | mouse::Event::ButtonPressed(btn @ (mouse::Button::Left | mouse::Button::Right)) => { [INFO] [stdout] 110 | | if let Some(p) = cursor.position_over(bounds) { [INFO] [stdout] ... | [INFO] [stdout] 238 | | _ => {} [INFO] [stdout] 239 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 107 ~ if let canvas::Event::Mouse(mouse_event) = event { match mouse_event { [INFO] [stdout] 108 + mouse::Event::ButtonPressed(btn @ (mouse::Button::Left | mouse::Button::Right)) => { [INFO] [stdout] 109 + if let Some(p) = cursor.position_over(bounds) { [INFO] [stdout] 110 + match (self.tool, btn) { [INFO] [stdout] 111 + (Tool::Brush, mouse::Button::Left) => { [INFO] [stdout] 112 + state.action = InternalStateAction::Brushing; [INFO] [stdout] 113 + let coords = clamped_position_in( [INFO] [stdout] 114 + p, [INFO] [stdout] 115 + bounds, [INFO] [stdout] 116 + self.area.size, [INFO] [stdout] 117 + self.pixel_size, [INFO] [stdout] 118 + self.snap_grid_16, [INFO] [stdout] 119 + ); [INFO] [stdout] 120 + return ( [INFO] [stdout] 121 + canvas::event::Status::Captured, [INFO] [stdout] 122 + Some(Message::AreaBrush { [INFO] [stdout] 123 + position: self.position, [INFO] [stdout] 124 + area_id: self.area_id.clone(), [INFO] [stdout] 125 + coords, [INFO] [stdout] 126 + selection: self.tile_block.clone(), [INFO] [stdout] 127 + palette_only: self.palette_only_brush, [INFO] [stdout] 128 + }), [INFO] [stdout] 129 + ); [INFO] [stdout] 130 + } [INFO] [stdout] 131 + (Tool::Select, mouse::Button::Left | mouse::Button::Right) [INFO] [stdout] 132 + | (Tool::Brush, mouse::Button::Right) => { [INFO] [stdout] 133 + state.action = InternalStateAction::Selecting; [INFO] [stdout] 134 + return ( [INFO] [stdout] 135 + canvas::event::Status::Captured, [INFO] [stdout] 136 + Some(Message::StartTileSelection( [INFO] [stdout] 137 + clamped_position_in( [INFO] [stdout] 138 + p, [INFO] [stdout] 139 + bounds, [INFO] [stdout] 140 + self.area.size, [INFO] [stdout] 141 + self.pixel_size, [INFO] [stdout] 142 + self.snap_grid_16, [INFO] [stdout] 143 + ), [INFO] [stdout] 144 + crate::message::SelectionSource::Area(self.position), [INFO] [stdout] 145 + )), [INFO] [stdout] 146 + ); [INFO] [stdout] 147 + } [INFO] [stdout] 148 + _ => {} [INFO] [stdout] 149 + } [INFO] [stdout] 150 + }; [INFO] [stdout] 151 + } [INFO] [stdout] 152 + mouse::Event::ButtonReleased(mouse::Button::Left | mouse::Button::Right) => { [INFO] [stdout] 153 + let state0 = *state; [INFO] [stdout] 154 + state.action = InternalStateAction::None; [INFO] [stdout] 155 + if state0.action == InternalStateAction::Selecting { [INFO] [stdout] 156 + let coords = if let Some(p) = cursor.position() { [INFO] [stdout] 157 + clamped_position_in( [INFO] [stdout] 158 + p, [INFO] [stdout] 159 + bounds, [INFO] [stdout] 160 + self.area.size, [INFO] [stdout] 161 + self.pixel_size, [INFO] [stdout] 162 + self.snap_grid_16, [INFO] [stdout] 163 + ) [INFO] [stdout] 164 + } else if let Some(c) = self.end_coords { [INFO] [stdout] 165 + Point::new(c.0, c.1) [INFO] [stdout] 166 + } else { [INFO] [stdout] 167 + return (canvas::event::Status::Ignored, None); [INFO] [stdout] 168 + }; [INFO] [stdout] 169 + return ( [INFO] [stdout] 170 + canvas::event::Status::Captured, [INFO] [stdout] 171 + Some(Message::EndTileSelection(coords)), [INFO] [stdout] 172 + ); [INFO] [stdout] 173 + } [INFO] [stdout] 174 + } [INFO] [stdout] 175 + mouse::Event::CursorMoved { .. } => match state.action { [INFO] [stdout] 176 + InternalStateAction::None => { [INFO] [stdout] 177 + if let Some(p) = cursor.position() { [INFO] [stdout] 178 + return ( [INFO] [stdout] 179 + canvas::event::Status::Captured, [INFO] [stdout] 180 + Some(Message::HoverArea(clamped_position_in( [INFO] [stdout] 181 + p, [INFO] [stdout] 182 + bounds, [INFO] [stdout] 183 + self.area.size, [INFO] [stdout] 184 + self.pixel_size, [INFO] [stdout] 185 + self.snap_grid_16, [INFO] [stdout] 186 + ))), [INFO] [stdout] 187 + ); [INFO] [stdout] 188 + } else { [INFO] [stdout] 189 + return (canvas::event::Status::Ignored, None); [INFO] [stdout] 190 + } [INFO] [stdout] 191 + } [INFO] [stdout] 192 + InternalStateAction::Selecting => { [INFO] [stdout] 193 + if let Some(p) = cursor.position() { [INFO] [stdout] 194 + return ( [INFO] [stdout] 195 + canvas::event::Status::Captured, [INFO] [stdout] 196 + Some(Message::ProgressTileSelection(clamped_position_in( [INFO] [stdout] 197 + p, [INFO] [stdout] 198 + bounds, [INFO] [stdout] 199 + self.area.size, [INFO] [stdout] 200 + self.pixel_size, [INFO] [stdout] 201 + self.snap_grid_16, [INFO] [stdout] 202 + ))), [INFO] [stdout] 203 + ); [INFO] [stdout] 204 + } else { [INFO] [stdout] 205 + return (canvas::event::Status::Captured, Some(Message::HoverAreaEnd)); [INFO] [stdout] 206 + } [INFO] [stdout] 207 + } [INFO] [stdout] 208 + InternalStateAction::Brushing => { [INFO] [stdout] 209 + if let Some(p) = cursor.position() { [INFO] [stdout] 210 + let coords = clamped_position_in( [INFO] [stdout] 211 + p, [INFO] [stdout] 212 + bounds, [INFO] [stdout] 213 + self.area.size, [INFO] [stdout] 214 + self.pixel_size, [INFO] [stdout] 215 + self.snap_grid_16, [INFO] [stdout] 216 + ); [INFO] [stdout] 217 + return ( [INFO] [stdout] 218 + canvas::event::Status::Captured, [INFO] [stdout] 219 + Some(Message::AreaBrush { [INFO] [stdout] 220 + position: self.position, [INFO] [stdout] 221 + area_id: self.area_id.clone(), [INFO] [stdout] 222 + coords, [INFO] [stdout] 223 + selection: self.tile_block.clone(), [INFO] [stdout] 224 + palette_only: self.palette_only_brush, [INFO] [stdout] 225 + }), [INFO] [stdout] 226 + ); [INFO] [stdout] 227 + } else { [INFO] [stdout] 228 + return (canvas::event::Status::Captured, Some(Message::HoverAreaEnd)); [INFO] [stdout] 229 + } [INFO] [stdout] 230 + } [INFO] [stdout] 231 + }, [INFO] [stdout] 232 + mouse::Event::CursorLeft => { [INFO] [stdout] 233 + return (canvas::event::Status::Captured, Some(Message::HoverAreaEnd)); [INFO] [stdout] 234 + } [INFO] [stdout] 235 + _ => {} [INFO] [stdout] 236 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `[[u8; 3]; 16]` which implements the `Copy` trait [INFO] [stdout] --> src/view/area.rs:255:30 [INFO] [stdout] | [INFO] [stdout] 255 | let mut colors = self.palettes[i].colors.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.palettes[i].colors` [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: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/palette.rs:216:31 [INFO] [stdout] | [INFO] [stdout] 216 | pub fn add_palette_view(name: &String, id: PaletteId) -> Element { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 216 ~ pub fn add_palette_view(name: &str, id: PaletteId) -> Element { [INFO] [stdout] 217 | container( [INFO] [stdout] ... [INFO] [stdout] 225 | .on_submit(Message::AddPalette { [INFO] [stdout] 226 ~ name: name.to_owned(), [INFO] [stdout] 227 | id [INFO] [stdout] ... [INFO] [stdout] 236 | .on_submit(Message::AddPalette { [INFO] [stdout] 237 ~ name: name.to_owned(), [INFO] [stdout] 238 | id [INFO] [stdout] ... [INFO] [stdout] 245 | .on_press(Message::AddPalette { [INFO] [stdout] 246 ~ name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/palette.rs:258:55 [INFO] [stdout] | [INFO] [stdout] 258 | pub fn rename_palette_view(state: &EditorState, name: &String) -> Element<'static, Message> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 258 ~ pub fn rename_palette_view(state: &EditorState, name: &str) -> Element<'static, Message> { [INFO] [stdout] 259 | let idx = state.palette_idx; [INFO] [stdout] ... [INFO] [stdout] 262 | id: state.palettes[idx].id, [INFO] [stdout] 263 ~ name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/view/palette.rs:323:35 [INFO] [stdout] | [INFO] [stdout] 323 | let pal = &state.palettes[palette_idx as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `palette_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [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/view/area.rs:579:5 [INFO] [stdout] | [INFO] [stdout] 579 | / match (state.start_coords, state.end_coords) { [INFO] [stdout] 580 | | (Some(p0), Some(p1)) => { [INFO] [stdout] 581 | | left = p0.0.min(p1.0); [INFO] [stdout] 582 | | right = p0.0.max(p1.0); [INFO] [stdout] ... | [INFO] [stdout] 586 | | _ => {} [INFO] [stdout] 587 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 579 ~ if let (Some(p0), Some(p1)) = (state.start_coords, state.end_coords) { [INFO] [stdout] 580 + left = p0.0.min(p1.0); [INFO] [stdout] 581 + right = p0.0.max(p1.0); [INFO] [stdout] 582 + top = p0.1.min(p1.1); [INFO] [stdout] 583 + bottom = p0.1.max(p1.1); [INFO] [stdout] 584 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/view/area.rs:599:23 [INFO] [stdout] | [INFO] [stdout] 599 | area: &state.area(position), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `state.area(position)` [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/view/tiles.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 86 | / match event { [INFO] [stdout] 87 | | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] 88 | | mouse::Event::ButtonPressed(btn @ (mouse::Button::Left | mouse::Button::Right)) => { [INFO] [stdout] 89 | | if let Some(p) = cursor.position_over(bounds) { [INFO] [stdout] ... | [INFO] [stdout] 243 | | _ => {} [INFO] [stdout] 244 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 86 ~ if let canvas::Event::Mouse(mouse_event) = event { match mouse_event { [INFO] [stdout] 87 + mouse::Event::ButtonPressed(btn @ (mouse::Button::Left | mouse::Button::Right)) => { [INFO] [stdout] 88 + if let Some(p) = cursor.position_over(bounds) { [INFO] [stdout] 89 + match (self.tool, btn) { [INFO] [stdout] 90 + (Tool::Brush, mouse::Button::Left) => { [INFO] [stdout] 91 + state.action = InternalStateAction::Brushing; [INFO] [stdout] 92 + let coords = clamped_position_in( [INFO] [stdout] 93 + p, [INFO] [stdout] 94 + bounds, [INFO] [stdout] 95 + self.palette.tiles.len() / 16, [INFO] [stdout] 96 + self.pixel_size, [INFO] [stdout] 97 + ); [INFO] [stdout] 98 + return ( [INFO] [stdout] 99 + canvas::event::Status::Captured, [INFO] [stdout] 100 + Some(Message::TilesetBrush { [INFO] [stdout] 101 + palette_id: self.palette.id, [INFO] [stdout] 102 + coords, [INFO] [stdout] 103 + selected_gfx: self.selected_gfx.clone(), [INFO] [stdout] 104 + tile_block: if self.brush_graphics_only { [INFO] [stdout] 105 + None [INFO] [stdout] 106 + } else { [INFO] [stdout] 107 + Some(self.tile_block.clone()) [INFO] [stdout] 108 + }, [INFO] [stdout] 109 + }), [INFO] [stdout] 110 + ); [INFO] [stdout] 111 + } [INFO] [stdout] 112 + (Tool::Select, mouse::Button::Left | mouse::Button::Right) [INFO] [stdout] 113 + | (Tool::Brush | Tool::Move, mouse::Button::Right) => { [INFO] [stdout] 114 + state.action = InternalStateAction::Selecting; [INFO] [stdout] 115 + return ( [INFO] [stdout] 116 + canvas::event::Status::Captured, [INFO] [stdout] 117 + Some(Message::StartTileSelection( [INFO] [stdout] 118 + clamped_position_in( [INFO] [stdout] 119 + p, [INFO] [stdout] 120 + bounds, [INFO] [stdout] 121 + self.palette.tiles.len() / 16, [INFO] [stdout] 122 + self.pixel_size, [INFO] [stdout] 123 + ), [INFO] [stdout] 124 + crate::message::SelectionSource::Tileset, [INFO] [stdout] 125 + )), [INFO] [stdout] 126 + ); [INFO] [stdout] 127 + } [INFO] [stdout] 128 + (Tool::Move, mouse::Button::Left) => { [INFO] [stdout] 129 + state.action = InternalStateAction::None; [INFO] [stdout] 130 + let dst_coords = clamped_position_in( [INFO] [stdout] 131 + p, [INFO] [stdout] 132 + bounds, [INFO] [stdout] 133 + self.palette.tiles.len() / 16, [INFO] [stdout] 134 + self.pixel_size, [INFO] [stdout] 135 + ); [INFO] [stdout] 136 + let dst_palette_id = self.palette.id; [INFO] [stdout] 137 + let mut palettes: Vec> = vec![]; [INFO] [stdout] 138 + let mut tiles: Vec> = vec![]; [INFO] [stdout] 139 + let mut flips: Vec> = vec![]; [INFO] [stdout] 140 + for y in 0..self.tile_block.size.1 { [INFO] [stdout] 141 + let mut pal_row: Vec = vec![]; [INFO] [stdout] 142 + let mut tile_row: Vec = vec![]; [INFO] [stdout] 143 + let mut flip_row: Vec = vec![]; [INFO] [stdout] 144 + for x in 0..self.tile_block.size.0 { [INFO] [stdout] 145 + let x1 = dst_coords.x + x; [INFO] [stdout] 146 + let y1 = dst_coords.y + y; [INFO] [stdout] 147 + let i1 = y1 * 16 + x1; [INFO] [stdout] 148 + if x1 >= 16 || i1 as usize >= self.palette.tiles.len() { [INFO] [stdout] 149 + warn!("Not moving tiles: some destination tiles are out-of-bounds."); [INFO] [stdout] 150 + return (canvas::event::Status::Ignored, None); [INFO] [stdout] 151 + } [INFO] [stdout] 152 + pal_row.push(dst_palette_id); [INFO] [stdout] 153 + tile_row.push(y1 * 16 + x1); [INFO] [stdout] 154 + flip_row.push(Flip::None) [INFO] [stdout] 155 + } [INFO] [stdout] 156 + palettes.push(pal_row); [INFO] [stdout] 157 + tiles.push(tile_row); [INFO] [stdout] 158 + flips.push(flip_row); [INFO] [stdout] 159 + } [INFO] [stdout] 160 + let dst_selection = TileBlock { [INFO] [stdout] 161 + size: (self.tile_block.size.0, self.tile_block.size.1), [INFO] [stdout] 162 + palettes, [INFO] [stdout] 163 + tiles, [INFO] [stdout] 164 + flips, [INFO] [stdout] 165 + }; [INFO] [stdout] 166 + return ( [INFO] [stdout] 167 + canvas::event::Status::Captured, [INFO] [stdout] 168 + Some(Message::MovingTilesProgress { [INFO] [stdout] 169 + src_selection: self.tile_block.clone(), [INFO] [stdout] 170 + dst_selection, [INFO] [stdout] 171 + check_reversible: true, [INFO] [stdout] 172 + }), [INFO] [stdout] 173 + ); [INFO] [stdout] 174 + } [INFO] [stdout] 175 + _ => {} [INFO] [stdout] 176 + } [INFO] [stdout] 177 + }; [INFO] [stdout] 178 + } [INFO] [stdout] 179 + mouse::Event::ButtonReleased(mouse::Button::Left | mouse::Button::Right) => { [INFO] [stdout] 180 + let state0 = *state; [INFO] [stdout] 181 + state.action = InternalStateAction::None; [INFO] [stdout] 182 + if state0.action == InternalStateAction::Selecting { [INFO] [stdout] 183 + let coords = if let Some(p) = cursor.position() { [INFO] [stdout] 184 + clamped_position_in( [INFO] [stdout] 185 + p, [INFO] [stdout] 186 + bounds, [INFO] [stdout] 187 + self.palette.tiles.len() / 16, [INFO] [stdout] 188 + self.pixel_size, [INFO] [stdout] 189 + ) [INFO] [stdout] 190 + } else if let Some(c) = self.end_coords { [INFO] [stdout] 191 + Point::new(c.0, c.1) [INFO] [stdout] 192 + } else { [INFO] [stdout] 193 + return (canvas::event::Status::Ignored, None); [INFO] [stdout] 194 + }; [INFO] [stdout] 195 + return ( [INFO] [stdout] 196 + canvas::event::Status::Captured, [INFO] [stdout] 197 + Some(Message::EndTileSelection(coords)), [INFO] [stdout] 198 + ); [INFO] [stdout] 199 + } [INFO] [stdout] 200 + } [INFO] [stdout] 201 + mouse::Event::CursorMoved { .. } => match state.action { [INFO] [stdout] 202 + InternalStateAction::None => {} [INFO] [stdout] 203 + InternalStateAction::Selecting => { [INFO] [stdout] 204 + if let Some(p) = cursor.position() { [INFO] [stdout] 205 + return ( [INFO] [stdout] 206 + canvas::event::Status::Captured, [INFO] [stdout] 207 + Some(Message::ProgressTileSelection(clamped_position_in( [INFO] [stdout] 208 + p, [INFO] [stdout] 209 + bounds, [INFO] [stdout] 210 + self.palette.tiles.len() / 16, [INFO] [stdout] 211 + self.pixel_size, [INFO] [stdout] 212 + ))), [INFO] [stdout] 213 + ); [INFO] [stdout] 214 + } [INFO] [stdout] 215 + } [INFO] [stdout] 216 + InternalStateAction::Brushing => { [INFO] [stdout] 217 + if let Some(p) = cursor.position() { [INFO] [stdout] 218 + let coords = clamped_position_in( [INFO] [stdout] 219 + p, [INFO] [stdout] 220 + bounds, [INFO] [stdout] 221 + self.palette.tiles.len() / 16, [INFO] [stdout] 222 + self.pixel_size, [INFO] [stdout] 223 + ); [INFO] [stdout] 224 + return ( [INFO] [stdout] 225 + canvas::event::Status::Captured, [INFO] [stdout] 226 + Some(Message::TilesetBrush { [INFO] [stdout] 227 + palette_id: self.palette.id, [INFO] [stdout] 228 + coords, [INFO] [stdout] 229 + selected_gfx: self.selected_gfx.clone(), [INFO] [stdout] 230 + tile_block: if self.brush_graphics_only { [INFO] [stdout] 231 + None [INFO] [stdout] 232 + } else { [INFO] [stdout] 233 + Some(self.tile_block.clone()) [INFO] [stdout] 234 + }, [INFO] [stdout] 235 + }), [INFO] [stdout] 236 + ); [INFO] [stdout] 237 + } [INFO] [stdout] 238 + } [INFO] [stdout] 239 + }, [INFO] [stdout] 240 + _ => {} [INFO] [stdout] 241 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/area.rs:703:28 [INFO] [stdout] | [INFO] [stdout] 703 | pub fn add_area_view(name: &String, size: (u8, u8)) -> Element { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 703 ~ pub fn add_area_view(name: &str, size: (u8, u8)) -> Element { [INFO] [stdout] 704 | let add_area_msg = Message::AddArea { [INFO] [stdout] 705 ~ name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/area.rs:744:50 [INFO] [stdout] | [INFO] [stdout] 744 | pub fn edit_area_view(state: &EditorState, name: &String) -> Element<'static, Message> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 744 ~ pub fn edit_area_view(state: &EditorState, name: &str) -> Element<'static, Message> { [INFO] [stdout] 745 | let old_name = state.main_area().name.clone(); [INFO] [stdout] ... [INFO] [stdout] 748 | old_name: old_name.clone(), [INFO] [stdout] 749 ~ new_name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/view/tiles.rs:268:24 [INFO] [stdout] | [INFO] [stdout] 268 | let num_rows = (tiles.len() + num_cols - 1) / num_cols; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `tiles.len().div_ceil(num_cols)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/area.rs:826:29 [INFO] [stdout] | [INFO] [stdout] 826 | pub fn add_theme_view(name: &String) -> Element { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 826 ~ pub fn add_theme_view(name: &str) -> Element { [INFO] [stdout] 827 | container( [INFO] [stdout] ... [INFO] [stdout] 834 | .on_input(Message::SetAddThemeName) [INFO] [stdout] 835 ~ .on_submit(Message::AddTheme(name.to_owned())) [INFO] [stdout] 836 | ] [INFO] [stdout] ... [INFO] [stdout] 840 | .style(button::success) [INFO] [stdout] 841 ~ .on_press(Message::AddTheme(name.to_owned())), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/view/tiles.rs:308:52 [INFO] [stdout] | [INFO] [stdout] 308 | width: num_cols as f32 * 8.0 * (pixel_size as f32), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `pixel_size` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/view/tiles.rs:309:53 [INFO] [stdout] | [INFO] [stdout] 309 | height: num_rows as f32 * 8.0 * (pixel_size as f32), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `pixel_size` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/area.rs:851:53 [INFO] [stdout] | [INFO] [stdout] 851 | pub fn rename_theme_view(state: &EditorState, name: &String) -> Element<'static, Message> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 851 ~ pub fn rename_theme_view(state: &EditorState, name: &str) -> Element<'static, Message> { [INFO] [stdout] 852 | let old_name = state.main_area().theme.clone(); [INFO] [stdout] 853 | let rename_msg = Message::RenameTheme { [INFO] [stdout] 854 | old_name: old_name.clone(), [INFO] [stdout] 855 ~ new_name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/view/tiles.rs:412:20 [INFO] [stdout] | [INFO] [stdout] 412 | let num_rows = (state.palettes[state.palette_idx].tiles.len() + num_cols - 1) / num_cols; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `state.palettes[state.palette_idx].tiles.len().div_ceil(num_cols)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [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/view/graphics.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 50 | / match event { [INFO] [stdout] 51 | | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] 52 | | mouse::Event::ButtonPressed(mouse::Button::Left) => { [INFO] [stdout] 53 | | state.clicking = true; [INFO] [stdout] ... | [INFO] [stdout] 69 | | _ => {} [INFO] [stdout] 70 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 50 ~ if let canvas::Event::Mouse(mouse_event) = event { match mouse_event { [INFO] [stdout] 51 + mouse::Event::ButtonPressed(mouse::Button::Left) => { [INFO] [stdout] 52 + state.clicking = true; [INFO] [stdout] 53 + click = true; [INFO] [stdout] 54 + } [INFO] [stdout] 55 + mouse::Event::ButtonReleased(mouse::Button::Left) => { [INFO] [stdout] 56 + state.clicking = false; [INFO] [stdout] 57 + } [INFO] [stdout] 58 + mouse::Event::CursorMoved { .. } => { [INFO] [stdout] 59 + if state.clicking { [INFO] [stdout] 60 + click = true; [INFO] [stdout] 61 + } [INFO] [stdout] 62 + } [INFO] [stdout] 63 + mouse::Event::CursorLeft => { [INFO] [stdout] 64 + state.clicking = false; [INFO] [stdout] 65 + } [INFO] [stdout] 66 + _ => {} [INFO] [stdout] 67 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/view/graphics.rs:60:21 [INFO] [stdout] | [INFO] [stdout] 60 | / if state.clicking { [INFO] [stdout] 61 | | click = true; [INFO] [stdout] 62 | | } [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] 59 ~ mouse::Event::CursorMoved { .. } [INFO] [stdout] 60 ~ if state.clicking => { [INFO] [stdout] 61 | click = true; [INFO] [stdout] 62 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!Range::contains` implementation [INFO] [stdout] --> src/view/graphics.rs:75:35 [INFO] [stdout] | [INFO] [stdout] 75 | if x < 0 || x >= 8 || y < 0 || y >= 8 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: use: `!(0..8).contains(&y)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!Range::contains` implementation [INFO] [stdout] --> src/view/graphics.rs:75:16 [INFO] [stdout] | [INFO] [stdout] 75 | if x < 0 || x >= 8 || y < 0 || y >= 8 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: use: `!(0..8).contains(&x)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/view.rs:194:37 [INFO] [stdout] | [INFO] [stdout] 194 | rename_palette_view(&state, name), [INFO] [stdout] | ^^^^^^ help: change this to: `state` [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 `match` can be collapsed into the outer `match` [INFO] [stdout] --> src/view/palette.rs:49:50 [INFO] [stdout] | [INFO] [stdout] 49 | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 50 | | mouse::Event::ButtonPressed(button) => { [INFO] [stdout] 51 | | let message = match button { [INFO] [stdout] 52 | | mouse::Button::Left => { [INFO] [stdout] ... | [INFO] [stdout] 69 | | _ => (canvas::event::Status::Ignored, None), [INFO] [stdout] 70 | | }, [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> src/view/palette.rs:49:34 [INFO] [stdout] | [INFO] [stdout] 49 | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] | ^^^^^^^^^^^ replace this binding [INFO] [stdout] 50 | mouse::Event::ButtonPressed(button) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/palette.rs:216:31 [INFO] [stdout] | [INFO] [stdout] 216 | pub fn add_palette_view(name: &String, id: PaletteId) -> Element { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 216 ~ pub fn add_palette_view(name: &str, id: PaletteId) -> Element { [INFO] [stdout] 217 | container( [INFO] [stdout] ... [INFO] [stdout] 225 | .on_submit(Message::AddPalette { [INFO] [stdout] 226 ~ name: name.to_owned(), [INFO] [stdout] 227 | id [INFO] [stdout] ... [INFO] [stdout] 236 | .on_submit(Message::AddPalette { [INFO] [stdout] 237 ~ name: name.to_owned(), [INFO] [stdout] 238 | id [INFO] [stdout] ... [INFO] [stdout] 245 | .on_press(Message::AddPalette { [INFO] [stdout] 246 ~ name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/view/palette.rs:258:55 [INFO] [stdout] | [INFO] [stdout] 258 | pub fn rename_palette_view(state: &EditorState, name: &String) -> Element<'static, Message> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 258 ~ pub fn rename_palette_view(state: &EditorState, name: &str) -> Element<'static, Message> { [INFO] [stdout] 259 | let idx = state.palette_idx; [INFO] [stdout] ... [INFO] [stdout] 262 | id: state.palettes[idx].id, [INFO] [stdout] 263 ~ name: name.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/view/palette.rs:323:35 [INFO] [stdout] | [INFO] [stdout] 323 | let pal = &state.palettes[palette_idx as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `palette_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view.rs:105:26 [INFO] [stdout] | [INFO] [stdout] 105 | pub fn help_view(_state: &EditorState) -> Element { [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] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 105 | pub fn help_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view.rs:146:37 [INFO] [stdout] | [INFO] [stdout] 146 | pub fn rebuild_project_view(_state: &EditorState) -> Element { [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] 146 | pub fn rebuild_project_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view.rs:156:37 [INFO] [stdout] | [INFO] [stdout] 156 | pub fn modified_reload_view(_state: &EditorState) -> Element { [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] 156 | pub fn modified_reload_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view.rs:247:20 [INFO] [stdout] | [INFO] [stdout] 247 | pub fn view(state: &EditorState) -> Element { [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] 247 | pub fn view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:568:30 [INFO] [stdout] | [INFO] [stdout] 568 | pub fn area_grid_view(state: &EditorState, position: AreaPosition) -> Element { [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] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 568 | pub fn area_grid_view(state: &EditorState, position: AreaPosition) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:645:34 [INFO] [stdout] | [INFO] [stdout] 645 | pub fn main_area_controls(state: &EditorState) -> Element { [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] 645 | pub fn main_area_controls(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:680:34 [INFO] [stdout] | [INFO] [stdout] 680 | pub fn side_area_controls(state: &EditorState) -> Element { [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] 680 | pub fn side_area_controls(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:703:28 [INFO] [stdout] | [INFO] [stdout] 703 | pub fn add_area_view(name: &String, size: (u8, u8)) -> Element { [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] 703 | pub fn add_area_view(name: &String, size: (u8, u8)) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:807:32 [INFO] [stdout] | [INFO] [stdout] 807 | pub fn delete_area_view(state: &EditorState) -> Element { [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] 807 | pub fn delete_area_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:826:29 [INFO] [stdout] | [INFO] [stdout] 826 | pub fn add_theme_view(name: &String) -> Element { [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] 826 | pub fn add_theme_view(name: &String) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:885:33 [INFO] [stdout] | [INFO] [stdout] 885 | pub fn delete_theme_view(state: &EditorState) -> Element { [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] 885 | pub fn delete_theme_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/graphics.rs:174:29 [INFO] [stdout] | [INFO] [stdout] 174 | pub fn graphics_view(state: &EditorState) -> Element { [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] 174 | pub fn graphics_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/palette.rs:140:37 [INFO] [stdout] | [INFO] [stdout] 140 | pub fn selected_palette_view(state: &EditorState) -> Element { [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] 140 | pub fn selected_palette_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/palette.rs:216:31 [INFO] [stdout] | [INFO] [stdout] 216 | pub fn add_palette_view(name: &String, id: PaletteId) -> Element { [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] 216 | pub fn add_palette_view(name: &String, id: PaletteId) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/palette.rs:292:35 [INFO] [stdout] | [INFO] [stdout] 292 | pub fn delete_palette_view(state: &EditorState) -> Element { [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] 292 | pub fn delete_palette_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/palette.rs:314:34 [INFO] [stdout] | [INFO] [stdout] 314 | pub fn used_palettes_view(state: &EditorState) -> Element { [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] 314 | pub fn used_palettes_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/settings.rs:16:29 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn settings_view(state: &EditorState) -> Element { [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] 16 | pub fn settings_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/settings.rs:83:40 [INFO] [stdout] | [INFO] [stdout] 83 | pub fn import_rom_confirm_view(_state: &EditorState) -> Element { [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] 83 | pub fn import_rom_confirm_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/settings.rs:107:41 [INFO] [stdout] | [INFO] [stdout] 107 | pub fn import_rom_progress_view(_state: &EditorState) -> Element { [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] 107 | pub fn import_rom_progress_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/tiles.rs:410:25 [INFO] [stdout] | [INFO] [stdout] 410 | pub fn tile_view(state: &EditorState, size: Size, reserved_height: f32) -> Element { [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] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 410 | pub fn tile_view(state: &EditorState, size: Size, reserved_height: f32) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/tiles.rs:497:43 [INFO] [stdout] | [INFO] [stdout] 497 | pub fn moving_tiles_progress_view(_state: &EditorState) -> Element { [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] 497 | pub fn moving_tiles_progress_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [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/view/tiles.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 86 | / match event { [INFO] [stdout] 87 | | canvas::Event::Mouse(mouse_event) => match mouse_event { [INFO] [stdout] 88 | | mouse::Event::ButtonPressed(btn @ (mouse::Button::Left | mouse::Button::Right)) => { [INFO] [stdout] 89 | | if let Some(p) = cursor.position_over(bounds) { [INFO] [stdout] ... | [INFO] [stdout] 243 | | _ => {} [INFO] [stdout] 244 | | } [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] help: try [INFO] [stdout] | [INFO] [stdout] 86 ~ if let canvas::Event::Mouse(mouse_event) = event { match mouse_event { [INFO] [stdout] 87 + mouse::Event::ButtonPressed(btn @ (mouse::Button::Left | mouse::Button::Right)) => { [INFO] [stdout] 88 + if let Some(p) = cursor.position_over(bounds) { [INFO] [stdout] 89 + match (self.tool, btn) { [INFO] [stdout] 90 + (Tool::Brush, mouse::Button::Left) => { [INFO] [stdout] 91 + state.action = InternalStateAction::Brushing; [INFO] [stdout] 92 + let coords = clamped_position_in( [INFO] [stdout] 93 + p, [INFO] [stdout] 94 + bounds, [INFO] [stdout] 95 + self.palette.tiles.len() / 16, [INFO] [stdout] 96 + self.pixel_size, [INFO] [stdout] 97 + ); [INFO] [stdout] 98 + return ( [INFO] [stdout] 99 + canvas::event::Status::Captured, [INFO] [stdout] 100 + Some(Message::TilesetBrush { [INFO] [stdout] 101 + palette_id: self.palette.id, [INFO] [stdout] 102 + coords, [INFO] [stdout] 103 + selected_gfx: self.selected_gfx.clone(), [INFO] [stdout] 104 + tile_block: if self.brush_graphics_only { [INFO] [stdout] 105 + None [INFO] [stdout] 106 + } else { [INFO] [stdout] 107 + Some(self.tile_block.clone()) [INFO] [stdout] 108 + }, [INFO] [stdout] 109 + }), [INFO] [stdout] 110 + ); [INFO] [stdout] 111 + } [INFO] [stdout] 112 + (Tool::Select, mouse::Button::Left | mouse::Button::Right) [INFO] [stdout] 113 + | (Tool::Brush | Tool::Move, mouse::Button::Right) => { [INFO] [stdout] 114 + state.action = InternalStateAction::Selecting; [INFO] [stdout] 115 + return ( [INFO] [stdout] 116 + canvas::event::Status::Captured, [INFO] [stdout] 117 + Some(Message::StartTileSelection( [INFO] [stdout] 118 + clamped_position_in( [INFO] [stdout] 119 + p, [INFO] [stdout] 120 + bounds, [INFO] [stdout] 121 + self.palette.tiles.len() / 16, [INFO] [stdout] 122 + self.pixel_size, [INFO] [stdout] 123 + ), [INFO] [stdout] 124 + crate::message::SelectionSource::Tileset, [INFO] [stdout] 125 + )), [INFO] [stdout] 126 + ); [INFO] [stdout] 127 + } [INFO] [stdout] 128 + (Tool::Move, mouse::Button::Left) => { [INFO] [stdout] 129 + state.action = InternalStateAction::None; [INFO] [stdout] 130 + let dst_coords = clamped_position_in( [INFO] [stdout] 131 + p, [INFO] [stdout] 132 + bounds, [INFO] [stdout] 133 + self.palette.tiles.len() / 16, [INFO] [stdout] 134 + self.pixel_size, [INFO] [stdout] 135 + ); [INFO] [stdout] 136 + let dst_palette_id = self.palette.id; [INFO] [stdout] 137 + let mut palettes: Vec> = vec![]; [INFO] [stdout] 138 + let mut tiles: Vec> = vec![]; [INFO] [stdout] 139 + let mut flips: Vec> = vec![]; [INFO] [stdout] 140 + for y in 0..self.tile_block.size.1 { [INFO] [stdout] 141 + let mut pal_row: Vec = vec![]; [INFO] [stdout] 142 + let mut tile_row: Vec = vec![]; [INFO] [stdout] 143 + let mut flip_row: Vec = vec![]; [INFO] [stdout] 144 + for x in 0..self.tile_block.size.0 { [INFO] [stdout] 145 + let x1 = dst_coords.x + x; [INFO] [stdout] 146 + let y1 = dst_coords.y + y; [INFO] [stdout] 147 + let i1 = y1 * 16 + x1; [INFO] [stdout] 148 + if x1 >= 16 || i1 as usize >= self.palette.tiles.len() { [INFO] [stdout] 149 + warn!("Not moving tiles: some destination tiles are out-of-bounds."); [INFO] [stdout] 150 + return (canvas::event::Status::Ignored, None); [INFO] [stdout] 151 + } [INFO] [stdout] 152 + pal_row.push(dst_palette_id); [INFO] [stdout] 153 + tile_row.push(y1 * 16 + x1); [INFO] [stdout] 154 + flip_row.push(Flip::None) [INFO] [stdout] 155 + } [INFO] [stdout] 156 + palettes.push(pal_row); [INFO] [stdout] 157 + tiles.push(tile_row); [INFO] [stdout] 158 + flips.push(flip_row); [INFO] [stdout] 159 + } [INFO] [stdout] 160 + let dst_selection = TileBlock { [INFO] [stdout] 161 + size: (self.tile_block.size.0, self.tile_block.size.1), [INFO] [stdout] 162 + palettes, [INFO] [stdout] 163 + tiles, [INFO] [stdout] 164 + flips, [INFO] [stdout] 165 + }; [INFO] [stdout] 166 + return ( [INFO] [stdout] 167 + canvas::event::Status::Captured, [INFO] [stdout] 168 + Some(Message::MovingTilesProgress { [INFO] [stdout] 169 + src_selection: self.tile_block.clone(), [INFO] [stdout] 170 + dst_selection, [INFO] [stdout] 171 + check_reversible: true, [INFO] [stdout] 172 + }), [INFO] [stdout] 173 + ); [INFO] [stdout] 174 + } [INFO] [stdout] 175 + _ => {} [INFO] [stdout] 176 + } [INFO] [stdout] 177 + }; [INFO] [stdout] 178 + } [INFO] [stdout] 179 + mouse::Event::ButtonReleased(mouse::Button::Left | mouse::Button::Right) => { [INFO] [stdout] 180 + let state0 = *state; [INFO] [stdout] 181 + state.action = InternalStateAction::None; [INFO] [stdout] 182 + if state0.action == InternalStateAction::Selecting { [INFO] [stdout] 183 + let coords = if let Some(p) = cursor.position() { [INFO] [stdout] 184 + clamped_position_in( [INFO] [stdout] 185 + p, [INFO] [stdout] 186 + bounds, [INFO] [stdout] 187 + self.palette.tiles.len() / 16, [INFO] [stdout] 188 + self.pixel_size, [INFO] [stdout] 189 + ) [INFO] [stdout] 190 + } else if let Some(c) = self.end_coords { [INFO] [stdout] 191 + Point::new(c.0, c.1) [INFO] [stdout] 192 + } else { [INFO] [stdout] 193 + return (canvas::event::Status::Ignored, None); [INFO] [stdout] 194 + }; [INFO] [stdout] 195 + return ( [INFO] [stdout] 196 + canvas::event::Status::Captured, [INFO] [stdout] 197 + Some(Message::EndTileSelection(coords)), [INFO] [stdout] 198 + ); [INFO] [stdout] 199 + } [INFO] [stdout] 200 + } [INFO] [stdout] 201 + mouse::Event::CursorMoved { .. } => match state.action { [INFO] [stdout] 202 + InternalStateAction::None => {} [INFO] [stdout] 203 + InternalStateAction::Selecting => { [INFO] [stdout] 204 + if let Some(p) = cursor.position() { [INFO] [stdout] 205 + return ( [INFO] [stdout] 206 + canvas::event::Status::Captured, [INFO] [stdout] 207 + Some(Message::ProgressTileSelection(clamped_position_in( [INFO] [stdout] 208 + p, [INFO] [stdout] 209 + bounds, [INFO] [stdout] 210 + self.palette.tiles.len() / 16, [INFO] [stdout] 211 + self.pixel_size, [INFO] [stdout] 212 + ))), [INFO] [stdout] 213 + ); [INFO] [stdout] 214 + } [INFO] [stdout] 215 + } [INFO] [stdout] 216 + InternalStateAction::Brushing => { [INFO] [stdout] 217 + if let Some(p) = cursor.position() { [INFO] [stdout] 218 + let coords = clamped_position_in( [INFO] [stdout] 219 + p, [INFO] [stdout] 220 + bounds, [INFO] [stdout] 221 + self.palette.tiles.len() / 16, [INFO] [stdout] 222 + self.pixel_size, [INFO] [stdout] 223 + ); [INFO] [stdout] 224 + return ( [INFO] [stdout] 225 + canvas::event::Status::Captured, [INFO] [stdout] 226 + Some(Message::TilesetBrush { [INFO] [stdout] 227 + palette_id: self.palette.id, [INFO] [stdout] 228 + coords, [INFO] [stdout] 229 + selected_gfx: self.selected_gfx.clone(), [INFO] [stdout] 230 + tile_block: if self.brush_graphics_only { [INFO] [stdout] 231 + None [INFO] [stdout] 232 + } else { [INFO] [stdout] 233 + Some(self.tile_block.clone()) [INFO] [stdout] 234 + }, [INFO] [stdout] 235 + }), [INFO] [stdout] 236 + ); [INFO] [stdout] 237 + } [INFO] [stdout] 238 + } [INFO] [stdout] 239 + }, [INFO] [stdout] 240 + _ => {} [INFO] [stdout] 241 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/view/tiles.rs:268:24 [INFO] [stdout] | [INFO] [stdout] 268 | let num_rows = (tiles.len() + num_cols - 1) / num_cols; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `tiles.len().div_ceil(num_cols)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/view/tiles.rs:308:52 [INFO] [stdout] | [INFO] [stdout] 308 | width: num_cols as f32 * 8.0 * (pixel_size as f32), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `pixel_size` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/view/tiles.rs:309:53 [INFO] [stdout] | [INFO] [stdout] 309 | height: num_rows as f32 * 8.0 * (pixel_size as f32), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `pixel_size` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/view/tiles.rs:412:20 [INFO] [stdout] | [INFO] [stdout] 412 | let num_rows = (state.palettes[state.palette_idx].tiles.len() + num_cols - 1) / num_cols; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `state.palettes[state.palette_idx].tiles.len().div_ceil(num_cols)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/view.rs:194:37 [INFO] [stdout] | [INFO] [stdout] 194 | rename_palette_view(&state, name), [INFO] [stdout] | ^^^^^^ help: change this to: `state` [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: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view.rs:105:26 [INFO] [stdout] | [INFO] [stdout] 105 | pub fn help_view(_state: &EditorState) -> Element { [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] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 105 | pub fn help_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view.rs:146:37 [INFO] [stdout] | [INFO] [stdout] 146 | pub fn rebuild_project_view(_state: &EditorState) -> Element { [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] 146 | pub fn rebuild_project_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view.rs:156:37 [INFO] [stdout] | [INFO] [stdout] 156 | pub fn modified_reload_view(_state: &EditorState) -> Element { [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] 156 | pub fn modified_reload_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view.rs:247:20 [INFO] [stdout] | [INFO] [stdout] 247 | pub fn view(state: &EditorState) -> Element { [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] 247 | pub fn view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:568:30 [INFO] [stdout] | [INFO] [stdout] 568 | pub fn area_grid_view(state: &EditorState, position: AreaPosition) -> Element { [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] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 568 | pub fn area_grid_view(state: &EditorState, position: AreaPosition) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:645:34 [INFO] [stdout] | [INFO] [stdout] 645 | pub fn main_area_controls(state: &EditorState) -> Element { [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] 645 | pub fn main_area_controls(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:680:34 [INFO] [stdout] | [INFO] [stdout] 680 | pub fn side_area_controls(state: &EditorState) -> Element { [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] 680 | pub fn side_area_controls(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:703:28 [INFO] [stdout] | [INFO] [stdout] 703 | pub fn add_area_view(name: &String, size: (u8, u8)) -> Element { [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] 703 | pub fn add_area_view(name: &String, size: (u8, u8)) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:807:32 [INFO] [stdout] | [INFO] [stdout] 807 | pub fn delete_area_view(state: &EditorState) -> Element { [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] 807 | pub fn delete_area_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:826:29 [INFO] [stdout] | [INFO] [stdout] 826 | pub fn add_theme_view(name: &String) -> Element { [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] 826 | pub fn add_theme_view(name: &String) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/area.rs:885:33 [INFO] [stdout] | [INFO] [stdout] 885 | pub fn delete_theme_view(state: &EditorState) -> Element { [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] 885 | pub fn delete_theme_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/graphics.rs:174:29 [INFO] [stdout] | [INFO] [stdout] 174 | pub fn graphics_view(state: &EditorState) -> Element { [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] 174 | pub fn graphics_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/palette.rs:140:37 [INFO] [stdout] | [INFO] [stdout] 140 | pub fn selected_palette_view(state: &EditorState) -> Element { [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] 140 | pub fn selected_palette_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/palette.rs:216:31 [INFO] [stdout] | [INFO] [stdout] 216 | pub fn add_palette_view(name: &String, id: PaletteId) -> Element { [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] 216 | pub fn add_palette_view(name: &String, id: PaletteId) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/palette.rs:292:35 [INFO] [stdout] | [INFO] [stdout] 292 | pub fn delete_palette_view(state: &EditorState) -> Element { [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] 292 | pub fn delete_palette_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/palette.rs:314:34 [INFO] [stdout] | [INFO] [stdout] 314 | pub fn used_palettes_view(state: &EditorState) -> Element { [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] 314 | pub fn used_palettes_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/settings.rs:16:29 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn settings_view(state: &EditorState) -> Element { [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] 16 | pub fn settings_view(state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/settings.rs:83:40 [INFO] [stdout] | [INFO] [stdout] 83 | pub fn import_rom_confirm_view(_state: &EditorState) -> Element { [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] 83 | pub fn import_rom_confirm_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/settings.rs:107:41 [INFO] [stdout] | [INFO] [stdout] 107 | pub fn import_rom_progress_view(_state: &EditorState) -> Element { [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] 107 | pub fn import_rom_progress_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/tiles.rs:410:25 [INFO] [stdout] | [INFO] [stdout] 410 | pub fn tile_view(state: &EditorState, size: Size, reserved_height: f32) -> Element { [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] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 410 | pub fn tile_view(state: &EditorState, size: Size, reserved_height: f32) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/view/tiles.rs:497:43 [INFO] [stdout] | [INFO] [stdout] 497 | pub fn moving_tiles_progress_view(_state: &EditorState) -> Element { [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] 497 | pub fn moving_tiles_progress_view(_state: &EditorState) -> Element<'_, Message> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 01s [INFO] running `Command { std: "docker" "inspect" "cb3195eeb843a45dcae08f7fd81d4f90d2649edaf670811e96c77ca68f486c99", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "cb3195eeb843a45dcae08f7fd81d4f90d2649edaf670811e96c77ca68f486c99", kill_on_drop: false }` [INFO] [stdout] cb3195eeb843a45dcae08f7fd81d4f90d2649edaf670811e96c77ca68f486c99