fix(guards): 把 unsafe-scope 的说明注释压缩到 397 行(守卫文件自己也要过 400 行红线)
M256 加 EXPECTED 一行后本文件 401 行,触发 guards.yml::file-size 自己那条门禁。 只合并注释里的重复表述(词法器段 8→6 行)+ 去掉两处纯分隔空注释行; 判据逻辑、shell 片段、EXPECTED 的三条路径一字未动。
This commit is contained in:
1 parent
b1c09c4c91
commit
098f3b8946
1 file changed
+7
-11
@@ -180,10 +180,9 @@ jobs:
|
|||||||
echo "OK: unlucky-design 依赖树只有自身,零第三方依赖"
|
echo "OK: unlucky-design 依赖树只有自身,零第三方依赖"
|
||||||
|
|
||||||
# D36 定案:整窗 α 需要 `unsafe`(`SetLayeredWindowAttributes` 没有安全替代)。
|
# D36 定案:整窗 α 需要 `unsafe`(`SetLayeredWindowAttributes` 没有安全替代)。
|
||||||
# M196 加了第二处:控制台附着(`AttachConsole`)同样只有 Win32 一条路。两处各自成文件,
|
# M196 加第二处(控制台附着 `AttachConsole`)、M256 加第三处(系统「减少动效」探针
|
||||||
# M256 加了第三处:系统「减少动效」探针(`SystemParametersInfoW(SPI_GETCLIENTAREAANIMATION)`
|
# `SystemParametersInfoW(SPI_GETCLIENTAREAANIMATION)`;Linux/macOS 两支走子进程、零 unsafe)。
|
||||||
# 同样没有安全替代;Linux/macOS 那两支走子进程,零 unsafe)。三处各自成文件,
|
# 三处各自成文件,判据是**集合相等**而不是「黑名单命中」:
|
||||||
# 判据是**集合相等**而不是「黑名单命中」:
|
|
||||||
# - 任何第四个显式放行 unsafe 的文件 → 红(黑名单写法在这里会假绿);
|
# - 任何第四个显式放行 unsafe 的文件 → 红(黑名单写法在这里会假绿);
|
||||||
# - 落点文件把放行删掉 / 改名 / 搬走 → 红(否则门禁守着一条已经不存在的路径);
|
# - 落点文件把放行删掉 / 改名 / 搬走 → 红(否则门禁守着一条已经不存在的路径);
|
||||||
# - 多行属性、同行合并属性、多行 `cfg_attr`、`expect(unsafe_code)` 都已覆盖
|
# - 多行属性、同行合并属性、多行 `cfg_attr`、`expect(unsafe_code)` 都已覆盖
|
||||||
@@ -202,11 +201,10 @@ jobs:
|
|||||||
# 为什么必须用词法器:r2 的写法是「按全文方括号净深度合并续行」,但 Rust 里
|
# 为什么必须用词法器:r2 的写法是「按全文方括号净深度合并续行」,但 Rust 里
|
||||||
# `['[', '(']`、`"[2"`、`starts_with("[2")` 这类**不配对括号字面量**会让深度永久跑偏,
|
# `['[', '(']`、`"[2"`、`starts_with("[2")` 这类**不配对括号字面量**会让深度永久跑偏,
|
||||||
# 于是该文件后面的一切(包括一个真的 `#[allow(unsafe_code)]`)都再也不会被扫到——
|
# 于是该文件后面的一切(包括一个真的 `#[allow(unsafe_code)]`)都再也不会被扫到——
|
||||||
# 实测本仓 601 个文件里有 10 个扫到 EOF 仍非 0,`gate.rs` 就是其中之一(r3 复审实证:
|
# 实测本仓 601 个文件里有 10 个扫到 EOF 仍非 0,`gate.rs` 就是其中之一(在它尾部加
|
||||||
# 在它尾部加作用域 allow,r2 门禁 exit 0 假绿)。
|
# 作用域 allow,r2 门禁 exit 0 假绿)。
|
||||||
# 现在的做法:逐字符状态机(普通 / 行注释 / 块注释(可嵌套)/ 字符串 / raw 字符串 /
|
# 现在的做法:逐字符状态机(普通 / 行注释 / 块注释(可嵌套)/ 字符串 / raw / 字符字面量),
|
||||||
# 字符字面量),只在「普通态」里认 `#` 或 `#!` 紧跟 `[` 的属性起点,然后只在这一个
|
# 只在「普通态」认 `#`/`#!` 紧跟 `[` 的属性起点,再累计到那一个属性的 `]` 配平。
|
||||||
# 属性内部累计到它的 `]` 配平——数组字面量跨行不再参与合并,也就不会带偏。
|
|
||||||
#
|
#
|
||||||
# 放行的两种拼法都算:`allow(...)` 与 `expect(...)`。`expect(unsafe_code)` 同样会
|
# 放行的两种拼法都算:`allow(...)` 与 `expect(...)`。`expect(unsafe_code)` 同样会
|
||||||
# 放行 unsafe 代码(rustc 实测:`#![expect(unsafe_code)]` + `pub unsafe fn f() {}` 在
|
# 放行 unsafe 代码(rustc 实测:`#![expect(unsafe_code)]` + `pub unsafe fn f() {}` 在
|
||||||
@@ -219,7 +217,6 @@ jobs:
|
|||||||
# - 注释(行注释/块注释)与字符串(普通/raw)里的属性文本**刻意不算**:它们不构成放行;
|
# - 注释(行注释/块注释)与字符串(普通/raw)里的属性文本**刻意不算**:它们不构成放行;
|
||||||
# 代价是「真把 allow 写进字符串」这种写法不会被当作落点(它也确实不放行任何代码);
|
# 代价是「真把 allow 写进字符串」这种写法不会被当作落点(它也确实不放行任何代码);
|
||||||
# - manifest 侧 `[lints.rust] unsafe_code = "allow"`:本门禁只扫 `*.rs`,看不见 Cargo.toml;
|
# - manifest 侧 `[lints.rust] unsafe_code = "allow"`:本门禁只扫 `*.rs`,看不见 Cargo.toml;
|
||||||
#
|
|
||||||
# r4 回归用例(属性内的 raw string / 字符字面量曾经是盲区;现在两处共用 step(),
|
# r4 回归用例(属性内的 raw string / 字符字面量曾经是盲区;现在两处共用 step(),
|
||||||
# 它们不再是边界,但下面五条必须一直保持红/绿正确 —— 改这段词法器前先跑它们):
|
# 它们不再是边界,但下面五条必须一直保持红/绿正确 —— 改这段词法器前先跑它们):
|
||||||
# 红 #[doc = r#"a "b"#] 后跟真 allow
|
# 红 #[doc = r#"a "b"#] 后跟真 allow
|
||||||
@@ -236,7 +233,6 @@ jobs:
|
|||||||
# 完全不认识 —— `#[doc = r#"a "b"#]` 之后的一切对门禁失明(假绿),
|
# 完全不认识 —— `#[doc = r#"a "b"#]` 之后的一切对门禁失明(假绿),
|
||||||
# `#[doc = r#"x" allow(unsafe_code) "y"#]` 这种纯文档被误报(误红)。
|
# `#[doc = r#"x" allow(unsafe_code) "y"#]` 这种纯文档被误报(误红)。
|
||||||
# 现在两处只认这一个 step(),属性解析只多一层「[ ] 深度决定何时离开属性」。
|
# 现在两处只认这一个 step(),属性解析只多一层「[ ] 深度决定何时离开属性」。
|
||||||
#
|
|
||||||
# 状态:0 普通 / 1 行注释 / 2 块注释(可嵌套)/ 3 字符串 / 4 raw 字符串 / 5 字符字面量。
|
# 状态:0 普通 / 1 行注释 / 2 块注释(可嵌套)/ 3 字符串 / 4 raw 字符串 / 5 字符字面量。
|
||||||
# 返回值 = 本次消费到的位置(`//`、`/*`、`r#"`、raw 收尾会一次吃掉多个字符);
|
# 返回值 = 本次消费到的位置(`//`、`/*`、`r#"`、raw 收尾会一次吃掉多个字符);
|
||||||
# g_plain=1 表示该位置处在「普通态代码」里(注释/字符串内容一律 0,
|
# g_plain=1 表示该位置处在「普通态代码」里(注释/字符串内容一律 0,
|
||||||
|
|||||||
Reference in new issue
Block a user