[INFO] cloning repository https://github.com/segaTk/Sound-Bar
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/segaTk/Sound-Bar" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FsegaTk%2FSound-Bar", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FsegaTk%2FSound-Bar'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 167c4bd94b4934894255ce0429c3e0bf84ed8947
[INFO] checking segaTk/Sound-Bar against 615014f15745532730b9ce7a1d9309f8b4756f93 for pr-160491
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FsegaTk%2FSound-Bar" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/segaTk/Sound-Bar
[INFO] finished tweaking git repo https://github.com/segaTk/Sound-Bar
[INFO] tweaked toml for git repo https://github.com/segaTk/Sound-Bar written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/segaTk/Sound-Bar on toolchain 615014f15745532730b9ce7a1d9309f8b4756f93
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+615014f15745532730b9ce7a1d9309f8b4756f93" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/segaTk/Sound-Bar 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" "+615014f15745532730b9ce7a1d9309f8b4756f93" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:00c5645b54fe3ce5dae1417175e3c7fb6a6646c021d554ecd63a097b8b9f3602" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 1e88f4aaaa625942734b4b9a34ccbecf52cd5ee96f84cd3bf3b9b24d617d9355
[INFO] running `Command { std: "docker" "start" "1e88f4aaaa625942734b4b9a34ccbecf52cd5ee96f84cd3bf3b9b24d617d9355", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "1e88f4aaaa625942734b4b9a34ccbecf52cd5ee96f84cd3bf3b9b24d617d9355", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "1e88f4aaaa625942734b4b9a34ccbecf52cd5ee96f84cd3bf3b9b24d617d9355" "/opt/rustwide/cargo-home/bin/cargo" "+615014f15745532730b9ce7a1d9309f8b4756f93" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "1e88f4aaaa625942734b4b9a34ccbecf52cd5ee96f84cd3bf3b9b24d617d9355", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "1e88f4aaaa625942734b4b9a34ccbecf52cd5ee96f84cd3bf3b9b24d617d9355" "/opt/rustwide/cargo-home/bin/cargo" "+615014f15745532730b9ce7a1d9309f8b4756f93" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling quote v1.0.46
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling winnow v1.0.3
[INFO] [stderr]     Checking linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]     Checking futures-lite v2.6.1
[INFO] [stderr]    Compiling zerocopy v0.8.52
[INFO] [stderr]     Checking simd-adler32 v0.3.9
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]     Checking piper v0.2.5
[INFO] [stderr]     Checking memchr v2.8.2
[INFO] [stderr]     Checking wayland-sys v0.31.11
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]     Checking syn v2.0.118
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking arrayvec v0.7.7
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking fdeflate v0.3.7
[INFO] [stderr]     Checking symphonia-core v0.5.5
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]    Compiling quick-xml v0.39.4
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]     Checking uuid v1.23.4
[INFO] [stderr]     Checking crc-catalog v2.5.0
[INFO] [stderr]     Checking flate2 v1.1.9
[INFO] [stderr]    Compiling miniquad v0.4.10
[INFO] [stderr]     Checking alsa v0.9.1
[INFO] [stderr]     Checking crc v3.4.0
[INFO] [stderr]     Checking png v0.17.16
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking blocking v1.6.2
[INFO] [stderr]     Checking async-executor v1.14.0
[INFO] [stderr]     Checking hmac v0.12.1
[INFO] [stderr]     Checking strength_reduce v0.2.4
[INFO] [stderr]    Compiling toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]     Checking raw-window-handle v0.6.2
[INFO] [stderr]    Compiling zip v2.4.2
[INFO] [stderr]    Compiling rfd v0.15.4
[INFO] [stderr]     Checking async-fs v2.2.0
[INFO] [stderr]     Checking time v0.3.53
[INFO] [stderr]     Checking rayon v1.12.0
[INFO] [stderr]     Checking zopfli v0.8.3
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]     Checking transpose v0.2.3
[INFO] [stderr]     Checking pbkdf2 v0.12.2
[INFO] [stderr]    Compiling toml_edit v0.25.12+spec-1.1.0
[INFO] [stderr]     Checking lzma-rs v0.3.0
[INFO] [stderr]    Compiling cc v1.2.65
[INFO] [stderr]     Checking image v0.24.9
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking cpal v0.15.3
[INFO] [stderr]    Compiling wayland-scanner v0.31.10
[INFO] [stderr]     Checking symphonia-metadata v0.5.5
[INFO] [stderr]     Checking primal-check v0.3.4
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]     Checking symphonia-bundle-mp3 v0.5.5
[INFO] [stderr]     Checking pollster v0.4.0
[INFO] [stderr]     Checking deflate64 v0.1.12
[INFO] [stderr]     Checking serde_json v1.0.150
[INFO] [stderr]     Checking chrono v0.4.45
[INFO] [stderr]     Checking rustfft v6.4.1
[INFO] [stderr]    Compiling proc-macro-crate v3.5.0
[INFO] [stderr]     Checking quick-xml v0.36.2
[INFO] [stderr]     Checking symphonia v0.5.5
[INFO] [stderr]     Checking rodio v0.17.3
[INFO] [stderr]     Checking macroquad v0.4.15
[INFO] [stderr]    Compiling zstd-sys v2.0.16+zstd.1.5.7
[INFO] [stderr]    Compiling wayland-backend v0.3.15
[INFO] [stderr]    Compiling bzip2-sys v0.1.13+1.0.8
[INFO] [stderr]    Compiling lzma-sys v0.1.20
[INFO] [stderr]     Checking midly v0.5.3
[INFO] [stderr]     Checking bzip2 v0.5.2
[INFO] [stderr]     Checking xz2 v0.1.7
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking polling v3.11.0
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking async-io v2.6.0
[INFO] [stderr]     Checking rand v0.8.6
[INFO] [stderr]     Checking rand v0.9.4
[INFO] [stderr]     Checking async-signal v0.2.14
[INFO] [stderr]     Checking async-net v2.0.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling enumflags2_derive v0.7.12
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]     Checking async-process v2.5.0
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling serde_repr v0.1.20
[INFO] [stderr]    Compiling async-recursion v1.1.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling zeroize_derive v1.5.0
[INFO] [stderr]     Checking wayland-client v0.31.14
[INFO] [stderr]     Checking futures-util v0.3.32
[INFO] [stderr]     Checking zerofrom v0.1.8
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking yoke v0.8.3
[INFO] [stderr]     Checking zeroize v1.9.0
[INFO] [stderr]     Checking zerovec v0.11.6
[INFO] [stderr]     Checking zerotrie v0.2.4
[INFO] [stderr]     Checking thiserror v2.0.18
[INFO] [stderr]    Compiling zstd-safe v7.2.4
[INFO] [stderr]     Checking zstd v0.13.3
[INFO] [stderr]     Checking tinystr v0.8.3
[INFO] [stderr]     Checking potential_utf v0.1.5
[INFO] [stderr]     Checking wayland-protocols v0.32.13
[INFO] [stderr]     Checking icu_collections v2.2.0
[INFO] [stderr]     Checking icu_locale_core v2.2.0
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking icu_provider v2.2.0
[INFO] [stderr]     Checking icu_properties v2.2.0
[INFO] [stderr]     Checking icu_normalizer v2.2.0
[INFO] [stderr]     Checking enumflags2 v0.7.12
[INFO] [stderr]     Checking zvariant_utils v3.4.0
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]    Compiling zvariant_derive v5.12.0
[INFO] [stderr]    Compiling zvariant v5.12.0
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking zbus_names v4.3.2
[INFO] [stderr]    Compiling zbus_macros v5.16.0
[INFO] [stderr]     Checking zbus v5.16.0
[INFO] [stderr]     Checking ashpd v0.11.1
[INFO] [stderr]     Checking sound_notes v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `all_tunings`
[INFO] [stdout]   --> src/graphics.rs:11:41
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::tuner_presets::{get_tunings, all_tunings, GuitarTuning};
[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 imports: `GameEventNote` and `PLAYHEAD_X`
[INFO] [stdout]   --> src/graphics.rs:23:29
[INFO] [stdout]    |
[INFO] [stdout] 23 |     game_types::{GameEvent, GameEventNote},
[INFO] [stdout]    |                             ^^^^^^^^^^^^^
[INFO] [stdout] 24 |     lesson_game::{LessonState, HintData},
[INFO] [stdout] 25 |     PLAYHEAD_X, HIT_ZONE_Y, HIT_TOLERANCE, HIGHWAY_H,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/lessons.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MouseButton` and `is_mouse_button_pressed`
[INFO] [stdout]   --> src/lessons.rs:9:18
[INFO] [stdout]    |
[INFO] [stdout]  9 |     Color, Font, MouseButton, TextParams,
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] 10 |     draw_line, draw_rectangle, draw_rectangle_lines, draw_text_ex,
[INFO] [stdout] 11 |     is_mouse_button_pressed, measure_text, mouse_wheel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DrawTextureParams`, `Texture2D`, and `draw_texture_ex`
[INFO] [stdout]   --> src/lessons.rs:13:26
[INFO] [stdout]    |
[INFO] [stdout] 13 | use macroquad::texture::{Texture2D, draw_texture_ex, DrawTextureParams};
[INFO] [stdout]    |                          ^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `macroquad::math::Vec2`
[INFO] [stdout]   --> src/lessons.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use macroquad::math::Vec2;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::localization::Localization`
[INFO] [stdout]   --> src/lessons.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::localization::Localization;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PLAYHEAD_X`
[INFO] [stdout]   --> src/game_types.rs:12:36
[INFO] [stdout]    |
[INFO] [stdout] 12 |     SPEED_MULTIPLIERS, HIT_ZONE_Y, PLAYHEAD_X, NUM_STRINGS,
[INFO] [stdout]    |                                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HIT_TOLERANCE`, `HIT_ZONE_Y`, `get_frequency`, and `parser::NoteTechnique`
[INFO] [stdout]   --> src/lesson_game.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     parser::NoteTechnique,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     get_frequency, correct_octave_error, get_freq_tolerance, is_valid_guitar_freq,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 19 |     NUM_STRINGS, HIT_ZONE_Y, HIT_TOLERANCE,
[INFO] [stdout]    |                  ^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Format`
[INFO] [stdout]  --> src/midi_parser.rs:7:47
[INFO] [stdout]   |
[INFO] [stdout] 7 | use midly::{Smf, TrackEventKind, MetaMessage, Format, Timing};
[INFO] [stdout]   |                                               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/midi_parser.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Section`
[INFO] [stdout]   --> src/midi_parser.rs:11:96
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::parser::{SongEvent, ChordNote, NoteTechnique, SongNote, ParsedSongData, TempoEvent, Section};
[INFO] [stdout]    |                                                                                                ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `GameEventNote`
[INFO] [stdout]   --> src/main.rs:43:29
[INFO] [stdout]    |
[INFO] [stdout] 43 | use game_types::{GameEvent, GameEventNote, GameNote};
[INFO] [stdout]    |                             ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GuitarTuning`, `all_tunings`, and `get_tunings`
[INFO] [stdout]   --> src/main.rs:46:21
[INFO] [stdout]    |
[INFO] [stdout] 46 | use tuner_presets::{get_tunings, all_tunings, GuitarTuning}; 
[INFO] [stdout]    |                     ^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `all_tunings`
[INFO] [stdout]   --> src/graphics.rs:11:41
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::tuner_presets::{get_tunings, all_tunings, GuitarTuning};
[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 imports: `GameEventNote` and `PLAYHEAD_X`
[INFO] [stdout]   --> src/graphics.rs:23:29
[INFO] [stdout]    |
[INFO] [stdout] 23 |     game_types::{GameEvent, GameEventNote},
[INFO] [stdout]    |                             ^^^^^^^^^^^^^
[INFO] [stdout] 24 |     lesson_game::{LessonState, HintData},
[INFO] [stdout] 25 |     PLAYHEAD_X, HIT_ZONE_Y, HIT_TOLERANCE, HIGHWAY_H,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/lessons.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MouseButton` and `is_mouse_button_pressed`
[INFO] [stdout]   --> src/lessons.rs:9:18
[INFO] [stdout]    |
[INFO] [stdout]  9 |     Color, Font, MouseButton, TextParams,
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] 10 |     draw_line, draw_rectangle, draw_rectangle_lines, draw_text_ex,
[INFO] [stdout] 11 |     is_mouse_button_pressed, measure_text, mouse_wheel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DrawTextureParams`, `Texture2D`, and `draw_texture_ex`
[INFO] [stdout]   --> src/lessons.rs:13:26
[INFO] [stdout]    |
[INFO] [stdout] 13 | use macroquad::texture::{Texture2D, draw_texture_ex, DrawTextureParams};
[INFO] [stdout]    |                          ^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `macroquad::math::Vec2`
[INFO] [stdout]   --> src/lessons.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use macroquad::math::Vec2;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::localization::Localization`
[INFO] [stdout]   --> src/lessons.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::localization::Localization;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PLAYHEAD_X`
[INFO] [stdout]   --> src/game_types.rs:12:36
[INFO] [stdout]    |
[INFO] [stdout] 12 |     SPEED_MULTIPLIERS, HIT_ZONE_Y, PLAYHEAD_X, NUM_STRINGS,
[INFO] [stdout]    |                                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HIT_TOLERANCE`, `HIT_ZONE_Y`, `get_frequency`, and `parser::NoteTechnique`
[INFO] [stdout]   --> src/lesson_game.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     parser::NoteTechnique,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     get_frequency, correct_octave_error, get_freq_tolerance, is_valid_guitar_freq,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 19 |     NUM_STRINGS, HIT_ZONE_Y, HIT_TOLERANCE,
[INFO] [stdout]    |                  ^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Format`
[INFO] [stdout]  --> src/midi_parser.rs:7:47
[INFO] [stdout]   |
[INFO] [stdout] 7 | use midly::{Smf, TrackEventKind, MetaMessage, Format, Timing};
[INFO] [stdout]   |                                               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/midi_parser.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Section`
[INFO] [stdout]   --> src/midi_parser.rs:11:96
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::parser::{SongEvent, ChordNote, NoteTechnique, SongNote, ParsedSongData, TempoEvent, Section};
[INFO] [stdout]    |                                                                                                ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `GameEventNote`
[INFO] [stdout]   --> src/main.rs:43:29
[INFO] [stdout]    |
[INFO] [stdout] 43 | use game_types::{GameEvent, GameEventNote, GameNote};
[INFO] [stdout]    |                             ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GuitarTuning`, `all_tunings`, and `get_tunings`
[INFO] [stdout]   --> src/main.rs:46:21
[INFO] [stdout]    |
[INFO] [stdout] 46 | use tuner_presets::{get_tunings, all_tunings, GuitarTuning}; 
[INFO] [stdout]    |                     ^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/main.rs:1484:9
[INFO] [stdout]      |
[INFO] [stdout] 1484 |     let mut studio_playing = false;
[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/main.rs:1487:9
[INFO] [stdout]      |
[INFO] [stdout] 1487 |     let mut studio_is_playing = false;
[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/main.rs:1492:9
[INFO] [stdout]      |
[INFO] [stdout] 1492 |     let mut studio_generate_clicked = false;
[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/main.rs:1493:9
[INFO] [stdout]      |
[INFO] [stdout] 1493 |     let mut studio_generation_message: Option<(String, f64)> = None;
[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/main.rs:1689:35
[INFO] [stdout]      |
[INFO] [stdout] 1689 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1697:35
[INFO] [stdout]      |
[INFO] [stdout] 1697 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1707:35
[INFO] [stdout]      |
[INFO] [stdout] 1707 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1714:43
[INFO] [stdout]      |
[INFO] [stdout] 1714 | ...                   if let Ok(mut o) = output_arc.lock() {
[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/main.rs:1745:35
[INFO] [stdout]      |
[INFO] [stdout] 1745 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1815:39
[INFO] [stdout]      |
[INFO] [stdout] 1815 | ...                   if let Ok(mut o) = output_arc.lock() {
[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/main.rs:1891:35
[INFO] [stdout]      |
[INFO] [stdout] 1891 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1901:35
[INFO] [stdout]      |
[INFO] [stdout] 1901 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1484:9
[INFO] [stdout]      |
[INFO] [stdout] 1484 |     let mut studio_playing = false;
[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/main.rs:1487:9
[INFO] [stdout]      |
[INFO] [stdout] 1487 |     let mut studio_is_playing = false;
[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/main.rs:1492:9
[INFO] [stdout]      |
[INFO] [stdout] 1492 |     let mut studio_generate_clicked = false;
[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/main.rs:1493:9
[INFO] [stdout]      |
[INFO] [stdout] 1493 |     let mut studio_generation_message: Option<(String, f64)> = None;
[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/main.rs:1689:35
[INFO] [stdout]      |
[INFO] [stdout] 1689 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1697:35
[INFO] [stdout]      |
[INFO] [stdout] 1697 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1707:35
[INFO] [stdout]      |
[INFO] [stdout] 1707 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1714:43
[INFO] [stdout]      |
[INFO] [stdout] 1714 | ...                   if let Ok(mut o) = output_arc.lock() {
[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/main.rs:1745:35
[INFO] [stdout]      |
[INFO] [stdout] 1745 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1815:39
[INFO] [stdout]      |
[INFO] [stdout] 1815 | ...                   if let Ok(mut o) = output_arc.lock() {
[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/main.rs:1891:35
[INFO] [stdout]      |
[INFO] [stdout] 1891 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[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/main.rs:1901:35
[INFO] [stdout]      |
[INFO] [stdout] 1901 |                         if let Ok(mut o) = output_arc.lock() { o.stop_playback(); }
[INFO] [stdout]      |                                   ----^
[INFO] [stdout]      |                                   |
[INFO] [stdout]      |                                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `best_string` is assigned to, but never used
[INFO] [stdout]    --> src/audio_engine.rs:783:13
[INFO] [stdout]     |
[INFO] [stdout] 783 |         let mut best_string = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_best_string` instead
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `best_fret` is assigned to, but never used
[INFO] [stdout]    --> src/audio_engine.rs:784:13
[INFO] [stdout]     |
[INFO] [stdout] 784 |         let mut best_fret = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_best_fret` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `best_string` is never read
[INFO] [stdout]    --> src/audio_engine.rs:798:21
[INFO] [stdout]     |
[INFO] [stdout] 798 |                     best_string = string_idx;
[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: value assigned to `best_fret` is never read
[INFO] [stdout]    --> src/audio_engine.rs:799:21
[INFO] [stdout]     |
[INFO] [stdout] 799 |                     best_fret = fret as usize;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/audio_engine.rs:947:9
[INFO] [stdout]     |
[INFO] [stdout] 947 |     let mut file = File::create(output_path)
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data_len`
[INFO] [stdout]    --> src/audio_engine.rs:926:13
[INFO] [stdout]     |
[INFO] [stdout] 926 |         let data_len = buffer.len() - data_start;
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_data_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lmb`
[INFO] [stdout]     --> src/graphics.rs:2724:13
[INFO] [stdout]      |
[INFO] [stdout] 2724 |         let lmb = is_mouse_button_pressed(MouseButton::Left);
[INFO] [stdout]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_lmb`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `best_string` is assigned to, but never used
[INFO] [stdout]    --> src/audio_engine.rs:783:13
[INFO] [stdout]     |
[INFO] [stdout] 783 |         let mut best_string = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_best_string` instead
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `best_fret` is assigned to, but never used
[INFO] [stdout]    --> src/audio_engine.rs:784:13
[INFO] [stdout]     |
[INFO] [stdout] 784 |         let mut best_fret = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_best_fret` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `best_string` is never read
[INFO] [stdout]    --> src/audio_engine.rs:798:21
[INFO] [stdout]     |
[INFO] [stdout] 798 |                     best_string = string_idx;
[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: value assigned to `best_fret` is never read
[INFO] [stdout]    --> src/audio_engine.rs:799:21
[INFO] [stdout]     |
[INFO] [stdout] 799 |                     best_fret = fret as usize;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/audio_engine.rs:947:9
[INFO] [stdout]     |
[INFO] [stdout] 947 |     let mut file = File::create(output_path)
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data_len`
[INFO] [stdout]    --> src/audio_engine.rs:926:13
[INFO] [stdout]     |
[INFO] [stdout] 926 |         let data_len = buffer.len() - data_start;
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_data_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/graphics.rs:5026:9
[INFO] [stdout]      |
[INFO] [stdout] 5026 |     let mut new_cursor = rename_cursor;
[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/graphics.rs:5040:9
[INFO] [stdout]      |
[INFO] [stdout] 5040 |     let mut rename_cancel = false;
[INFO] [stdout]      |         ----^^^^^^^^^^^^^
[INFO] [stdout]      |         |
[INFO] [stdout]      |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nw`
[INFO] [stdout]     --> src/graphics.rs:5307:13
[INFO] [stdout]      |
[INFO] [stdout] 5307 |         let nw = measure_text(&num_str, Some(f), nfs, 1.0).width / gc.scale_x;
[INFO] [stdout]      |             ^^ help: if this is intentional, prefix it with an underscore: `_nw`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nw`
[INFO] [stdout]     --> src/graphics.rs:5409:9
[INFO] [stdout]      |
[INFO] [stdout] 5409 |     let nw = measure_text(&display_name, Some(f), ntf, 1.0).width / gc.scale_x;
[INFO] [stdout]      |         ^^ help: if this is intentional, prefix it with an underscore: `_nw`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dfs`
[INFO] [stdout]     --> src/graphics.rs:5565:13
[INFO] [stdout]      |
[INFO] [stdout] 5565 |         let dfs = gc.s(32.0).round() as f32;
[INFO] [stdout]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_dfs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lmb`
[INFO] [stdout]     --> src/graphics.rs:2724:13
[INFO] [stdout]      |
[INFO] [stdout] 2724 |         let lmb = is_mouse_button_pressed(MouseButton::Left);
[INFO] [stdout]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_lmb`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/graphics.rs:5026:9
[INFO] [stdout]      |
[INFO] [stdout] 5026 |     let mut new_cursor = rename_cursor;
[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/graphics.rs:5040:9
[INFO] [stdout]      |
[INFO] [stdout] 5040 |     let mut rename_cancel = false;
[INFO] [stdout]      |         ----^^^^^^^^^^^^^
[INFO] [stdout]      |         |
[INFO] [stdout]      |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nw`
[INFO] [stdout]     --> src/graphics.rs:5307:13
[INFO] [stdout]      |
[INFO] [stdout] 5307 |         let nw = measure_text(&num_str, Some(f), nfs, 1.0).width / gc.scale_x;
[INFO] [stdout]      |             ^^ help: if this is intentional, prefix it with an underscore: `_nw`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nw`
[INFO] [stdout]     --> src/graphics.rs:5409:9
[INFO] [stdout]      |
[INFO] [stdout] 5409 |     let nw = measure_text(&display_name, Some(f), ntf, 1.0).width / gc.scale_x;
[INFO] [stdout]      |         ^^ help: if this is intentional, prefix it with an underscore: `_nw`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dfs`
[INFO] [stdout]     --> src/graphics.rs:5565:13
[INFO] [stdout]      |
[INFO] [stdout] 5565 |         let dfs = gc.s(32.0).round() as f32;
[INFO] [stdout]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_dfs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tf`
[INFO] [stdout]    --> src/theme.rs:590:39
[INFO] [stdout]     |
[INFO] [stdout] 590 |     sx: f32, sy: f32, def: &CloudDef, tf: f32, light: &SunLight
[INFO] [stdout]     |                                       ^^ help: if this is intentional, prefix it with an underscore: `_tf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tuning`
[INFO] [stdout]    --> src/lesson_game.rs:148:5
[INFO] [stdout]     |
[INFO] [stdout] 148 |     tuning: &[f32; NUM_STRINGS],
[INFO] [stdout]     |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tuning`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tuning`
[INFO] [stdout]   --> src/midi_parser.rs:32:35
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn pitch_to_guitar(pitch: u8, tuning: &[f32; 6]) -> Option<(usize, usize)> {
[INFO] [stdout]    |                                   ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tuning`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `studio_playing`
[INFO] [stdout]     --> src/main.rs:1484:9
[INFO] [stdout]      |
[INFO] [stdout] 1484 |     let mut studio_playing = false;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_studio_playing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `studio_is_playing`
[INFO] [stdout]     --> src/main.rs:1487:9
[INFO] [stdout]      |
[INFO] [stdout] 1487 |     let mut studio_is_playing = false;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_studio_is_playing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `studio_current_playing_file` is assigned to, but never used
[INFO] [stdout]     --> src/main.rs:1488:9
[INFO] [stdout]      |
[INFO] [stdout] 1488 |     let mut studio_current_playing_file: Option<String> = None;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: consider using `_studio_current_playing_file` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `studio_generate_clicked`
[INFO] [stdout]     --> src/main.rs:1492:9
[INFO] [stdout]      |
[INFO] [stdout] 1492 |     let mut studio_generate_clicked = false;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_studio_generate_clicked`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `studio_generation_message`
[INFO] [stdout]     --> src/main.rs:1493:9
[INFO] [stdout]      |
[INFO] [stdout] 1493 |     let mut studio_generation_message: Option<(String, f64)> = None;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_studio_generation_message`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]     --> src/main.rs:1829:29
[INFO] [stdout]      |
[INFO] [stdout] 1829 |                         Err(e) => {
[INFO] [stdout]      |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tuner_click`
[INFO] [stdout]     --> src/main.rs:1999:46
[INFO] [stdout]      |
[INFO] [stdout] 1999 |                 let (new_ssi, actual, enter, tuner_click, import_click, del_idx) =
[INFO] [stdout]      |                                              ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tuner_click`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_rendering` is never read
[INFO] [stdout]     --> src/main.rs:1753:21
[INFO] [stdout]      |
[INFO] [stdout] 1753 |                     studio_rendering = true;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 1806 |                     studio_rendering = false;
[INFO] [stdout]      |                     ------------------------ `studio_rendering` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_rendering` is never read
[INFO] [stdout]     --> src/main.rs:1837:21
[INFO] [stdout]      |
[INFO] [stdout] 1837 |                     studio_rendering = true;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 1855 |                     studio_rendering = false;
[INFO] [stdout]      |                     ------------------------ `studio_rendering` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_rendering` is never read
[INFO] [stdout]     --> src/main.rs:1860:21
[INFO] [stdout]      |
[INFO] [stdout] 1860 |                     studio_rendering = true;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 1874 |                     studio_rendering = false;
[INFO] [stdout]      |                     ------------------------ `studio_rendering` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1720:37
[INFO] [stdout]      |
[INFO] [stdout] 1720 | ...                   studio_current_playing_file = Some(file_path);
[INFO] [stdout]      |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1709:25
[INFO] [stdout]      |
[INFO] [stdout] 1709 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1747:25
[INFO] [stdout]      |
[INFO] [stdout] 1747 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1903:25
[INFO] [stdout]      |
[INFO] [stdout] 1903 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1893:25
[INFO] [stdout]      |
[INFO] [stdout] 1893 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1699:25
[INFO] [stdout]      |
[INFO] [stdout] 1699 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1691:25
[INFO] [stdout]      |
[INFO] [stdout] 1691 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_cursor` is never read
[INFO] [stdout]     --> src/main.rs:2367:17
[INFO] [stdout]      |
[INFO] [stdout] 2367 |                 tuner_rename_cursor = new_cursor;
[INFO] [stdout]      |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2400 |                     tuner_rename_cursor = 0;
[INFO] [stdout]      |                     ----------------------- `tuner_rename_cursor` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_cursor` is never read
[INFO] [stdout]     --> src/main.rs:2400:21
[INFO] [stdout]      |
[INFO] [stdout] 2400 |                     tuner_rename_cursor = 0;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2409 |                     tuner_rename_cursor = tuner_rename_buffer.len();
[INFO] [stdout]      |                     ----------------------------------------------- `tuner_rename_cursor` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_cursor` is never read
[INFO] [stdout]     --> src/main.rs:2409:21
[INFO] [stdout]      |
[INFO] [stdout] 2409 |                     tuner_rename_cursor = tuner_rename_buffer.len();
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2413 |                 tuner_rename_cursor = new_cursor;
[INFO] [stdout]      |                 -------------------------------- `tuner_rename_cursor` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_selection` is never read
[INFO] [stdout]     --> src/main.rs:2368:17
[INFO] [stdout]      |
[INFO] [stdout] 2368 |                 tuner_rename_selection = new_selection;
[INFO] [stdout]      |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2401 |                     tuner_rename_selection = None;
[INFO] [stdout]      |                     ----------------------------- `tuner_rename_selection` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_selection` is never read
[INFO] [stdout]     --> src/main.rs:2401:21
[INFO] [stdout]      |
[INFO] [stdout] 2401 |                     tuner_rename_selection = None;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2410 |                     tuner_rename_selection = Some((0, tuner_rename_buffer.len())); // Выделяем всё
[INFO] [stdout]      |                     ------------------------------------------------------------- `tuner_rename_selection` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_selection` is never read
[INFO] [stdout]     --> src/main.rs:2410:21
[INFO] [stdout]      |
[INFO] [stdout] 2410 |                     tuner_rename_selection = Some((0, tuner_rename_buffer.len())); // Выделяем всё
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2414 |                 tuner_rename_selection = new_selection;
[INFO] [stdout]      |                 -------------------------------------- `tuner_rename_selection` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tf`
[INFO] [stdout]    --> src/theme.rs:590:39
[INFO] [stdout]     |
[INFO] [stdout] 590 |     sx: f32, sy: f32, def: &CloudDef, tf: f32, light: &SunLight
[INFO] [stdout]     |                                       ^^ help: if this is intentional, prefix it with an underscore: `_tf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tuning`
[INFO] [stdout]    --> src/lesson_game.rs:148:5
[INFO] [stdout]     |
[INFO] [stdout] 148 |     tuning: &[f32; NUM_STRINGS],
[INFO] [stdout]     |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tuning`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tuning`
[INFO] [stdout]   --> src/midi_parser.rs:32:35
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn pitch_to_guitar(pitch: u8, tuning: &[f32; 6]) -> Option<(usize, usize)> {
[INFO] [stdout]    |                                   ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tuning`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `studio_playing`
[INFO] [stdout]     --> src/main.rs:1484:9
[INFO] [stdout]      |
[INFO] [stdout] 1484 |     let mut studio_playing = false;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_studio_playing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `studio_is_playing`
[INFO] [stdout]     --> src/main.rs:1487:9
[INFO] [stdout]      |
[INFO] [stdout] 1487 |     let mut studio_is_playing = false;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_studio_is_playing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `studio_current_playing_file` is assigned to, but never used
[INFO] [stdout]     --> src/main.rs:1488:9
[INFO] [stdout]      |
[INFO] [stdout] 1488 |     let mut studio_current_playing_file: Option<String> = None;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: consider using `_studio_current_playing_file` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `studio_generate_clicked`
[INFO] [stdout]     --> src/main.rs:1492:9
[INFO] [stdout]      |
[INFO] [stdout] 1492 |     let mut studio_generate_clicked = false;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_studio_generate_clicked`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `studio_generation_message`
[INFO] [stdout]     --> src/main.rs:1493:9
[INFO] [stdout]      |
[INFO] [stdout] 1493 |     let mut studio_generation_message: Option<(String, f64)> = None;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_studio_generation_message`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]     --> src/main.rs:1829:29
[INFO] [stdout]      |
[INFO] [stdout] 1829 |                         Err(e) => {
[INFO] [stdout]      |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tuner_click`
[INFO] [stdout]     --> src/main.rs:1999:46
[INFO] [stdout]      |
[INFO] [stdout] 1999 |                 let (new_ssi, actual, enter, tuner_click, import_click, del_idx) =
[INFO] [stdout]      |                                              ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tuner_click`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_rendering` is never read
[INFO] [stdout]     --> src/main.rs:1753:21
[INFO] [stdout]      |
[INFO] [stdout] 1753 |                     studio_rendering = true;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 1806 |                     studio_rendering = false;
[INFO] [stdout]      |                     ------------------------ `studio_rendering` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_rendering` is never read
[INFO] [stdout]     --> src/main.rs:1837:21
[INFO] [stdout]      |
[INFO] [stdout] 1837 |                     studio_rendering = true;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 1855 |                     studio_rendering = false;
[INFO] [stdout]      |                     ------------------------ `studio_rendering` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_rendering` is never read
[INFO] [stdout]     --> src/main.rs:1860:21
[INFO] [stdout]      |
[INFO] [stdout] 1860 |                     studio_rendering = true;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 1874 |                     studio_rendering = false;
[INFO] [stdout]      |                     ------------------------ `studio_rendering` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1720:37
[INFO] [stdout]      |
[INFO] [stdout] 1720 | ...                   studio_current_playing_file = Some(file_path);
[INFO] [stdout]      |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1709:25
[INFO] [stdout]      |
[INFO] [stdout] 1709 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1747:25
[INFO] [stdout]      |
[INFO] [stdout] 1747 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1903:25
[INFO] [stdout]      |
[INFO] [stdout] 1903 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1893:25
[INFO] [stdout]      |
[INFO] [stdout] 1893 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1699:25
[INFO] [stdout]      |
[INFO] [stdout] 1699 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `studio_current_playing_file` is never read
[INFO] [stdout]     --> src/main.rs:1691:25
[INFO] [stdout]      |
[INFO] [stdout] 1691 |                         studio_current_playing_file = None;
[INFO] [stdout]      |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_cursor` is never read
[INFO] [stdout]     --> src/main.rs:2367:17
[INFO] [stdout]      |
[INFO] [stdout] 2367 |                 tuner_rename_cursor = new_cursor;
[INFO] [stdout]      |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2400 |                     tuner_rename_cursor = 0;
[INFO] [stdout]      |                     ----------------------- `tuner_rename_cursor` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_cursor` is never read
[INFO] [stdout]     --> src/main.rs:2400:21
[INFO] [stdout]      |
[INFO] [stdout] 2400 |                     tuner_rename_cursor = 0;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2409 |                     tuner_rename_cursor = tuner_rename_buffer.len();
[INFO] [stdout]      |                     ----------------------------------------------- `tuner_rename_cursor` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_cursor` is never read
[INFO] [stdout]     --> src/main.rs:2409:21
[INFO] [stdout]      |
[INFO] [stdout] 2409 |                     tuner_rename_cursor = tuner_rename_buffer.len();
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2413 |                 tuner_rename_cursor = new_cursor;
[INFO] [stdout]      |                 -------------------------------- `tuner_rename_cursor` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_selection` is never read
[INFO] [stdout]     --> src/main.rs:2368:17
[INFO] [stdout]      |
[INFO] [stdout] 2368 |                 tuner_rename_selection = new_selection;
[INFO] [stdout]      |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2401 |                     tuner_rename_selection = None;
[INFO] [stdout]      |                     ----------------------------- `tuner_rename_selection` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_selection` is never read
[INFO] [stdout]     --> src/main.rs:2401:21
[INFO] [stdout]      |
[INFO] [stdout] 2401 |                     tuner_rename_selection = None;
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2410 |                     tuner_rename_selection = Some((0, tuner_rename_buffer.len())); // Выделяем всё
[INFO] [stdout]      |                     ------------------------------------------------------------- `tuner_rename_selection` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tuner_rename_selection` is never read
[INFO] [stdout]     --> src/main.rs:2410:21
[INFO] [stdout]      |
[INFO] [stdout] 2410 |                     tuner_rename_selection = Some((0, tuner_rename_buffer.len())); // Выделяем всё
[INFO] [stdout]      |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 2414 |                 tuner_rename_selection = new_selection;
[INFO] [stdout]      |                 -------------------------------------- `tuner_rename_selection` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `RawNote` is more private than the item `group_notes_into_events`
[INFO] [stdout]    --> src/parser.rs:394:1
[INFO] [stdout]     |
[INFO] [stdout] 394 | pub fn group_notes_into_events(notes: &[RawNote]) -> Vec<SongEvent> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function `group_notes_into_events` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `RawNote` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/parser.rs:102:1
[INFO] [stdout]     |
[INFO] [stdout] 102 | struct RawNote {
[INFO] [stdout]     | ^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `add_mic_detection` is never used
[INFO] [stdout]    --> src/main.rs:429:8
[INFO] [stdout]     |
[INFO] [stdout] 410 | impl GameLogger {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 429 |     fn add_mic_detection(&mut self, time: f64, freq: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TunerState` is never constructed
[INFO] [stdout]   --> src/synth.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct TunerState {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `update` are never used
[INFO] [stdout]   --> src/synth.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl TunerState {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 19 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn update(&mut self, freq: Option<f32>) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NoteInfo` is never constructed
[INFO] [stdout]   --> src/synth.rs:51:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | struct NoteInfo {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_note_info` is never used
[INFO] [stdout]   --> src/synth.rs:56:4
[INFO] [stdout]    |
[INFO] [stdout] 56 | fn calculate_note_info(freq: f32) -> NoteInfo {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GuitarPlayer` is never constructed
[INFO] [stdout]   --> src/synth.rs:79:12
[INFO] [stdout]    |
[INFO] [stdout] 79 | pub struct GuitarPlayer {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/synth.rs:87:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl GuitarPlayer {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  87 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn load_string_samples(&mut self, string_idx: usize, file_path: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn play_note(&self, string_idx: usize, fret: usize, volume: f32, _sound_duration: f64) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn stop_all(&self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn pause(&self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn resume(&self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn clear(&self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn set_volume(&self, volume: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `host` is never read
[INFO] [stdout]    --> src/audio_engine.rs:398:5
[INFO] [stdout]     |
[INFO] [stdout] 397 | pub struct OutputController {
[INFO] [stdout]     |            ---------------- field in this struct
[INFO] [stdout] 398 |     host: cpal::Host,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_test_wav` is never used
[INFO] [stdout]    --> src/audio_engine.rs:568:8
[INFO] [stdout]     |
[INFO] [stdout] 568 | pub fn save_test_wav(filename: &str, samples: &[f32], sample_rate: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_wav` is never used
[INFO] [stdout]    --> src/audio_engine.rs:591:8
[INFO] [stdout]     |
[INFO] [stdout] 591 | pub fn generate_wav(freq: f32, dur: f32, _wt: WaveType) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `midi_to_freq` is never used
[INFO] [stdout]    --> src/audio_engine.rs:879:8
[INFO] [stdout]     |
[INFO] [stdout] 879 | pub fn midi_to_freq(midi: u8) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_piano_keyboard` is never used
[INFO] [stdout]    --> src/graphics.rs:713:8
[INFO] [stdout]     |
[INFO] [stdout] 713 | pub fn draw_piano_keyboard(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_glow_line` is never used
[INFO] [stdout]     --> src/graphics.rs:1771:8
[INFO] [stdout]      |
[INFO] [stdout] 1771 | pub fn draw_glow_line(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_overlay_buttons` is never used
[INFO] [stdout]     --> src/graphics.rs:3991:8
[INFO] [stdout]      |
[INFO] [stdout] 3991 | pub fn draw_overlay_buttons(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_MUSIC` is never used
[INFO] [stdout]     --> src/graphics.rs:4038:11
[INFO] [stdout]      |
[INFO] [stdout] 4038 | pub const FA_MUSIC:     &str = "\u{F001}"; // 🎵 music
[INFO] [stdout]      |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_ARROW_LEFT` is never used
[INFO] [stdout]     --> src/graphics.rs:4040:11
[INFO] [stdout]      |
[INFO] [stdout] 4040 | pub const FA_ARROW_LEFT:&str = "\u{F060}"; // ← back
[INFO] [stdout]      |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_STAR` is never used
[INFO] [stdout]     --> src/graphics.rs:4041:11
[INFO] [stdout]      |
[INFO] [stdout] 4041 | pub const FA_STAR:      &str = "\u{F005}"; // ★ star
[INFO] [stdout]      |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_COG` is never used
[INFO] [stdout]     --> src/graphics.rs:4042:11
[INFO] [stdout]      |
[INFO] [stdout] 4042 | pub const FA_COG:       &str = "\u{F013}"; // ⚙ settings
[INFO] [stdout]      |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_GLOBE` is never used
[INFO] [stdout]     --> src/graphics.rs:4043:11
[INFO] [stdout]      |
[INFO] [stdout] 4043 | pub const FA_GLOBE:     &str = "\u{F0AC}"; // 🌐 language
[INFO] [stdout]      |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_step_links` is never used
[INFO] [stdout]     --> src/graphics.rs:4637:4
[INFO] [stdout]      |
[INFO] [stdout] 4637 | fn draw_step_links(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `estimate_line_count` is never used
[INFO] [stdout]     --> src/graphics.rs:4691:4
[INFO] [stdout]      |
[INFO] [stdout] 4691 | fn estimate_line_count(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `gameplay` is never read
[INFO] [stdout]   --> src/config.rs:12:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct AppConfig {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 12 |     pub gameplay: GameplayConfig,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `base_width` is never read
[INFO] [stdout]   --> src/config.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct DisplayConfig {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 17 |     pub base_width: f32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DisplayConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tab_height` and `track_visible_frets` are never read
[INFO] [stdout]   --> src/config.rs:42:9
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct TracksConfig {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 41 |     pub notation_height: f32,
[INFO] [stdout] 42 |     pub tab_height: f32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub track_visible_frets: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracksConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `waveform_height` and `freq_graph_height` are never read
[INFO] [stdout]   --> src/config.rs:51:9
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct WidgetsConfig {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 50 |     pub waveform_width: f32,
[INFO] [stdout] 51 |     pub waveform_height: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 52 |     pub freq_graph_width: f32,
[INFO] [stdout] 53 |     pub freq_graph_height: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WidgetsConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `note_speed`, `hit_tolerance`, and `hit_tolerance_freq` are never read
[INFO] [stdout]   --> src/config.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct GameplayConfig {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 58 |     pub note_speed: f32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 59 |     pub hit_tolerance: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 60 |     pub hit_tolerance_freq: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameplayConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `id` is never read
[INFO] [stdout]    --> src/lessons.rs:102:9
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Lesson {
[INFO] [stdout]     |            ------ field in this struct
[INFO] [stdout] 102 |     pub id: String,
[INFO] [stdout]     |         ^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Lesson` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `next`, `panel_bg_alpha`, `btn_bg`, `btn_text`, and `btn_border` are never used
[INFO] [stdout]   --> src/theme.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | impl ThemeState {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn next(&mut self) { self.index = (self.index + 1) % THEMES.len(); }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn panel_bg_alpha(&self, night_alpha: f32) -> Color {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn btn_bg(&self, hovered: bool) -> Color {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn btn_text(&self, hovered: bool) -> Color {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn btn_border(&self, hovered: bool) -> Color {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `day_panel_bg` is never used
[INFO] [stdout]   --> src/theme.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn day_panel_bg(night: Color) -> Color {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `adaptive_text` is never used
[INFO] [stdout]    --> src/theme.rs:866:8
[INFO] [stdout]     |
[INFO] [stdout] 866 | pub fn adaptive_text(is_day: bool) -> Color {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `z_order` is never read
[INFO] [stdout]   --> src/info_screen.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct InfoImage {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub z_order: i32,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InfoImage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_empty` is never used
[INFO] [stdout]    --> src/info_screen.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout]  70 | impl InfoFile {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn is_empty(&self) -> bool { self.sections.is_empty() }
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `confirmed` and `total` are never read
[INFO] [stdout]    --> src/game_types.rs:179:9
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub struct LessonHitResult {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 179 |     pub confirmed: usize,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 180 |     pub total: usize,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LessonHitResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `none` is never used
[INFO] [stdout]    --> src/game_types.rs:187:12
[INFO] [stdout]     |
[INFO] [stdout] 186 | impl LessonHitResult {
[INFO] [stdout]     | -------------------- associated function in this implementation
[INFO] [stdout] 187 |     pub fn none() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `velocity` and `channel` are never read
[INFO] [stdout]   --> src/midi_parser.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct MidiNote {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 15 |     pub pitch: u8,        // MIDI-номер ноты (0-127)
[INFO] [stdout] 16 |     pub velocity: u8,     // Громкость (0-127)
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub channel: u8,      // MIDI-канал (0-15)
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MidiNote` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pitch_to_freq` is never used
[INFO] [stdout]   --> src/midi_parser.rs:51:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn pitch_to_freq(pitch: u8) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `RawNote` is more private than the item `group_notes_into_events`
[INFO] [stdout]    --> src/parser.rs:394:1
[INFO] [stdout]     |
[INFO] [stdout] 394 | pub fn group_notes_into_events(notes: &[RawNote]) -> Vec<SongEvent> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function `group_notes_into_events` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `RawNote` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/parser.rs:102:1
[INFO] [stdout]     |
[INFO] [stdout] 102 | struct RawNote {
[INFO] [stdout]     | ^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `add_mic_detection` is never used
[INFO] [stdout]    --> src/main.rs:429:8
[INFO] [stdout]     |
[INFO] [stdout] 410 | impl GameLogger {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 429 |     fn add_mic_detection(&mut self, time: f64, freq: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TunerState` is never constructed
[INFO] [stdout]   --> src/synth.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct TunerState {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `update` are never used
[INFO] [stdout]   --> src/synth.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl TunerState {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 19 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn update(&mut self, freq: Option<f32>) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NoteInfo` is never constructed
[INFO] [stdout]   --> src/synth.rs:51:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | struct NoteInfo {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_note_info` is never used
[INFO] [stdout]   --> src/synth.rs:56:4
[INFO] [stdout]    |
[INFO] [stdout] 56 | fn calculate_note_info(freq: f32) -> NoteInfo {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GuitarPlayer` is never constructed
[INFO] [stdout]   --> src/synth.rs:79:12
[INFO] [stdout]    |
[INFO] [stdout] 79 | pub struct GuitarPlayer {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/synth.rs:87:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl GuitarPlayer {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  87 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn load_string_samples(&mut self, string_idx: usize, file_path: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn play_note(&self, string_idx: usize, fret: usize, volume: f32, _sound_duration: f64) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn stop_all(&self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn pause(&self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn resume(&self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn clear(&self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn set_volume(&self, volume: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `host` is never read
[INFO] [stdout]    --> src/audio_engine.rs:398:5
[INFO] [stdout]     |
[INFO] [stdout] 397 | pub struct OutputController {
[INFO] [stdout]     |            ---------------- field in this struct
[INFO] [stdout] 398 |     host: cpal::Host,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_test_wav` is never used
[INFO] [stdout]    --> src/audio_engine.rs:568:8
[INFO] [stdout]     |
[INFO] [stdout] 568 | pub fn save_test_wav(filename: &str, samples: &[f32], sample_rate: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_wav` is never used
[INFO] [stdout]    --> src/audio_engine.rs:591:8
[INFO] [stdout]     |
[INFO] [stdout] 591 | pub fn generate_wav(freq: f32, dur: f32, _wt: WaveType) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `midi_to_freq` is never used
[INFO] [stdout]    --> src/audio_engine.rs:879:8
[INFO] [stdout]     |
[INFO] [stdout] 879 | pub fn midi_to_freq(midi: u8) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_piano_keyboard` is never used
[INFO] [stdout]    --> src/graphics.rs:713:8
[INFO] [stdout]     |
[INFO] [stdout] 713 | pub fn draw_piano_keyboard(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_glow_line` is never used
[INFO] [stdout]     --> src/graphics.rs:1771:8
[INFO] [stdout]      |
[INFO] [stdout] 1771 | pub fn draw_glow_line(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_overlay_buttons` is never used
[INFO] [stdout]     --> src/graphics.rs:3991:8
[INFO] [stdout]      |
[INFO] [stdout] 3991 | pub fn draw_overlay_buttons(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_MUSIC` is never used
[INFO] [stdout]     --> src/graphics.rs:4038:11
[INFO] [stdout]      |
[INFO] [stdout] 4038 | pub const FA_MUSIC:     &str = "\u{F001}"; // 🎵 music
[INFO] [stdout]      |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_ARROW_LEFT` is never used
[INFO] [stdout]     --> src/graphics.rs:4040:11
[INFO] [stdout]      |
[INFO] [stdout] 4040 | pub const FA_ARROW_LEFT:&str = "\u{F060}"; // ← back
[INFO] [stdout]      |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_STAR` is never used
[INFO] [stdout]     --> src/graphics.rs:4041:11
[INFO] [stdout]      |
[INFO] [stdout] 4041 | pub const FA_STAR:      &str = "\u{F005}"; // ★ star
[INFO] [stdout]      |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_COG` is never used
[INFO] [stdout]     --> src/graphics.rs:4042:11
[INFO] [stdout]      |
[INFO] [stdout] 4042 | pub const FA_COG:       &str = "\u{F013}"; // ⚙ settings
[INFO] [stdout]      |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FA_GLOBE` is never used
[INFO] [stdout]     --> src/graphics.rs:4043:11
[INFO] [stdout]      |
[INFO] [stdout] 4043 | pub const FA_GLOBE:     &str = "\u{F0AC}"; // 🌐 language
[INFO] [stdout]      |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_step_links` is never used
[INFO] [stdout]     --> src/graphics.rs:4637:4
[INFO] [stdout]      |
[INFO] [stdout] 4637 | fn draw_step_links(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `estimate_line_count` is never used
[INFO] [stdout]     --> src/graphics.rs:4691:4
[INFO] [stdout]      |
[INFO] [stdout] 4691 | fn estimate_line_count(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `gameplay` is never read
[INFO] [stdout]   --> src/config.rs:12:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct AppConfig {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 12 |     pub gameplay: GameplayConfig,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `base_width` is never read
[INFO] [stdout]   --> src/config.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct DisplayConfig {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 17 |     pub base_width: f32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DisplayConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tab_height` and `track_visible_frets` are never read
[INFO] [stdout]   --> src/config.rs:42:9
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct TracksConfig {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 41 |     pub notation_height: f32,
[INFO] [stdout] 42 |     pub tab_height: f32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub track_visible_frets: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracksConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `waveform_height` and `freq_graph_height` are never read
[INFO] [stdout]   --> src/config.rs:51:9
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct WidgetsConfig {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 50 |     pub waveform_width: f32,
[INFO] [stdout] 51 |     pub waveform_height: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 52 |     pub freq_graph_width: f32,
[INFO] [stdout] 53 |     pub freq_graph_height: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WidgetsConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `note_speed`, `hit_tolerance`, and `hit_tolerance_freq` are never read
[INFO] [stdout]   --> src/config.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct GameplayConfig {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 58 |     pub note_speed: f32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 59 |     pub hit_tolerance: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 60 |     pub hit_tolerance_freq: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameplayConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `id` is never read
[INFO] [stdout]    --> src/lessons.rs:102:9
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Lesson {
[INFO] [stdout]     |            ------ field in this struct
[INFO] [stdout] 102 |     pub id: String,
[INFO] [stdout]     |         ^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Lesson` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `next`, `panel_bg_alpha`, `btn_bg`, `btn_text`, and `btn_border` are never used
[INFO] [stdout]   --> src/theme.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | impl ThemeState {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn next(&mut self) { self.index = (self.index + 1) % THEMES.len(); }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn panel_bg_alpha(&self, night_alpha: f32) -> Color {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn btn_bg(&self, hovered: bool) -> Color {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn btn_text(&self, hovered: bool) -> Color {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn btn_border(&self, hovered: bool) -> Color {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `day_panel_bg` is never used
[INFO] [stdout]   --> src/theme.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn day_panel_bg(night: Color) -> Color {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `adaptive_text` is never used
[INFO] [stdout]    --> src/theme.rs:866:8
[INFO] [stdout]     |
[INFO] [stdout] 866 | pub fn adaptive_text(is_day: bool) -> Color {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `z_order` is never read
[INFO] [stdout]   --> src/info_screen.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct InfoImage {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub z_order: i32,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InfoImage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_empty` is never used
[INFO] [stdout]    --> src/info_screen.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout]  70 | impl InfoFile {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn is_empty(&self) -> bool { self.sections.is_empty() }
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `confirmed` and `total` are never read
[INFO] [stdout]    --> src/game_types.rs:179:9
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub struct LessonHitResult {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 179 |     pub confirmed: usize,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 180 |     pub total: usize,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LessonHitResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `none` is never used
[INFO] [stdout]    --> src/game_types.rs:187:12
[INFO] [stdout]     |
[INFO] [stdout] 186 | impl LessonHitResult {
[INFO] [stdout]     | -------------------- associated function in this implementation
[INFO] [stdout] 187 |     pub fn none() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `velocity` and `channel` are never read
[INFO] [stdout]   --> src/midi_parser.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct MidiNote {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 15 |     pub pitch: u8,        // MIDI-номер ноты (0-127)
[INFO] [stdout] 16 |     pub velocity: u8,     // Громкость (0-127)
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub channel: u8,      // MIDI-канал (0-15)
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MidiNote` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pitch_to_freq` is never used
[INFO] [stdout]   --> src/midi_parser.rs:51:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn pitch_to_freq(pitch: u8) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 52.66s
[INFO] running `Command { std: "docker" "inspect" "1e88f4aaaa625942734b4b9a34ccbecf52cd5ee96f84cd3bf3b9b24d617d9355", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1e88f4aaaa625942734b4b9a34ccbecf52cd5ee96f84cd3bf3b9b24d617d9355", kill_on_drop: false }`
[INFO] [stdout] 1e88f4aaaa625942734b4b9a34ccbecf52cd5ee96f84cd3bf3b9b24d617d9355
