fix(theme): 消除 ThemeToggle 在 wasm/server 构建的 unused_mut 警告
Some checks failed
CI / check (push) Failing after 6m25s
CI / build (push) Has been skipped

dx build 的 wasm target 报两条 unused_mut:

- theme (160行): wasm 端的 theme.set 被非 wasm cfg 分支剥离,写操作转移
  到副本 theme_clone,theme 本身在 wasm 下只被读取/Copy。加
  #[cfg_attr(target_arch = "wasm32", allow(unused_mut))]——仅 wasm 端压住,
  server 端仍需 mut(theme.set(next) 实际存在)。
- gen_clone (191行): 闭包内只读 gen_clone(),从未 set,两端都不需 mut,
  直接删除。

顺带把原来无条件挂在 click_gen 上的 #[allow(unused_mut)] 改成
#[cfg_attr(not(target_arch = "wasm32"), ...)]——click_gen 只在 wasm 分支被
set(189行),server 端该分支被剥离。改为按 cfg 方向标注,与 theme 对称,
语义更精确(不再无差别压住 wasm 端的检查)。

匹配项目既定模式(post_cover.rs:20 的 cfg_attr allow)。零行为变更,
dx check / cargo check(双 target) / clippy / theme 测试均通过。
This commit is contained in:
xfy 2026-06-29 11:31:57 +08:00
parent b923851284
commit 46e9a29f1e

View File

@ -157,10 +157,15 @@ pub fn ThemePreload() -> Element {
#[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))] #[cfg_attr(not(target_arch = "wasm32"), allow(unused_variables))]
#[component] #[component]
pub fn ThemeToggle() -> Element { pub fn ThemeToggle() -> Element {
// theme 仅在非 wasmserver构建的 theme.set(next) 需要 mutwasm 端该分支
// 被 cfg 剥离,写操作转移到副本 theme_clone故 wasm 下标注 unused_mut。
#[cfg_attr(target_arch = "wasm32", allow(unused_mut))]
let mut theme = use_theme(); let mut theme = use_theme();
// generation:每次点击递增。延迟回调检查自己的 gen 是否最新,过期则跳过 set。 // generation:每次点击递增。延迟回调检查自己的 gen 是否最新,过期则跳过 set。
// 解决连续点击时多个 spawn_local 堆积导致的状态错乱。 // 解决连续点击时多个 spawn_local 堆积导致的状态错乱。
#[allow(unused_mut)] // click_gen 仅在 wasm 分支被 set连续点击防抖server 构建剥离该分支,
// 故非 wasm 端标注 unused_mut。
#[cfg_attr(not(target_arch = "wasm32"), allow(unused_mut))]
let mut click_gen = use_signal(|| 0u32); let mut click_gen = use_signal(|| 0u32);
rsx! { rsx! {
@ -188,7 +193,7 @@ pub fn ThemeToggle() -> Element {
let gen = click_gen() + 1; let gen = click_gen() + 1;
click_gen.set(gen); click_gen.set(gen);
let mut theme_clone = theme; let mut theme_clone = theme;
let mut gen_clone = click_gen; let gen_clone = click_gen;
wasm_bindgen_futures::spawn_local(async move { wasm_bindgen_futures::spawn_local(async move {
crate::utils::time::sleep_ms(450).await; crate::utils::time::sleep_ms(450).await;
if gen_clone() == gen { if gen_clone() == gen {