[INFO] cloning repository https://github.com/XuanzhengZhou/Oxidized-Mania
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/XuanzhengZhou/Oxidized-Mania" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FXuanzhengZhou%2FOxidized-Mania", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FXuanzhengZhou%2FOxidized-Mania'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 9f98245668c862aa9d05cd88ea80b3c9fa89ed90
[INFO] checking XuanzhengZhou/Oxidized-Mania against 6e4b95ed0735c3bbfb308e6f158f479b4d14f1aa for pr-159356
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FXuanzhengZhou%2FOxidized-Mania" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/XuanzhengZhou/Oxidized-Mania
[INFO] finished tweaking git repo https://github.com/XuanzhengZhou/Oxidized-Mania
[INFO] tweaked toml for git repo https://github.com/XuanzhengZhou/Oxidized-Mania written to /workspace/builds/worker-6-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/XuanzhengZhou/Oxidized-Mania on toolchain 6e4b95ed0735c3bbfb308e6f158f479b4d14f1aa
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+6e4b95ed0735c3bbfb308e6f158f479b4d14f1aa" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/XuanzhengZhou/Oxidized-Mania 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" "+6e4b95ed0735c3bbfb308e6f158f479b4d14f1aa" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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:c36f533e8924a726b63f9d01e781fa8c8c28c96d1d595403829afb31452ee0f5" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 827eb2d5cf948716ad29a1e22bb211d5a017cf94d58a1607dbecb8b1c29a0400
[INFO] running `Command { std: "docker" "start" "827eb2d5cf948716ad29a1e22bb211d5a017cf94d58a1607dbecb8b1c29a0400", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "827eb2d5cf948716ad29a1e22bb211d5a017cf94d58a1607dbecb8b1c29a0400", 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" "827eb2d5cf948716ad29a1e22bb211d5a017cf94d58a1607dbecb8b1c29a0400" "/opt/rustwide/cargo-home/bin/cargo" "+6e4b95ed0735c3bbfb308e6f158f479b4d14f1aa" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "827eb2d5cf948716ad29a1e22bb211d5a017cf94d58a1607dbecb8b1c29a0400", 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" "827eb2d5cf948716ad29a1e22bb211d5a017cf94d58a1607dbecb8b1c29a0400" "/opt/rustwide/cargo-home/bin/cargo" "+6e4b95ed0735c3bbfb308e6f158f479b4d14f1aa" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]    Compiling wayland-sys v0.31.11
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]     Checking simd-adler32 v0.3.9
[INFO] [stderr]    Compiling quick-xml v0.39.3
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]     Checking rayon v1.12.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]     Checking as-slice v0.2.1
[INFO] [stderr]     Checking indexmap v2.14.0
[INFO] [stderr]     Checking strength_reduce v0.2.4
[INFO] [stderr]     Checking transpose v0.2.3
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]     Checking aligned v0.4.3
[INFO] [stderr]    Compiling wayland-scanner v0.31.10
[INFO] [stderr]     Checking primal-check v0.3.4
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]    Compiling cc v1.2.61
[INFO] [stderr]    Compiling naga v24.0.0
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]     Checking no_std_io2 v0.9.4
[INFO] [stderr]     Checking nom v8.0.0
[INFO] [stderr]    Compiling ash v0.38.0+1.3.281
[INFO] [stderr]    Compiling khronos-egl v6.0.0
[INFO] [stderr]     Checking bit-vec v0.8.0
[INFO] [stderr]     Checking termcolor v1.4.1
[INFO] [stderr]     Checking simdutf8 v0.1.5
[INFO] [stderr]     Checking bit-set v0.8.0
[INFO] [stderr]     Checking codespan-reporting v0.11.1
[INFO] [stderr]     Checking rustfft v6.4.1
[INFO] [stderr]     Checking bitflags v2.11.1
[INFO] [stderr]     Checking bitstream-io v4.10.0
[INFO] [stderr]     Checking maybe-rayon v0.1.1
[INFO] [stderr]     Checking rustix v0.38.44
[INFO] [stderr]     Checking spirv v0.3.0+sdk-1.3.268.0
[INFO] [stderr]     Checking gpu-descriptor-types v0.2.0
[INFO] [stderr]     Checking gpu-alloc-types v0.3.0
[INFO] [stderr]    Compiling wayland-backend v0.3.15
[INFO] [stderr]    Compiling zstd-sys v2.0.16+zstd.1.5.7
[INFO] [stderr]     Checking flate2 v1.1.9
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]    Compiling wgpu-hal v24.0.4
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]     Checking memmap2 v0.9.10
[INFO] [stderr]    Compiling simd_helpers v0.1.0
[INFO] [stderr]    Compiling zstd-safe v7.2.4
[INFO] [stderr]     Checking hexf-parse v0.2.1
[INFO] [stderr]     Checking imgref v1.12.1
[INFO] [stderr]     Checking unicode-xid v0.2.6
[INFO] [stderr]    Compiling object v0.37.3
[INFO] [stderr]    Compiling bytemuck_derive v1.10.2
[INFO] [stderr]    Compiling zerocopy-derive v0.8.48
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling equator-macro v0.4.2
[INFO] [stderr]    Compiling profiling-procmacros v1.0.18
[INFO] [stderr]     Checking equator v0.4.2
[INFO] [stderr]     Checking profiling v1.0.18
[INFO] [stderr]    Compiling ptr_meta_derive v0.3.1
[INFO] [stderr]     Checking aligned-vec v0.6.4
[INFO] [stderr]     Checking v_frame v0.3.9
[INFO] [stderr]     Checking ptr_meta v0.3.1
[INFO] [stderr]     Checking bytemuck v1.25.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]     Checking symphonia-core v0.5.5
[INFO] [stderr]     Checking thiserror v2.0.18
[INFO] [stderr]     Checking rancor v0.1.1
[INFO] [stderr]    Compiling arg_enum_proc_macro v0.3.4
[INFO] [stderr]    Compiling bytecheck_derive v0.8.2
[INFO] [stderr]     Checking polling v3.11.0
[INFO] [stderr]     Checking terminal_size v0.4.4
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]     Checking clap_builder v4.6.0
[INFO] [stderr]     Checking symphonia-metadata v0.5.5
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking calloop v0.13.0
[INFO] [stderr]     Checking wayland-client v0.31.14
[INFO] [stderr]     Checking symphonia-utils-xiph v0.5.5
[INFO] [stderr]     Checking bytecheck v0.8.2
[INFO] [stderr]     Checking av-scenechange v0.14.1
[INFO] [stderr]     Checking av1-grain v0.2.5
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling munge_macro v0.4.7
[INFO] [stderr]     Checking wayland-protocols v0.32.12
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]     Checking wayland-cursor v0.31.14
[INFO] [stderr]     Checking munge v0.4.7
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]     Checking calloop-wayland-source v0.3.0
[INFO] [stderr]     Checking rend v0.5.3
[INFO] [stderr]     Checking rav1e v0.8.1
[INFO] [stderr]     Checking clap v4.6.1
[INFO] [stderr]     Checking wayland-csd-frame v0.3.0
[INFO] [stderr]     Checking tiny-skia-path v0.11.4
[INFO] [stderr]     Checking loop9 v0.1.5
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling rkyv_derive v0.8.16
[INFO] [stderr]     Checking half v2.7.1
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]     Checking zune-jpeg v0.5.15
[INFO] [stderr]     Checking serde_json v1.0.149
[INFO] [stderr]     Checking gpu-alloc v0.6.0
[INFO] [stderr]    Compiling blake3 v1.8.5
[INFO] [stderr]     Checking gpu-descriptor v0.3.2
[INFO] [stderr]     Checking wgpu-types v24.0.0
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]     Checking fdeflate v0.3.7
[INFO] [stderr]     Checking wayland-protocols-wlr v0.3.12
[INFO] [stderr]     Checking zune-inflate v0.2.54
[INFO] [stderr]    Compiling wgpu-core v24.0.5
[INFO] [stderr]     Checking ordered-float v4.6.0
[INFO] [stderr]     Checking glow v0.16.0
[INFO] [stderr]     Checking pxfm v0.1.29
[INFO] [stderr]     Checking fax v0.2.7
[INFO] [stderr]     Checking renderdoc-sys v1.1.0
[INFO] [stderr]     Checking gimli v0.32.3
[INFO] [stderr]     Checking ravif v0.13.0
[INFO] [stderr]     Checking tiff v0.11.3
[INFO] [stderr]     Checking symphonia-format-riff v0.5.5
[INFO] [stderr]     Checking gif v0.14.2
[INFO] [stderr]     Checking smithay-client-toolkit v0.19.2
[INFO] [stderr]     Checking exr v1.74.0
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking png v0.18.1
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking regex v1.12.3
[INFO] [stderr]     Checking rkyv v0.8.16
[INFO] [stderr]     Checking tiny-skia v0.11.4
[INFO] [stderr]     Checking addr2line v0.25.1
[INFO] [stderr]     Checking symphonia-codec-vorbis v0.5.5
[INFO] [stderr]     Checking moxcms v0.8.1
[INFO] [stderr]     Checking symphonia-format-mkv v0.5.5
[INFO] [stderr]     Checking symphonia-format-isomp4 v0.5.5
[INFO] [stderr]     Checking symphonia-format-ogg v0.5.5
[INFO] [stderr]     Checking symphonia-bundle-flac v0.5.5
[INFO] [stderr]     Checking symphonia-bundle-mp3 v0.5.5
[INFO] [stderr]     Checking symphonia-format-caf v0.5.5
[INFO] [stderr]     Checking symphonia-codec-pcm v0.5.5
[INFO] [stderr]     Checking symphonia-codec-aac v0.5.5
[INFO] [stderr]     Checking symphonia-codec-alac v0.5.5
[INFO] [stderr]     Checking symphonia-codec-adpcm v0.5.5
[INFO] [stderr]     Checking gethostname v1.1.0
[INFO] [stderr]     Checking realfft v3.5.0
[INFO] [stderr]     Checking qoi v0.4.1
[INFO] [stderr]    Compiling divan-macros v0.1.21
[INFO] [stderr]    Compiling winit v0.30.13
[INFO] [stderr]    Compiling wgpu v24.0.5
[INFO] [stderr]     Checking rustc-demangle v0.1.27
[INFO] [stderr]     Checking regex-lite v0.1.9
[INFO] [stderr]     Checking condtype v1.3.0
[INFO] [stderr]     Checking constant_time_eq v0.4.2
[INFO] [stderr]     Checking x11rb v0.13.2
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking divan v0.1.21
[INFO] [stderr]     Checking symphonia v0.5.5
[INFO] [stderr]     Checking rubato v0.16.2
[INFO] [stderr]     Checking compact_str v0.9.0
[INFO] [stderr]     Checking sctk-adwaita v0.10.1
[INFO] [stderr]     Checking zstd v0.13.3
[INFO] [stderr]     Checking ahash v0.8.12
[INFO] [stderr]     Checking env_filter v1.0.1
[INFO] [stderr]     Checking rand v0.9.4
[INFO] [stderr]     Checking wayland-protocols-plasma v0.3.12
[INFO] [stderr]     Checking xkbcommon-dl v0.4.2
[INFO] [stderr]    Compiling oxidized_mania v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Checking hound v3.5.1
[INFO] [stderr]     Checking mintex v0.1.4
[INFO] [stderr]     Checking thousands v0.2.0
[INFO] [stderr]     Checking jiff v0.2.24
[INFO] [stderr]     Checking backtrace v0.3.76
[INFO] [stderr]     Checking ttf-parser v0.21.1
[INFO] [stderr]     Checking rosu-mods v0.4.1
[INFO] [stderr]     Checking rosu-map v0.2.1
[INFO] [stderr]     Checking dhat v0.3.3
[INFO] [stderr]     Checking image v0.25.10
[INFO] [stderr]     Checking rhythm-open-exchange v0.6.2 (https://github.com/XuanzhengZhou/Rhythm-Open-Exchange.git?branch=feat%2Fmalody-codec#e5e7e512)
[INFO] [stderr]     Checking rosu-pp v4.0.1
[INFO] [stderr]     Checking fontdue v0.9.3
[INFO] [stderr]     Checking stratum-dsp v1.0.0
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c: In function 'sonicRealloc':
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c:128:40: warning: unused parameter 'oldNum' [-Wunused-parameter]
[INFO] [stderr] warning: oxidized_mania@0.1.0:   128 | static void* sonicRealloc(void* p, int oldNum, int newNum, int size) {
[INFO] [stderr] warning: oxidized_mania@0.1.0:       |                                    ~~~~^~~~~~
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c: In function 'sonicGetChordPitch':
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c:307:36: warning: unused parameter 'stream' [-Wunused-parameter]
[INFO] [stderr] warning: oxidized_mania@0.1.0:   307 | int sonicGetChordPitch(sonicStream stream) { return 0; }
[INFO] [stderr] warning: oxidized_mania@0.1.0:       |                        ~~~~~~~~~~~~^~~~~~
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c: In function 'sonicSetChordPitch':
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c:311:37: warning: unused parameter 'stream' [-Wunused-parameter]
[INFO] [stderr] warning: oxidized_mania@0.1.0:   311 | void sonicSetChordPitch(sonicStream stream, int useChordPitch) {}
[INFO] [stderr] warning: oxidized_mania@0.1.0:       |                         ~~~~~~~~~~~~^~~~~~
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c:311:49: warning: unused parameter 'useChordPitch' [-Wunused-parameter]
[INFO] [stderr] warning: oxidized_mania@0.1.0:   311 | void sonicSetChordPitch(sonicStream stream, int useChordPitch) {}
[INFO] [stderr] warning: oxidized_mania@0.1.0:       |                                             ~~~~^~~~~~~~~~~~~
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c: In function 'sonicChangeFloatSpeed':
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c:1215:31: warning: unused parameter 'useChordPitch' [-Wunused-parameter]
[INFO] [stderr] warning: oxidized_mania@0.1.0:  1215 |                           int useChordPitch, int sampleRate, int numChannels) {
[INFO] [stderr] warning: oxidized_mania@0.1.0:       |                           ~~~~^~~~~~~~~~~~~
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c: In function 'sonicChangeShortSpeed':
[INFO] [stderr] warning: oxidized_mania@0.1.0: sonic.c:1234:31: warning: unused parameter 'useChordPitch' [-Wunused-parameter]
[INFO] [stderr] warning: oxidized_mania@0.1.0:  1234 |                           int useChordPitch, int sampleRate, int numChannels) {
[INFO] [stderr] warning: oxidized_mania@0.1.0:       |                           ~~~~^~~~~~~~~~~~~
[INFO] [stderr]     Checking pollster v0.4.0
[INFO] [stderr]     Checking env_logger v0.11.10
[INFO] [stderr]     Checking spectrs v0.2.1
[INFO] [stdout] warning: unnecessary parentheses around closure body
[INFO] [stdout]    --> src/difficulty/sunny.rs:474:56
[INFO] [stdout]     |
[INFO] [stdout] 474 |     let ln_len: f64 = p.ln_seq.iter().map(|&(_, h, t)| ((t - h).min(1000.0) / 200.0)).sum();
[INFO] [stdout]     |                                                        ^                           ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 474 -     let ln_len: f64 = p.ln_seq.iter().map(|&(_, h, t)| ((t - h).min(1000.0) / 200.0)).sum();
[INFO] [stdout] 474 +     let ln_len: f64 = p.ln_seq.iter().map(|&(_, h, t)| (t - h).min(1000.0) / 200.0).sum();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around closure body
[INFO] [stdout]    --> src/difficulty/sunny.rs:474:56
[INFO] [stdout]     |
[INFO] [stdout] 474 |     let ln_len: f64 = p.ln_seq.iter().map(|&(_, h, t)| ((t - h).min(1000.0) / 200.0)).sum();
[INFO] [stdout]     |                                                        ^                           ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 474 -     let ln_len: f64 = p.ln_seq.iter().map(|&(_, h, t)| ((t - h).min(1000.0) / 200.0)).sum();
[INFO] [stdout] 474 +     let ln_len: f64 = p.ln_seq.iter().map(|&(_, h, t)| (t - h).min(1000.0) / 200.0).sum();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `winit::event_loop::EventLoop::<T>::create_window`: use `ActiveEventLoop::create_window` instead
[INFO] [stdout]    --> src/main.rs:154:38
[INFO] [stdout]     |
[INFO] [stdout] 154 |     let window = Arc::new(event_loop.create_window(attrs).unwrap());
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `winit::event_loop::EventLoop::<T>::create_window`: use `ActiveEventLoop::create_window` instead
[INFO] [stdout]    --> src/main.rs:154:38
[INFO] [stdout]     |
[INFO] [stdout] 154 |     let window = Arc::new(event_loop.create_window(attrs).unwrap());
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/difficulty/sunny.rs:347:13
[INFO] [stdout]     |
[INFO] [stdout] 347 |         let mut idx = bisect_left(bc, acorn[i]).min(bc.len().saturating_sub(1));
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/difficulty/sunny.rs:347:13
[INFO] [stdout]     |
[INFO] [stdout] 347 |         let mut idx = bisect_left(bc, acorn[i]).min(bc.len().saturating_sub(1));
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/game/results.rs:511:5
[INFO] [stdout]     |
[INFO] [stdout] 511 |     result: &GameResult,
[INFO] [stdout]     |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/game/results.rs:511:5
[INFO] [stdout]     |
[INFO] [stdout] 511 |     result: &GameResult,
[INFO] [stdout]     |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/skin.rs:152:26
[INFO] [stdout]     |
[INFO] [stdout] 152 |         let (mut images, mut config) = if let Some(cached) = SKIN_CACHE.lock().ok()
[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/skin.rs:152:26
[INFO] [stdout]     |
[INFO] [stdout] 152 |         let (mut images, mut config) = if let Some(cached) = SKIN_CACHE.lock().ok()
[INFO] [stdout]     |                          ----^^^^^^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cycle_start` is never read
[INFO] [stdout]    --> src/main.rs:119:91
[INFO] [stdout]     |
[INFO] [stdout] 119 |     MainMenu { tab: MainMenuTab, cover_regions: Vec<skin::AtlasRegion>, cover_idx: usize, cycle_start: std::time::Instant, config: ...
[INFO] [stdout]     |     -------- field in this variant                                                        ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cycle_start` is never read
[INFO] [stdout]    --> src/main.rs:120:91
[INFO] [stdout]     |
[INFO] [stdout] 120 |     PlayMode { tab: PlayModeTab, cover_regions: Vec<skin::AtlasRegion>, cover_idx: usize, cycle_start: std::time::Instant, config: ...
[INFO] [stdout]     |     -------- field in this variant                                                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cycle_start` is never read
[INFO] [stdout]    --> src/main.rs:122:163
[INFO] [stdout]     |
[INFO] [stdout] 122 |     Settings { primary: usize, secondary: usize, binding_idx: Option<usize>, adjuster: Option<Adjuster>, cover_regions: Vec<skin::AtlasRegion>, cover_idx: usize, cycle_start: s...
[INFO] [stdout]     |     -------- field in this variant                                                                                                                                ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Preview` is never constructed
[INFO] [stdout]    --> src/main.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | enum AppState {
[INFO] [stdout]     |      -------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 123 |     Preview { song: SongEntry, diff: usize, name: String, dur: String, notes: usize, stars: f64, config: GameConfig },
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_cover` is never used
[INFO] [stdout]    --> src/main.rs:233:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | impl App {
[INFO] [stdout]     | -------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn update_cover(&mut self, cover_path: Option<&str>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BASS_ACTIVE_PLAYING` is never used
[INFO] [stdout]  --> src/audio/bass.rs:9:7
[INFO] [stdout]   |
[INFO] [stdout] 9 | const BASS_ACTIVE_PLAYING: u32 = 1;
[INFO] [stdout]   |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_playing` is never used
[INFO] [stdout]    --> src/audio/bass.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl BassAudio {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn is_playing(&self) -> bool { self.stream != 0 && unsafe { BASS_ChannelIsActive(self.stream) } == BASS_ACTIVE_PLAYING }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `BASS_ChannelIsActive` is never used
[INFO] [stdout]   --> src/audio/bass.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 |     fn BASS_ChannelIsActive(handle: u32) -> u32;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hit`, `missed`, `holding`, `stuck_y`, and `release_time` are never read
[INFO] [stdout]   --> src/beatmap.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct Note {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub hit: bool,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 51 |     pub missed: bool,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 52 |     pub holding: bool,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 53 |     pub stuck_y: Option<f64>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 54 |     pub release_time: Option<f64>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Note` 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 `load_beatmap` is never used
[INFO] [stdout]   --> src/beatmap.rs:58:8
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub fn load_beatmap(json_path: &str) -> Result<(BeatmapMeta, Vec<Note>), String> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `star_rating` is never read
[INFO] [stdout]   --> src/difficulty/mod.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct DifficultyResult {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 16 |     pub star_rating: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DifficultyResult` 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 `cache_key` is never used
[INFO] [stdout]   --> src/difficulty/mod.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl DifficultyResult {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn cache_key(&self) -> String { self.rc_label.clone() }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `q94` is never read
[INFO] [stdout]    --> src/difficulty/azusa.rs:318:5
[INFO] [stdout]     |
[INFO] [stdout] 316 | struct SkillStats {
[INFO] [stdout]     |        ---------- field in this struct
[INFO] [stdout] 317 |     q97: f64,
[INFO] [stdout] 318 |     q94: f64,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `PauseCountdown` is never constructed
[INFO] [stdout]   --> src/game/engine.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | enum Phase {
[INFO] [stdout]    |      ----- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 89 |     PauseCountdown {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Phase` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `window` is never read
[INFO] [stdout]    --> src/game/engine.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct GameEngine {
[INFO] [stdout]     |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 111 |     window: Arc<Window>,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle_keydown`, `handle_keyup`, and `handle_event` are never used
[INFO] [stdout]    --> src/game/engine.rs:237:8
[INFO] [stdout]     |
[INFO] [stdout] 153 | impl GameEngine {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 237 |     fn handle_keydown(&mut self, key: KeyCode) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     fn handle_keyup(&mut self, key: KeyCode) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 804 |     pub fn handle_event(&mut self, event: WindowEvent) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `visible` is never read
[INFO] [stdout]   --> src/game/notes.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct NoteProcessResult {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] 44 |     pub visible: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PauseAction` is never used
[INFO] [stdout]  --> src/game/pause.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum PauseAction {
[INFO] [stdout]   |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LANES` is never used
[INFO] [stdout]   --> src/game/pause.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const LANES: [f32; 4] = [50.0, 150.0, 250.0, 350.0];
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pause_menu` is never used
[INFO] [stdout]   --> src/game/pause.rs:15:8
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub fn pause_menu(
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pause_options_text` is never used
[INFO] [stdout]   --> src/game/pause.rs:69:8
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub fn pause_options_text(text: &mut TextRenderer, selected: usize) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `score`, `total_notes`, and `song_name` are never read
[INFO] [stdout]   --> src/game/results.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct GameResult {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 11 |     pub score: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub total_notes: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 24 |     pub total_objects: u32,
[INFO] [stdout] 25 |     pub song_name: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameResult` 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 `path` and `selected_diff` are never read
[INFO] [stdout]   --> src/menu/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct SongEntry {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 13 |     pub dir_name: String,
[INFO] [stdout] 14 |     pub path: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 15 |     pub jsons: Vec<String>,
[INFO] [stdout] 16 |     pub selected_diff: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SongEntry` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `notes_count` is never read
[INFO] [stdout]   --> src/menu/song_select.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct DiffMeta {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub notes_count: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DiffMeta` 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 `config` is never read
[INFO] [stdout]   --> src/menu/song_select.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct SongSelectState {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub config: GameConfig,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_colormap` is never used
[INFO] [stdout]    --> src/render/context.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl RenderCtx {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn update_colormap(&mut self, name: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_instances` is never read
[INFO] [stdout]   --> src/render/quad.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub struct QuadRenderer {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 85 |     max_instances: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_colormap` is never used
[INFO] [stdout]    --> src/render/quad.rs:441:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | impl QuadRenderer {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 441 |     pub fn update_colormap(&mut self, device: &wgpu::Device, queue: &wgpu::Queue, name: &str, atlas: &TextureAtlas) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `ymin` is never read
[INFO] [stdout]   --> src/render/text.rs:79:16
[INFO] [stdout]    |
[INFO] [stdout] 76 | struct GlyphInfo {
[INFO] [stdout]    |        --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 79 |     xmin: f32, ymin: f32, // 相对 baseline 的偏移
[INFO] [stdout]    |                ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GlyphInfo` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `baseline_offset`, `atlas_texture`, `atlas_view`, and `sampler` are never read
[INFO] [stdout]    --> src/render/text.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout]  98 | pub struct TextRenderer {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 101 |     baseline_offset: f32, // 主字体基线偏移 (ymin绝对值，统一所有字形基线)
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     atlas_texture: wgpu::Texture,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 109 |     atlas_view: wgpu::TextureView,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 110 |     sampler: wgpu::Sampler,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `current_buffer` is never used
[INFO] [stdout]    --> src/render/text.rs:421:12
[INFO] [stdout]     |
[INFO] [stdout] 191 | impl TextRenderer {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 421 |     pub fn current_buffer(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `window` is never read
[INFO] [stdout]   --> src/replay_viewer.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct ReplayEngine {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     window: Arc<Window>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `paused`, `map_path`, `should_auto_advance`, `auto_advance_remaining`, and `cancel_auto_advance` are never used
[INFO] [stdout]    --> src/replay_viewer.rs:302:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl ReplayEngine {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn paused(&self) -> bool { self.paused }
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn map_path(&self) -> &str { &self.replay.map_path }
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 494 |     pub fn should_auto_advance(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 498 |     pub fn auto_advance_remaining(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 502 |     pub fn cancel_auto_advance(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `estimated_memory_mb` is never used
[INFO] [stdout]    --> src/skin.rs:455:8
[INFO] [stdout]     |
[INFO] [stdout] 455 | pub fn estimated_memory_mb() -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `skin_load_count` is never used
[INFO] [stdout]    --> src/skin.rs:458:8
[INFO] [stdout]     |
[INFO] [stdout] 458 | pub fn skin_load_count() -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_circle_gradient` is never used
[INFO] [stdout]   --> src/ui/primitives.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn draw_circle_gradient(quad: &mut QuadRenderer, cx: f32, cy: f32, r: f32, inner: [u8; 4], outer: [u8; 4], strips: u32) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_circle_glow` is never used
[INFO] [stdout]   --> src/ui/primitives.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub fn draw_circle_glow(quad: &mut QuadRenderer, cx: f32, cy: f32, r: f32, inner: [u8; 4], glow_color: [u8; 4], strips: u32) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_trapezoid_rounded_br` is never used
[INFO] [stdout]   --> src/ui/primitives.rs:56:8
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub fn draw_trapezoid_rounded_br(quad: &mut QuadRenderer, x: f32, y: f32, top_w: f32, bot_w: f32, h: f32, color: [u8; 4], corner_r: ...
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_bar` is never used
[INFO] [stdout]   --> src/ui/primitives.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn draw_bar(quad: &mut QuadRenderer, x: f32, y: f32, w: f32, h: f32, fill_pct: f32, fill_color: [u8; 4], bg_color: [u8; 4]) {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_rounded_rect` is never used
[INFO] [stdout]    --> src/ui/primitives.rs:104:8
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub fn draw_rounded_rect(quad: &mut QuadRenderer, x: f32, y: f32, w: f32, h: f32, r: f32, color: [u8; 4], bg: [u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lerp_color` is never used
[INFO] [stdout]    --> src/ui/primitives.rs:126:4
[INFO] [stdout]     |
[INFO] [stdout] 126 | fn lerp_color(a: [u8; 4], b: [u8; 4], t: f32) -> [u8; 4] {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_SETTINGS` is never used
[INFO] [stdout]   --> src/ui/theme.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const TAB_SETTINGS: [u8; 4] = [85, 85, 85, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_PLAY` is never used
[INFO] [stdout]   --> src/ui/theme.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub const TAB_PLAY: [u8; 4] = [97, 70, 197, 255];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_EDIT` is never used
[INFO] [stdout]   --> src/ui/theme.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const TAB_EDIT: [u8; 4] = [228, 173, 59, 255];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_BROWSE` is never used
[INFO] [stdout]   --> src/ui/theme.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const TAB_BROWSE: [u8; 4] = [173, 203, 63, 255];
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_EXIT` is never used
[INFO] [stdout]   --> src/ui/theme.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub const TAB_EXIT: [u8; 4] = [219, 69, 151, 255];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BTN_BACK` is never used
[INFO] [stdout]   --> src/ui/theme.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const BTN_BACK: [u8; 4] = [52, 58, 91, 255];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PANEL_TRAPEZOID` is never used
[INFO] [stdout]   --> src/ui/theme.rs:17:11
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub const PANEL_TRAPEZOID: [u8; 4] = [51, 54, 54, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SETTING_UNSEL` is never used
[INFO] [stdout]   --> src/ui/theme.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const SETTING_UNSEL: [u8; 4] = [36, 34, 41, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SETTING_SEL` is never used
[INFO] [stdout]   --> src/ui/theme.rs:21:11
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub const SETTING_SEL: [u8; 4] = [45, 42, 59, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SETTING_SEC_BG` is never used
[INFO] [stdout]   --> src/ui/theme.rs:22:11
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub const SETTING_SEC_BG: [u8; 4] = [48, 46, 55, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: call to `.clone()` on a reference in this situation does nothing
[INFO] [stdout]   --> src/render/context.rs:29:66
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let tmp_surface = instance.create_surface(Arc::new(window.clone())).unwrap();
[INFO] [stdout]    |                                                                  ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the type `winit::window::Window` does not implement `Clone`, so calling `clone` on `&winit::window::Window` copies the reference, which does not do anything and can be removed
[INFO] [stdout]    = note: `#[warn(noop_method_call)]` on by default
[INFO] [stdout] help: remove this redundant call
[INFO] [stdout]    |
[INFO] [stdout] 29 -         let tmp_surface = instance.create_surface(Arc::new(window.clone())).unwrap();
[INFO] [stdout] 29 +         let tmp_surface = instance.create_surface(Arc::new(window)).unwrap();
[INFO] [stdout]    |
[INFO] [stdout] help: if you meant to clone `winit::window::Window`, implement `Clone` for it
[INFO] [stdout]   --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.13/src/window.rs:35:1
[INFO] [stdout]    |
[INFO] [stdout] 35 + #[derive(Clone)]
[INFO] [stdout] 36 | pub struct Window {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cycle_start` is never read
[INFO] [stdout]    --> src/main.rs:119:91
[INFO] [stdout]     |
[INFO] [stdout] 119 |     MainMenu { tab: MainMenuTab, cover_regions: Vec<skin::AtlasRegion>, cover_idx: usize, cycle_start: std::time::Instant, config: ...
[INFO] [stdout]     |     -------- field in this variant                                                        ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cycle_start` is never read
[INFO] [stdout]    --> src/main.rs:120:91
[INFO] [stdout]     |
[INFO] [stdout] 120 |     PlayMode { tab: PlayModeTab, cover_regions: Vec<skin::AtlasRegion>, cover_idx: usize, cycle_start: std::time::Instant, config: ...
[INFO] [stdout]     |     -------- field in this variant                                                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cycle_start` is never read
[INFO] [stdout]    --> src/main.rs:122:163
[INFO] [stdout]     |
[INFO] [stdout] 122 |     Settings { primary: usize, secondary: usize, binding_idx: Option<usize>, adjuster: Option<Adjuster>, cover_regions: Vec<skin::AtlasRegion>, cover_idx: usize, cycle_start: s...
[INFO] [stdout]     |     -------- field in this variant                                                                                                                                ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Preview` is never constructed
[INFO] [stdout]    --> src/main.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | enum AppState {
[INFO] [stdout]     |      -------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 123 |     Preview { song: SongEntry, diff: usize, name: String, dur: String, notes: usize, stars: f64, config: GameConfig },
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_cover` is never used
[INFO] [stdout]    --> src/main.rs:233:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | impl App {
[INFO] [stdout]     | -------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn update_cover(&mut self, cover_path: Option<&str>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BASS_ACTIVE_PLAYING` is never used
[INFO] [stdout]  --> src/audio/bass.rs:9:7
[INFO] [stdout]   |
[INFO] [stdout] 9 | const BASS_ACTIVE_PLAYING: u32 = 1;
[INFO] [stdout]   |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_playing` is never used
[INFO] [stdout]    --> src/audio/bass.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl BassAudio {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn is_playing(&self) -> bool { self.stream != 0 && unsafe { BASS_ChannelIsActive(self.stream) } == BASS_ACTIVE_PLAYING }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `BASS_ChannelIsActive` is never used
[INFO] [stdout]   --> src/audio/bass.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 |     fn BASS_ChannelIsActive(handle: u32) -> u32;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hit`, `missed`, `holding`, `stuck_y`, and `release_time` are never read
[INFO] [stdout]   --> src/beatmap.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct Note {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub hit: bool,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 51 |     pub missed: bool,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 52 |     pub holding: bool,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 53 |     pub stuck_y: Option<f64>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 54 |     pub release_time: Option<f64>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Note` 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 `load_beatmap` is never used
[INFO] [stdout]   --> src/beatmap.rs:58:8
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub fn load_beatmap(json_path: &str) -> Result<(BeatmapMeta, Vec<Note>), String> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `rc_label` and `star_rating` are never read
[INFO] [stdout]   --> src/difficulty/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct DifficultyResult {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub rc_label: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 15 |     /// Daniel 算法的原始星数
[INFO] [stdout] 16 |     pub star_rating: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DifficultyResult` 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 `cache_key` is never used
[INFO] [stdout]   --> src/difficulty/mod.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl DifficultyResult {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn cache_key(&self) -> String { self.rc_label.clone() }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `q94` is never read
[INFO] [stdout]    --> src/difficulty/azusa.rs:318:5
[INFO] [stdout]     |
[INFO] [stdout] 316 | struct SkillStats {
[INFO] [stdout]     |        ---------- field in this struct
[INFO] [stdout] 317 |     q97: f64,
[INFO] [stdout] 318 |     q94: f64,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `PauseCountdown` is never constructed
[INFO] [stdout]   --> src/game/engine.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | enum Phase {
[INFO] [stdout]    |      ----- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 89 |     PauseCountdown {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Phase` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `window` is never read
[INFO] [stdout]    --> src/game/engine.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct GameEngine {
[INFO] [stdout]     |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 111 |     window: Arc<Window>,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle_keydown`, `handle_keyup`, and `handle_event` are never used
[INFO] [stdout]    --> src/game/engine.rs:237:8
[INFO] [stdout]     |
[INFO] [stdout] 153 | impl GameEngine {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 237 |     fn handle_keydown(&mut self, key: KeyCode) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     fn handle_keyup(&mut self, key: KeyCode) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 804 |     pub fn handle_event(&mut self, event: WindowEvent) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `visible` is never read
[INFO] [stdout]   --> src/game/notes.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct NoteProcessResult {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] 44 |     pub visible: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PauseAction` is never used
[INFO] [stdout]  --> src/game/pause.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum PauseAction {
[INFO] [stdout]   |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LANES` is never used
[INFO] [stdout]   --> src/game/pause.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const LANES: [f32; 4] = [50.0, 150.0, 250.0, 350.0];
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pause_menu` is never used
[INFO] [stdout]   --> src/game/pause.rs:15:8
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub fn pause_menu(
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pause_options_text` is never used
[INFO] [stdout]   --> src/game/pause.rs:69:8
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub fn pause_options_text(text: &mut TextRenderer, selected: usize) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `score`, `total_notes`, and `song_name` are never read
[INFO] [stdout]   --> src/game/results.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct GameResult {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 11 |     pub score: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub total_notes: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 24 |     pub total_objects: u32,
[INFO] [stdout] 25 |     pub song_name: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameResult` 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 `path` and `selected_diff` are never read
[INFO] [stdout]   --> src/menu/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct SongEntry {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 13 |     pub dir_name: String,
[INFO] [stdout] 14 |     pub path: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 15 |     pub jsons: Vec<String>,
[INFO] [stdout] 16 |     pub selected_diff: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SongEntry` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `notes_count` is never read
[INFO] [stdout]   --> src/menu/song_select.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct DiffMeta {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub notes_count: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DiffMeta` 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 `config` is never read
[INFO] [stdout]   --> src/menu/song_select.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct SongSelectState {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub config: GameConfig,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_colormap` is never used
[INFO] [stdout]    --> src/render/context.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl RenderCtx {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn update_colormap(&mut self, name: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_instances` is never read
[INFO] [stdout]   --> src/render/quad.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub struct QuadRenderer {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 85 |     max_instances: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_colormap` is never used
[INFO] [stdout]    --> src/render/quad.rs:441:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | impl QuadRenderer {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 441 |     pub fn update_colormap(&mut self, device: &wgpu::Device, queue: &wgpu::Queue, name: &str, atlas: &TextureAtlas) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `ymin` is never read
[INFO] [stdout]   --> src/render/text.rs:79:16
[INFO] [stdout]    |
[INFO] [stdout] 76 | struct GlyphInfo {
[INFO] [stdout]    |        --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 79 |     xmin: f32, ymin: f32, // 相对 baseline 的偏移
[INFO] [stdout]    |                ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GlyphInfo` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `baseline_offset`, `atlas_texture`, `atlas_view`, and `sampler` are never read
[INFO] [stdout]    --> src/render/text.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout]  98 | pub struct TextRenderer {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 101 |     baseline_offset: f32, // 主字体基线偏移 (ymin绝对值，统一所有字形基线)
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     atlas_texture: wgpu::Texture,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 109 |     atlas_view: wgpu::TextureView,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 110 |     sampler: wgpu::Sampler,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `current_buffer` is never used
[INFO] [stdout]    --> src/render/text.rs:421:12
[INFO] [stdout]     |
[INFO] [stdout] 191 | impl TextRenderer {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 421 |     pub fn current_buffer(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `window` is never read
[INFO] [stdout]   --> src/replay_viewer.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct ReplayEngine {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     window: Arc<Window>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `paused`, `map_path`, `should_auto_advance`, `auto_advance_remaining`, and `cancel_auto_advance` are never used
[INFO] [stdout]    --> src/replay_viewer.rs:302:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl ReplayEngine {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn paused(&self) -> bool { self.paused }
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn map_path(&self) -> &str { &self.replay.map_path }
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 494 |     pub fn should_auto_advance(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 498 |     pub fn auto_advance_remaining(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 502 |     pub fn cancel_auto_advance(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `estimated_memory_mb` is never used
[INFO] [stdout]    --> src/skin.rs:455:8
[INFO] [stdout]     |
[INFO] [stdout] 455 | pub fn estimated_memory_mb() -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `skin_load_count` is never used
[INFO] [stdout]    --> src/skin.rs:458:8
[INFO] [stdout]     |
[INFO] [stdout] 458 | pub fn skin_load_count() -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_circle_gradient` is never used
[INFO] [stdout]   --> src/ui/primitives.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn draw_circle_gradient(quad: &mut QuadRenderer, cx: f32, cy: f32, r: f32, inner: [u8; 4], outer: [u8; 4], strips: u32) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_circle_glow` is never used
[INFO] [stdout]   --> src/ui/primitives.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub fn draw_circle_glow(quad: &mut QuadRenderer, cx: f32, cy: f32, r: f32, inner: [u8; 4], glow_color: [u8; 4], strips: u32) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_trapezoid_rounded_br` is never used
[INFO] [stdout]   --> src/ui/primitives.rs:56:8
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub fn draw_trapezoid_rounded_br(quad: &mut QuadRenderer, x: f32, y: f32, top_w: f32, bot_w: f32, h: f32, color: [u8; 4], corner_r: ...
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_bar` is never used
[INFO] [stdout]   --> src/ui/primitives.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn draw_bar(quad: &mut QuadRenderer, x: f32, y: f32, w: f32, h: f32, fill_pct: f32, fill_color: [u8; 4], bg_color: [u8; 4]) {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_rounded_rect` is never used
[INFO] [stdout]    --> src/ui/primitives.rs:104:8
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub fn draw_rounded_rect(quad: &mut QuadRenderer, x: f32, y: f32, w: f32, h: f32, r: f32, color: [u8; 4], bg: [u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lerp_color` is never used
[INFO] [stdout]    --> src/ui/primitives.rs:126:4
[INFO] [stdout]     |
[INFO] [stdout] 126 | fn lerp_color(a: [u8; 4], b: [u8; 4], t: f32) -> [u8; 4] {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_SETTINGS` is never used
[INFO] [stdout]   --> src/ui/theme.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const TAB_SETTINGS: [u8; 4] = [85, 85, 85, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_PLAY` is never used
[INFO] [stdout]   --> src/ui/theme.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub const TAB_PLAY: [u8; 4] = [97, 70, 197, 255];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_EDIT` is never used
[INFO] [stdout]   --> src/ui/theme.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const TAB_EDIT: [u8; 4] = [228, 173, 59, 255];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_BROWSE` is never used
[INFO] [stdout]   --> src/ui/theme.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const TAB_BROWSE: [u8; 4] = [173, 203, 63, 255];
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TAB_EXIT` is never used
[INFO] [stdout]   --> src/ui/theme.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub const TAB_EXIT: [u8; 4] = [219, 69, 151, 255];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BTN_BACK` is never used
[INFO] [stdout]   --> src/ui/theme.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const BTN_BACK: [u8; 4] = [52, 58, 91, 255];
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PANEL_TRAPEZOID` is never used
[INFO] [stdout]   --> src/ui/theme.rs:17:11
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub const PANEL_TRAPEZOID: [u8; 4] = [51, 54, 54, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SETTING_UNSEL` is never used
[INFO] [stdout]   --> src/ui/theme.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const SETTING_UNSEL: [u8; 4] = [36, 34, 41, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SETTING_SEL` is never used
[INFO] [stdout]   --> src/ui/theme.rs:21:11
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub const SETTING_SEL: [u8; 4] = [45, 42, 59, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SETTING_SEC_BG` is never used
[INFO] [stdout]   --> src/ui/theme.rs:22:11
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub const SETTING_SEC_BG: [u8; 4] = [48, 46, 55, 255];
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: call to `.clone()` on a reference in this situation does nothing
[INFO] [stdout]   --> src/render/context.rs:29:66
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let tmp_surface = instance.create_surface(Arc::new(window.clone())).unwrap();
[INFO] [stdout]    |                                                                  ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the type `winit::window::Window` does not implement `Clone`, so calling `clone` on `&winit::window::Window` copies the reference, which does not do anything and can be removed
[INFO] [stdout]    = note: `#[warn(noop_method_call)]` on by default
[INFO] [stdout] help: remove this redundant call
[INFO] [stdout]    |
[INFO] [stdout] 29 -         let tmp_surface = instance.create_surface(Arc::new(window.clone())).unwrap();
[INFO] [stdout] 29 +         let tmp_surface = instance.create_surface(Arc::new(window)).unwrap();
[INFO] [stdout]    |
[INFO] [stdout] help: if you meant to clone `winit::window::Window`, implement `Clone` for it
[INFO] [stdout]   --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.13/src/window.rs:35:1
[INFO] [stdout]    |
[INFO] [stdout] 35 + #[derive(Clone)]
[INFO] [stdout] 36 | pub struct Window {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 31s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: bytecheck v0.8.2, naga v24.0.0, rkyv v0.8.16, wgpu v24.0.5, wgpu-core v24.0.5, wgpu-hal v24.0.4, winit v0.30.13
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 3`
[INFO] running `Command { std: "docker" "inspect" "827eb2d5cf948716ad29a1e22bb211d5a017cf94d58a1607dbecb8b1c29a0400", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "827eb2d5cf948716ad29a1e22bb211d5a017cf94d58a1607dbecb8b1c29a0400", kill_on_drop: false }`
[INFO] [stdout] 827eb2d5cf948716ad29a1e22bb211d5a017cf94d58a1607dbecb8b1c29a0400
