Skip to content

polish: 深覆盖收官后打磨轮(P1-P10)—— clippy 清零 + AOT 覆盖率 51/51 满额 - #20

Merged
lollipopkit merged 8 commits into
mainfrom
polish/post-deep-coverage
Jul 9, 2026
Merged

polish: 深覆盖收官后打磨轮(P1-P10)—— clippy 清零 + AOT 覆盖率 51/51 满额#20
lollipopkit merged 8 commits into
mainfrom
polish/post-deep-coverage

Conversation

@lollipopkit

@lollipopkit lollipopkit commented Jul 9, 2026

Copy link
Copy Markdown
Owner

概要

深覆盖大计划(PR #17)合并后的打磨轮,10 个子项(P1-P10),8 个 commit。

  • P1 cb206f2 — clippy --all-targets 清零(36 条)+ CI gate 升级
  • P2 eed7a69 — native raise 前缀统一:LK 层 catch 到的文本 = 裸 cause,消 "native ... failed:" 前缀分歧
  • P3 b878745 — 宏系统用户文档 docs/macros.md + README 补链
  • P4 6be9fe5 — select spin-poll → 代数 Condvar 唤醒
  • P5 9502796 — lower 名单收拢为三张声明表,消 7 处硬编码同步点
  • P6 0894123 — fixpoint 收敛比较消掉第二组 clone
  • P7-P10 db96798unsupported.lk 全翻转(list concat / 位运算 / SetFieldK Dyn / struct update 镜像 / force_dyn_globals),AOT 覆盖率 25/51 → 51/51 满额

验证

  • 全量 workspace tests(--all-features + RUSTFLAGS=-D warnings)0 失败
  • clippy --all-targets 0 · fmt 0
  • scripts/aot_coverage.sh 51/51,差分门禁逐字节全过
  • bench 1.021x(基线内)

细节台账见 progress.md「打磨轮」章节。

Summary by CodeRabbit

  • New Features

    • 增强了宏系统文档与示例,补充了导入、导出、属性、过程宏和调试相关说明。
    • 新增并完善了部分数值位运算、列表拼接、结构体更新与重建能力。
    • 改进了并发 select 的唤醒机制,减少漏唤醒问题。
  • Bug Fixes

    • 统一了错误文本表现,减少原生调用失败时的额外包装。
    • 优化了若干运行时与编译器边界行为,提升稳定性。
  • Documentation

    • 补充了宏系统与语义说明文档,并同步更新中英文 README。

测试目标里的机械 lint 全清:11× clone-on-Copy(RuntimeVal)、
5× field_reassign_with_default(struct 初始化改写)、5× 手写
±1 范围比较、3× items_after_test_module、其余单发。
check.yml clippy gate 加 --all-targets——-D warnings 盲区
(#17 两轮 CI 红皆此类)最后一角关闭。
map_native_error 不再包装 "native `{name}` failed: " 前缀:
native 函数失败与 error(v) 一等值对称,调用点归因由 traceback
承担。副产品:VM catch 文本与 lkrt raise_str 文本对齐一步。
semantics.md 新增「错误文本」裁决:跨后端错误文本仍不保证逐字
一致(VM 类型检查 vs native id 查找,如 recv(999) 两侧文本不同),
差分语料继续不打印 catch 文本。
既有 exec_tests 断言匹配的是测试自身 bail 文本,无需更新;
全量差分/fuzz 150 无涟漪。
macro_rules!(10 种 fragment + follow-set/重复深度定义期校验)·
hygiene/$crate 锚 · 宏导入四形式(内建 macros 8 宏/文件/包/
命名空间 m::vec!)· #[cfg]/#[derive(Debug|Show)] · 外部 provider
(Lk.toml 配置/信任模型/依赖感知缓存,指向 packages.md)·
lk macro expand 全 flags。示例经实测可跑;README ×2 特性段补链;
本地 CLAUDE.md 过时注记修正。
进程级 SelectGen{Mutex<u64>, Condvar}:send/recv/close/try_*/select
自身共 7 个状态变更点在 **drop 各自 channel 锁之后** bump 代数并
广播(无嵌套锁序,通知路径零 raise 点)。select 空手轮询后改等
代数变化,wait_timeout(1ms) 仅作丢失唤醒保险,不再是发现机制——
消掉 200µs 空转。轮询前读代数:轮询期间落地的变更使等待立即返回,
无窗口。新增跨线程唤醒功能单测(断言完成与载荷,不断言时序)。
差分 12/12 · workspace 0 · fuzz 150 · bench 见下
MODULE_TABLE(bare-global 白名单 + encoding/net 子模块标记)·
MODULE_ABI(module.member → AbiRef/参数/返回,42 行带语义注释,
线性查找冷路径)· METHOD_TABLE(方法名四用途位:Dyn 拆箱
list/map、strlist lookahead、iter/stream 转发,20 行)。
新增 stdlib 成员从「改 5+ 处 match」变「加一行」;差异项
(slice 只进 strlist、reduce 不进 strlist 等)逐条保留原语义。
AbiRef::new 升 const fn(mir)。
纯重构:coverage 50/51 精确不变 · 差分 12/12 · fuzz 150 ·
workspace 0 · clippy/fmt/no_std 全零。
比较侧改逐字段引用比较,条件不变;快照 clone 保留为正确性锚。
generation-counter 方案裁决不做(~30 处 mutation site 漏 bump 一处
= false convergence = miscompile,收益当前无痛),注释留档。
coverage 50/51 不变 · 差分绿。
留档合集逐项啃完,四组通用机制(probe 驱动,非 workload 特化):

- **list + list concat**(spread `[0, ..[1,2], 3]` desugar):AddInt
  加 list 臂——同型 typed 直连(新 f64/str_chain ABI ×2;ListStr
  结果保引号 display),跨型/含 Dyn 走 dyn_chain(VM Mixed 裸文)。
- **位运算** `& | ~`(__lk_bit_and/or/not desugar):MIR IntBinOp
  加 And/Or/Xor + codegen 三行;~x = xor -1;非 Int 实参 reject。
- **SetFieldK Dyn 臂**:`p.x += 9` 的 struct 字段回写(值 to_dyn_any
  经 str_dyn_set)。
- **struct update** `P { ..p, x: 42 }`(__lk_merge_fields +
  __lk_make_struct desugar):新 ABI str_dyn_merge(镜像 VM
  merge_field_maps 两步插入序)+ str_dyn_rebuild(镜像 make_struct
  的 fresh field copy,键迭代序 VM-exact);make_struct 挂 struct
  provenance + trait 标记(J1 机制复用)。
- **force_dyn_globals 通用机制**:非 entry-prefix 初始化的全局被
  函数读(fn inc(){counter+=1})→ 槽强制 Dyn(zeroinit {0,0} 恰是
  nil tag,先读后写观察到 VM-exact 的 nil)——retriable discovery,
  快照/budget 全接线。曾是「mutable 全局首版不做」的最后残留。

**"ha"*3 无需改动**(编译器常量折叠,probe 钉实)。
门禁:51/51 · 差分 12/12 · workspace 0 · fuzz 150 · -D warnings
all-features 0 · clippy --all-targets 0 · no_std 0 · bench 见下
@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: cc39c94b-8079-4d75-8beb-8a0f3b781c14

📥 Commits

Reviewing files that changed from the base of the PR and between aa60c83 and 15077b1.

📒 Files selected for processing (32)
  • .github/workflows/check.yml
  • README.md
  • README.zh-CN.md
  • aot/abi/src/lib.rs
  • aot/codegen/src/lib.rs
  • aot/lower/src/lib.rs
  • aot/mir/src/lib.rs
  • cli/tests/aot_fuzz_differential_test.rs
  • cli/tests/macro_origins_cli_test.rs
  • core/src/macro_system/procedural/tests/attribute.rs
  • core/src/stmt/function_test.rs
  • core/src/stmt/import.rs
  • core/src/stmt/stmt_test.rs
  • core/src/vm/compiler/facts_tests.rs
  • core/src/vm/compiler/tests/loops.rs
  • core/src/vm/exec/exec_tests/native.rs
  • core/src/vm/exec/support.rs
  • core/src/vm/gc.rs
  • core/src/vm/runtime.rs
  • core/src/vm/verify.rs
  • docs/macros.md
  • docs/semantics.md
  • handoff.md
  • lkrt/src/chan.rs
  • lkrt/src/lib.rs
  • lkrt/src/lklist.rs
  • lkrt/src/lkmap.rs
  • lkrt/src/lkstr.rs
  • lsp/src/server/handlers.rs
  • progress.md
  • stdlib/crates/chan/src/lib.rs
  • stdlib/crates/iter/src/lib.rs
📜 Recent review details
⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: ci checks
  • GitHub Check: workload-bench
  • GitHub Check: Cloudflare Pages
🧰 Additional context used
🪛 LanguageTool
docs/semantics.md

[grammar] ~126-~126: Ensure spelling is correct
Context: ...担,不进消息。 跨后端错误文本不保证逐字一致:VM 与 native 的错误生成机制不同 (如 recv(999) VM 报 "recv first argument m...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

docs/macros.md

[grammar] ~114-~114: Ensure spelling is correct
Context: ...function-like 展开 name!(...) 为 token 流。 - provider 响应可携带依赖元数据(path + digest),编译器/LSP 据...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[style] ~131-~131: Using many exclamation marks might seem excessive (in this case: 18 exclamation marks for a text that’s 2503 characters long)
Context: ...可运行示例:examples/syntax/macros.lk(内建宏导入、macro_rules!#[derive(Debug)] 整对象插值、#[cfg] 函...

(EN_EXCESSIVE_EXCLAMATION)

🪛 markdownlint-cli2 (0.22.1)
docs/semantics.md

[warning] 123-123: Spaces inside code span elements

(MD038, no-space-in-code)


[warning] 123-123: Spaces inside code span elements

(MD038, no-space-in-code)

🔇 Additional comments (40)
lkrt/src/chan.rs (1)

142-170: LGTM!

Also applies to: 220-220, 237-237, 256-256, 273-273, 289-289, 378-381, 399-399, 446-446, 464-478, 629-659

lkrt/src/lkstr.rs (2)

483-544: LGTM!


229-236: 📐 Maintainability & Code Quality

view 不是死代码

view 已在 lkrt/src/lkstr.rs 的多个字符串 API 中复用,dead_code 这条担忧不成立;这处重构只是把 NULL/非 UTF-8 的处理统一起来。

			> Likely an incorrect or invalid review comment.
.github/workflows/check.yml (1)

26-26: LGTM!

README.md (1)

13-13: LGTM!

README.zh-CN.md (1)

13-13: LGTM!

docs/macros.md (1)

1-135: LGTM!

docs/semantics.md (1)

120-131: LGTM!

handoff.md (1)

230-235: LGTM!

progress.md (1)

900-928: LGTM!

cli/tests/aot_fuzz_differential_test.rs (1)

225-225: LGTM!

cli/tests/macro_origins_cli_test.rs (1)

90-95: LGTM!

core/src/macro_system/procedural/tests/attribute.rs (1)

480-490: LGTM!

core/src/stmt/function_test.rs (1)

399-402: LGTM!

core/src/vm/verify.rs (1)

720-727: LGTM!

Also applies to: 743-750

lsp/src/server/handlers.rs (1)

1215-1249: LGTM!

stdlib/crates/chan/src/lib.rs (1)

181-181: LGTM!

stdlib/crates/iter/src/lib.rs (1)

912-913: LGTM!

core/src/stmt/import.rs (1)

436-440: LGTM!

core/src/stmt/stmt_test.rs (1)

20-25: LGTM!

core/src/vm/compiler/facts_tests.rs (1)

301-320: LGTM!

core/src/vm/compiler/tests/loops.rs (1)

337-341: LGTM!

Also applies to: 404-417, 605-618

core/src/vm/exec/exec_tests/native.rs (1)

248-251: LGTM!

Also applies to: 260-261, 286-289, 299-301, 357-357, 402-403, 441-441

core/src/vm/gc.rs (1)

110-128: LGTM!

core/src/vm/runtime.rs (1)

636-644: LGTM!

Also applies to: 653-660

core/src/vm/exec/support.rs (1)

318-328: 🎯 Functional Correctness

这里不需要保留旧前缀 现有代码和 docs/semantics.md 已统一为裸错误文本,旧的 native \{name}` failed:` 只作为历史说明出现。

			> Likely an incorrect or invalid review comment.
aot/mir/src/lib.rs (1)

109-113: LGTM!

Also applies to: 338-338

aot/lower/src/lib.rs (7)

168-179: LGTM!

Also applies to: 5564-5568, 5660-5665, 7545-7548


262-648: LGTM!


833-838: LGTM!

Also applies to: 1205-1205, 1248-1248, 1310-1330, 5514-5520, 5632-5638


1849-1854: LGTM!

Also applies to: 5580-5580, 5601-5601, 5696-5696, 7970-7979


3919-4032: 🗄️ Data Integrity & Integration

结构体更新 lowering 逻辑正确,但其“VM-exact 顺序”承诺依赖 map_h::str_dyn_merge/str_dyn_rebuild 的底层实现。

to_dyn_map_handle/lower_merge_fields/lower_make_struct 本身的寄存器读取、ABI 调用顺序与 trait provenance 标记均正确。但其文档注释(如 "Mirrors the VM's merge_field_maps... so the result's iteration order is VM-exact")依赖的顺序保证问题出在 lkrt/src/lkmap.rsStrDynMaphashbrown::HashMap)实现层,详见该文件对应评论。


4668-4702: LGTM!


6873-6878: LGTM!

aot/codegen/src/lib.rs (1)

667-675: LGTM!

aot/abi/src/lib.rs (1)

197-198: LGTM!

Also applies to: 374-377

lkrt/src/lib.rs (1)

64-84: LGTM!

lkrt/src/lklist.rs (1)

164-212: LGTM!

lkrt/src/lkmap.rs (2)

594-655: LGTM!

Also applies to: 743-744


211-245: 🗄️ Data Integrity & Integration

这处顺序实现与 VM 对齐 StrDynMap 和 VM mirror 都基于同一套 hashbrown + FxBuildHasher 语义,merge/rebuild 只是重放 VM 的迭代顺序,不是在承诺插入顺序。

			> Likely an incorrect or invalid review comment.

📝 Walkthrough

Walkthrough

本次打磨轮变更包括:CI clippy 检查扩展到 --all-targets;新增宏系统文档;AOT/lower/codegen 端新增按位运算(And/Or/Xor)与结构体合并/重建(MergeFields/MakeStruct)lowering 及对应 ABI 条目;lkrt 新增 f64_chain/str_chain/str_dyn_merge/str_dyn_rebuild 函数;chan.rs 引入基于条件变量的 select 唤醒机制替代轮询;lower 端将模块 ABI 映射改为表驱动,并新增 force_dyn_globals fixpoint 收敛策略;多处测试断言与构造方式做了整理。

Changes

打磨轮核心变更

Layer / File(s) Summary
CI clippy 全目标检查与宏系统文档
.github/workflows/check.yml, README.md, README.zh-CN.md, docs/macros.md, docs/semantics.md, handoff.md, progress.md
cargo clippy 增加 --all-targets 并保持 -D warnings;新增 docs/macros.md 系统性说明宏系统;README 补充宏能力描述;docs/semantics.md 新增错误文本裁决;handoff.md/progress.md 记录打磨轮 P1-P10 任务清单。
按位运算端到端支持
aot/mir/src/lib.rs, aot/lower/src/lib.rs, aot/codegen/src/lib.rs
IntBinOp 新增 And/Or/XorBuiltin 新增 BitAnd/BitOr/BitNot 及其 lowering;codegen 生成对应 LLVM and/or/xor 指令;AbiRef::new 改为 const fn
Struct-update lowering 与 ABI 扩展
aot/lower/src/lib.rs, aot/abi/src/lib.rs, lkrt/src/lklist.rs, lkrt/src/lkmap.rs, lkrt/src/lib.rs
新增 MergeFields/MakeStruct lowering、SetFieldKMapStrDyn 字段的装箱写入、AddInt 的 typed/dyn list 拼接;ABI 表新增 f64_chain/str_chain/str_dyn_merge/str_dyn_rebuild;lkrt 实现对应导出函数并更新重导出列表。
Lower 端表驱动化与全局收敛
aot/lower/src/lib.rs
模块 ABI 映射由硬编码 match 改为 MODULE_TABLE/MODULE_ABI 表驱动;方法角色判定统一为 method_roleSigInfer 新增 force_dyn_globals 集合,用于 fixpoint 中强制未初始化全局槽提升为 Dyn
Chan select 条件变量唤醒机制
lkrt/src/chan.rs
新增全局 SelectGen(generation + Condvar)与 notify_selects();各 channel 操作在状态变更后广播唤醒;select 无就绪臂时基于代数变化阻塞等待替代轮询;新增跨线程唤醒测试。
lkstr 指针解码辅助函数
lkrt/src/lkstr.rs
新增内部 view 函数统一处理 NULL/非 UTF-8 指针;测试模块位置调整。
测试断言与构造方式整理
cli/tests/*, core/src/**/*, stdlib/crates/**/*, lsp/src/server/handlers.rs
多处测试去除冗余 clone/map,采用结构体更新语法、区间模式匹配及 if let ... && 链式判断,测试模块位置重排,行为保持不变。

Sequence Diagram(s)

sequenceDiagram
  participant SenderThread
  participant lkrt_chan_send
  participant notify_selects
  participant lkrt_chan_select
  participant SelectGen

  lkrt_chan_select->>SelectGen: 读取当前 generation
  lkrt_chan_select->>lkrt_chan_select: 轮询各 arm(无就绪,无 default)
  lkrt_chan_select->>SelectGen: 阻塞等待 generation 变化
  SenderThread->>lkrt_chan_send: 发送值到 channel
  lkrt_chan_send->>notify_selects: 通知状态变化
  notify_selects->>SelectGen: 递增 generation 并广播
  SelectGen-->>lkrt_chan_select: 唤醒
  lkrt_chan_select->>lkrt_chan_select: 重新轮询 arm,发现就绪
  lkrt_chan_select-->>lkrt_chan_select: 返回接收到的值
Loading

Possibly related PRs

  • lollipopkit/lk#3: 本 PR 新增的 IntBinOp::And/Or/XorBitAnd/BitOr/BitNot lowering/codegen 与该 PR 早期引入的按位运算 builtin 解析直接相关。
  • lollipopkit/lk#15: 两者都调整了 .github/workflows/check.ymlcargo clippy 步骤的作用范围参数并显式启用 -D warnings

Comment @coderabbitai help to get the list of available commands.

@lollipopkit
lollipopkit merged commit 29393d1 into main Jul 9, 2026
3 checks passed
@lollipopkit
lollipopkit deleted the polish/post-deep-coverage branch July 9, 2026 06:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant