[INFO] cloning repository https://github.com/johnskiller/xg-editors
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/johnskiller/xg-editors" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjohnskiller%2Fxg-editors", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjohnskiller%2Fxg-editors'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] bd5959c32c8f02ec7015a919e37902a983187b88
[INFO] checking johnskiller/xg-editors against 3154cc1a3e6424e44f438a95007d043ed5ceaaf6 for pr-133502-30
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjohnskiller%2Fxg-editors" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/johnskiller/xg-editors
[INFO] finished tweaking git repo https://github.com/johnskiller/xg-editors
[INFO] tweaked toml for git repo https://github.com/johnskiller/xg-editors written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/johnskiller/xg-editors on toolchain 3154cc1a3e6424e44f438a95007d043ed5ceaaf6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/johnskiller/xg-editors 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" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] fac9da1f8a65002a449f4ef74e7f35a4b10775d89bf81e05ccb6245fca10f811
[INFO] running `Command { std: "docker" "start" "fac9da1f8a65002a449f4ef74e7f35a4b10775d89bf81e05ccb6245fca10f811", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "fac9da1f8a65002a449f4ef74e7f35a4b10775d89bf81e05ccb6245fca10f811", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "fac9da1f8a65002a449f4ef74e7f35a4b10775d89bf81e05ccb6245fca10f811" "/opt/rustwide/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "fac9da1f8a65002a449f4ef74e7f35a4b10775d89bf81e05ccb6245fca10f811", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "fac9da1f8a65002a449f4ef74e7f35a4b10775d89bf81e05ccb6245fca10f811" "/opt/rustwide/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling find-msvc-tools v0.1.10
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling wayland-scanner v0.31.11
[INFO] [stderr]    Compiling enumflags2_derive v0.7.12
[INFO] [stderr]    Compiling zvariant_utils v2.1.0
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling static_assertions v1.1.0
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking async-channel v2.5.0
[INFO] [stderr]    Compiling nix v0.29.0
[INFO] [stderr]    Compiling futures-macro v0.3.33
[INFO] [stderr]     Checking futures-task v0.3.33
[INFO] [stderr]     Checking futures-sink v0.3.33
[INFO] [stderr]     Checking sha1 v0.10.7
[INFO] [stderr]     Checking async-io v2.6.0
[INFO] [stderr]     Checking async-executor v1.14.0
[INFO] [stderr]     Checking async-broadcast v0.7.2
[INFO] [stderr]     Checking ab_glyph v0.2.32
[INFO] [stderr]    Compiling gl_generator v0.14.0
[INFO] [stderr]    Compiling zvariant_derive v4.2.0
[INFO] [stderr]    Compiling zbus_macros v4.4.0
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]    Compiling cc v1.4.2
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking memmap2 v0.9.11
[INFO] [stderr]     Checking ahash v0.8.12
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]     Checking blocking v1.6.2
[INFO] [stderr]     Checking calloop v0.13.0
[INFO] [stderr]     Checking accesskit v0.16.3
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking x11rb v0.13.2
[INFO] [stderr]     Checking async-fs v2.2.0
[INFO] [stderr]     Checking futures-util v0.3.33
[INFO] [stderr]     Checking immutable-chunkmap v2.1.3
[INFO] [stderr]    Compiling winit v0.30.13
[INFO] [stderr]     Checking rand v0.8.7
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]    Compiling glutin_egl_sys v0.7.1
[INFO] [stderr]    Compiling glutin_glx_sys v0.6.1
[INFO] [stderr]     Checking xkbcommon-dl v0.4.2
[INFO] [stderr]     Checking calloop v0.14.4
[INFO] [stderr]     Checking accesskit_consumer v0.24.3
[INFO] [stderr]     Checking dpi v0.1.2
[INFO] [stderr]    Compiling glutin v0.32.3
[INFO] [stderr]     Checking flate2 v1.1.9
[INFO] [stderr]     Checking zerovec v0.11.6
[INFO] [stderr]    Compiling glutin-winit v0.5.0
[INFO] [stderr]     Checking moxcms v0.8.1
[INFO] [stderr]     Checking glow v0.14.2
[INFO] [stderr]     Checking web-time v1.1.0
[INFO] [stderr]     Checking png v0.18.1
[INFO] [stderr]    Compiling wayland-backend v0.3.16
[INFO] [stderr]     Checking potential_utf v0.1.5
[INFO] [stderr]     Checking arboard v3.6.1
[INFO] [stderr]     Checking wayland-client v0.31.15
[INFO] [stderr]     Checking wayland-csd-frame v0.3.0
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling bytemuck_derive v1.12.0
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling async-trait v0.1.92
[INFO] [stderr]    Compiling serde_repr v0.1.21
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]     Checking bytemuck v1.25.2
[INFO] [stderr]     Checking tinystr v0.8.3
[INFO] [stderr]     Checking zerotrie v0.2.4
[INFO] [stderr]     Checking icu_collections v2.2.0
[INFO] [stderr]     Checking icu_locale_core v2.2.0
[INFO] [stderr]     Checking wayland-protocols v0.32.13
[INFO] [stderr]     Checking wayland-cursor v0.31.14
[INFO] [stderr]     Checking calloop-wayland-source v0.3.0
[INFO] [stderr]     Checking calloop-wayland-source v0.4.1
[INFO] [stderr]     Checking tiny-skia-path v0.11.4
[INFO] [stderr]     Checking emath v0.29.1
[INFO] [stderr]     Checking thiserror v2.0.20
[INFO] [stderr]     Checking ecolor v0.29.1
[INFO] [stderr]     Checking epaint v0.29.1
[INFO] [stderr]     Checking tiny-skia v0.11.4
[INFO] [stderr]     Checking icu_provider v2.2.0
[INFO] [stderr]     Checking image v0.25.10
[INFO] [stderr]     Checking icu_properties v2.2.0
[INFO] [stderr]     Checking icu_normalizer v2.2.0
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]     Checking egui v0.29.1
[INFO] [stderr]    Compiling enumflags2 v0.7.12
[INFO] [stderr]    Compiling quick-xml v0.30.0
[INFO] [stderr]    Compiling zvariant v4.2.0
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking webbrowser v1.2.4
[INFO] [stderr]     Checking egui_glow v0.29.1
[INFO] [stderr]     Checking zbus_names v3.0.0
[INFO] [stderr]     Checking zbus_xml v4.0.0
[INFO] [stderr]     Checking zbus v4.4.0
[INFO] [stderr]     Checking zbus-lockstep v0.4.4
[INFO] [stderr]     Checking wayland-protocols-wlr v0.3.12
[INFO] [stderr]     Checking wayland-protocols-plasma v0.3.12
[INFO] [stderr]     Checking wayland-protocols-misc v0.3.12
[INFO] [stderr]     Checking wayland-protocols-experimental v20250721.0.1
[INFO] [stderr]    Compiling zbus-lockstep-macros v0.4.4
[INFO] [stderr]     Checking smithay-client-toolkit v0.19.2
[INFO] [stderr]     Checking smithay-client-toolkit v0.20.0
[INFO] [stderr]     Checking sctk-adwaita v0.10.1
[INFO] [stderr]     Checking smithay-clipboard v0.7.3
[INFO] [stderr]     Checking atspi-common v0.6.0
[INFO] [stderr]     Checking atspi-proxies v0.6.0
[INFO] [stderr]     Checking accesskit_atspi_common v0.9.3
[INFO] [stderr]     Checking atspi-connection v0.6.0
[INFO] [stderr]     Checking atspi v0.22.0
[INFO] [stderr]     Checking accesskit_unix v0.12.3
[INFO] [stderr]     Checking accesskit_winit v0.22.4
[INFO] [stderr]     Checking egui-winit v0.29.1
[INFO] [stderr]     Checking eframe v0.29.1
[INFO] [stderr]     Checking xg-editor v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/lib.rs:52:1
[INFO] [stdout]    |
[INFO] [stdout] 52 | / /// 全局状态日志缓冲 (跨模块/静态上下文记录, UI 每帧 drain 进 status_log).
[INFO] [stdout] 53 | | /// 用于: midi_wasm::send_to 无法访问 App 时记录 [tx:...] 调试行.
[INFO] [stdout]    | |_----------------------------------------------------------------^
[INFO] [stdout]    |   |
[INFO] [stdout]    |   rustdoc does not generate documentation for macro invocations
[INFO] [stdout]    |
[INFO] [stdout]    = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/lib.rs:59:1
[INFO] [stdout]    |
[INFO] [stdout] 59 | /// 全局 MIDI 事务编号 (发送/接收统一时间线, 调试用). 跨模块自增.
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ rustdoc does not generate documentation for macro invocations
[INFO] [stdout]    |
[INFO] [stdout]    = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/lcd.rs:475:23
[INFO] [stdout]     |
[INFO] [stdout] 475 |             let idx = (y as usize * w as usize + x as usize);
[INFO] [stdout]     |                       ^                                    ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 475 -             let idx = (y as usize * w as usize + x as usize);
[INFO] [stdout] 475 +             let idx = y as usize * w as usize + x as usize;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Rect`
[INFO] [stdout]   --> src/ms_button.rs:13:45
[INFO] [stdout]    |
[INFO] [stdout] 13 | use eframe::egui::{Align2, Color32, FontId, Rect, Response, Sense, Ui, Vec2};
[INFO] [stdout]    |                                             ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::midi_wasm`
[INFO] [stdout]  --> src/playback.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::midi_wasm;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::BTreeSet`
[INFO] [stdout]   --> src/playback.rs:90:9
[INFO] [stdout]    |
[INFO] [stdout] 90 |     use std::collections::BTreeSet;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::midi_topology`
[INFO] [stdout]  --> src/panels.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::midi_topology;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::midi_wasm`
[INFO] [stdout]  --> src/panels.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::midi_wasm;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::CHANNEL_ROW_H`
[INFO] [stdout]  --> src/panels.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::CHANNEL_ROW_H;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Align2`
[INFO] [stdout]  --> src/transport.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 | use eframe::egui::{Align2, Color32, Pos2, Rect, Response, Sense, Shape, Stroke, Ui, Vec2, Widget};
[INFO] [stdout]   |                    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/lib.rs:52:1
[INFO] [stdout]    |
[INFO] [stdout] 52 | / /// 全局状态日志缓冲 (跨模块/静态上下文记录, UI 每帧 drain 进 status_log).
[INFO] [stdout] 53 | | /// 用于: midi_wasm::send_to 无法访问 App 时记录 [tx:...] 调试行.
[INFO] [stdout]    | |_----------------------------------------------------------------^
[INFO] [stdout]    |   |
[INFO] [stdout]    |   rustdoc does not generate documentation for macro invocations
[INFO] [stdout]    |
[INFO] [stdout]    = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/lib.rs:59:1
[INFO] [stdout]    |
[INFO] [stdout] 59 | /// 全局 MIDI 事务编号 (发送/接收统一时间线, 调试用). 跨模块自增.
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ rustdoc does not generate documentation for macro invocations
[INFO] [stdout]    |
[INFO] [stdout]    = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/lcd.rs:475:23
[INFO] [stdout]     |
[INFO] [stdout] 475 |             let idx = (y as usize * w as usize + x as usize);
[INFO] [stdout]     |                       ^                                    ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 475 -             let idx = (y as usize * w as usize + x as usize);
[INFO] [stdout] 475 +             let idx = y as usize * w as usize + x as usize;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Rect`
[INFO] [stdout]   --> src/ms_button.rs:13:45
[INFO] [stdout]    |
[INFO] [stdout] 13 | use eframe::egui::{Align2, Color32, FontId, Rect, Response, Sense, Ui, Vec2};
[INFO] [stdout]    |                                             ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::midi_wasm`
[INFO] [stdout]  --> src/playback.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::midi_wasm;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::BTreeSet`
[INFO] [stdout]   --> src/playback.rs:90:9
[INFO] [stdout]    |
[INFO] [stdout] 90 |     use std::collections::BTreeSet;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::midi_topology`
[INFO] [stdout]  --> src/panels.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::midi_topology;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::midi_wasm`
[INFO] [stdout]  --> src/panels.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::midi_wasm;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::CHANNEL_ROW_H`
[INFO] [stdout]  --> src/panels.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::CHANNEL_ROW_H;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Align2`
[INFO] [stdout]  --> src/transport.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 | use eframe::egui::{Align2, Color32, Pos2, Rect, Response, Sense, Shape, Stroke, Ui, Vec2, Widget};
[INFO] [stdout]   |                    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/ms_button.rs:90:56
[INFO] [stdout]    |
[INFO] [stdout] 90 |             p.rect_stroke(rect, 3.0, egui::Stroke::new(1.0, Color32::from_rgba_unmultiplied(255, 255, 255, 90)));
[INFO] [stdout]    |                                                        ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout]    = note: `#[warn(float_literal_f32_fallback)]` (part of `#[warn(future_incompatible)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:202:63
[INFO] [stdout]     |
[INFO] [stdout] 202 |                     p.rect_stroke(row, 1.0, egui::Stroke::new(1.0, egui::Color32::from_gray(90)));
[INFO] [stdout]     |                                                               ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:256:71
[INFO] [stdout]     |
[INFO] [stdout] 256 |                     p.hline(time_rect.x_range(), y, egui::Stroke::new(1.0, egui::Color32::from_gray(28)));
[INFO] [stdout]     |                                                                       ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:269:51
[INFO] [stdout]     |
[INFO] [stdout] 269 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgba_unmultiplied(0x73, 0x84, 0x8f, 80)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:283:55
[INFO] [stdout]     |
[INFO] [stdout] 283 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgba_unmultiplied(0x2f, 0x38, 0x42, 50)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:327:77
[INFO] [stdout]     |
[INFO] [stdout] 327 | ...                   p.rect_stroke(note_rect, 2.0, egui::Stroke::new(2.0, egui::Color32::from_rgb(0xff, 0xc6, 0x4d)));
[INFO] [stdout]     |                                                                       ^^^ help: explicitly specify the type as `f32`: `2.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:343:76
[INFO] [stdout]     |
[INFO] [stdout] 343 |                         p.vline(px, time_rect.y_range(), egui::Stroke::new(2.0, egui::Color32::from_rgb(0xff, 0xd7, 0x00)));
[INFO] [stdout]     |                                                                            ^^^ help: explicitly specify the type as `f32`: `2.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:100:47
[INFO] [stdout]     |
[INFO] [stdout] 100 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgb(0x2a, 0x3a, 0x4a)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:178:43
[INFO] [stdout]     |
[INFO] [stdout] 178 |                         egui::Stroke::new(1.0, egui::Color32::from_gray(35)),
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:232:39
[INFO] [stdout]     |
[INFO] [stdout] 232 |                     egui::Stroke::new(1.0, egui::Color32::from_rgb(0x2a, 0x3a, 0x4a)),
[INFO] [stdout]     |                                       ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:246:43
[INFO] [stdout]     |
[INFO] [stdout] 246 |                         egui::Stroke::new(1.0, egui::Color32::from_gray(70)),
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:283:43
[INFO] [stdout]     |
[INFO] [stdout] 283 |                         egui::Stroke::new(1.0, egui::Color32::from_gray(40)),
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:292:47
[INFO] [stdout]     |
[INFO] [stdout] 292 | ...                   egui::Stroke::new(1.0, egui::Color32::from_gray(70)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:394:43
[INFO] [stdout]     |
[INFO] [stdout] 394 |                         egui::Stroke::new(1.0, egui::Color32::from_gray(45)),
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:222:47
[INFO] [stdout]     |
[INFO] [stdout] 222 | ...                   egui::Stroke::new(1.0, egui::Color32::from_gray(30)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:293:47
[INFO] [stdout]     |
[INFO] [stdout] 293 | ...                   egui::Stroke::new(1.0, egui::Color32::from_gray(45)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:323:51
[INFO] [stdout]     |
[INFO] [stdout] 323 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgb(gr, rr, bb)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:338:51
[INFO] [stdout]     |
[INFO] [stdout] 338 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgb(gr, rr, bb)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:353:92
[INFO] [stdout]     |
[INFO] [stdout] 353 | ...content_bottom), egui::Stroke::new(2.0, egui::Color32::from_rgb(0xff, 0xd0, 0x40)));
[INFO] [stdout]     |                                       ^^^ help: explicitly specify the type as `f32`: `2.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:365:51
[INFO] [stdout]     |
[INFO] [stdout] 365 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgba_unmultiplied(0x50, 0x70, 0x80, 60)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/topbar.rs:21:35
[INFO] [stdout]    |
[INFO] [stdout] 21 |                 egui::Stroke::new(1.0, egui::Color32::from_rgb(0x2b, 0x40, 0x5e)),
[INFO] [stdout]    |                                   ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/transport.rs:129:33
[INFO] [stdout]     |
[INFO] [stdout] 129 |                     Stroke::new(1.5, Color32::from_rgb(0xff, 0x5f, 0x56)),
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.5_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/lib.rs:123:65
[INFO] [stdout]     |
[INFO] [stdout] 123 |             p.vline(bx, ruler_rect.y_range(), egui::Stroke::new(1.0, egui::Color32::from_rgb(0x66, 0x88, 0x99)));
[INFO] [stdout]     |                                                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/lib.rs:142:78
[INFO] [stdout]     |
[INFO] [stdout] 142 |                         p.vline(bbx, ruler_rect.y_range(), egui::Stroke::new(1.0, egui::Color32::from_rgb(0x3a, 0x4a, 0x58)));
[INFO] [stdout]     |                                                                              ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/lib.rs:151:74
[INFO] [stdout]     |
[INFO] [stdout] 151 |     p.hline(ruler_rect.y_range(), ruler_rect.bottom(), egui::Stroke::new(1.0, egui::Color32::from_gray(80)));
[INFO] [stdout]     |                                                                          ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/ms_button.rs:90:56
[INFO] [stdout]    |
[INFO] [stdout] 90 |             p.rect_stroke(rect, 3.0, egui::Stroke::new(1.0, Color32::from_rgba_unmultiplied(255, 255, 255, 90)));
[INFO] [stdout]    |                                                        ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout]    = note: `#[warn(float_literal_f32_fallback)]` (part of `#[warn(future_incompatible)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:202:63
[INFO] [stdout]     |
[INFO] [stdout] 202 |                     p.rect_stroke(row, 1.0, egui::Stroke::new(1.0, egui::Color32::from_gray(90)));
[INFO] [stdout]     |                                                               ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:256:71
[INFO] [stdout]     |
[INFO] [stdout] 256 |                     p.hline(time_rect.x_range(), y, egui::Stroke::new(1.0, egui::Color32::from_gray(28)));
[INFO] [stdout]     |                                                                       ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:269:51
[INFO] [stdout]     |
[INFO] [stdout] 269 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgba_unmultiplied(0x73, 0x84, 0x8f, 80)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:283:55
[INFO] [stdout]     |
[INFO] [stdout] 283 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgba_unmultiplied(0x2f, 0x38, 0x42, 50)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:327:77
[INFO] [stdout]     |
[INFO] [stdout] 327 | ...                   p.rect_stroke(note_rect, 2.0, egui::Stroke::new(2.0, egui::Color32::from_rgb(0xff, 0xc6, 0x4d)));
[INFO] [stdout]     |                                                                       ^^^ help: explicitly specify the type as `f32`: `2.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/piano_roll.rs:343:76
[INFO] [stdout]     |
[INFO] [stdout] 343 |                         p.vline(px, time_rect.y_range(), egui::Stroke::new(2.0, egui::Color32::from_rgb(0xff, 0xd7, 0x00)));
[INFO] [stdout]     |                                                                            ^^^ help: explicitly specify the type as `f32`: `2.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `voice_col`
[INFO] [stdout]    --> src/lcd.rs:147:9
[INFO] [stdout]     |
[INFO] [stdout] 147 |     let voice_col: i32 = if is_32 { 0 } else if port_b { 0 } else { 45 };
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_voice_col`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:100:47
[INFO] [stdout]     |
[INFO] [stdout] 100 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgb(0x2a, 0x3a, 0x4a)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:178:43
[INFO] [stdout]     |
[INFO] [stdout] 178 |                         egui::Stroke::new(1.0, egui::Color32::from_gray(35)),
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:232:39
[INFO] [stdout]     |
[INFO] [stdout] 232 |                     egui::Stroke::new(1.0, egui::Color32::from_rgb(0x2a, 0x3a, 0x4a)),
[INFO] [stdout]     |                                       ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:246:43
[INFO] [stdout]     |
[INFO] [stdout] 246 |                         egui::Stroke::new(1.0, egui::Color32::from_gray(70)),
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:283:43
[INFO] [stdout]     |
[INFO] [stdout] 283 |                         egui::Stroke::new(1.0, egui::Color32::from_gray(40)),
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:292:47
[INFO] [stdout]     |
[INFO] [stdout] 292 | ...                   egui::Stroke::new(1.0, egui::Color32::from_gray(70)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/play_view.rs:394:43
[INFO] [stdout]     |
[INFO] [stdout] 394 |                         egui::Stroke::new(1.0, egui::Color32::from_gray(45)),
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:222:47
[INFO] [stdout]     |
[INFO] [stdout] 222 | ...                   egui::Stroke::new(1.0, egui::Color32::from_gray(30)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:293:47
[INFO] [stdout]     |
[INFO] [stdout] 293 | ...                   egui::Stroke::new(1.0, egui::Color32::from_gray(45)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:323:51
[INFO] [stdout]     |
[INFO] [stdout] 323 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgb(gr, rr, bb)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:338:51
[INFO] [stdout]     |
[INFO] [stdout] 338 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgb(gr, rr, bb)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:353:92
[INFO] [stdout]     |
[INFO] [stdout] 353 | ...content_bottom), egui::Stroke::new(2.0, egui::Color32::from_rgb(0xff, 0xd0, 0x40)));
[INFO] [stdout]     |                                       ^^^ help: explicitly specify the type as `f32`: `2.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/panels.rs:365:51
[INFO] [stdout]     |
[INFO] [stdout] 365 | ...                   egui::Stroke::new(1.0, egui::Color32::from_rgba_unmultiplied(0x50, 0x70, 0x80, 60)),
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/topbar.rs:21:35
[INFO] [stdout]    |
[INFO] [stdout] 21 |                 egui::Stroke::new(1.0, egui::Color32::from_rgb(0x2b, 0x40, 0x5e)),
[INFO] [stdout]    |                                   ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ruler_time_rect`
[INFO] [stdout]    --> src/piano_roll.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 118 |         let ruler_time_rect = egui::Rect::from_min_max(
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ruler_time_rect`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `evt_cnt`
[INFO] [stdout]    --> src/smf.rs:161:9
[INFO] [stdout]     |
[INFO] [stdout] 161 |     let evt_cnt: u32 = 0;
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_evt_cnt`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/smf.rs:380:9
[INFO] [stdout]     |
[INFO] [stdout] 380 |     let mut active_start: Vec<Vec<u64>> = vec![Vec::new(); 256]; // channel*16+pitch 简化: 用 key
[INFO] [stdout]     |         ----^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `active_start`
[INFO] [stdout]    --> src/smf.rs:380:9
[INFO] [stdout]     |
[INFO] [stdout] 380 |     let mut active_start: Vec<Vec<u64>> = vec![Vec::new(); 256]; // channel*16+pitch 简化: 用 key
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_active_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/transport.rs:129:33
[INFO] [stdout]     |
[INFO] [stdout] 129 |                     Stroke::new(1.5, Color32::from_rgb(0xff, 0x5f, 0x56)),
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.5_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/sysex.rs:101:9
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let mut addr = base_addr;
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/lib.rs:123:65
[INFO] [stdout]     |
[INFO] [stdout] 123 |             p.vline(bx, ruler_rect.y_range(), egui::Stroke::new(1.0, egui::Color32::from_rgb(0x66, 0x88, 0x99)));
[INFO] [stdout]     |                                                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/lib.rs:142:78
[INFO] [stdout]     |
[INFO] [stdout] 142 |                         p.vline(bbx, ruler_rect.y_range(), egui::Stroke::new(1.0, egui::Color32::from_rgb(0x3a, 0x4a, 0x58)));
[INFO] [stdout]     |                                                                              ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/lib.rs:151:74
[INFO] [stdout]     |
[INFO] [stdout] 151 |     p.hline(ruler_rect.y_range(), ruler_rect.bottom(), egui::Stroke::new(1.0, egui::Color32::from_gray(80)));
[INFO] [stdout]     |                                                                          ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lsb`
[INFO] [stdout]    --> src/playback.rs:205:35
[INFO] [stdout]     |
[INFO] [stdout] 205 |                 (true, Some((msb, lsb))) if msb == 127 => v.program
[INFO] [stdout]     |                                   ^^^ help: if this is intentional, prefix it with an underscore: `_lsb`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ch`
[INFO] [stdout]    --> src/playback.rs:715:37
[INFO] [stdout]     |
[INFO] [stdout] 715 |     pub fn sound_off_channel(&self, ch: u8) {
[INFO] [stdout]     |                                     ^^ help: if this is intentional, prefix it with an underscore: `_ch`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ctx`
[INFO] [stdout]   --> src/panels.rs:15:13
[INFO] [stdout]    |
[INFO] [stdout] 15 |         let ctx = ui.ctx().clone();
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_ctx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `*self.midi_connected` is never read
[INFO] [stdout]    --> src/topbar.rs:192:25
[INFO] [stdout]     |
[INFO] [stdout] 192 |                         self.midi_connected = false;
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 211 |                             self.midi_connected = true;
[INFO] [stdout]     |                             -------------------------- `*self.midi_connected` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `*self.midi_send_status` is never read
[INFO] [stdout]    --> src/topbar.rs:364:21
[INFO] [stdout]     |
[INFO] [stdout] 364 |                     self.midi_send_status = None;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dev`
[INFO] [stdout]     --> src/lib.rs:2462:49
[INFO] [stdout]      |
[INFO] [stdout] 2462 | ...                   let dev = self.midi_devices[self.selected_midi.unwrap()].clone();
[INFO] [stdout]      |                           ^^^ help: if this is intentional, prefix it with an underscore: `_dev`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `VOICE_BANK` is never used
[INFO] [stdout]    --> src/lib.rs:239:12
[INFO] [stdout]     |
[INFO] [stdout] 239 | static mut VOICE_BANK: Option<std::sync::Mutex<VoiceBank>> = None;
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `KEY` is never used
[INFO] [stdout]  --> src/persist.rs:6:7
[INFO] [stdout]   |
[INFO] [stdout] 6 | const KEY: &str = "xg-editor-state-v1";
[INFO] [stdout]   |       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `notes_active_at` is never used
[INFO] [stdout]   --> src/playback.rs:89:15
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub(crate) fn notes_active_at(pt: u64, play_events: &[PlayEvent]) -> std::collections::BTreeSet<(u8, u8)> {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `OX` should have a snake case name
[INFO] [stdout]    --> src/lcd.rs:282:9
[INFO] [stdout]     |
[INFO] [stdout] 282 |     let OX = 16i32; // canvas 偏移
[INFO] [stdout]     |         ^^ help: convert the identifier to snake case (notice the capitalization): `ox`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `OY` should have a snake case name
[INFO] [stdout]    --> src/lcd.rs:283:9
[INFO] [stdout]     |
[INFO] [stdout] 283 |     let OY = 12i32;
[INFO] [stdout]     |         ^^ help: convert the identifier to snake case (notice the capitalization): `oy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `voice_col`
[INFO] [stdout]    --> src/lcd.rs:147:9
[INFO] [stdout]     |
[INFO] [stdout] 147 |     let voice_col: i32 = if is_32 { 0 } else if port_b { 0 } else { 45 };
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_voice_col`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/lcd.rs:762:13
[INFO] [stdout]     |
[INFO] [stdout] 762 |         let mut mm = render_to_matrix("DreamPno", 0, 1, &[], &[], 1);
[INFO] [stdout]     |             ----^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/lcd.rs:770:13
[INFO] [stdout]     |
[INFO] [stdout] 770 |         let mut mm = render_to_matrix("DreamPno", 0, 1, &[], &[], 1);
[INFO] [stdout]     |             ----^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ruler_time_rect`
[INFO] [stdout]    --> src/piano_roll.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 118 |         let ruler_time_rect = egui::Rect::from_min_max(
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ruler_time_rect`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `evt_cnt`
[INFO] [stdout]    --> src/smf.rs:161:9
[INFO] [stdout]     |
[INFO] [stdout] 161 |     let evt_cnt: u32 = 0;
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_evt_cnt`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/smf.rs:380:9
[INFO] [stdout]     |
[INFO] [stdout] 380 |     let mut active_start: Vec<Vec<u64>> = vec![Vec::new(); 256]; // channel*16+pitch 简化: 用 key
[INFO] [stdout]     |         ----^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `active_start`
[INFO] [stdout]    --> src/smf.rs:380:9
[INFO] [stdout]     |
[INFO] [stdout] 380 |     let mut active_start: Vec<Vec<u64>> = vec![Vec::new(); 256]; // channel*16+pitch 简化: 用 key
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_active_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/sysex.rs:101:9
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let mut addr = base_addr;
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lsb`
[INFO] [stdout]    --> src/playback.rs:205:35
[INFO] [stdout]     |
[INFO] [stdout] 205 |                 (true, Some((msb, lsb))) if msb == 127 => v.program
[INFO] [stdout]     |                                   ^^^ help: if this is intentional, prefix it with an underscore: `_lsb`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ch`
[INFO] [stdout]    --> src/playback.rs:715:37
[INFO] [stdout]     |
[INFO] [stdout] 715 |     pub fn sound_off_channel(&self, ch: u8) {
[INFO] [stdout]     |                                     ^^ help: if this is intentional, prefix it with an underscore: `_ch`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ctx`
[INFO] [stdout]   --> src/panels.rs:15:13
[INFO] [stdout]    |
[INFO] [stdout] 15 |         let ctx = ui.ctx().clone();
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_ctx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `*self.midi_connected` is never read
[INFO] [stdout]    --> src/topbar.rs:192:25
[INFO] [stdout]     |
[INFO] [stdout] 192 |                         self.midi_connected = false;
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 211 |                             self.midi_connected = true;
[INFO] [stdout]     |                             -------------------------- `*self.midi_connected` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `*self.midi_send_status` is never read
[INFO] [stdout]    --> src/topbar.rs:364:21
[INFO] [stdout]     |
[INFO] [stdout] 364 |                     self.midi_send_status = None;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dev`
[INFO] [stdout]     --> src/lib.rs:2462:49
[INFO] [stdout]      |
[INFO] [stdout] 2462 | ...                   let dev = self.midi_devices[self.selected_midi.unwrap()].clone();
[INFO] [stdout]      |                           ^^^ help: if this is intentional, prefix it with an underscore: `_dev`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/lib.rs:3167:13
[INFO] [stdout]      |
[INFO] [stdout] 3167 |         let mut app = XgApp::default();
[INFO] [stdout]      |             ----^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/lib.rs:4031:13
[INFO] [stdout]      |
[INFO] [stdout] 4031 |         let mut app = XgApp::default();
[INFO] [stdout]      |             ----^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]     --> src/lib.rs:4337:13
[INFO] [stdout]      |
[INFO] [stdout] 4337 |         let app = XgApp::default();
[INFO] [stdout]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_xg_voices_json` is never used
[INFO] [stdout]    --> src/data.rs:311:8
[INFO] [stdout]     |
[INFO] [stdout] 311 |     fn load_xg_voices_json() {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `KEY` is never used
[INFO] [stdout]  --> src/persist.rs:6:7
[INFO] [stdout]   |
[INFO] [stdout] 6 | const KEY: &str = "xg-editor-state-v1";
[INFO] [stdout]   |       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `OX` should have a snake case name
[INFO] [stdout]    --> src/lcd.rs:282:9
[INFO] [stdout]     |
[INFO] [stdout] 282 |     let OX = 16i32; // canvas 偏移
[INFO] [stdout]     |         ^^ help: convert the identifier to snake case (notice the capitalization): `ox`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `OY` should have a snake case name
[INFO] [stdout]    --> src/lcd.rs:283:9
[INFO] [stdout]     |
[INFO] [stdout] 283 |     let OY = 12i32;
[INFO] [stdout]     |         ^^ help: convert the identifier to snake case (notice the capitalization): `oy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 46.10s
[INFO] running `Command { std: "docker" "inspect" "fac9da1f8a65002a449f4ef74e7f35a4b10775d89bf81e05ccb6245fca10f811", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "fac9da1f8a65002a449f4ef74e7f35a4b10775d89bf81e05ccb6245fca10f811", kill_on_drop: false }`
[INFO] [stdout] fac9da1f8a65002a449f4ef74e7f35a4b10775d89bf81e05ccb6245fca10f811
