smart-commit-copilot-cli 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +41 -11
- package/docs/configuration.md +23 -2
- package/docs/contracts.md +10 -2
- package/docs/getting-started.md +18 -4
- package/docs/publish.md +1 -1
- package/docs/releases/0.1.5-draft.md +44 -0
- package/docs/releases/0.1.6-draft.md +72 -0
- package/docs/verification.md +15 -0
- package/examples/config/smart-commit.json +3 -1
- package/out/cliApp.js +3 -1
- package/out/cliApp.js.map +1 -1
- package/out/commands/bridge.js +54 -23
- package/out/commands/bridge.js.map +1 -1
- package/out/commitMessage/index.js +28 -8
- package/out/commitMessage/index.js.map +1 -1
- package/out/commitMessage/prompt.js +2 -0
- package/out/commitMessage/prompt.js.map +1 -1
- package/out/commitMessage/protocol.js +122 -8
- package/out/commitMessage/protocol.js.map +1 -1
- package/out/config/cliArgs.js +12 -0
- package/out/config/cliArgs.js.map +1 -1
- package/out/config/constants.js +1 -0
- package/out/config/constants.js.map +1 -1
- package/out/config/env.js +9 -0
- package/out/config/env.js.map +1 -1
- package/out/config/file.js +10 -0
- package/out/config/file.js.map +1 -1
- package/out/config/legacySmartCommit.js +14 -0
- package/out/config/legacySmartCommit.js.map +1 -1
- package/out/config/schema.js +18 -1
- package/out/config/schema.js.map +1 -1
- package/out/contracts.js +15 -6
- package/out/contracts.js.map +1 -1
- package/out/llm/responseCorrection.js +32 -0
- package/out/llm/responseCorrection.js.map +1 -0
- package/out/passHistory/index.js +51 -22
- package/out/passHistory/index.js.map +1 -1
- package/out/passHistory/store.js +29 -1
- package/out/passHistory/store.js.map +1 -1
- package/out/passHistory/types.js +23 -1
- package/out/passHistory/types.js.map +1 -1
- package/out/promptContext.js +19 -3
- package/out/promptContext.js.map +1 -1
- package/out/renderOutput.js +2 -0
- package/out/renderOutput.js.map +1 -1
- package/out/reporting/prompt.js +13 -1
- package/out/reporting/prompt.js.map +1 -1
- package/out/reporting/timeWindow.js +7 -0
- package/out/reporting/timeWindow.js.map +1 -1
- package/out/reporting/types.js +1 -0
- package/out/reporting/types.js.map +1 -1
- package/out/review/diffClassifier.js +535 -0
- package/out/review/diffClassifier.js.map +1 -0
- package/out/review/index.js +27 -11
- package/out/review/index.js.map +1 -1
- package/out/review/mockProvider.js +157 -8
- package/out/review/mockProvider.js.map +1 -1
- package/out/review/openaiProvider.js +10 -4
- package/out/review/openaiProvider.js.map +1 -1
- package/out/review/parser.js +13 -0
- package/out/review/parser.js.map +1 -1
- package/out/review/prompt.js +76 -4
- package/out/review/prompt.js.map +1 -1
- package/out/skills/types.js +3 -0
- package/out/skills/types.js.map +1 -0
- package/package.json +2 -1
- package/src/code-review-skills/c-code-review/SKILL.md +165 -0
- package/src/code-review-skills/c-code-review/references/build-and-tooling.md +16 -0
- package/src/code-review-skills/c-code-review/references/concurrency-and-signals.md +16 -0
- package/src/code-review-skills/c-code-review/references/error-handling-and-cleanup.md +16 -0
- package/src/code-review-skills/c-code-review/references/macros-headers-and-build-boundaries.md +16 -0
- package/src/code-review-skills/c-code-review/references/performance-and-data-movement.md +16 -0
- package/src/code-review-skills/c-code-review/references/pointers-memory-and-resource-lifecycle.md +18 -0
- package/src/code-review-skills/c-code-review/references/scoring-guide.md +40 -0
- package/src/code-review-skills/c-code-review/references/undefined-behavior-and-safety.md +17 -0
- package/src/code-review-skills/code-review/SKILL.md +150 -0
- package/src/code-review-skills/code-review/references/code-quality-checklist.md +53 -0
- package/src/code-review-skills/code-review/references/removal-plan.md +45 -0
- package/src/code-review-skills/code-review/references/scoring-guide.md +38 -0
- package/src/code-review-skills/code-review/references/security-checklist.md +53 -0
- package/src/code-review-skills/code-review/references/solid-checklist.md +55 -0
- package/src/code-review-skills/cpp-code-review/SKILL.md +165 -0
- package/src/code-review-skills/cpp-code-review/references/build-and-tooling.md +12 -0
- package/src/code-review-skills/cpp-code-review/references/concurrency-and-atomics.md +14 -0
- package/src/code-review-skills/cpp-code-review/references/exceptions-and-error-model.md +16 -0
- package/src/code-review-skills/cpp-code-review/references/memory-raii-and-lifetimes.md +19 -0
- package/src/code-review-skills/cpp-code-review/references/performance-and-hot-paths.md +16 -0
- package/src/code-review-skills/cpp-code-review/references/scoring-guide.md +41 -0
- package/src/code-review-skills/cpp-code-review/references/templates-api-and-abi.md +13 -0
- package/src/code-review-skills/cpp-code-review/references/undefined-behavior-and-safety.md +18 -0
- package/src/code-review-skills/csharp-code-review/SKILL.md +159 -0
- package/src/code-review-skills/csharp-code-review/references/async-and-cancellation.md +16 -0
- package/src/code-review-skills/csharp-code-review/references/concurrency.md +15 -0
- package/src/code-review-skills/csharp-code-review/references/exceptions-and-api-contracts.md +16 -0
- package/src/code-review-skills/csharp-code-review/references/memory-resources-and-interop.md +16 -0
- package/src/code-review-skills/csharp-code-review/references/nullable-types-and-patterns.md +15 -0
- package/src/code-review-skills/csharp-code-review/references/scoring-guide.md +41 -0
- package/src/code-review-skills/csharp-code-review/references/web-data-and-security.md +15 -0
- package/src/code-review-skills/frontend-code-review/SKILL.md +143 -0
- package/src/code-review-skills/frontend-code-review/references/accessibility-and-semantic-ux.md +33 -0
- package/src/code-review-skills/frontend-code-review/references/interaction-and-state-lifecycle.md +39 -0
- package/src/code-review-skills/frontend-code-review/references/rendering-performance-and-resource-loading.md +34 -0
- package/src/code-review-skills/frontend-code-review/references/scoring-guide.md +38 -0
- package/src/code-review-skills/frontend-code-review/references/security-and-data-boundary.md +34 -0
- package/src/code-review-skills/golang-code-review/SKILL.md +153 -0
- package/src/code-review-skills/golang-code-review/references/api-contract-and-maintainability.md +25 -0
- package/src/code-review-skills/golang-code-review/references/concurrency-and-lifecycle.md +25 -0
- package/src/code-review-skills/golang-code-review/references/error-handling-and-reliability.md +24 -0
- package/src/code-review-skills/golang-code-review/references/performance-and-allocation.md +25 -0
- package/src/code-review-skills/golang-code-review/references/scoring-guide.md +40 -0
- package/src/code-review-skills/golang-code-review/references/security-and-trust-boundary.md +20 -0
- package/src/code-review-skills/java-code-review/SKILL.md +153 -0
- package/src/code-review-skills/java-code-review/references/api-contract-and-maintainability.md +22 -0
- package/src/code-review-skills/java-code-review/references/concurrency-and-lifecycle.md +27 -0
- package/src/code-review-skills/java-code-review/references/error-handling-and-reliability.md +25 -0
- package/src/code-review-skills/java-code-review/references/performance-and-resource-usage.md +23 -0
- package/src/code-review-skills/java-code-review/references/scoring-guide.md +40 -0
- package/src/code-review-skills/java-code-review/references/security-and-trust-boundary.md +20 -0
- package/src/code-review-skills/mobile-code-review/SKILL.md +171 -0
- package/src/code-review-skills/mobile-code-review/references/async-state-and-side-effects.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/lifecycle-and-navigation.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/performance-and-resource-management.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/resilience-and-device-conditions.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/scoring-guide.md +38 -0
- package/src/code-review-skills/mobile-code-review/references/storage-permissions-and-security.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/testing-and-regression-coverage.md +21 -0
- package/src/code-review-skills/php-code-review/SKILL.md +159 -0
- package/src/code-review-skills/php-code-review/references/inclusion-superglobals-and-scope.md +21 -0
- package/src/code-review-skills/php-code-review/references/language-types-and-autoload.md +19 -0
- package/src/code-review-skills/php-code-review/references/oop-magic-and-errors.md +17 -0
- package/src/code-review-skills/php-code-review/references/performance-data-access-and-testing.md +16 -0
- package/src/code-review-skills/php-code-review/references/request-lifecycle-and-runtime.md +15 -0
- package/src/code-review-skills/php-code-review/references/scoring-guide.md +39 -0
- package/src/code-review-skills/php-code-review/references/security-and-io-boundary.md +24 -0
- package/src/code-review-skills/python-code-review/SKILL.md +147 -0
- package/src/code-review-skills/python-code-review/references/exception-and-lifecycle.md +15 -0
- package/src/code-review-skills/python-code-review/references/input-and-data-security.md +20 -0
- package/src/code-review-skills/python-code-review/references/maintainability-and-testing.md +21 -0
- package/src/code-review-skills/python-code-review/references/performance-and-resource-usage.md +21 -0
- package/src/code-review-skills/python-code-review/references/scoring-guide.md +38 -0
- package/src/code-review-skills/rust-code-review/SKILL.md +165 -0
- package/src/code-review-skills/rust-code-review/references/api-traits-and-evolution.md +16 -0
- package/src/code-review-skills/rust-code-review/references/cargo-features-and-test-coverage.md +16 -0
- package/src/code-review-skills/rust-code-review/references/concurrency-async-and-sync.md +17 -0
- package/src/code-review-skills/rust-code-review/references/error-handling-and-reliability.md +17 -0
- package/src/code-review-skills/rust-code-review/references/macros-ffi-and-embedded.md +19 -0
- package/src/code-review-skills/rust-code-review/references/ownership-borrowing-and-unsafe.md +20 -0
- package/src/code-review-skills/rust-code-review/references/performance-and-allocations.md +18 -0
- package/src/code-review-skills/rust-code-review/references/scoring-guide.md +41 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rust-code-reviewer
|
|
3
|
+
review-domain: rust
|
|
4
|
+
description: "Rust 专项代码审查技能,用于开发者在 commit 前审查 crate、二进制与 workspace 改动。围绕所有权与 unsafe 契约、并发与异步、错误模型、公共 API 与宏/FFI 边界、分配与热路径等问题给出可执行修复建议。默认只输出审查结论,不直接修改代码。"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Rust 代码审查
|
|
8
|
+
|
|
9
|
+
## 问题门槛
|
|
10
|
+
|
|
11
|
+
每条问题必须满足以下三点,否则不输出:
|
|
12
|
+
|
|
13
|
+
1. **可定位**:能指向具体文件和新增行号
|
|
14
|
+
2. **可自证**:仅凭当前 diff 和可见上下文即可成立,不依赖 diff 之外的假设
|
|
15
|
+
3. **可修复**:给出具体修复方案,而非泛泛建议
|
|
16
|
+
|
|
17
|
+
同一根因的多处表现合并为一条,不重复列举。
|
|
18
|
+
|
|
19
|
+
## 审查模式
|
|
20
|
+
|
|
21
|
+
你会收到一段共享的 diff 类型识别结果。
|
|
22
|
+
|
|
23
|
+
- 当识别结果为 `rust` 且与当前 skill 匹配时,按本 skill 的 Rust 专项标准审查
|
|
24
|
+
- 当识别结果与当前 skill 不匹配时,不要提示用户选错了 skill,也不要中止审查
|
|
25
|
+
- 不匹配时继续使用同一输出格式,但按现有通用 `code-review` 审查基线做稳妥审查
|
|
26
|
+
- 不匹配时减少对 Cargo 工作区布局、异步运行时与部署拓扑的特有假设
|
|
27
|
+
|
|
28
|
+
## 严重级别
|
|
29
|
+
|
|
30
|
+
| 等级 | 含义 | 处理 |
|
|
31
|
+
|------|------|------|
|
|
32
|
+
| **P0** | 安全漏洞、数据竞争、`unsafe` 破坏不变量、必现 panic、核心路径不可用 | 必须修复后才能提交 |
|
|
33
|
+
| **P1** | 逻辑错误、功能异常、并发契约破坏或资源泄漏、明显性能/可靠性回退 | 提交前修复 |
|
|
34
|
+
| **P2** | 可维护性问题、测试不足、非阻塞设计问题 | 当前批次修复或登记后续任务 |
|
|
35
|
+
| **P3** | 次要改进 | 可选 |
|
|
36
|
+
|
|
37
|
+
## 工作流
|
|
38
|
+
|
|
39
|
+
### 1) 确认审查范围
|
|
40
|
+
|
|
41
|
+
先关注共享分类结果、`changedFiles` 与 diff 本身,再决定本次是否使用 Rust 专项视角。
|
|
42
|
+
|
|
43
|
+
- 当前 diff 主要是 `.rs`、`Cargo.toml` / `Cargo.lock`、工具链配置等改动时,使用 Rust 专项视角
|
|
44
|
+
- 当前 diff 若明显偏前端、Java、Go、Python、PHP 或类型不匹配,则直接回到通用稳妥审查
|
|
45
|
+
- 不因为用户选择了 Rust skill 就强行输出 Rust 专属问题
|
|
46
|
+
|
|
47
|
+
### 2) 代码分析
|
|
48
|
+
|
|
49
|
+
#### a) 所有权、借用、生命周期与 unsafe
|
|
50
|
+
|
|
51
|
+
加载 `references/ownership-borrowing-and-unsafe.md`,检查 `&`/`&mut`、`'static` 与生命周期标注、`Pin`、内部可变性(`RefCell`、`Mutex` 等)与 `unsafe` 块/FFI 边界上的安全契约是否自洽。
|
|
52
|
+
|
|
53
|
+
#### b) 并发、异步与同步
|
|
54
|
+
|
|
55
|
+
加载 `references/concurrency-async-and-sync.md`,检查 `Send`/`Sync`、跨线程与 `async`/`await`、阻塞点、任务取消、`JoinHandle`、锁顺序与粒度。
|
|
56
|
+
|
|
57
|
+
#### c) 错误处理与可靠性
|
|
58
|
+
|
|
59
|
+
加载 `references/error-handling-and-reliability.md`,检查 `Result`/`?`、`panic!`/`unwrap`/`expect`/`todo!` 在库与二进制边界的合理性,`Drop` 与资源清理路径。
|
|
60
|
+
|
|
61
|
+
#### d) 公共 API、trait 与演进
|
|
62
|
+
|
|
63
|
+
加载 `references/api-traits-and-evolution.md`,检查可见性、`trait` 与泛型约束、错误类型暴露、`#[non_exhaustive]` 等与 semver 相关的风险。
|
|
64
|
+
|
|
65
|
+
#### e) 宏、过程宏、FFI 与 no_std
|
|
66
|
+
|
|
67
|
+
加载 `references/macros-ffi-and-embedded.md`,仅在 diff 出现相关构造时重点检查:`macro_rules!`/`proc_macro`、`extern`、ABI、`repr`、条件编译与 `no_std` 假设。
|
|
68
|
+
|
|
69
|
+
#### f) Cargo、特性与测试防护(若适用)
|
|
70
|
+
|
|
71
|
+
加载 `references/cargo-features-and-test-coverage.md`,仅在 diff 出现 `Cargo.toml` / `Cargo.lock` / 工具链或测试变更时,检查依赖、feature 门控与关键不变量回归防护。
|
|
72
|
+
|
|
73
|
+
#### g) 性能与分配
|
|
74
|
+
|
|
75
|
+
加载 `references/performance-and-allocations.md`,检查 `clone`/`to_owned`、容器预分配、`Iterator` 与 `collect`、热路径上可避免的大分配与不必要拷贝。
|
|
76
|
+
|
|
77
|
+
#### h) 通用工程基线补充
|
|
78
|
+
|
|
79
|
+
完成 Rust 专项检查后,补充对通用 `code-review` 的以下基线检查:架构与设计,以及当 diff 包含删除时的冗余与残留引用。Rust 专项维度只负责语言、unsafe 契约与 crate 边界风险,不替代通用工程审查。
|
|
80
|
+
|
|
81
|
+
### 3) 整理问题列表
|
|
82
|
+
|
|
83
|
+
确认每条问题满足门槛(可定位、可自证、可修复)。同一根因的多处表现合并为一条。不为凑数量降低标准。
|
|
84
|
+
|
|
85
|
+
### 4) 评分
|
|
86
|
+
|
|
87
|
+
加载 `references/scoring-guide.md`,**每次审查必须根据该指南给出具体评分**:先按最严重问题确定基准区间,再按影响广度、问题数量、可逆性在区间内微调,最终输出一个具体分值(如 8.5、7.0),不得只写区间或省略评分;纯文件删除时记为 N/A。
|
|
88
|
+
|
|
89
|
+
### 5) 输出格式
|
|
90
|
+
|
|
91
|
+
按以下格式输出:
|
|
92
|
+
|
|
93
|
+
```markdown
|
|
94
|
+
## 审查摘要
|
|
95
|
+
|
|
96
|
+
**审查范围**:X 个文件,Y 行新增
|
|
97
|
+
|
|
98
|
+
**评分**:X / 10(必须为具体分值,如 8.5;仅纯删除时为 N/A)
|
|
99
|
+
|
|
100
|
+
**提交建议**:✅ 可以提交 / ✅ 可以提交,跟进修复 / 🔧 修复后提交 / 🚫 禁止提交
|
|
101
|
+
|
|
102
|
+
**问题统计**:P0 × 个 / P1 × 个 / P2 × 个 / P3 × 个
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 各维度结果
|
|
107
|
+
|
|
108
|
+
| # | 维度 | 结论 |
|
|
109
|
+
|---|------|------|
|
|
110
|
+
| 1 | 所有权、借用、生命周期与 unsafe | ✅ 无问题 / ⚠️ 存在问题(简述) |
|
|
111
|
+
| 2 | 并发、异步与同步 | ✅ 无问题 / ⚠️ 存在问题(简述) |
|
|
112
|
+
| 3 | 错误处理与可靠性 | ✅ 无问题 / ⚠️ 存在问题(简述) |
|
|
113
|
+
| 4 | 公共 API、trait 与演进 | ✅ 无问题 / ⚠️ 存在问题(简述) |
|
|
114
|
+
| 5 | 宏、FFI 与 no_std(若适用) | ✅ 无问题 / ⚠️ 存在问题(简述) / 不适用 |
|
|
115
|
+
| 6 | Cargo、特性与测试防护(若适用) | ✅ 无问题 / ⚠️ 存在问题(简述) / 不适用 |
|
|
116
|
+
| 7 | 性能与分配 | ✅ 无问题 / ⚠️ 存在问题(简述) |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 问题列表
|
|
121
|
+
|
|
122
|
+
### P0 🔴 严重
|
|
123
|
+
无
|
|
124
|
+
|
|
125
|
+
### P1 🟠 高
|
|
126
|
+
1. **[文件:行号] 问题标题**
|
|
127
|
+
- **问题**:一句话说明是什么问题
|
|
128
|
+
- **影响**:一句话说明会导致什么后果
|
|
129
|
+
- **修复**:具体方案
|
|
130
|
+
|
|
131
|
+
### P2 🟡 中
|
|
132
|
+
无
|
|
133
|
+
|
|
134
|
+
### P3 🟢 低
|
|
135
|
+
无
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 总体评价
|
|
140
|
+
|
|
141
|
+
2-3 句话说明是否建议提交,以及还需要哪些修复或跟进。
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**输出规则:**
|
|
145
|
+
|
|
146
|
+
- 每次审查必须在「审查摘要」中给出根据 `references/scoring-guide.md` 计算的具体评分(X / 10),不得省略。
|
|
147
|
+
- 直接给问题,不写前言铺垫。
|
|
148
|
+
- 每条问题写清楚:位置、问题是什么、影响是什么、如何修复。
|
|
149
|
+
- 只在有明确代码路径支撑时输出问题,不猜具体 crate 生态版本或未出现在 diff 中的依赖行为。
|
|
150
|
+
- 如果共享分类结果提示应回到通用审查,则按通用基线保守审查,但仍然使用本 skill 的统一输出结构。
|
|
151
|
+
- 禁止在模板之外添加"亮点"、"优点"、"表扬"等额外章节。
|
|
152
|
+
- `## 总体评价` 只写 2-3 句连续段落,不用列表或子标题。
|
|
153
|
+
|
|
154
|
+
## 参考文件
|
|
155
|
+
|
|
156
|
+
| 文件 | 用途 |
|
|
157
|
+
|------|------|
|
|
158
|
+
| `ownership-borrowing-and-unsafe.md` | 所有权、生命周期、`Pin`、内部可变性、`unsafe` 检查项 |
|
|
159
|
+
| `concurrency-async-and-sync.md` | `Send`/`Sync`、异步、锁与任务生命周期检查项 |
|
|
160
|
+
| `error-handling-and-reliability.md` | `Result`、panic 策略、`Drop` 与资源路径检查项 |
|
|
161
|
+
| `api-traits-and-evolution.md` | 可见性、trait、错误类型与 API 演进检查项 |
|
|
162
|
+
| `macros-ffi-and-embedded.md` | 宏、过程宏、FFI、`no_std` 相关检查项 |
|
|
163
|
+
| `cargo-features-and-test-coverage.md` | Cargo 依赖、feature 门控与测试回归检查项 |
|
|
164
|
+
| `performance-and-allocations.md` | 分配、迭代器与热路径检查项 |
|
|
165
|
+
| `scoring-guide.md` | 评分模型、区间规则和提交建议 |
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 公共 API、trait 与演进检查清单
|
|
2
|
+
|
|
3
|
+
## 可见性与 semver
|
|
4
|
+
|
|
5
|
+
- 新增 `pub` 项是否暴露内部类型或未稳定语义,导致后续无法演进。
|
|
6
|
+
- 是否该用 `pub(crate)` / `pub(super)` 却放宽为 `pub`,扩大承诺面。
|
|
7
|
+
|
|
8
|
+
## Trait 与泛型
|
|
9
|
+
|
|
10
|
+
- 公共 `trait` 方法是否缺少默认实现或文档约束,导致下游实现困难。
|
|
11
|
+
- 泛型约束是否过宽(缺少 `Send` / `'static` 等)导致异步或线程边界上无法使用,且 diff 显示该类型将进入这些边界。
|
|
12
|
+
|
|
13
|
+
## 错误与枚举演进
|
|
14
|
+
|
|
15
|
+
- 公共 `enum` 是否缺少 `#[non_exhaustive]` 却在新版本中新增变体,破坏穷尽匹配(若 diff 显示对外枚举)。
|
|
16
|
+
- 错误类型是否应实现 `std::error::Error` / `source` 链却未体现,影响生态互操作。
|
package/src/code-review-skills/rust-code-review/references/cargo-features-and-test-coverage.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Cargo、特性与测试防护检查清单
|
|
2
|
+
|
|
3
|
+
## Cargo 与依赖边界
|
|
4
|
+
|
|
5
|
+
- `Cargo.toml` / `Cargo.lock` 变更是否引入不必要的新依赖、过宽版本约束、危险的 `[patch]` 覆盖或与 `rust-version` 不一致的能力要求。
|
|
6
|
+
- 新增依赖或 feature 是否扩大公开 API、unsafe 面、二进制体积或运行时假设,且在 diff 中可明确看出影响。
|
|
7
|
+
|
|
8
|
+
## Feature 门控与目标配置
|
|
9
|
+
|
|
10
|
+
- feature 默认开启关系、可选依赖与 `cfg` 条件是否一致,避免 feature 组合下编译失败或行为漂移。
|
|
11
|
+
- 测试、bench、examples 与生产代码是否共享了错误的 feature 假设,导致某些构建目标失真。
|
|
12
|
+
|
|
13
|
+
## 测试与不变量回归
|
|
14
|
+
|
|
15
|
+
- 关键不变量、边界值与错误路径是否有最小测试防护;库代码的重要契约是否有 doctest、单测或集成测试支撑。
|
|
16
|
+
- 若本次改动涉及解析器、序列化、状态机或 unsafe 邻近逻辑,是否至少考虑 property test、fuzz 或最小可复现回归样例。
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 并发、异步与同步检查清单
|
|
2
|
+
|
|
3
|
+
## Send、Sync 与跨线程
|
|
4
|
+
|
|
5
|
+
- 跨 `spawn` / 线程边界的类型是否满足 `Send`;共享状态是否错误实现 `Sync`(例如在 `static mut` 或全局可变状态上新增未同步访问)。
|
|
6
|
+
- `Rc` / `RefCell` 等是否被移到异步任务或线程边界而编译通过依赖局部假设,或 `Arc` 使用是否遗漏弱引用循环导致的泄漏路径。
|
|
7
|
+
|
|
8
|
+
## 异步与运行时
|
|
9
|
+
|
|
10
|
+
- `async` 函数中是否在关键路径上阻塞(同步 I/O、`std::thread::sleep`、持锁 await 等),导致吞吐或死锁风险。
|
|
11
|
+
- `select!` / `join!` 等是否遗漏分支取消或错误传播,导致任务泄漏或僵尸 future。
|
|
12
|
+
- `JoinHandle` / `AbortHandle` 是否在错误路径上未 await 或未 detach,造成资源悬挂。
|
|
13
|
+
|
|
14
|
+
## 锁与原子
|
|
15
|
+
|
|
16
|
+
- 锁粒度是否过大或锁顺序是否与现有代码交叉导致死锁(仅在 diff 能显示锁获取顺序时指出)。
|
|
17
|
+
- `Ordering` 是否过弱,导致数据竞争或未同步可见性;是否误用 `compare_exchange` 返回值。
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 错误处理与可靠性检查清单
|
|
2
|
+
|
|
3
|
+
## Result 与可恢复错误
|
|
4
|
+
|
|
5
|
+
- 公共 API 是否将可恢复失败改成 `panic` 或 `unwrap`,缩小调用方处理空间。
|
|
6
|
+
- `?` 传播是否将错误类型过度擦除,导致调用方无法区分失败原因或丢失上下文。
|
|
7
|
+
- `map_err` / `context`(若使用)是否引入循环依赖或泄露敏感信息到错误链。
|
|
8
|
+
|
|
9
|
+
## Panic 与调试残留
|
|
10
|
+
|
|
11
|
+
- 库代码主路径上的 `unwrap` / `expect` / `todo!` / `unimplemented!` / `panic!` 是否在 diff 中引入生产不可接受的中断。
|
|
12
|
+
- `assert!` 是否用于运行时不变量而非常量或测试专用上下文。
|
|
13
|
+
|
|
14
|
+
## 资源与 Drop
|
|
15
|
+
|
|
16
|
+
- 错误返回路径是否遗漏 `drop` 或提前返回导致资源未释放(文件、锁 guard、网络句柄等),且 diff 可显示该路径。
|
|
17
|
+
- `ManuallyDrop` / `forget` 是否绕过正常清理导致泄漏或未定义行为。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 宏、过程宏、FFI 与 no_std 检查清单
|
|
2
|
+
|
|
3
|
+
## 声明宏与过程宏
|
|
4
|
+
|
|
5
|
+
- `macro_rules!` 是否产生歧义匹配、重复求值副作用,或 hygiene 问题导致意外捕获外部标识符。
|
|
6
|
+
- 过程宏是否 Panic 于合法输入、或生成的代码隐含 `unsafe` 而未在文档中说明。
|
|
7
|
+
|
|
8
|
+
## FFI 与 ABI
|
|
9
|
+
|
|
10
|
+
- `extern` 块声明是否与真实 C ABI 对齐(调用约定、`repr(C)`、`#[repr(transparent)]`)。
|
|
11
|
+
- 空指针、长度、所有权传递是否在边界上检查;`CString` / 原始指针转换是否可能悬垂。
|
|
12
|
+
- FFI 边界是否允许 `panic!` 穿越到外部调用方;若存在 unwind 风险,是否在边界层显式兜底或约束为 abort。
|
|
13
|
+
|
|
14
|
+
## no_std 与条件编译
|
|
15
|
+
|
|
16
|
+
- `#[cfg(no_std)]` / `std` 特性门控是否与 `Cargo.toml` 特性一致,避免在 `no_std` 目标上误用 `std` 类型。
|
|
17
|
+
- `core` / `alloc` 使用是否在无分配环境误引 `alloc`。
|
|
18
|
+
|
|
19
|
+
若 diff 中无宏、FFI、`no_std` 相关改动,本维度在输出表中标记为不适用即可。
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# 所有权、借用、生命周期与 unsafe 检查清单
|
|
2
|
+
|
|
3
|
+
## 借用与生命周期
|
|
4
|
+
|
|
5
|
+
- 新增 `&` / `&mut` 是否可能越过被引用数据的实际生命周期(例如自引用结构、短生命周期引用存入长生命周期字段),且能在 diff 内看出矛盾。
|
|
6
|
+
- `'_` 省略或显式生命周期是否引入更松的约束,导致调用方在合法代码下出现悬垂引用风险。
|
|
7
|
+
- `static` / `'static` 绑定是否把本应短生命周期的数据错误升格。
|
|
8
|
+
|
|
9
|
+
## Pin 与内部可变性
|
|
10
|
+
|
|
11
|
+
- 在 `async` 或自引用场景下是否需要 `Pin` 而未体现,或 `Unpin` 实现是否破坏不变量。
|
|
12
|
+
- `RefCell` / `Mutex` / `RwLock` 等是否在可能重入或已持锁路径上新增 `borrow_mut` / `lock`,导致死锁或 panic。
|
|
13
|
+
|
|
14
|
+
## unsafe
|
|
15
|
+
|
|
16
|
+
- `unsafe` 块是否缺少可验证的前置条件说明;是否假设指针非空、对齐、别名规则而 diff 未保证。
|
|
17
|
+
- `transmute`、原始指针解引用、与 FFI 交界的指针是否可能产生未定义行为。
|
|
18
|
+
- `drop_in_place`、手动内存管理是否与 `Drop` 顺序或双重释放冲突。
|
|
19
|
+
|
|
20
|
+
仅在 diff 能支撑结论时报告问题;不推断未展示的调用约定或外部 crate 实现细节。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 性能与分配检查清单
|
|
2
|
+
|
|
3
|
+
## 克隆与拷贝
|
|
4
|
+
|
|
5
|
+
- 热路径上是否对大结构或 `String`/`Vec` 无必要 `clone` / `to_owned`,且 diff 显示该路径频繁执行。
|
|
6
|
+
- `Copy` 类型误用或避免移动是否导致隐式大拷贝。
|
|
7
|
+
|
|
8
|
+
## 容器与迭代
|
|
9
|
+
|
|
10
|
+
- `collect::<Vec<_>>()` 是否可改为惰性迭代或预分配 `with_capacity`(当 diff 显示已知上界或循环构造模式)。
|
|
11
|
+
- 是否在循环中重复分配临时 `Vec`/`String` 而可合并为单次缓冲。
|
|
12
|
+
|
|
13
|
+
## 算法与 I/O
|
|
14
|
+
|
|
15
|
+
- 是否在已排序或可索引数据上使用线性扫描而 diff 显示性能敏感场景。
|
|
16
|
+
- 缓冲读写、批量 I/O 是否被改为逐字节或逐小片读写而未见相应理由。
|
|
17
|
+
|
|
18
|
+
仅在 diff 能合理推断为热路径或规模敏感时报告;不臆测线上流量。
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# 评分指南
|
|
2
|
+
|
|
3
|
+
评分由**最严重的已确认问题**决定基准区间,再在区间内微调。
|
|
4
|
+
|
|
5
|
+
## 第一步:确定基准区间
|
|
6
|
+
|
|
7
|
+
| 最严重问题 | 分值区间 |
|
|
8
|
+
|-----------|---------|
|
|
9
|
+
| 无问题 | 9.0-10.0 |
|
|
10
|
+
| 仅 P2/P3 | 7.5-9.0 |
|
|
11
|
+
| P1 | 4.0-7.0 |
|
|
12
|
+
| P0(逻辑崩溃、数据损坏、数据竞争、明显 UB) | 2.0-3.5 |
|
|
13
|
+
| P0(安全漏洞、权限绕过、密钥泄露) | 1.0-2.5 |
|
|
14
|
+
|
|
15
|
+
## 第二步:在区间内调整
|
|
16
|
+
|
|
17
|
+
- **影响广度**:影响全量请求、全局状态或所有调用方取下限;仅局部边界触发取上限,差距约 0.5-1.0 分
|
|
18
|
+
- **问题数量**:每多一个独立同级别问题,向下移约 0.3-0.5 分
|
|
19
|
+
- **可逆性**:可快速定位、低风险修复的问题可上浮 0.3-0.5 分
|
|
20
|
+
|
|
21
|
+
> 多个问题时取区间下限附近;单个问题且影响有限时取区间上限附近。
|
|
22
|
+
|
|
23
|
+
## Rust 语境硬上限
|
|
24
|
+
|
|
25
|
+
- 有任意 P0 -> 评分上限 3.5
|
|
26
|
+
- `unsafe` 或 FFI 引入可证的未定义行为或破坏公开安全契约 -> 评分上限 2.5
|
|
27
|
+
- 可证的数据竞争或 `Send`/`Sync` 误用导致跨线程 UB 风险 -> 评分上限 2.5
|
|
28
|
+
- 库代码对外 API 主路径新增 `unwrap`/`expect`/`panic!` 且无对应契约 -> 评分上限 3.0
|
|
29
|
+
- 公开 crate 的 feature 组合、目标配置或依赖变更导致关键目标不可构建 -> 评分上限 3.0
|
|
30
|
+
- 硬编码真实凭证或 secret 泄露 -> 评分上限 2.0
|
|
31
|
+
- 纯文件删除(无逻辑变更)-> 评分记为 N/A
|
|
32
|
+
- 测试、bench、示例中的问题 -> 最高计为 P2,不纳入 P0/P1 计数
|
|
33
|
+
|
|
34
|
+
## 评分语义
|
|
35
|
+
|
|
36
|
+
| 分值 | 提交建议 | 含义 |
|
|
37
|
+
|------|---------|------|
|
|
38
|
+
| 9.0-10.0 | ✅ 可以提交 | 无明显问题 |
|
|
39
|
+
| 7.5-9.0 | ✅ 可以提交,跟进修复 | 有轻微问题,不影响提交 |
|
|
40
|
+
| 4.0-7.0 | 🔧 修复后提交 | 存在 P1 问题,影响广取下限,影响窄取上限 |
|
|
41
|
+
| 1.0-3.5 | 🚫 禁止提交 | 存在 P0 问题,必须修复 |
|