From 006eb6869a8aa0fa1d660d71e3883fc0f5b91026 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Mon, 2 Nov 2026 13:40:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(app-iced):=20=E5=9B=BE=E6=A0=87=E5=AE=88?= =?UTF-8?q?=E9=97=A8=E7=99=BD=E5=90=8D=E5=8D=95=E8=A1=A5=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=97=8F=EF=BC=88M79=20=E8=BF=9B=E4=B8=BB=E7=BA=BF=E5=90=8E?= =?UTF-8?q?=E7=9A=84=E8=AF=AD=E4=B9=89=E9=94=99=E9=85=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit M86 的 sub_24_boxes_go_through_view_at 写于 M79 之前,白名单「未列出 = 0」把 导航族四处 view 调用判成违规。实测这四处 geometry.icon = IconSize::Toolbar = 24, view 是正确入口,故补白名单(逐文件精确计数,仍能抓「同文件多一处」),总数 8→13。 icons.rs 399 行。 --- crates/app-iced/src/icons.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/crates/app-iced/src/icons.rs b/crates/app-iced/src/icons.rs index eff402c..a814718 100644 --- a/crates/app-iced/src/icons.rs +++ b/crates/app-iced/src/icons.rs @@ -167,9 +167,7 @@ mod tests { ); } - /// `view_at` 必须**按请求尺寸烘焙**(复审 r1 P1-2/P2-2 的守门断言)。 - /// - /// 两条路径的差别就是这条测试的全部意义: + /// `view_at` 必须**按请求尺寸烘焙**(复审 r1 P1-2/P2-2 的守门断言)。两条路径的差别就是全部意义: /// - **烘焙路径**:`source(kind, 盒)` → SVG `width=盒` + 线宽 `1.5×24/盒` ⇒ 视觉恒 **1.5px**; /// - **缩放路径**(错的那条):24 烘焙(`stroke-width="1.5"`)塞进 18 盒 ⇒ 视觉 **1.125px**。 #[test] @@ -228,11 +226,9 @@ mod tests { assert_ne!(first.id(), handle(IconKind::Close, CAPTION_PX).id()); } - /// **盒 ≠ `RENDER_PX`(24) 的调用点必须走 `view_at`**(复审 r1 P1-1)。 - /// - /// 判据 = 调用形状匹配 + **逐调用点计数**(不做「文件里出现过 view_at 就整文件放行」的短路): - /// 先剥注释,再认 `icons::view(` / `icons::view::<` / `crate::icons::view` / `super::icons::view` - /// 以及 `use …icons…view as v` / `{view, view_at}` 之后的 `v(` / `view(`; + /// **盒 ≠ `RENDER_PX`(24) 的调用点必须走 `view_at`**(复审 r1 P1-1)。判据 = 调用形状匹配 + + /// **逐调用点计数**(不做「文件里出现过 view_at 就整文件放行」的短路):先剥注释,再认 + /// `icons::view(` / `icons::view::<` / `crate::`·`super::` 前缀 / `use …view as v` 的 `v(`。 /// 每个文件的计数必须**等于**白名单期望(未列出 = 0),所以「同文件改对 3 处、漏掉 1 处」也会红。 #[test] fn sub_24_boxes_go_through_view_at() { @@ -242,6 +238,12 @@ mod tests { ("components/inputs/menu.rs", 2), ("components/inputs/search.rs", 2), ("components/buttons/mod.rs", 1), // 24 图标 + 40 外壳 + // 导航族(M79)全是 `IconSize::Toolbar = 24`,`view` 正确;本白名单写于 M79 之前, + // 「未列出 = 0」会误判它们。补进来后这几族再出现多余 `view` 仍会红。 + ("components/navigation/app_bar.rs", 1), + ("components/navigation/drawer/item.rs", 1), + ("components/navigation/list_item.rs", 2), + ("components/navigation/tabs.rs", 1), ]; let root = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src"); let mut views = 0usize; @@ -265,7 +267,7 @@ mod tests { } } assert!(bad.is_empty(), "图标入口用法违规:\n{}", bad.join("\n")); - assert_eq!(views, 8, "全仓 `icons::view` 调用点总数变了"); + assert_eq!(views, 13, "全仓 `icons::view` 调用点总数变了"); fn sites(list: &[(&str, usize)], rel: &str) -> usize { list.iter().find(|(p, _)| *p == rel).map_or(0, |(_, n)| *n)