[INFO] cloning repository https://github.com/MrCHB1/AndromedaRust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/MrCHB1/AndromedaRust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMrCHB1%2FAndromedaRust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMrCHB1%2FAndromedaRust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 3b59b930cd7cfa1966ddcb2f6e54f9b980389613
[INFO] checking MrCHB1/AndromedaRust against master#a2db9280539229a3b8a084a09886670a57bc7e9c for pr-147185
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMrCHB1%2FAndromedaRust" "/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/MrCHB1/AndromedaRust
[INFO] finished tweaking git repo https://github.com/MrCHB1/AndromedaRust
[INFO] tweaked toml for git repo https://github.com/MrCHB1/AndromedaRust written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/MrCHB1/AndromedaRust on toolchain a2db9280539229a3b8a084a09886670a57bc7e9c
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+a2db9280539229a3b8a084a09886670a57bc7e9c" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/MrCHB1/AndromedaRust 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" "+a2db9280539229a3b8a084a09886670a57bc7e9c" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded bit_field v0.10.3
[INFO] [stderr]   Downloaded midir v0.10.2
[INFO] [stderr]   Downloaded rounded-div v0.1.3
[INFO] [stderr]   Downloaded lebe v0.5.3
[INFO] [stderr]   Downloaded avif-serialize v0.8.6
[INFO] [stderr]   Downloaded mime_guess2 v2.3.1
[INFO] [stderr]   Downloaded egui_glow v0.31.1
[INFO] [stderr]   Downloaded egui_extras v0.31.1
[INFO] [stderr]   Downloaded image-webp v0.2.4
[INFO] [stderr]   Downloaded eframe v0.31.1
[INFO] [stderr]   Downloaded imgref v1.12.0
[INFO] [stderr]   Downloaded rtrb v0.3.2
[INFO] [stderr]   Downloaded egui_double_slider v0.8.0
[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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+a2db9280539229a3b8a084a09886670a57bc7e9c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 5123f33ba2198e2071decd46aa958bcc1692e6ba68e8ab1bfe6c4ed4f3ce8e79
[INFO] running `Command { std: "docker" "start" "-a" "5123f33ba2198e2071decd46aa958bcc1692e6ba68e8ab1bfe6c4ed4f3ce8e79", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "5123f33ba2198e2071decd46aa958bcc1692e6ba68e8ab1bfe6c4ed4f3ce8e79", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5123f33ba2198e2071decd46aa958bcc1692e6ba68e8ab1bfe6c4ed4f3ce8e79", kill_on_drop: false }`
[INFO] [stdout] 5123f33ba2198e2071decd46aa958bcc1692e6ba68e8ab1bfe6c4ed4f3ce8e79
[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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+a2db9280539229a3b8a084a09886670a57bc7e9c" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] fe084803487dc96371bc003d656540a39a99d29acd66dd16d568b30a2e020c2e
[INFO] running `Command { std: "docker" "start" "-a" "fe084803487dc96371bc003d656540a39a99d29acd66dd16d568b30a2e020c2e", kill_on_drop: false }`
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling rustix v1.0.8
[INFO] [stderr]     Checking linux-raw-sys v0.9.4
[INFO] [stderr]    Compiling memchr v2.7.5
[INFO] [stderr]    Compiling winnow v0.7.13
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling indexmap v2.11.0
[INFO] [stderr]    Compiling enumflags2_derive v0.7.12
[INFO] [stderr]    Compiling zvariant_utils v2.1.0
[INFO] [stderr]     Checking concurrent-queue v2.5.0
[INFO] [stderr]     Checking libloading v0.8.8
[INFO] [stderr]    Compiling wayland-sys v0.31.7
[INFO] [stderr]    Compiling bytemuck_derive v1.10.1
[INFO] [stderr]     Checking form_urlencoded v1.2.2
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling wayland-backend v0.3.11
[INFO] [stderr]     Checking icu_normalizer v2.0.0
[INFO] [stderr]     Checking futures-lite v2.6.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking dlib v0.5.2
[INFO] [stderr]    Compiling serde v1.0.219
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]     Checking event-listener v5.4.1
[INFO] [stderr]     Checking endi v1.1.0
[INFO] [stderr]     Checking piper v0.2.4
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]    Compiling wayland-client v0.31.11
[INFO] [stderr]     Checking event-listener-strategy v0.5.4
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking async-lock v3.4.1
[INFO] [stderr]     Checking async-channel v2.5.0
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking enumflags2 v0.7.12
[INFO] [stderr]    Compiling nix v0.29.0
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking url v2.5.7
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]     Checking blocking v1.6.2
[INFO] [stderr]     Checking ttf-parser v0.25.1
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]    Compiling quick-xml v0.37.5
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking async-executor v1.13.2
[INFO] [stderr]     Checking bytemuck v1.23.2
[INFO] [stderr]     Checking async-fs v2.1.3
[INFO] [stderr]     Checking async-broadcast v0.7.2
[INFO] [stderr]     Checking ordered-stream v0.2.0
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]     Checking xdg-home v1.3.0
[INFO] [stderr]    Compiling profiling-procmacros v1.0.17
[INFO] [stderr]    Compiling serde_repr v0.1.20
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]     Checking ab_glyph_rasterizer v0.1.10
[INFO] [stderr]    Compiling khronos_api v3.1.0
[INFO] [stderr]     Checking quick-xml v0.30.0
[INFO] [stderr]    Compiling equator-macro v0.4.2
[INFO] [stderr]     Checking profiling v1.0.17
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking accesskit v0.17.1
[INFO] [stderr]    Compiling xml-rs v0.8.27
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]     Checking parking_lot_core v0.9.11
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]    Compiling wayland-scanner v0.31.7
[INFO] [stderr]     Checking xkeysym v0.2.1
[INFO] [stderr]    Compiling built v0.7.7
[INFO] [stderr]     Checking cursor-icon v1.2.0
[INFO] [stderr]     Checking equator v0.4.2
[INFO] [stderr]     Checking xcursor v0.3.10
[INFO] [stderr]    Compiling gl_generator v0.14.0
[INFO] [stderr]     Checking owned_ttf_parser v0.25.1
[INFO] [stderr]    Compiling smithay-client-toolkit v0.19.2
[INFO] [stderr]     Checking nom v7.1.3
[INFO] [stderr]     Checking aligned-vec v0.6.4
[INFO] [stderr]     Checking rayon v1.11.0
[INFO] [stderr]     Checking ab_glyph v0.2.31
[INFO] [stderr]    Compiling rav1e v0.7.1
[INFO] [stderr]     Checking parking_lot v0.12.4
[INFO] [stderr]     Checking v_frame v0.3.9
[INFO] [stderr]     Checking emath v0.31.1
[INFO] [stderr]     Checking memmap2 v0.9.5
[INFO] [stderr]     Checking tiny-skia-path v0.11.4
[INFO] [stderr]     Checking flate2 v1.1.2
[INFO] [stderr]     Checking half v2.6.0
[INFO] [stderr]    Compiling arg_enum_proc_macro v0.3.4
[INFO] [stderr]    Compiling fax_derive v0.2.0
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]    Compiling simd_helpers v0.1.0
[INFO] [stderr]     Checking ecolor v0.31.1
[INFO] [stderr]     Checking as-raw-xcb-connection v1.0.1
[INFO] [stderr]     Checking nohash-hasher v0.2.0
[INFO] [stderr]     Checking weezl v0.1.10
[INFO] [stderr]     Checking imgref v1.12.0
[INFO] [stderr]     Checking raw-window-handle v0.6.2
[INFO] [stderr]     Checking x11rb-protocol v0.13.1
[INFO] [stderr]     Checking epaint_default_fonts v0.31.1
[INFO] [stderr]     Checking zune-jpeg v0.4.21
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]     Checking epaint v0.31.1
[INFO] [stderr]     Checking tiny-skia v0.11.4
[INFO] [stderr]     Checking loop9 v0.1.5
[INFO] [stderr]     Checking fax v0.2.6
[INFO] [stderr]     Checking pxfm v0.1.24
[INFO] [stderr]     Checking immutable-chunkmap v2.0.6
[INFO] [stderr]     Checking avif-serialize v0.8.6
[INFO] [stderr]    Compiling winit v0.30.12
[INFO] [stderr]     Checking lebe v0.5.3
[INFO] [stderr]     Checking av1-grain v0.2.4
[INFO] [stderr]     Checking bit_field v0.10.3
[INFO] [stderr]    Compiling unicase v2.8.1
[INFO] [stderr]     Checking rgb v0.8.52
[INFO] [stderr]     Checking image-webp v0.2.4
[INFO] [stderr]     Checking egui v0.31.1
[INFO] [stderr]     Checking accesskit_consumer v0.26.0
[INFO] [stderr]    Compiling phf_shared v0.11.3
[INFO] [stderr]     Checking exr v1.73.0
[INFO] [stderr]     Checking tiff v0.10.3
[INFO] [stderr]    Compiling proc-macro-crate v3.3.0
[INFO] [stderr]     Checking gif v0.13.3
[INFO] [stderr]     Checking png v0.18.0
[INFO] [stderr]     Checking maybe-rayon v0.1.1
[INFO] [stderr]    Compiling glutin_glx_sys v0.6.1
[INFO] [stderr]    Compiling glutin_egl_sys v0.7.1
[INFO] [stderr]     Checking xkbcommon-dl v0.4.2
[INFO] [stderr]     Checking qoi v0.4.1
[INFO] [stderr]     Checking dpi v0.1.2
[INFO] [stderr]     Checking smol_str v0.2.2
[INFO] [stderr]    Compiling phf v0.11.3
[INFO] [stderr]    Compiling glutin v0.32.3
[INFO] [stderr]    Compiling glutin-winit v0.5.0
[INFO] [stderr]    Compiling mime_guess2 v2.3.1
[INFO] [stderr]     Checking alsa-sys v0.3.1
[INFO] [stderr]     Checking webbrowser v1.0.5
[INFO] [stderr]    Compiling enum-map-derive v0.17.0
[INFO] [stderr]     Checking polling v3.10.0
[INFO] [stderr]     Checking web-time v1.1.0
[INFO] [stderr]     Checking async-io v2.5.0
[INFO] [stderr]     Checking calloop v0.13.0
[INFO] [stderr]     Checking glow v0.16.0
[INFO] [stderr]    Compiling rfd v0.14.1
[INFO] [stderr]     Checking enum-map v2.7.3
[INFO] [stderr]     Checking alsa v0.9.1
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]     Checking crossbeam-queue v0.3.12
[INFO] [stderr]     Checking urlencoding v2.1.3
[INFO] [stderr]    Compiling zvariant_derive v4.2.0
[INFO] [stderr]    Compiling zbus_macros v4.4.0
[INFO] [stderr]     Checking crossbeam v0.8.4
[INFO] [stderr]     Checking ordered-float v5.0.0
[INFO] [stderr]     Checking arc-swap v1.7.1
[INFO] [stderr]     Checking async-net v2.0.0
[INFO] [stderr]     Checking rounded-div v0.1.3
[INFO] [stderr]     Checking rtrb v0.3.2
[INFO] [stderr]     Checking moxcms v0.7.5
[INFO] [stderr]     Checking wayland-csd-frame v0.3.0
[INFO] [stderr]     Checking zvariant v4.2.0
[INFO] [stderr]     Checking egui_double_slider v0.8.0
[INFO] [stderr]     Checking midir v0.10.2
[INFO] [stderr]     Checking wayland-protocols v0.32.9
[INFO] [stderr]     Checking wayland-cursor v0.31.11
[INFO] [stderr]     Checking calloop-wayland-source v0.3.0
[INFO] [stderr]     Checking egui_glow v0.31.1
[INFO] [stderr]     Checking zbus_names v3.0.0
[INFO] [stderr]     Checking zbus v4.4.0
[INFO] [stderr]     Checking zbus_xml v4.0.0
[INFO] [stderr]     Checking zbus-lockstep v0.4.4
[INFO] [stderr]     Checking ravif v0.11.20
[INFO] [stderr]    Compiling zbus-lockstep-macros v0.4.4
[INFO] [stderr]     Checking image v0.25.8
[INFO] [stderr]     Checking wayland-protocols-wlr v0.3.9
[INFO] [stderr]     Checking wayland-protocols-plasma v0.3.9
[INFO] [stderr]     Checking egui_extras v0.31.1
[INFO] [stderr]     Checking x11rb v0.13.1
[INFO] [stderr]     Checking atspi-common v0.6.0
[INFO] [stderr]     Checking ashpd v0.8.1
[INFO] [stderr]     Checking sctk-adwaita v0.10.1
[INFO] [stderr]     Checking smithay-clipboard v0.7.2
[INFO] [stderr]     Checking arboard v3.6.1
[INFO] [stderr]     Checking atspi-proxies v0.6.0
[INFO] [stderr]     Checking accesskit_atspi_common v0.10.1
[INFO] [stderr]     Checking atspi-connection v0.6.0
[INFO] [stderr]     Checking atspi v0.22.0
[INFO] [stderr]     Checking accesskit_unix v0.13.1
[INFO] [stderr]     Checking accesskit_winit v0.23.1
[INFO] [stderr]     Checking egui-winit v0.31.1
[INFO] [stderr]     Checking eframe v0.31.1
[INFO] [stderr]     Checking AndromedaRust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/midi/midi_track_parser.rs:1:34
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{collections::{HashMap, HashSet, VecDeque}, fs::File, sync::{Arc, Mutex}};
[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: `epaint::RectShape`
[INFO] [stdout]   --> src/app/main_window.rs:17:92
[INFO] [stdout]    |
[INFO] [stdout] 17 |     egui::{self, Color32, Pos2, RichText, Shape, Stroke, Ui, Vec2}, egui_glow::CallbackFn, epaint::RectShape, glow::HasContext
[INFO] [stdout]    |                                                                                            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `egui_extras::StripBuilder`
[INFO] [stdout]   --> src/app/main_window.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use egui_extras::StripBuilder;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PianoRollRenderer`, `bin_search_notes_exact`, `decode_note_group`, `find_note_at`, `get_absolute_max_tick_from_ids`, `get_min_max_ticks_in_selection`, `get_notes_in_range`, and `move_element`
[INFO] [stdout]   --> src/app/main_window.rs:26:33
[INFO] [stdout]    |
[INFO] [stdout] 26 | ...::{PianoRollRenderer},
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 | ...Data, util::{bin_search_notes, bin_search_notes_exact, decode_note_group, find_note_at, get_absolute_max_tick_from_ids, get_min_max_ticks_in_selection, get_notes_in_range, move_element}
[INFO] [stdout]    |                                   ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]   --> src/app/main_window.rs:42:28
[INFO] [stdout]    |
[INFO] [stdout] 42 |     collections::{HashMap, HashSet, VecDeque},
[INFO] [stdout]    |                            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `main_window::MainWindow`
[INFO] [stdout]  --> src/app/rendering.rs:4:19
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::{app::{main_window::MainWindow, rendering::{piano_roll::PianoRollRenderer, track_view::TrackViewRenderer}, shared::NoteColors,...
[INFO] [stdout]   |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/app/rendering/buffers.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Read`
[INFO] [stdout]  --> src/app/rendering/buffers.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::io::Read;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BLACK`, `SELECTED`, and `WHITE`
[INFO] [stdout]  --> src/app/rendering/piano_roll.rs:2:38
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::app::shared::{NoteColors, BLACK, SELECTED, WHITE};
[INFO] [stdout]   |                                      ^^^^^  ^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::editor::util::get_meta_next_tick`
[INFO] [stdout]  --> src/app/rendering/piano_roll.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::editor::util::get_meta_next_tick;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MetaEventType` and `MetaEvent`
[INFO] [stdout]  --> src/app/rendering/piano_roll.rs:7:39
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::midi::events::meta_event::{MetaEvent, MetaEventType};
[INFO] [stdout]   |                                       ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::midi::events::note::Note`
[INFO] [stdout]  --> src/app/rendering/data_view.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::midi::events::note::Note;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/app/rendering.rs:114:72
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub fn get_active_renderer(&mut self) -> &mut Arc<std::sync::Mutex<(dyn Renderer + Send + Sync + 'static)>> {
[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] 114 -     pub fn get_active_renderer(&mut self) -> &mut Arc<std::sync::Mutex<(dyn Renderer + Send + Sync + 'static)>> {
[INFO] [stdout] 114 +     pub fn get_active_renderer(&mut self) -> &mut Arc<std::sync::Mutex<dyn Renderer + Send + Sync + 'static >> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/app/rendering.rs:129:86
[INFO] [stdout]     |
[INFO] [stdout] 129 |     fn get_renderer(&mut self, render_type: RenderType) -> &mut Arc<std::sync::Mutex<(dyn Renderer + Send + Sync + 'static)>> {
[INFO] [stdout]     |                                                                                      ^                                    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 129 -     fn get_renderer(&mut self, render_type: RenderType) -> &mut Arc<std::sync::Mutex<(dyn Renderer + Send + Sync + 'static)>> {
[INFO] [stdout] 129 +     fn get_renderer(&mut self, render_type: RenderType) -> &mut Arc<std::sync::Mutex<dyn Renderer + Send + Sync + 'static >> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `VS_PianoRoll_OnionState` should have an upper camel case name
[INFO] [stdout]  --> src/app/view_settings.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum VS_PianoRoll_OnionState {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `VsPianoRollOnionState`
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `VS_PianoRoll_OnionColoring` should have an upper camel case name
[INFO] [stdout]   --> src/app/view_settings.rs:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum VS_PianoRoll_OnionColoring {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `VsPianoRollOnionColoring`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `VS_PianoRoll_DataViewState` should have an upper camel case name
[INFO] [stdout]   --> src/app/view_settings.rs:42:10
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub enum VS_PianoRoll_DataViewState {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `VsPianoRollDataViewState`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Num` and `PrimInt`
[INFO] [stdout]  --> src/app/custom_widgets.rs:4:18
[INFO] [stdout]   |
[INFO] [stdout] 4 | use num_traits::{Num, NumCast, PrimInt, ToPrimitive};
[INFO] [stdout]   |                  ^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/editor/navigation.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `audio::event_playback::PlaybackManager`, `playhead::Playhead`, and `util::MIDITick`
[INFO] [stdout]  --> src/editor/navigation.rs:3:13
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{audio::event_playback::PlaybackManager, editor::{playhead::Playhead, util::MIDITick}};
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^           ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashSet` and `VecDeque`
[INFO] [stdout]  --> src/editor/util.rs:4:49
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::{cmp::Ordering, collections::{HashMap, HashSet, VecDeque}, sync::{Arc, Mutex}};
[INFO] [stdout]   |                                                 ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `HashMap`, `HashSet`, `Mutex`, and `VecDeque`
[INFO] [stdout]  --> src/editor/edit_functions.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{collections::{HashMap, HashSet, VecDeque}, sync::{Arc, Mutex}};
[INFO] [stdout]   |                         ^^^^^^^  ^^^^^^^  ^^^^^^^^          ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color32`, `RichText`, `Stroke`, `Ui`, `egui_glow::CallbackFn`, `glow::HasContext`, and `self`
[INFO] [stdout]  --> src/editor/edit_functions.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 |     egui::{self, Color32, RichText, Stroke, Ui},
[INFO] [stdout]   |            ^^^^  ^^^^^^^  ^^^^^^^^  ^^^^^^  ^^
[INFO] [stdout] 5 |     egui_glow::CallbackFn,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 6 |     glow::HasContext,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `bin_search_notes`, `get_min_max_ticks_in_selection`, `main_window::MainWindow`, and `move_element`
[INFO] [stdout]  --> src/editor/edit_functions.rs:9:49
[INFO] [stdout]   |
[INFO] [stdout] 9 | ...d, main_window::MainWindow}, editor::{actions::{EditorAction, EditorActions}, util::{bin_search_notes, get_min_max_keys_in_selection, get_min_max_ticks_in_selection, manipulate_note_lengths, manipulate_note_ticks, move_element, M...
[INFO] [stdout]   |       ^^^^^^^^^^^^^^^^^^^^^^^                                                           ^^^^^^^^^^^^^^^^                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ui`
[INFO] [stdout]  --> src/editor/settings/project_settings.rs:1:36
[INFO] [stdout]   |
[INFO] [stdout] 1 | use eframe::egui::{self, RichText, Ui};
[INFO] [stdout]   |                                    ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ProjectInfo`
[INFO] [stdout]  --> src/editor/settings/project_settings.rs:3:48
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::editor::project_data::{ProjectData, ProjectInfo};
[INFO] [stdout]   |                                                ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Pos2`
[INFO] [stdout]  --> src/editor/note_editing.rs:1:26
[INFO] [stdout]   |
[INFO] [stdout] 1 | use eframe::egui::{self, Pos2, Ui};
[INFO] [stdout]   |                          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `decode_note_group`
[INFO] [stdout]  --> src/editor/note_editing.rs:3:217
[INFO] [stdout]   |
[INFO] [stdout] 3 | ...navigation::PianoRollNavigation, util::{bin_search_notes, decode_note_group, find_note_at, get_min_max_ticks_in_selection, get_mouse_m...
[INFO] [stdout]   |                                                              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::custom_widgets::NumericField`
[INFO] [stdout]  --> src/editor/note_editing.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::app::custom_widgets::NumericField;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ui`
[INFO] [stdout]  --> src/editor/meta_editing.rs:1:36
[INFO] [stdout]   |
[INFO] [stdout] 1 | use eframe::egui::{self, RichText, Ui};
[INFO] [stdout]   |                                    ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num_traits::Num`
[INFO] [stdout]  --> src/editor/meta_editing.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use num_traits::Num;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Mutex`
[INFO] [stdout]  --> src/editor/midi_bar_cacher.rs:1:22
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex, RwLock};
[INFO] [stdout]   |                      ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rfd::MessageDialog`
[INFO] [stdout]  --> src/audio/midi_devices.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use rfd::MessageDialog;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/audio/midi_devices.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AtomicU32`, `BinaryHeap`, `LinkedList`, `VecDeque`, and `thread::JoinHandle`
[INFO] [stdout]  --> src/audio/event_playback.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | ...ns::{BinaryHeap, LinkedList, VecDeque}, sync::{atomic::{AtomicBool, AtomicU32, Ordering}, Arc, Mutex, RwLock}, thread::JoinHandle, tim...
[INFO] [stdout]   |         ^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^                               ^^^^^^^^^                                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `midi_devices::MIDIDevices`
[INFO] [stdout]  --> src/audio/event_playback.rs:3:57
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{audio::{midi_audio_engine::MIDIAudioEngine, midi_devices::MIDIDevices}, editor::{project_data::bytes_as_tempo, util::{bin_sea...
[INFO] [stdout]   |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RecvTimeoutError`
[INFO] [stdout]  --> src/audio/event_playback.rs:4:45
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crossbeam::channel::{bounded, Receiver, RecvTimeoutError, Sender};
[INFO] [stdout]   |                                             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ordered_float::NotNan`
[INFO] [stdout]  --> src/audio/event_playback.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use ordered_float::NotNan;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::cmp::Reverse`
[INFO] [stdout]  --> src/audio/event_playback.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::cmp::Reverse;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/midi/midi_track_parser.rs:1:34
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{collections::{HashMap, HashSet, VecDeque}, fs::File, sync::{Arc, Mutex}};
[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: `epaint::RectShape`
[INFO] [stdout]   --> src/app/main_window.rs:17:92
[INFO] [stdout]    |
[INFO] [stdout] 17 |     egui::{self, Color32, Pos2, RichText, Shape, Stroke, Ui, Vec2}, egui_glow::CallbackFn, epaint::RectShape, glow::HasContext
[INFO] [stdout]    |                                                                                            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `egui_extras::StripBuilder`
[INFO] [stdout]   --> src/app/main_window.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use egui_extras::StripBuilder;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PianoRollRenderer`, `bin_search_notes_exact`, `decode_note_group`, `find_note_at`, `get_absolute_max_tick_from_ids`, `get_min_max_ticks_in_selection`, `get_notes_in_range`, and `move_element`
[INFO] [stdout]   --> src/app/main_window.rs:26:33
[INFO] [stdout]    |
[INFO] [stdout] 26 | ...::{PianoRollRenderer},
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 | ...Data, util::{bin_search_notes, bin_search_notes_exact, decode_note_group, find_note_at, get_absolute_max_tick_from_ids, get_min_max_ticks_in_selection, get_notes_in_range, move_element}
[INFO] [stdout]    |                                   ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]   --> src/app/main_window.rs:42:28
[INFO] [stdout]    |
[INFO] [stdout] 42 |     collections::{HashMap, HashSet, VecDeque},
[INFO] [stdout]    |                            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `main_window::MainWindow`
[INFO] [stdout]  --> src/app/rendering.rs:4:19
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::{app::{main_window::MainWindow, rendering::{piano_roll::PianoRollRenderer, track_view::TrackViewRenderer}, shared::NoteColors,...
[INFO] [stdout]   |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/app/rendering/buffers.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Read`
[INFO] [stdout]  --> src/app/rendering/buffers.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::io::Read;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BLACK`, `SELECTED`, and `WHITE`
[INFO] [stdout]  --> src/app/rendering/piano_roll.rs:2:38
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::app::shared::{NoteColors, BLACK, SELECTED, WHITE};
[INFO] [stdout]   |                                      ^^^^^  ^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::editor::util::get_meta_next_tick`
[INFO] [stdout]  --> src/app/rendering/piano_roll.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::editor::util::get_meta_next_tick;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MetaEventType` and `MetaEvent`
[INFO] [stdout]  --> src/app/rendering/piano_roll.rs:7:39
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::midi::events::meta_event::{MetaEvent, MetaEventType};
[INFO] [stdout]   |                                       ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::midi::events::note::Note`
[INFO] [stdout]  --> src/app/rendering/data_view.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::midi::events::note::Note;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/app/rendering.rs:114:72
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub fn get_active_renderer(&mut self) -> &mut Arc<std::sync::Mutex<(dyn Renderer + Send + Sync + 'static)>> {
[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] 114 -     pub fn get_active_renderer(&mut self) -> &mut Arc<std::sync::Mutex<(dyn Renderer + Send + Sync + 'static)>> {
[INFO] [stdout] 114 +     pub fn get_active_renderer(&mut self) -> &mut Arc<std::sync::Mutex<dyn Renderer + Send + Sync + 'static >> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/app/rendering.rs:129:86
[INFO] [stdout]     |
[INFO] [stdout] 129 |     fn get_renderer(&mut self, render_type: RenderType) -> &mut Arc<std::sync::Mutex<(dyn Renderer + Send + Sync + 'static)>> {
[INFO] [stdout]     |                                                                                      ^                                    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 129 -     fn get_renderer(&mut self, render_type: RenderType) -> &mut Arc<std::sync::Mutex<(dyn Renderer + Send + Sync + 'static)>> {
[INFO] [stdout] 129 +     fn get_renderer(&mut self, render_type: RenderType) -> &mut Arc<std::sync::Mutex<dyn Renderer + Send + Sync + 'static >> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `VS_PianoRoll_OnionState` should have an upper camel case name
[INFO] [stdout]  --> src/app/view_settings.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum VS_PianoRoll_OnionState {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `VsPianoRollOnionState`
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `VS_PianoRoll_OnionColoring` should have an upper camel case name
[INFO] [stdout]   --> src/app/view_settings.rs:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum VS_PianoRoll_OnionColoring {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `VsPianoRollOnionColoring`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `VS_PianoRoll_DataViewState` should have an upper camel case name
[INFO] [stdout]   --> src/app/view_settings.rs:42:10
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub enum VS_PianoRoll_DataViewState {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `VsPianoRollDataViewState`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Num` and `PrimInt`
[INFO] [stdout]  --> src/app/custom_widgets.rs:4:18
[INFO] [stdout]   |
[INFO] [stdout] 4 | use num_traits::{Num, NumCast, PrimInt, ToPrimitive};
[INFO] [stdout]   |                  ^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/editor/navigation.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `audio::event_playback::PlaybackManager`, `playhead::Playhead`, and `util::MIDITick`
[INFO] [stdout]  --> src/editor/navigation.rs:3:13
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{audio::event_playback::PlaybackManager, editor::{playhead::Playhead, util::MIDITick}};
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^           ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashSet` and `VecDeque`
[INFO] [stdout]  --> src/editor/util.rs:4:49
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::{cmp::Ordering, collections::{HashMap, HashSet, VecDeque}, sync::{Arc, Mutex}};
[INFO] [stdout]   |                                                 ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `HashMap`, `HashSet`, `Mutex`, and `VecDeque`
[INFO] [stdout]  --> src/editor/edit_functions.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{collections::{HashMap, HashSet, VecDeque}, sync::{Arc, Mutex}};
[INFO] [stdout]   |                         ^^^^^^^  ^^^^^^^  ^^^^^^^^          ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color32`, `RichText`, `Stroke`, `Ui`, `egui_glow::CallbackFn`, `glow::HasContext`, and `self`
[INFO] [stdout]  --> src/editor/edit_functions.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 |     egui::{self, Color32, RichText, Stroke, Ui},
[INFO] [stdout]   |            ^^^^  ^^^^^^^  ^^^^^^^^  ^^^^^^  ^^
[INFO] [stdout] 5 |     egui_glow::CallbackFn,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 6 |     glow::HasContext,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `bin_search_notes`, `get_min_max_ticks_in_selection`, `main_window::MainWindow`, and `move_element`
[INFO] [stdout]  --> src/editor/edit_functions.rs:9:49
[INFO] [stdout]   |
[INFO] [stdout] 9 | ...d, main_window::MainWindow}, editor::{actions::{EditorAction, EditorActions}, util::{bin_search_notes, get_min_max_keys_in_selection, get_min_max_ticks_in_selection, manipulate_note_lengths, manipulate_note_ticks, move_element, M...
[INFO] [stdout]   |       ^^^^^^^^^^^^^^^^^^^^^^^                                                           ^^^^^^^^^^^^^^^^                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ui`
[INFO] [stdout]  --> src/editor/settings/project_settings.rs:1:36
[INFO] [stdout]   |
[INFO] [stdout] 1 | use eframe::egui::{self, RichText, Ui};
[INFO] [stdout]   |                                    ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ProjectInfo`
[INFO] [stdout]  --> src/editor/settings/project_settings.rs:3:48
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::editor::project_data::{ProjectData, ProjectInfo};
[INFO] [stdout]   |                                                ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Pos2`
[INFO] [stdout]  --> src/editor/note_editing.rs:1:26
[INFO] [stdout]   |
[INFO] [stdout] 1 | use eframe::egui::{self, Pos2, Ui};
[INFO] [stdout]   |                          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `decode_note_group`
[INFO] [stdout]  --> src/editor/note_editing.rs:3:217
[INFO] [stdout]   |
[INFO] [stdout] 3 | ...navigation::PianoRollNavigation, util::{bin_search_notes, decode_note_group, find_note_at, get_min_max_ticks_in_selection, get_mouse_m...
[INFO] [stdout]   |                                                              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::custom_widgets::NumericField`
[INFO] [stdout]  --> src/editor/note_editing.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::app::custom_widgets::NumericField;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ui`
[INFO] [stdout]  --> src/editor/meta_editing.rs:1:36
[INFO] [stdout]   |
[INFO] [stdout] 1 | use eframe::egui::{self, RichText, Ui};
[INFO] [stdout]   |                                    ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num_traits::Num`
[INFO] [stdout]  --> src/editor/meta_editing.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use num_traits::Num;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Mutex`
[INFO] [stdout]  --> src/editor/midi_bar_cacher.rs:1:22
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex, RwLock};
[INFO] [stdout]   |                      ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rfd::MessageDialog`
[INFO] [stdout]  --> src/audio/midi_devices.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use rfd::MessageDialog;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/audio/midi_devices.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AtomicU32`, `BinaryHeap`, `LinkedList`, `VecDeque`, and `thread::JoinHandle`
[INFO] [stdout]  --> src/audio/event_playback.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | ...ns::{BinaryHeap, LinkedList, VecDeque}, sync::{atomic::{AtomicBool, AtomicU32, Ordering}, Arc, Mutex, RwLock}, thread::JoinHandle, tim...
[INFO] [stdout]   |         ^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^                               ^^^^^^^^^                                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `midi_devices::MIDIDevices`
[INFO] [stdout]  --> src/audio/event_playback.rs:3:57
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{audio::{midi_audio_engine::MIDIAudioEngine, midi_devices::MIDIDevices}, editor::{project_data::bytes_as_tempo, util::{bin_sea...
[INFO] [stdout]   |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RecvTimeoutError`
[INFO] [stdout]  --> src/audio/event_playback.rs:4:45
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crossbeam::channel::{bounded, Receiver, RecvTimeoutError, Sender};
[INFO] [stdout]   |                                             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ordered_float::NotNan`
[INFO] [stdout]  --> src/audio/event_playback.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use ordered_float::NotNan;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::cmp::Reverse`
[INFO] [stdout]  --> src/audio/event_playback.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::cmp::Reverse;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AtomicMIDITick`
[INFO] [stdout]  --> src/audio/event_playback.rs:3:155
[INFO] [stdout]   |
[INFO] [stdout] 3 | ...roject_data::bytes_as_tempo, util::{bin_search_notes_exact, AtomicMIDITick, MIDITick, MIDITickAtomic}}, midi::events::{channel_event::...
[INFO] [stdout]   |                                                                ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AtomicMIDITick`
[INFO] [stdout]  --> src/audio/event_playback.rs:3:155
[INFO] [stdout]   |
[INFO] [stdout] 3 | ...roject_data::bytes_as_tempo, util::{bin_search_notes_exact, AtomicMIDITick, MIDITick, MIDITickAtomic}}, midi::events::{channel_event::...
[INFO] [stdout]   |                                                                ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `view_top`
[INFO] [stdout]    --> src/app/main_window.rs:516:29
[INFO] [stdout]     |
[INFO] [stdout] 516 |                         let view_top = track_view_nav.zoom_tracks + track_view_nav.zoom_tracks;
[INFO] [stdout]     |                             ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 516 |                         let _view_top = track_view_nav.zoom_tracks + track_view_nav.zoom_tracks;
[INFO] [stdout]     |                             +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]     |
[INFO] [stdout] 516 -                         let view_top = track_view_nav.zoom_tracks + track_view_nav.zoom_tracks;
[INFO] [stdout] 516 +                         let app::rendering::piano_roll::NOTE_BORDER_DARKNESS = track_view_nav.zoom_tracks + track_view_nav.zoom_tracks;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/app/main_window.rs:745:9
[INFO] [stdout]     |
[INFO] [stdout] 745 |         curr_channel: u8,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 745 |         _curr_channel: u8,
[INFO] [stdout]     |         +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 745 -         curr_channel: u8,
[INFO] [stdout] 745 +         app::main_window::TOOL_ERASER_ENABLE: u8,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]     --> src/app/main_window.rs:1686:37
[INFO] [stdout]      |
[INFO] [stdout] 1686 |     fn apply_ghost_notes(&mut self, action: EditorAction) {
[INFO] [stdout]      |                                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `window_height`
[INFO] [stdout]     --> src/app/main_window.rs:1985:13
[INFO] [stdout]      |
[INFO] [stdout] 1985 |         let window_height = ctx.input(|i| i.screen_rect).size().y;
[INFO] [stdout]      |             ^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1985 |         let _window_height = ctx.input(|i| i.screen_rect).size().y;
[INFO] [stdout]      |             +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]      |
[INFO] [stdout] 1985 -         let window_height = ctx.input(|i| i.screen_rect).size().y;
[INFO] [stdout] 1985 +         let app::rendering::piano_roll::NOTE_BORDER_DARKNESS = ctx.input(|i| i.screen_rect).size().y;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ctx`
[INFO] [stdout]     --> src/app/main_window.rs:2063:36
[INFO] [stdout]      |
[INFO] [stdout] 2063 |     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, any_window_opened: bool) {
[INFO] [stdout]      |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_ctx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `any_window_opened`
[INFO] [stdout]     --> src/app/main_window.rs:2063:70
[INFO] [stdout]      |
[INFO] [stdout] 2063 |     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, any_window_opened: bool) {
[INFO] [stdout]      |                                                                      ^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 2063 |     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, _any_window_opened: bool) {
[INFO] [stdout]      |                                                                      +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_IS_BIASED`
[INFO] [stdout]      |
[INFO] [stdout] 2063 -     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, any_window_opened: bool) {
[INFO] [stdout] 2063 +     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_IS_BIASED: bool) {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dataview_size`
[INFO] [stdout]     --> src/app/main_window.rs:2495:38
[INFO] [stdout]      |
[INFO] [stdout] 2495 |                 let (dataview_state, dataview_size) = if let Some(view_settings) = self.view_settings.as_ref() {
[INFO] [stdout]      |                                      ^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 2495 |                 let (dataview_state, _dataview_size) = if let Some(view_settings) = self.view_settings.as_ref() {
[INFO] [stdout]      |                                      +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]      |
[INFO] [stdout] 2495 -                 let (dataview_state, dataview_size) = if let Some(view_settings) = self.view_settings.as_ref() {
[INFO] [stdout] 2495 +                 let (dataview_state, app::rendering::piano_roll::NOTE_BORDER_DARKNESS) = if let Some(view_settings) = self.view_settings.as_ref() {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `view_top`
[INFO] [stdout]    --> src/app/main_window.rs:516:29
[INFO] [stdout]     |
[INFO] [stdout] 516 |                         let view_top = track_view_nav.zoom_tracks + track_view_nav.zoom_tracks;
[INFO] [stdout]     |                             ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 516 |                         let _view_top = track_view_nav.zoom_tracks + track_view_nav.zoom_tracks;
[INFO] [stdout]     |                             +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]     |
[INFO] [stdout] 516 -                         let view_top = track_view_nav.zoom_tracks + track_view_nav.zoom_tracks;
[INFO] [stdout] 516 +                         let app::rendering::piano_roll::NOTE_BORDER_DARKNESS = track_view_nav.zoom_tracks + track_view_nav.zoom_tracks;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ui`
[INFO] [stdout]     --> src/app/main_window.rs:2360:45
[INFO] [stdout]      |
[INFO] [stdout] 2360 |                     ui.menu_button("Help", |ui| {
[INFO] [stdout]      |                                             ^^ help: if this is intentional, prefix it with an underscore: `_ui`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_track`
[INFO] [stdout]     --> src/app/main_window.rs:2594:34
[INFO] [stdout]      |
[INFO] [stdout] 2594 |                     if let Some((curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |                                  ^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 2594 |                     if let Some((_curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_EDIT_MOUSE_DOWN_ON_UI`
[INFO] [stdout]      |
[INFO] [stdout] 2594 -                     if let Some((curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout] 2594 +                     if let Some((editor::note_editing::note_flags::NOTE_EDIT_MOUSE_DOWN_ON_UI, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]     --> src/app/main_window.rs:2594:46
[INFO] [stdout]      |
[INFO] [stdout] 2594 |                     if let Some((curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |                                              ^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 2594 |                     if let Some((curr_track, _curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |                                              +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]      |
[INFO] [stdout] 2594 -                     if let Some((curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout] 2594 +                     if let Some((curr_track, app::main_window::TOOL_ERASER_ENABLE)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `notes`
[INFO] [stdout]     --> src/app/main_window.rs:2596:33
[INFO] [stdout]      |
[INFO] [stdout] 2596 |                         let mut notes = project_data.notes.read().unwrap();
[INFO] [stdout]      |                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_notes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ratio`
[INFO] [stdout]     --> src/app/main_window.rs:2662:35
[INFO] [stdout]      |
[INFO] [stdout] 2662 |                         for (i, &(ratio, name)) in SNAP_MAPPINGS.iter().enumerate() {
[INFO] [stdout]      |                                   ^^^^^ help: if this is intentional, prefix it with an underscore: `_ratio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/app/main_window.rs:745:9
[INFO] [stdout]     |
[INFO] [stdout] 745 |         curr_channel: u8,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 745 |         _curr_channel: u8,
[INFO] [stdout]     |         +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 745 -         curr_channel: u8,
[INFO] [stdout] 745 +         app::main_window::TOOL_ERASER_ENABLE: u8,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]     --> src/app/main_window.rs:1686:37
[INFO] [stdout]      |
[INFO] [stdout] 1686 |     fn apply_ghost_notes(&mut self, action: EditorAction) {
[INFO] [stdout]      |                                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `window_height`
[INFO] [stdout]     --> src/app/main_window.rs:1985:13
[INFO] [stdout]      |
[INFO] [stdout] 1985 |         let window_height = ctx.input(|i| i.screen_rect).size().y;
[INFO] [stdout]      |             ^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1985 |         let _window_height = ctx.input(|i| i.screen_rect).size().y;
[INFO] [stdout]      |             +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]      |
[INFO] [stdout] 1985 -         let window_height = ctx.input(|i| i.screen_rect).size().y;
[INFO] [stdout] 1985 +         let app::rendering::piano_roll::NOTE_BORDER_DARKNESS = ctx.input(|i| i.screen_rect).size().y;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/app/main_window.rs:2195:49
[INFO] [stdout]      |
[INFO] [stdout] 2195 | ...                   let mut playhead = &mut main_window.playhead;
[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/app/main_window.rs:2596:29
[INFO] [stdout]      |
[INFO] [stdout] 2596 |                         let mut notes = project_data.notes.read().unwrap();
[INFO] [stdout]      |                             ----^^^^^
[INFO] [stdout]      |                             |
[INFO] [stdout]      |                             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ctx`
[INFO] [stdout]     --> src/app/main_window.rs:2063:36
[INFO] [stdout]      |
[INFO] [stdout] 2063 |     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, any_window_opened: bool) {
[INFO] [stdout]      |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_ctx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `global_metas`
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:177:21
[INFO] [stdout]     |
[INFO] [stdout] 177 |         let (notes, global_metas) = {
[INFO] [stdout]     |                     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_global_metas`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `any_window_opened`
[INFO] [stdout]     --> src/app/main_window.rs:2063:70
[INFO] [stdout]      |
[INFO] [stdout] 2063 |     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, any_window_opened: bool) {
[INFO] [stdout]      |                                                                      ^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 2063 |     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, _any_window_opened: bool) {
[INFO] [stdout]      |                                                                      +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_IS_BIASED`
[INFO] [stdout]      |
[INFO] [stdout] 2063 -     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, any_window_opened: bool) {
[INFO] [stdout] 2063 +     fn draw_data_viewer(&mut self, ctx: &egui::Context, ui: &mut Ui, audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_IS_BIASED: bool) {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dataview_size`
[INFO] [stdout]     --> src/app/main_window.rs:2495:38
[INFO] [stdout]      |
[INFO] [stdout] 2495 |                 let (dataview_state, dataview_size) = if let Some(view_settings) = self.view_settings.as_ref() {
[INFO] [stdout]      |                                      ^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 2495 |                 let (dataview_state, _dataview_size) = if let Some(view_settings) = self.view_settings.as_ref() {
[INFO] [stdout]      |                                      +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]      |
[INFO] [stdout] 2495 -                 let (dataview_state, dataview_size) = if let Some(view_settings) = self.view_settings.as_ref() {
[INFO] [stdout] 2495 +                 let (dataview_state, app::rendering::piano_roll::NOTE_BORDER_DARKNESS) = if let Some(view_settings) = self.view_settings.as_ref() {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nav_curr_channel`
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:258:34
[INFO] [stdout]     |
[INFO] [stdout] 258 |             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 258 |             let (nav_curr_track, _nav_curr_channel) = {
[INFO] [stdout]     |                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 258 -             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout] 258 +             let (nav_curr_track, app::main_window::TOOL_ERASER_ENABLE) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `rendered_notes` is assigned to, but never used
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:415:37
[INFO] [stdout]     |
[INFO] [stdout] 415 | ...                   let mut rendered_notes = 0;
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_rendered_notes` instead
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 415 -                             let mut rendered_notes = 0;
[INFO] [stdout] 415 +                             let mut audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = 0;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `valid_render`
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:417:37
[INFO] [stdout]     |
[INFO] [stdout] 417 | ...                   let mut valid_render = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout]     |                               ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 417 |                             let mut _valid_render = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout]     |                                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_IS_BIASED`
[INFO] [stdout]     |
[INFO] [stdout] 417 -                             let mut valid_render = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout] 417 +                             let mut audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_IS_BIASED = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `note_idx` is assigned to, but never used
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:456:41
[INFO] [stdout]     |
[INFO] [stdout] 456 | ...                   let mut note_idx = n_off;
[INFO] [stdout]     |                               ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_note_idx` instead
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 456 -                                 let mut note_idx = n_off;
[INFO] [stdout] 456 +                                 let mut audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = n_off;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sel_lock`
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:479:45
[INFO] [stdout]     |
[INFO] [stdout] 479 | ...                   let sel_lock = self.selected.lock().unwrap();
[INFO] [stdout]     |                           ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sel_lock`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `rendered_notes` is never read
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:808:33
[INFO] [stdout]     |
[INFO] [stdout] 808 | ...                   rendered_notes += note_id;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ui`
[INFO] [stdout]     --> src/app/main_window.rs:2360:45
[INFO] [stdout]      |
[INFO] [stdout] 2360 |                     ui.menu_button("Help", |ui| {
[INFO] [stdout]      |                                             ^^ help: if this is intentional, prefix it with an underscore: `_ui`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_track`
[INFO] [stdout]     --> src/app/main_window.rs:2594:34
[INFO] [stdout]      |
[INFO] [stdout] 2594 |                     if let Some((curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |                                  ^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 2594 |                     if let Some((_curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_EDIT_MOUSE_DOWN_ON_UI`
[INFO] [stdout]      |
[INFO] [stdout] 2594 -                     if let Some((curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout] 2594 +                     if let Some((editor::note_editing::note_flags::NOTE_EDIT_MOUSE_DOWN_ON_UI, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]     --> src/app/main_window.rs:2594:46
[INFO] [stdout]      |
[INFO] [stdout] 2594 |                     if let Some((curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |                                              ^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 2594 |                     if let Some((curr_track, _curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |                                              +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]      |
[INFO] [stdout] 2594 -                     if let Some((curr_track, curr_channel)) = self.get_current_track_and_channel() {
[INFO] [stdout] 2594 +                     if let Some((curr_track, app::main_window::TOOL_ERASER_ENABLE)) = self.get_current_track_and_channel() {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `notes`
[INFO] [stdout]     --> src/app/main_window.rs:2596:33
[INFO] [stdout]      |
[INFO] [stdout] 2596 |                         let mut notes = project_data.notes.read().unwrap();
[INFO] [stdout]      |                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_notes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ratio`
[INFO] [stdout]     --> src/app/main_window.rs:2662:35
[INFO] [stdout]      |
[INFO] [stdout] 2662 |                         for (i, &(ratio, name)) in SNAP_MAPPINGS.iter().enumerate() {
[INFO] [stdout]      |                                   ^^^^^ help: if this is intentional, prefix it with an underscore: `_ratio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:417:33
[INFO] [stdout]     |
[INFO] [stdout] 417 | ...                   let mut valid_render = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout]     |                           ----^^^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/app/rendering/track_view.rs:369:29
[INFO] [stdout]     |
[INFO] [stdout] 369 |                     let mut curr_channel = 0;
[INFO] [stdout]     |                             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_curr_channel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_note`
[INFO] [stdout]    --> src/app/rendering/track_view.rs:371:29
[INFO] [stdout]     |
[INFO] [stdout] 371 |                     let mut curr_note = 0;
[INFO] [stdout]     |                             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_curr_note`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_idx`
[INFO] [stdout]    --> src/app/rendering/track_view.rs:395:29
[INFO] [stdout]     |
[INFO] [stdout] 395 |                     let mut note_idx = n_off;
[INFO] [stdout]     |                             ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 395 |                     let mut _note_idx = n_off;
[INFO] [stdout]     |                             +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 395 -                     let mut note_idx = n_off;
[INFO] [stdout] 395 +                     let mut audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = n_off;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app/rendering/track_view.rs:369:25
[INFO] [stdout]     |
[INFO] [stdout] 369 |                     let mut curr_channel = 0;
[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/app/rendering/track_view.rs:371:25
[INFO] [stdout]     |
[INFO] [stdout] 371 |                     let mut curr_note = 0;
[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/app/rendering/track_view.rs:395:25
[INFO] [stdout]     |
[INFO] [stdout] 395 |                     let mut note_idx = n_off;
[INFO] [stdout]     |                         ----^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `project_data`
[INFO] [stdout]   --> src/app/rendering/data_view.rs:83:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |         project_data: &Arc<Mutex<ProjectData>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_project_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/app/main_window.rs:2195:49
[INFO] [stdout]      |
[INFO] [stdout] 2195 | ...                   let mut playhead = &mut main_window.playhead;
[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: `key_pos`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:172:30
[INFO] [stdout]     |
[INFO] [stdout] 172 |             let (zoom_ticks, key_pos, zoom_keys) = {
[INFO] [stdout]     |                              ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 172 |             let (zoom_ticks, _key_pos, zoom_keys) = {
[INFO] [stdout]     |                              +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]     |
[INFO] [stdout] 172 -             let (zoom_ticks, key_pos, zoom_keys) = {
[INFO] [stdout] 172 +             let (zoom_ticks, app::rendering::piano_roll::NOTE_BORDER_DARKNESS, zoom_keys) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `zoom_keys`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:172:39
[INFO] [stdout]     |
[INFO] [stdout] 172 |             let (zoom_ticks, key_pos, zoom_keys) = {
[INFO] [stdout]     |                                       ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 172 |             let (zoom_ticks, key_pos, _zoom_keys) = {
[INFO] [stdout]     |                                       +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]     |
[INFO] [stdout] 172 -             let (zoom_ticks, key_pos, zoom_keys) = {
[INFO] [stdout] 172 +             let (zoom_ticks, key_pos, app::rendering::piano_roll::NOTE_BORDER_DARKNESS) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nav_curr_track`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:177:18
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let (_nav_curr_track, nav_curr_channel) = {
[INFO] [stdout]     |                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_EDIT_MOUSE_DOWN_ON_UI`
[INFO] [stdout]     |
[INFO] [stdout] 177 -             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout] 177 +             let (editor::note_editing::note_flags::NOTE_EDIT_MOUSE_DOWN_ON_UI, nav_curr_channel) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/app/main_window.rs:2596:29
[INFO] [stdout]      |
[INFO] [stdout] 2596 |                         let mut notes = project_data.notes.read().unwrap();
[INFO] [stdout]      |                             ----^^^^^
[INFO] [stdout]      |                             |
[INFO] [stdout]      |                             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nav_curr_channel`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:177:34
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let (nav_curr_track, _nav_curr_channel) = {
[INFO] [stdout]     |                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 177 -             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout] 177 +             let (nav_curr_track, app::main_window::TOOL_ERASER_ENABLE) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_playing`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:182:18
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let (is_playing, playback_pos) = {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let (_is_playing, playback_pos) = {
[INFO] [stdout]     |                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_IS_BIASED`
[INFO] [stdout]     |
[INFO] [stdout] 182 -             let (is_playing, playback_pos) = {
[INFO] [stdout] 182 +             let (audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_IS_BIASED, playback_pos) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `playback_pos`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:182:30
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let (is_playing, playback_pos) = {
[INFO] [stdout]     |                              ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let (is_playing, _playback_pos) = {
[INFO] [stdout]     |                              +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]     |
[INFO] [stdout] 182 -             let (is_playing, playback_pos) = {
[INFO] [stdout] 182 +             let (is_playing, app::rendering::piano_roll::NOTE_BORDER_DARKNESS) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `global_metas`
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:177:21
[INFO] [stdout]     |
[INFO] [stdout] 177 |         let (notes, global_metas) = {
[INFO] [stdout]     |                     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_global_metas`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nav_curr_channel`
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:258:34
[INFO] [stdout]     |
[INFO] [stdout] 258 |             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 258 |             let (nav_curr_track, _nav_curr_channel) = {
[INFO] [stdout]     |                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 258 -             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout] 258 +             let (nav_curr_track, app::main_window::TOOL_ERASER_ENABLE) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `rendered_notes` is assigned to, but never used
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:415:37
[INFO] [stdout]     |
[INFO] [stdout] 415 | ...                   let mut rendered_notes = 0;
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_rendered_notes` instead
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 415 -                             let mut rendered_notes = 0;
[INFO] [stdout] 415 +                             let mut audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = 0;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `valid_render`
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:417:37
[INFO] [stdout]     |
[INFO] [stdout] 417 | ...                   let mut valid_render = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout]     |                               ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 417 |                             let mut _valid_render = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout]     |                                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_IS_BIASED`
[INFO] [stdout]     |
[INFO] [stdout] 417 -                             let mut valid_render = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout] 417 +                             let mut audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_IS_BIASED = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `note_idx` is assigned to, but never used
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:456:41
[INFO] [stdout]     |
[INFO] [stdout] 456 | ...                   let mut note_idx = n_off;
[INFO] [stdout]     |                               ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_note_idx` instead
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 456 -                                 let mut note_idx = n_off;
[INFO] [stdout] 456 +                                 let mut audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = n_off;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sel_lock`
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:479:45
[INFO] [stdout]     |
[INFO] [stdout] 479 | ...                   let sel_lock = self.selected.lock().unwrap();
[INFO] [stdout]     |                           ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sel_lock`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `rendered_notes` is never read
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:808:33
[INFO] [stdout]     |
[INFO] [stdout] 808 | ...                   rendered_notes += note_id;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]    --> src/editor/util.rs:268:10
[INFO] [stdout]     |
[INFO] [stdout] 268 |     for (i, (old_id, note, start_change, _)) in updates.into_iter().enumerate() {
[INFO] [stdout]     |          ^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 268 |     for (_i, (old_id, note, start_change, _)) in updates.into_iter().enumerate() {
[INFO] [stdout]     |          +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 268 -     for (i, (old_id, note, start_change, _)) in updates.into_iter().enumerate() {
[INFO] [stdout] 268 +     for (audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN, (old_id, note, start_change, _)) in updates.into_iter().enumerate() {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app/rendering/piano_roll.rs:417:33
[INFO] [stdout]     |
[INFO] [stdout] 417 | ...                   let mut valid_render = true; // in case tracks have been switched in the middle of looping
[INFO] [stdout]     |                           ----^^^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_ids`
[INFO] [stdout]   --> src/editor/edit_functions.rs:85:32
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_ids`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `use_tick_lens`
[INFO] [stdout]   --> src/editor/edit_functions.rs:85:42
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                          ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, _use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                          +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_IS_BIASED`
[INFO] [stdout]    |
[INFO] [stdout] 85 -             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout] 85 +             EditFunction::Chop(note_ids, audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_IS_BIASED, snap_id, max_len) => {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `snap_id`
[INFO] [stdout]   --> src/editor/edit_functions.rs:85:57
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                                         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, _snap_id, max_len) => {
[INFO] [stdout]    |                                                         +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]    |
[INFO] [stdout] 85 -             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout] 85 +             EditFunction::Chop(note_ids, use_tick_lens, audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN, max_len) => {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_len`
[INFO] [stdout]   --> src/editor/edit_functions.rs:85:66
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                                                  ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/app/rendering/track_view.rs:369:29
[INFO] [stdout]     |
[INFO] [stdout] 369 |                     let mut curr_channel = 0;
[INFO] [stdout]     |                             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_curr_channel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_note`
[INFO] [stdout]    --> src/app/rendering/track_view.rs:371:29
[INFO] [stdout]     |
[INFO] [stdout] 371 |                     let mut curr_note = 0;
[INFO] [stdout]     |                             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_curr_note`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_idx`
[INFO] [stdout]    --> src/app/rendering/track_view.rs:395:29
[INFO] [stdout]     |
[INFO] [stdout] 395 |                     let mut note_idx = n_off;
[INFO] [stdout]     |                             ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 395 |                     let mut _note_idx = n_off;
[INFO] [stdout]     |                             +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 395 -                     let mut note_idx = n_off;
[INFO] [stdout] 395 +                     let mut audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = n_off;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app/rendering/track_view.rs:369:25
[INFO] [stdout]     |
[INFO] [stdout] 369 |                     let mut curr_channel = 0;
[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/app/rendering/track_view.rs:371:25
[INFO] [stdout]     |
[INFO] [stdout] 371 |                     let mut curr_note = 0;
[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/app/rendering/track_view.rs:395:25
[INFO] [stdout]     |
[INFO] [stdout] 395 |                     let mut note_idx = n_off;
[INFO] [stdout]     |                         ----^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `project_data`
[INFO] [stdout]   --> src/app/rendering/data_view.rs:83:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |         project_data: &Arc<Mutex<ProjectData>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_project_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key_pos`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:172:30
[INFO] [stdout]     |
[INFO] [stdout] 172 |             let (zoom_ticks, key_pos, zoom_keys) = {
[INFO] [stdout]     |                              ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 172 |             let (zoom_ticks, _key_pos, zoom_keys) = {
[INFO] [stdout]     |                              +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]     |
[INFO] [stdout] 172 -             let (zoom_ticks, key_pos, zoom_keys) = {
[INFO] [stdout] 172 +             let (zoom_ticks, app::rendering::piano_roll::NOTE_BORDER_DARKNESS, zoom_keys) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `zoom_keys`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:172:39
[INFO] [stdout]     |
[INFO] [stdout] 172 |             let (zoom_ticks, key_pos, zoom_keys) = {
[INFO] [stdout]     |                                       ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 172 |             let (zoom_ticks, key_pos, _zoom_keys) = {
[INFO] [stdout]     |                                       +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]     |
[INFO] [stdout] 172 -             let (zoom_ticks, key_pos, zoom_keys) = {
[INFO] [stdout] 172 +             let (zoom_ticks, key_pos, app::rendering::piano_roll::NOTE_BORDER_DARKNESS) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nav_curr_track`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:177:18
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let (_nav_curr_track, nav_curr_channel) = {
[INFO] [stdout]     |                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_EDIT_MOUSE_DOWN_ON_UI`
[INFO] [stdout]     |
[INFO] [stdout] 177 -             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout] 177 +             let (editor::note_editing::note_flags::NOTE_EDIT_MOUSE_DOWN_ON_UI, nav_curr_channel) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nav_curr_channel`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:177:34
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let (nav_curr_track, _nav_curr_channel) = {
[INFO] [stdout]     |                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 177 -             let (nav_curr_track, nav_curr_channel) = {
[INFO] [stdout] 177 +             let (nav_curr_track, app::main_window::TOOL_ERASER_ENABLE) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_playing`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:182:18
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let (is_playing, playback_pos) = {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let (_is_playing, playback_pos) = {
[INFO] [stdout]     |                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_IS_BIASED`
[INFO] [stdout]     |
[INFO] [stdout] 182 -             let (is_playing, playback_pos) = {
[INFO] [stdout] 182 +             let (audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_IS_BIASED, playback_pos) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `playback_pos`
[INFO] [stdout]    --> src/app/rendering/data_view.rs:182:30
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let (is_playing, playback_pos) = {
[INFO] [stdout]     |                              ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let (is_playing, _playback_pos) = {
[INFO] [stdout]     |                              +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `NOTE_BORDER_DARKNESS`
[INFO] [stdout]     |
[INFO] [stdout] 182 -             let (is_playing, playback_pos) = {
[INFO] [stdout] 182 +             let (is_playing, app::rendering::piano_roll::NOTE_BORDER_DARKNESS) = {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:152:82
[INFO] [stdout]     |
[INFO] [stdout] 152 |     fn move_note_ids_to_ghost_note(&mut self, ids: &Vec<usize>, curr_track: u16, curr_channel: u8) {
[INFO] [stdout]     |                                                                                  ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 152 |     fn move_note_ids_to_ghost_note(&mut self, ids: &Vec<usize>, curr_track: u16, _curr_channel: u8) {
[INFO] [stdout]     |                                                                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 152 -     fn move_note_ids_to_ghost_note(&mut self, ids: &Vec<usize>, curr_track: u16, curr_channel: u8) {
[INFO] [stdout] 152 +     fn move_note_ids_to_ghost_note(&mut self, ids: &Vec<usize>, curr_track: u16, app::main_window::TOOL_ERASER_ENABLE: u8) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:179:68
[INFO] [stdout]     |
[INFO] [stdout] 179 |     fn move_selected_ids_to_ghost_note(&mut self, curr_track: u16, curr_channel: u8) {
[INFO] [stdout]     |                                                                    ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 179 |     fn move_selected_ids_to_ghost_note(&mut self, curr_track: u16, _curr_channel: u8) {
[INFO] [stdout]     |                                                                    +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 179 -     fn move_selected_ids_to_ghost_note(&mut self, curr_track: u16, curr_channel: u8) {
[INFO] [stdout] 179 +     fn move_selected_ids_to_ghost_note(&mut self, curr_track: u16, app::main_window::TOOL_ERASER_ENABLE: u8) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:242:26
[INFO] [stdout]     |
[INFO] [stdout] 242 |         let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                          ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 242 |         let (curr_track, _curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                          +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 242 -         let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout] 242 +         let (curr_track, app::main_window::TOOL_ERASER_ENABLE) = self.get_current_track_and_channel();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:351:42
[INFO] [stdout]     |
[INFO] [stdout] 351 |                         let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                          ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 351 |                         let (curr_track, _curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                          +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 351 -                         let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout] 351 +                         let (curr_track, app::main_window::TOOL_ERASER_ENABLE) = self.get_current_track_and_channel();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `clicked_note_idx`
[INFO] [stdout]    --> src/editor/note_editing.rs:421:29
[INFO] [stdout]     |
[INFO] [stdout] 421 |                 if let Some(clicked_note_idx) = self.curr_mouse_over_note_idx {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 421 |                 if let Some(_clicked_note_idx) = self.curr_mouse_over_note_idx {
[INFO] [stdout]     |                             +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 421 -                 if let Some(clicked_note_idx) = self.curr_mouse_over_note_idx {
[INFO] [stdout] 421 +                 if let Some(audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN) = self.curr_mouse_over_note_idx {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:578:38
[INFO] [stdout]     |
[INFO] [stdout] 578 |                     let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                      ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 578 |                     let (curr_track, _curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                      +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 578 -                     let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout] 578 +                     let (curr_track, app::main_window::TOOL_ERASER_ENABLE) = self.get_current_track_and_channel();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]    --> src/editor/util.rs:268:10
[INFO] [stdout]     |
[INFO] [stdout] 268 |     for (i, (old_id, note, start_change, _)) in updates.into_iter().enumerate() {
[INFO] [stdout]     |          ^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 268 |     for (_i, (old_id, note, start_change, _)) in updates.into_iter().enumerate() {
[INFO] [stdout]     |          +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 268 -     for (i, (old_id, note, start_change, _)) in updates.into_iter().enumerate() {
[INFO] [stdout] 268 +     for (audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN, (old_id, note, start_change, _)) in updates.into_iter().enumerate() {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:844:34
[INFO] [stdout]     |
[INFO] [stdout] 844 |                 let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                  ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 844 |                 let (curr_track, _curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 844 -                 let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout] 844 +                 let (curr_track, app::main_window::TOOL_ERASER_ENABLE) = self.get_current_track_and_channel();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `min_tick`
[INFO] [stdout]    --> src/editor/note_editing.rs:845:38
[INFO] [stdout]     |
[INFO] [stdout] 845 |                 let (sel_notes_dupe, min_tick, max_tick) = {
[INFO] [stdout]     |                                      ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_min_tick`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_ids`
[INFO] [stdout]   --> src/editor/edit_functions.rs:85:32
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_ids`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `use_tick_lens`
[INFO] [stdout]   --> src/editor/edit_functions.rs:85:42
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                          ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, _use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                          +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_IS_BIASED`
[INFO] [stdout]    |
[INFO] [stdout] 85 -             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout] 85 +             EditFunction::Chop(note_ids, audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_IS_BIASED, snap_id, max_len) => {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]     --> src/editor/note_editing.rs:1069:96
[INFO] [stdout]      |
[INFO] [stdout] 1069 |     fn setup_notes_for_length_change(&mut self, note_ids: Option<Vec<usize>>, curr_track: u16, curr_channel: u8, base_id: usize) {
[INFO] [stdout]      |                                                                                                ^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1069 |     fn setup_notes_for_length_change(&mut self, note_ids: Option<Vec<usize>>, curr_track: u16, _curr_channel: u8, base_id: usize) {
[INFO] [stdout]      |                                                                                                +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]      |
[INFO] [stdout] 1069 -     fn setup_notes_for_length_change(&mut self, note_ids: Option<Vec<usize>>, curr_track: u16, curr_channel: u8, base_id: usize) {
[INFO] [stdout] 1069 +     fn setup_notes_for_length_change(&mut self, note_ids: Option<Vec<usize>>, curr_track: u16, app::main_window::TOOL_ERASER_ENABLE: u8, base_id: usize) {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `snap_id`
[INFO] [stdout]   --> src/editor/edit_functions.rs:85:57
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                                         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, _snap_id, max_len) => {
[INFO] [stdout]    |                                                         +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]    |
[INFO] [stdout] 85 -             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout] 85 +             EditFunction::Chop(note_ids, use_tick_lens, audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN, max_len) => {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_len`
[INFO] [stdout]   --> src/editor/edit_functions.rs:85:66
[INFO] [stdout]    |
[INFO] [stdout] 85 |             EditFunction::Chop(note_ids, use_tick_lens, snap_id, max_len) => {
[INFO] [stdout]    |                                                                  ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1318:21
[INFO] [stdout]      |
[INFO] [stdout] 1318 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1318 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1318 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1318 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1330:21
[INFO] [stdout]      |
[INFO] [stdout] 1330 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1330 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1330 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1330 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1344:21
[INFO] [stdout]      |
[INFO] [stdout] 1344 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1344 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1344 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1344 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1355:21
[INFO] [stdout]      |
[INFO] [stdout] 1355 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1355 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1355 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1355 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1402:21
[INFO] [stdout]      |
[INFO] [stdout] 1402 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1402 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1402 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1402 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ui`
[INFO] [stdout]     --> src/editor/note_editing.rs:1461:54
[INFO] [stdout]      |
[INFO] [stdout] 1461 |     pub fn update_cursor(&self, ctx: &egui::Context, ui: &mut Ui) {
[INFO] [stdout]      |                                                      ^^ help: if this is intentional, prefix it with an underscore: `_ui`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:152:82
[INFO] [stdout]     |
[INFO] [stdout] 152 |     fn move_note_ids_to_ghost_note(&mut self, ids: &Vec<usize>, curr_track: u16, curr_channel: u8) {
[INFO] [stdout]     |                                                                                  ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 152 |     fn move_note_ids_to_ghost_note(&mut self, ids: &Vec<usize>, curr_track: u16, _curr_channel: u8) {
[INFO] [stdout]     |                                                                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 152 -     fn move_note_ids_to_ghost_note(&mut self, ids: &Vec<usize>, curr_track: u16, curr_channel: u8) {
[INFO] [stdout] 152 +     fn move_note_ids_to_ghost_note(&mut self, ids: &Vec<usize>, curr_track: u16, app::main_window::TOOL_ERASER_ENABLE: u8) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:179:68
[INFO] [stdout]     |
[INFO] [stdout] 179 |     fn move_selected_ids_to_ghost_note(&mut self, curr_track: u16, curr_channel: u8) {
[INFO] [stdout]     |                                                                    ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 179 |     fn move_selected_ids_to_ghost_note(&mut self, curr_track: u16, _curr_channel: u8) {
[INFO] [stdout]     |                                                                    +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 179 -     fn move_selected_ids_to_ghost_note(&mut self, curr_track: u16, curr_channel: u8) {
[INFO] [stdout] 179 +     fn move_selected_ids_to_ghost_note(&mut self, curr_track: u16, app::main_window::TOOL_ERASER_ENABLE: u8) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:242:26
[INFO] [stdout]     |
[INFO] [stdout] 242 |         let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                          ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 242 |         let (curr_track, _curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                          +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 242 -         let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout] 242 +         let (curr_track, app::main_window::TOOL_ERASER_ENABLE) = self.get_current_track_and_channel();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `notes`
[INFO] [stdout]   --> src/editor/track_editing.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 |         notes: &Arc<RwLock<Vec<Vec<Note>>>>,
[INFO] [stdout]    |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_notes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ch_evs`
[INFO] [stdout]   --> src/editor/track_editing.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |         ch_evs: &Arc<RwLock<Vec<Vec<ChannelEvent>>>>,
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_ch_evs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:351:42
[INFO] [stdout]     |
[INFO] [stdout] 351 |                         let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                          ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 351 |                         let (curr_track, _curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                          +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 351 -                         let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout] 351 +                         let (curr_track, app::main_window::TOOL_ERASER_ENABLE) = self.get_current_track_and_channel();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `clicked_note_idx`
[INFO] [stdout]    --> src/editor/note_editing.rs:421:29
[INFO] [stdout]     |
[INFO] [stdout] 421 |                 if let Some(clicked_note_idx) = self.curr_mouse_over_note_idx {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 421 |                 if let Some(_clicked_note_idx) = self.curr_mouse_over_note_idx {
[INFO] [stdout]     |                             +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]     |
[INFO] [stdout] 421 -                 if let Some(clicked_note_idx) = self.curr_mouse_over_note_idx {
[INFO] [stdout] 421 +                 if let Some(audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN) = self.curr_mouse_over_note_idx {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:578:38
[INFO] [stdout]     |
[INFO] [stdout] 578 |                     let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                      ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 578 |                     let (curr_track, _curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                      +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 578 -                     let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout] 578 +                     let (curr_track, app::main_window::TOOL_ERASER_ENABLE) = self.get_current_track_and_channel();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]    --> src/editor/note_editing.rs:844:34
[INFO] [stdout]     |
[INFO] [stdout] 844 |                 let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                  ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 844 |                 let (curr_track, _curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout]     |                                  +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]     |
[INFO] [stdout] 844 -                 let (curr_track, curr_channel) = self.get_current_track_and_channel();
[INFO] [stdout] 844 +                 let (curr_track, app::main_window::TOOL_ERASER_ENABLE) = self.get_current_track_and_channel();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `min_tick`
[INFO] [stdout]    --> src/editor/note_editing.rs:845:38
[INFO] [stdout]     |
[INFO] [stdout] 845 |                 let (sel_notes_dupe, min_tick, max_tick) = {
[INFO] [stdout]     |                                      ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_min_tick`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_channel`
[INFO] [stdout]     --> src/editor/note_editing.rs:1069:96
[INFO] [stdout]      |
[INFO] [stdout] 1069 |     fn setup_notes_for_length_change(&mut self, note_ids: Option<Vec<usize>>, curr_track: u16, curr_channel: u8, base_id: usize) {
[INFO] [stdout]      |                                                                                                ^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1069 |     fn setup_notes_for_length_change(&mut self, note_ids: Option<Vec<usize>>, curr_track: u16, _curr_channel: u8, base_id: usize) {
[INFO] [stdout]      |                                                                                                +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `TOOL_ERASER_ENABLE`
[INFO] [stdout]      |
[INFO] [stdout] 1069 -     fn setup_notes_for_length_change(&mut self, note_ids: Option<Vec<usize>>, curr_track: u16, curr_channel: u8, base_id: usize) {
[INFO] [stdout] 1069 +     fn setup_notes_for_length_change(&mut self, note_ids: Option<Vec<usize>>, curr_track: u16, app::main_window::TOOL_ERASER_ENABLE: u8, base_id: usize) {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1318:21
[INFO] [stdout]      |
[INFO] [stdout] 1318 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1318 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1318 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1318 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1330:21
[INFO] [stdout]      |
[INFO] [stdout] 1330 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1330 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1330 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1330 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1344:21
[INFO] [stdout]      |
[INFO] [stdout] 1344 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1344 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1344 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1344 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1355:21
[INFO] [stdout]      |
[INFO] [stdout] 1355 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1355 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1355 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1355 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chan`
[INFO] [stdout]     --> src/editor/note_editing.rs:1402:21
[INFO] [stdout]      |
[INFO] [stdout] 1402 |                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     ^^^^
[INFO] [stdout]      |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]      |
[INFO] [stdout] 1402 |                 let _chan = (note_group & 0xF) as usize;
[INFO] [stdout]      |                     +
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_LEN`
[INFO] [stdout]      |
[INFO] [stdout] 1402 -                 let chan = (note_group & 0xF) as usize;
[INFO] [stdout] 1402 +                 let audio::event_playback::PlaybackManager::run_synth_loop::{closure#0}::_LEN = (note_group & 0xF) as usize;
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `raw_event`
[INFO] [stdout]    --> src/audio/kdmapi_engine.rs:169:34
[INFO] [stdout]     |
[INFO] [stdout] 169 |         fn send_event(&mut self, raw_event: &[u8]) -> Result<(), Box<dyn std::error::Error>> {
[INFO] [stdout]     |                                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_raw_event`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ui`
[INFO] [stdout]     --> src/editor/note_editing.rs:1461:54
[INFO] [stdout]      |
[INFO] [stdout] 1461 |     pub fn update_cursor(&self, ctx: &egui::Context, ui: &mut Ui) {
[INFO] [stdout]      |                                                      ^^ help: if this is intentional, prefix it with an underscore: `_ui`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `notes`
[INFO] [stdout]   --> src/editor/track_editing.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 |         notes: &Arc<RwLock<Vec<Vec<Note>>>>,
[INFO] [stdout]    |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_notes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ch_evs`
[INFO] [stdout]   --> src/editor/track_editing.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |         ch_evs: &Arc<RwLock<Vec<Vec<ChannelEvent>>>>,
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_ch_evs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `MidiEventBatchSize` is more private than the item `PlaybackManager::set_event_batch_size`
[INFO] [stdout]    --> src/audio/event_playback.rs:249:5
[INFO] [stdout]     |
[INFO] [stdout] 249 |     pub fn set_event_batch_size(&mut self, size: MidiEventBatchSize) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `PlaybackManager::set_event_batch_size` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `MidiEventBatchSize` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/audio/event_playback.rs:107:1
[INFO] [stdout]     |
[INFO] [stdout] 107 | enum MidiEventBatchSize {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NoteOff` and `NoteOn` are never constructed
[INFO] [stdout]  --> src/midi/events/channel_event.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub enum ChannelEventType {
[INFO] [stdout]   |          ---------------- variants in this enum
[INFO] [stdout] 4 |     NoteOff(u8),
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 5 |     NoteOn(u8, u8),
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `EndOfTrack` and `SequencerSpecific` are never constructed
[INFO] [stdout]   --> src/midi/events/meta_event.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum MetaEventType {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 17 |     EndOfTrack = 0x2F,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     SequencerSpecific = 0x7F
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MetaEventType` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `start_mut`, `key_mut`, `velocity_mut`, `channel_mut`, `set_start`, and `set_end` are never used
[INFO] [stdout]   --> src/midi/events/note.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl Note {
[INFO] [stdout]    | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn start_mut(&mut self) -> &mut MIDITick {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn key_mut(&mut self) -> &mut u8 {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn velocity_mut(&mut self) -> &mut u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn channel_mut(&mut self) -> &mut u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn set_start(&mut self, start: MIDITick) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn set_end(&mut self, end: MIDITick) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `read_u8x3` is never used
[INFO] [stdout]    --> src/midi/io/buffered_reader.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout]  16 | impl BufferedByteReader {
[INFO] [stdout]     | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn read_u8x3(&mut self) -> Result<(u8, u8, u8),()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_DRAGGING` is never used
[INFO] [stdout]   --> src/app/main_window.rs:47:7
[INFO] [stdout]    |
[INFO] [stdout] 47 | const TOOL_PENCIL_DRAGGING: u8 = 0x1;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_LENGTH_CHANGE` is never used
[INFO] [stdout]   --> src/app/main_window.rs:48:7
[INFO] [stdout]    |
[INFO] [stdout] 48 | const TOOL_PENCIL_LENGTH_CHANGE: u8 = 0x2;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_OVER_NOTE` is never used
[INFO] [stdout]   --> src/app/main_window.rs:49:7
[INFO] [stdout]    |
[INFO] [stdout] 49 | const TOOL_PENCIL_OVER_NOTE: u8 = 0x4;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_ALL_FLAGS_EXCEPT_MULTIEDIT` is never used
[INFO] [stdout]   --> src/app/main_window.rs:50:7
[INFO] [stdout]    |
[INFO] [stdout] 50 | const TOOL_PENCIL_ALL_FLAGS_EXCEPT_MULTIEDIT: u8 = 0b111;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_MULTIEDIT` is never used
[INFO] [stdout]   --> src/app/main_window.rs:51:7
[INFO] [stdout]    |
[INFO] [stdout] 51 | const TOOL_PENCIL_MULTIEDIT: u8 = 0x10;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_ERASER_ENABLE` is never used
[INFO] [stdout]   --> src/app/main_window.rs:53:7
[INFO] [stdout]    |
[INFO] [stdout] 53 | const TOOL_ERASER_ENABLE: u8 = 0x1;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EDITOR_DEBUG` is never used
[INFO] [stdout]   --> src/app/main_window.rs:55:7
[INFO] [stdout]    |
[INFO] [stdout] 55 | const EDITOR_DEBUG: bool = true;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `flags` is never read
[INFO] [stdout]   --> src/app/main_window.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct EditorToolSettings {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 89 |     curr_tool: EditorTool,
[INFO] [stdout] 90 |     flags: u8,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `reset_flags` is never used
[INFO] [stdout]    --> src/app/main_window.rs:117:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | impl EditorToolSettings {
[INFO] [stdout]     | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn reset_flags(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/app/main_window.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct MainWindow {
[INFO] [stdout]     |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 173 |     is_dragging_notes: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 174 |     old_note_lengths: Vec<u32>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 175 |
[INFO] [stdout] 176 |     temp_del_notes: VecDeque<Note>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 177 |     // only use for *immediate* note modifications!
[INFO] [stdout] 178 |     temp_modifying_note_ids: Vec<usize>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 179 |     temp_note_positions: Vec<(u32, u8)>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 180 |     pub temp_selected_notes: Arc<Mutex<Vec<usize>>>,
[INFO] [stdout] 181 |     drag_offset: i32,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     selection_range: (u32, u32, u8, u8),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     dragged_from_ui: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 191 |     draw_select_box: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     note_properties_popup_note_id: usize, // the id the popup is referring to
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     last_clicked_note_id: Option<usize>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     last_midi_ev_key: u8,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/app/main_window.rs:563:8
[INFO] [stdout]      |
[INFO] [stdout]  217 | impl MainWindow {
[INFO] [stdout]      | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  563 |     fn midi_pos_to_ui_pos(&self, ui: &mut Ui, tick_pos: u32, key_pos: u8) -> (f32, f32) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  594 |     fn get_selection_range(&self) -> (u32, u32, u8, u8) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  741 |     fn is_cursor_at_note_end(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1375 |     fn delete_notes(&mut self, sel_ids: Arc<Mutex<Vec<usize>>>) {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1395 |     fn delete_selected_notes(&mut self) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1584 |     fn duplicate_notes(&mut self, note_ids: Vec<usize>, paste_tick: MIDITick, track_src: u32, track_dst: u32, select_duplicate: bool) -> ...
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1686 |     fn apply_ghost_notes(&mut self, action: EditorAction) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `load_texture` is never used
[INFO] [stdout]    --> src/app/rendering/buffers.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 145 | impl Texture {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn load_texture(&mut self, path: &str, width: i32, height: i32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NOTE_BORDER_DARKNESS` is never used
[INFO] [stdout]   --> src/app/rendering/piano_roll.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const NOTE_BORDER_DARKNESS: f32 = 0.5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `NoteColor` is never used
[INFO] [stdout]   --> src/app/rendering/piano_roll.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub type NoteColor = [f32; 3];
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `started_playing`, `last_view_offset`, and `last_zoom` are never read
[INFO] [stdout]   --> src/app/rendering/piano_roll.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct PianoRollRenderer {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 94 |     started_playing: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 95 |     last_view_offset: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 96 |     last_zoom: f32
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `playback_manager` and `global_metas` are never read
[INFO] [stdout]   --> src/app/rendering/track_view.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct TrackViewRenderer {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 58 |     pub navigation: Arc<Mutex<TrackViewNavigation>>,
[INFO] [stdout] 59 |     pub playback_manager: Arc<Mutex<PlaybackManager>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     global_metas: Arc<RwLock<Vec<MetaEvent>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HANDLE_BUFFER_SIZE` is never used
[INFO] [stdout]   --> src/app/rendering/data_view.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const HANDLE_BUFFER_SIZE: usize = 4096;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `HandleRect` is never used
[INFO] [stdout]   --> src/app/rendering/data_view.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub type HandleRect = [f32; 4]; // (tick, length, handle_center (0.0 -> 1.0), handle_value (0.0 -> 1.0))
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `HandleColor` is never used
[INFO] [stdout]   --> src/app/rendering/data_view.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub type HandleColor = [f32; 3];
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RenderDataViewHandle` is never constructed
[INFO] [stdout]   --> src/app/rendering/data_view.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct RenderDataViewHandle(HandleRect, HandleColor);
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `started_playing`, `last_view_offset`, and `last_zoom` are never read
[INFO] [stdout]   --> src/app/rendering/data_view.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct DataViewRenderer {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 76 |     started_playing: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     last_view_offset: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 78 |     last_zoom: f32
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `GrayedOut` and `FullColor` are never constructed
[INFO] [stdout]   --> src/app/view_settings.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum VS_PianoRoll_OnionColoring {
[INFO] [stdout]    |          -------------------------- variants in this enum
[INFO] [stdout] 29 |     GrayedOut,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 30 |     PartialColor,
[INFO] [stdout] 31 |     FullColor
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `PitchBend` is never constructed
[INFO] [stdout]   --> src/app/view_settings.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub enum VS_PianoRoll_DataViewState {
[INFO] [stdout]    |          -------------------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 45 |     PitchBend
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VS_PianoRoll_DataViewState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_any`, `as_any_mut`, and `as_i32` are never used
[INFO] [stdout]   --> src/app/custom_widgets.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub trait NumberField {
[INFO] [stdout]    |           ----------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 10 |     fn as_any(&self) -> &dyn Any;
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 11 |     fn as_any_mut(&mut self) -> &mut dyn Any;
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     fn as_i32(&self) -> i32;
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DARK` is never used
[INFO] [stdout]  --> src/app/shared.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const DARK: NoteColor = [0.75, 0.75, 0.75];
[INFO] [stdout]   |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DARKER` is never used
[INFO] [stdout]   --> src/app/shared.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const DARKER: NoteColor = [0.5, 0.5, 0.5];
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DARKEST` is never used
[INFO] [stdout]   --> src/app/shared.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub const DARKEST: NoteColor = [0.25, 0.25, 0.25];
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WHITE` is never used
[INFO] [stdout]   --> src/app/shared.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const WHITE: NoteColor = [1.0, 1.0, 1.0];
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLACK` is never used
[INFO] [stdout]   --> src/app/shared.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub const BLACK: NoteColor = [0.0, 0.0, 0.0];
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SELECTED` is never used
[INFO] [stdout]   --> src/app/shared.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const SELECTED: NoteColor = [1.0, 0.5, 0.5];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Track` and `ChannelTrack` are never constructed
[INFO] [stdout]   --> src/app/shared.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub enum NoteColorIndexing {
[INFO] [stdout]    |          ----------------- variants in this enum
[INFO] [stdout] 38 |     Channel,
[INFO] [stdout] 39 |     Track,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 40 |     ChannelTrack
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `note_colors` is never read
[INFO] [stdout]   --> src/app/shared.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct NoteColors {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 50 |     note_colors: [[f32; 3]; 16],
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `with_index_type`, `get`, `get_mut`, and `get_and_mix` are never used
[INFO] [stdout]    --> src/app/shared.rs:83:12
[INFO] [stdout]     |
[INFO] [stdout]  65 | impl NoteColors {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn with_index_type(gl: &Arc<glow::Context>, index_type: NoteColorIndexing) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn get(&self, trk_chan: usize) -> &NoteColor {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn get_mut(&mut self, trk_chan: usize) -> &mut NoteColor {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn get_and_mix(&self, trk_chan: usize, b: &NoteColor, factor: f32) -> NoteColor {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new`, `load`, and `store` are never used
[INFO] [stdout]   --> src/editor/util.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub trait AtomicMIDITick: Copy + Send + Sync + 'static {
[INFO] [stdout]    |           -------------- associated functions in this trait
[INFO] [stdout] ...
[INFO] [stdout] 13 |     fn new(val: Self) -> Self::Atomic;
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 14 |     fn load(atom: &Self::Atomic, ord: AtomicOrdering) -> Self;
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 15 |     fn store(atom: &Self::Atomic, val: Self, ord: AtomicOrdering);
[INFO] [stdout]    |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `move_element` is never used
[INFO] [stdout]    --> src/editor/util.rs:299:8
[INFO] [stdout]     |
[INFO] [stdout] 299 | pub fn move_element<T>(v: &mut Vec<T>, from: usize, to: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_note_group` is never used
[INFO] [stdout]    --> src/editor/util.rs:307:8
[INFO] [stdout]     |
[INFO] [stdout] 307 | pub fn decode_note_group(note_group: u32) -> (u16, u8) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mul_rgb` is never used
[INFO] [stdout]    --> src/editor/util.rs:311:8
[INFO] [stdout]     |
[INFO] [stdout] 311 | pub fn mul_rgb(rgb: u32, val: f32) -> u32 {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_meta_next_tick` is never used
[INFO] [stdout]    --> src/editor/util.rs:318:8
[INFO] [stdout]     |
[INFO] [stdout] 318 | pub fn get_meta_next_tick(metas: &Vec<MetaEvent>, meta_type: MetaEventType, tick: MIDITick) -> Option<&MetaEvent> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `1` and `2` are never read
[INFO] [stdout]   --> src/editor/actions.rs:16:27
[INFO] [stdout]    |
[INFO] [stdout] 16 |     Duplicate(Vec<usize>, MIDITick, u32, u32), // (note_ids, paste_tick, source track/channel, destination track/channel)
[INFO] [stdout]    |     ---------             ^^^^^^^^  ^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EditorAction` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 16 -     Duplicate(Vec<usize>, MIDITick, u32, u32), // (note_ids, paste_tick, source track/channel, destination track/channel)
[INFO] [stdout] 16 +     Duplicate(Vec<usize>, (), (), u32), // (note_ids, paste_tick, source track/channel, destination track/channel)
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/editor/edit_functions.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl EditFunctions {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] 27 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_values` is never used
[INFO] [stdout]  --> src/editor/settings/editor_settings.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub trait Settings {
[INFO] [stdout]   |           -------- method in this trait
[INFO] [stdout] 8 |     fn get_values(&self) -> HashMap<&str, Box<dyn Any + 'static>>;
[INFO] [stdout]   |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `hide` is never used
[INFO] [stdout]   --> src/editor/settings/project_settings.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl ProjectSettings {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn hide(&mut self) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `is_mouse_over_ui` is never read
[INFO] [stdout]   --> src/editor/note_editing.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct NoteEditing {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 63 |     is_mouse_over_ui: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_ghost_notes` and `set_is_on_track_view` are never used
[INFO] [stdout]    --> src/editor/note_editing.rs:135:12
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl NoteEditing {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn get_ghost_notes(&self) -> Arc<Mutex<Vec<GhostNote>>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 296 |     pub fn set_is_on_track_view(&mut self, is_on_track_view: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NOTE_EDIT_TRACK_VIEW` is never used
[INFO] [stdout]   --> src/editor/note_editing.rs:12:15
[INFO] [stdout]    |
[INFO] [stdout] 12 |     pub const NOTE_EDIT_TRACK_VIEW: u16 = 0x4;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TrackEditing` is never constructed
[INFO] [stdout]  --> src/editor/track_editing.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct TrackEditing {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/editor/track_editing.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl TrackEditing {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 17 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Unlimited` is never constructed
[INFO] [stdout]    --> src/audio/event_playback.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | enum MidiEventBatchSize {
[INFO] [stdout]     |      ------------------ variant in this enum
[INFO] [stdout] 108 |     Unlimited,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `MidiEventBatchSize` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_event_batch_size` is never used
[INFO] [stdout]    --> src/audio/event_playback.rs:249:12
[INFO] [stdout]     |
[INFO] [stdout] 143 | impl PlaybackManager {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn set_event_batch_size(&mut self, size: MidiEventBatchSize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `supports_kdmapi` is never read
[INFO] [stdout]    --> src/audio/kdmapi_engine.rs:153:9
[INFO] [stdout]     |
[INFO] [stdout] 152 |     pub struct KDMAPI {
[INFO] [stdout]     |                ------ field in this struct
[INFO] [stdout] 153 |         supports_kdmapi: bool
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `init_audio` and `close_stream` are never used
[INFO] [stdout]  --> src/audio/midi_audio_engine.rs:2:8
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub trait MIDIAudioEngine {
[INFO] [stdout]   |           --------------- methods in this trait
[INFO] [stdout] 2 |     fn init_audio(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^
[INFO] [stdout] 3 |     fn close_stream(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `raw_event`
[INFO] [stdout]    --> src/audio/kdmapi_engine.rs:169:34
[INFO] [stdout]     |
[INFO] [stdout] 169 |         fn send_event(&mut self, raw_event: &[u8]) -> Result<(), Box<dyn std::error::Error>> {
[INFO] [stdout]     |                                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_raw_event`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/audio/midi_devices.rs:127:9
[INFO] [stdout]     |
[INFO] [stdout] 127 |         self.connect_out_port(self.curr_midi_out_port.unwrap());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 127 |         let _ = self.connect_out_port(self.curr_midi_out_port.unwrap());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `MidiEventBatchSize` is more private than the item `PlaybackManager::set_event_batch_size`
[INFO] [stdout]    --> src/audio/event_playback.rs:249:5
[INFO] [stdout]     |
[INFO] [stdout] 249 |     pub fn set_event_batch_size(&mut self, size: MidiEventBatchSize) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `PlaybackManager::set_event_batch_size` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `MidiEventBatchSize` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/audio/event_playback.rs:107:1
[INFO] [stdout]     |
[INFO] [stdout] 107 | enum MidiEventBatchSize {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NoteOff` and `NoteOn` are never constructed
[INFO] [stdout]  --> src/midi/events/channel_event.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub enum ChannelEventType {
[INFO] [stdout]   |          ---------------- variants in this enum
[INFO] [stdout] 4 |     NoteOff(u8),
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 5 |     NoteOn(u8, u8),
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `EndOfTrack` and `SequencerSpecific` are never constructed
[INFO] [stdout]   --> src/midi/events/meta_event.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum MetaEventType {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 17 |     EndOfTrack = 0x2F,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     SequencerSpecific = 0x7F
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MetaEventType` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `start_mut`, `key_mut`, `velocity_mut`, `channel_mut`, `set_start`, and `set_end` are never used
[INFO] [stdout]   --> src/midi/events/note.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl Note {
[INFO] [stdout]    | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn start_mut(&mut self) -> &mut MIDITick {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn key_mut(&mut self) -> &mut u8 {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn velocity_mut(&mut self) -> &mut u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn channel_mut(&mut self) -> &mut u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn set_start(&mut self, start: MIDITick) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn set_end(&mut self, end: MIDITick) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `read_u8x3` is never used
[INFO] [stdout]    --> src/midi/io/buffered_reader.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout]  16 | impl BufferedByteReader {
[INFO] [stdout]     | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn read_u8x3(&mut self) -> Result<(u8, u8, u8),()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_DRAGGING` is never used
[INFO] [stdout]   --> src/app/main_window.rs:47:7
[INFO] [stdout]    |
[INFO] [stdout] 47 | const TOOL_PENCIL_DRAGGING: u8 = 0x1;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_LENGTH_CHANGE` is never used
[INFO] [stdout]   --> src/app/main_window.rs:48:7
[INFO] [stdout]    |
[INFO] [stdout] 48 | const TOOL_PENCIL_LENGTH_CHANGE: u8 = 0x2;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_OVER_NOTE` is never used
[INFO] [stdout]   --> src/app/main_window.rs:49:7
[INFO] [stdout]    |
[INFO] [stdout] 49 | const TOOL_PENCIL_OVER_NOTE: u8 = 0x4;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_ALL_FLAGS_EXCEPT_MULTIEDIT` is never used
[INFO] [stdout]   --> src/app/main_window.rs:50:7
[INFO] [stdout]    |
[INFO] [stdout] 50 | const TOOL_PENCIL_ALL_FLAGS_EXCEPT_MULTIEDIT: u8 = 0b111;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_PENCIL_MULTIEDIT` is never used
[INFO] [stdout]   --> src/app/main_window.rs:51:7
[INFO] [stdout]    |
[INFO] [stdout] 51 | const TOOL_PENCIL_MULTIEDIT: u8 = 0x10;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOOL_ERASER_ENABLE` is never used
[INFO] [stdout]   --> src/app/main_window.rs:53:7
[INFO] [stdout]    |
[INFO] [stdout] 53 | const TOOL_ERASER_ENABLE: u8 = 0x1;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EDITOR_DEBUG` is never used
[INFO] [stdout]   --> src/app/main_window.rs:55:7
[INFO] [stdout]    |
[INFO] [stdout] 55 | const EDITOR_DEBUG: bool = true;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `flags` is never read
[INFO] [stdout]   --> src/app/main_window.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct EditorToolSettings {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 89 |     curr_tool: EditorTool,
[INFO] [stdout] 90 |     flags: u8,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `reset_flags` is never used
[INFO] [stdout]    --> src/app/main_window.rs:117:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | impl EditorToolSettings {
[INFO] [stdout]     | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn reset_flags(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/app/main_window.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct MainWindow {
[INFO] [stdout]     |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 173 |     is_dragging_notes: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 174 |     old_note_lengths: Vec<u32>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 175 |
[INFO] [stdout] 176 |     temp_del_notes: VecDeque<Note>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 177 |     // only use for *immediate* note modifications!
[INFO] [stdout] 178 |     temp_modifying_note_ids: Vec<usize>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 179 |     temp_note_positions: Vec<(u32, u8)>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 180 |     pub temp_selected_notes: Arc<Mutex<Vec<usize>>>,
[INFO] [stdout] 181 |     drag_offset: i32,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     selection_range: (u32, u32, u8, u8),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     dragged_from_ui: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 191 |     draw_select_box: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     note_properties_popup_note_id: usize, // the id the popup is referring to
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     last_clicked_note_id: Option<usize>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     last_midi_ev_key: u8,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/app/main_window.rs:563:8
[INFO] [stdout]      |
[INFO] [stdout]  217 | impl MainWindow {
[INFO] [stdout]      | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  563 |     fn midi_pos_to_ui_pos(&self, ui: &mut Ui, tick_pos: u32, key_pos: u8) -> (f32, f32) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  594 |     fn get_selection_range(&self) -> (u32, u32, u8, u8) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  741 |     fn is_cursor_at_note_end(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1375 |     fn delete_notes(&mut self, sel_ids: Arc<Mutex<Vec<usize>>>) {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1395 |     fn delete_selected_notes(&mut self) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1584 |     fn duplicate_notes(&mut self, note_ids: Vec<usize>, paste_tick: MIDITick, track_src: u32, track_dst: u32, select_duplicate: bool) -> ...
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1686 |     fn apply_ghost_notes(&mut self, action: EditorAction) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `load_texture` is never used
[INFO] [stdout]    --> src/app/rendering/buffers.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 145 | impl Texture {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn load_texture(&mut self, path: &str, width: i32, height: i32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NOTE_BORDER_DARKNESS` is never used
[INFO] [stdout]   --> src/app/rendering/piano_roll.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const NOTE_BORDER_DARKNESS: f32 = 0.5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `NoteColor` is never used
[INFO] [stdout]   --> src/app/rendering/piano_roll.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub type NoteColor = [f32; 3];
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `started_playing`, `last_view_offset`, and `last_zoom` are never read
[INFO] [stdout]   --> src/app/rendering/piano_roll.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct PianoRollRenderer {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 94 |     started_playing: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 95 |     last_view_offset: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 96 |     last_zoom: f32
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `playback_manager` and `global_metas` are never read
[INFO] [stdout]   --> src/app/rendering/track_view.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct TrackViewRenderer {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 58 |     pub navigation: Arc<Mutex<TrackViewNavigation>>,
[INFO] [stdout] 59 |     pub playback_manager: Arc<Mutex<PlaybackManager>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     global_metas: Arc<RwLock<Vec<MetaEvent>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HANDLE_BUFFER_SIZE` is never used
[INFO] [stdout]   --> src/app/rendering/data_view.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const HANDLE_BUFFER_SIZE: usize = 4096;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `HandleRect` is never used
[INFO] [stdout]   --> src/app/rendering/data_view.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub type HandleRect = [f32; 4]; // (tick, length, handle_center (0.0 -> 1.0), handle_value (0.0 -> 1.0))
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `HandleColor` is never used
[INFO] [stdout]   --> src/app/rendering/data_view.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub type HandleColor = [f32; 3];
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RenderDataViewHandle` is never constructed
[INFO] [stdout]   --> src/app/rendering/data_view.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct RenderDataViewHandle(HandleRect, HandleColor);
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `started_playing`, `last_view_offset`, and `last_zoom` are never read
[INFO] [stdout]   --> src/app/rendering/data_view.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct DataViewRenderer {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 76 |     started_playing: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     last_view_offset: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 78 |     last_zoom: f32
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `GrayedOut` and `FullColor` are never constructed
[INFO] [stdout]   --> src/app/view_settings.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum VS_PianoRoll_OnionColoring {
[INFO] [stdout]    |          -------------------------- variants in this enum
[INFO] [stdout] 29 |     GrayedOut,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 30 |     PartialColor,
[INFO] [stdout] 31 |     FullColor
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `PitchBend` is never constructed
[INFO] [stdout]   --> src/app/view_settings.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub enum VS_PianoRoll_DataViewState {
[INFO] [stdout]    |          -------------------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 45 |     PitchBend
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VS_PianoRoll_DataViewState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_any`, `as_any_mut`, and `as_i32` are never used
[INFO] [stdout]   --> src/app/custom_widgets.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub trait NumberField {
[INFO] [stdout]    |           ----------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 10 |     fn as_any(&self) -> &dyn Any;
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 11 |     fn as_any_mut(&mut self) -> &mut dyn Any;
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     fn as_i32(&self) -> i32;
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DARK` is never used
[INFO] [stdout]  --> src/app/shared.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const DARK: NoteColor = [0.75, 0.75, 0.75];
[INFO] [stdout]   |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DARKER` is never used
[INFO] [stdout]   --> src/app/shared.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const DARKER: NoteColor = [0.5, 0.5, 0.5];
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DARKEST` is never used
[INFO] [stdout]   --> src/app/shared.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub const DARKEST: NoteColor = [0.25, 0.25, 0.25];
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WHITE` is never used
[INFO] [stdout]   --> src/app/shared.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const WHITE: NoteColor = [1.0, 1.0, 1.0];
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLACK` is never used
[INFO] [stdout]   --> src/app/shared.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub const BLACK: NoteColor = [0.0, 0.0, 0.0];
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SELECTED` is never used
[INFO] [stdout]   --> src/app/shared.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const SELECTED: NoteColor = [1.0, 0.5, 0.5];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Track` and `ChannelTrack` are never constructed
[INFO] [stdout]   --> src/app/shared.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub enum NoteColorIndexing {
[INFO] [stdout]    |          ----------------- variants in this enum
[INFO] [stdout] 38 |     Channel,
[INFO] [stdout] 39 |     Track,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 40 |     ChannelTrack
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `note_colors` is never read
[INFO] [stdout]   --> src/app/shared.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct NoteColors {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 50 |     note_colors: [[f32; 3]; 16],
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `with_index_type`, `get`, `get_mut`, and `get_and_mix` are never used
[INFO] [stdout]    --> src/app/shared.rs:83:12
[INFO] [stdout]     |
[INFO] [stdout]  65 | impl NoteColors {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn with_index_type(gl: &Arc<glow::Context>, index_type: NoteColorIndexing) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn get(&self, trk_chan: usize) -> &NoteColor {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn get_mut(&mut self, trk_chan: usize) -> &mut NoteColor {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn get_and_mix(&self, trk_chan: usize, b: &NoteColor, factor: f32) -> NoteColor {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new`, `load`, and `store` are never used
[INFO] [stdout]   --> src/editor/util.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub trait AtomicMIDITick: Copy + Send + Sync + 'static {
[INFO] [stdout]    |           -------------- associated functions in this trait
[INFO] [stdout] ...
[INFO] [stdout] 13 |     fn new(val: Self) -> Self::Atomic;
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 14 |     fn load(atom: &Self::Atomic, ord: AtomicOrdering) -> Self;
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 15 |     fn store(atom: &Self::Atomic, val: Self, ord: AtomicOrdering);
[INFO] [stdout]    |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `move_element` is never used
[INFO] [stdout]    --> src/editor/util.rs:299:8
[INFO] [stdout]     |
[INFO] [stdout] 299 | pub fn move_element<T>(v: &mut Vec<T>, from: usize, to: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_note_group` is never used
[INFO] [stdout]    --> src/editor/util.rs:307:8
[INFO] [stdout]     |
[INFO] [stdout] 307 | pub fn decode_note_group(note_group: u32) -> (u16, u8) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mul_rgb` is never used
[INFO] [stdout]    --> src/editor/util.rs:311:8
[INFO] [stdout]     |
[INFO] [stdout] 311 | pub fn mul_rgb(rgb: u32, val: f32) -> u32 {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_meta_next_tick` is never used
[INFO] [stdout]    --> src/editor/util.rs:318:8
[INFO] [stdout]     |
[INFO] [stdout] 318 | pub fn get_meta_next_tick(metas: &Vec<MetaEvent>, meta_type: MetaEventType, tick: MIDITick) -> Option<&MetaEvent> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `1` and `2` are never read
[INFO] [stdout]   --> src/editor/actions.rs:16:27
[INFO] [stdout]    |
[INFO] [stdout] 16 |     Duplicate(Vec<usize>, MIDITick, u32, u32), // (note_ids, paste_tick, source track/channel, destination track/channel)
[INFO] [stdout]    |     ---------             ^^^^^^^^  ^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EditorAction` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 16 -     Duplicate(Vec<usize>, MIDITick, u32, u32), // (note_ids, paste_tick, source track/channel, destination track/channel)
[INFO] [stdout] 16 +     Duplicate(Vec<usize>, (), (), u32), // (note_ids, paste_tick, source track/channel, destination track/channel)
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/editor/edit_functions.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl EditFunctions {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] 27 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_values` is never used
[INFO] [stdout]  --> src/editor/settings/editor_settings.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub trait Settings {
[INFO] [stdout]   |           -------- method in this trait
[INFO] [stdout] 8 |     fn get_values(&self) -> HashMap<&str, Box<dyn Any + 'static>>;
[INFO] [stdout]   |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `hide` is never used
[INFO] [stdout]   --> src/editor/settings/project_settings.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl ProjectSettings {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn hide(&mut self) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `is_mouse_over_ui` is never read
[INFO] [stdout]   --> src/editor/note_editing.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct NoteEditing {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 63 |     is_mouse_over_ui: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_ghost_notes` and `set_is_on_track_view` are never used
[INFO] [stdout]    --> src/editor/note_editing.rs:135:12
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl NoteEditing {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn get_ghost_notes(&self) -> Arc<Mutex<Vec<GhostNote>>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 296 |     pub fn set_is_on_track_view(&mut self, is_on_track_view: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NOTE_EDIT_TRACK_VIEW` is never used
[INFO] [stdout]   --> src/editor/note_editing.rs:12:15
[INFO] [stdout]    |
[INFO] [stdout] 12 |     pub const NOTE_EDIT_TRACK_VIEW: u16 = 0x4;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TrackEditing` is never constructed
[INFO] [stdout]  --> src/editor/track_editing.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct TrackEditing {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/editor/track_editing.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl TrackEditing {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 17 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Unlimited` is never constructed
[INFO] [stdout]    --> src/audio/event_playback.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | enum MidiEventBatchSize {
[INFO] [stdout]     |      ------------------ variant in this enum
[INFO] [stdout] 108 |     Unlimited,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `MidiEventBatchSize` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_event_batch_size` is never used
[INFO] [stdout]    --> src/audio/event_playback.rs:249:12
[INFO] [stdout]     |
[INFO] [stdout] 143 | impl PlaybackManager {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn set_event_batch_size(&mut self, size: MidiEventBatchSize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `supports_kdmapi` is never read
[INFO] [stdout]    --> src/audio/kdmapi_engine.rs:153:9
[INFO] [stdout]     |
[INFO] [stdout] 152 |     pub struct KDMAPI {
[INFO] [stdout]     |                ------ field in this struct
[INFO] [stdout] 153 |         supports_kdmapi: bool
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `init_audio` and `close_stream` are never used
[INFO] [stdout]  --> src/audio/midi_audio_engine.rs:2:8
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub trait MIDIAudioEngine {
[INFO] [stdout]   |           --------------- methods in this trait
[INFO] [stdout] 2 |     fn init_audio(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^
[INFO] [stdout] 3 |     fn close_stream(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/audio/midi_devices.rs:127:9
[INFO] [stdout]     |
[INFO] [stdout] 127 |         self.connect_out_port(self.curr_midi_out_port.unwrap());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 127 |         let _ = self.connect_out_port(self.curr_midi_out_port.unwrap());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 18s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: ashpd v0.8.1
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 5`
[INFO] running `Command { std: "docker" "inspect" "fe084803487dc96371bc003d656540a39a99d29acd66dd16d568b30a2e020c2e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "fe084803487dc96371bc003d656540a39a99d29acd66dd16d568b30a2e020c2e", kill_on_drop: false }`
[INFO] [stdout] fe084803487dc96371bc003d656540a39a99d29acd66dd16d568b30a2e020c2e
