关于 comprehensive-code-review
comprehensive-code-review 是面向 ACE Engine 开发者的 AI 代码审查指南,覆盖 19 多个维度,将通用质量标准与 ACE 架构规则结合,并按严重级别组织报告。
主要功能
- 01覆盖 19 多个代码审查维度
- 02检查安全、内存、线程与稳定性
- 03验证 ACE Engine 架构规范
- 04按严重级别整理问题与建议
- 05提供拉取请求和文件审查流程
适用场景
- 01审查拉取请求中的安全与内存问题
- 02检查 components_ng 是否符合 ACE 架构
- 03审查变更文件的线程安全
- 04合并前整理分优先级的问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ openharmonyinsight/ openharmony-skills --skill comprehensive-code-review安装后在 Claude Code 中输入/comprehensive-code-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdassets/QUICKSTART.mdreport_template.mdreferences/ACE_ENGINE_SPECIFIC.mdCODE_SMELLS.mdDIMENSIONS.mdMEMORY.mdSECURITY.mdSOLID.mdSTABILITY.md详细介绍
ACE Engine 全面代码审查
快速开始
直接使用 AI 执行全面的代码审查分析:
"Review the code in frameworks/core/components_ng for memory management issues"
"Analyze this pull request focusing on security vulnerabilities"
"Check path/to/code.cpp for ACE Engine architecture compliance"
审查工作流
阶段 1:代码分析
AI 将根据以下内容,从所有相关维度分析代码:
- 阅读代码文件 - 了解实现细节
- 应用参考标准 - 使用 references/ 目录中的标准
- 检查是否符合 ACE Engine 模式 - 验证项目特定约定
阶段 2:按维度审查
从 19 个以上的维度审查代码。完整范围请参阅 DIMENSIONS.md。
高优先级维度:
- 安全性(严重)- 输入验证、命令注入、缓冲区溢出
- 内存(严重)- 智能指针、内存泄漏、所有权语义
- 线程(高)- 数据竞争、死锁、回调安全性
- 稳定性(高)- 错误处理、边界条件
中优先级维度:
- 性能 - 算法复杂度、优化机会
- SOLID 原则 - 单一职责、开闭原则等
- 代码异味 - 方法过长、类过大、代码重复
- 可测试性 - 依赖注入、解耦
阶段 3:生成报告
AI 将生成全面的审查报告,包括:
- 执行摘要 - 按严重程度统计问题数量
- 严重问题(🔴)- 合并前必须修复
- 高优先级问题(🟠)- 合并前应修复
- 中优先级问题(🟡)- 尽快修复
- 低优先级问题(🟢)- 可选优化
- 维度分类 - 按类别归纳问题
- 逐文件详情 - 具体行号和代码片段
- 建议 - 按优先级排列的待办事项,并附修改前后示例
- 审查清单 - 合并前验证
维度参考
所有维度的快速参考:
| 维度 | 关注点 | 严重程度级别 | 参考 |
|---|---|---|---|
| 稳定性 | 错误处理、边界条件 | 🔴🟠🟡🟢 | STABILITY.md |
| 性能 | 算法、优化 | 🔴🟠🟡🟢 | DIMENSIONS.md |
| 线程 | 并发、同步 | 🔴🟠🟡 | DIMENSIONS.md |
| 安全性 | 输入验证、漏洞 | 🔴🟠🟡 | SECURITY.md |
| 内存 | 智能指针、内存泄漏 | 🔴🟠🟡 | MEMORY.md |
| Modern C++ | C++11/14/17/20 特性 | 🟠🟡 | DIMENSIONS.md |
| Effective C++ | RAII、Rule of Five | 🟠🟡 | DIMENSIONS.md |
| 代码异味 | 22 种异味类型 | 🟠🟡 | CODE_SMELLS.md |
| SOLID | 设计原则 | 🟠🟡 | SOLID.md |
| 设计模式 | 模式使用 | 🟡🟢 | DIMENSIONS.md |
| 健壮性 | 容错能力 | 🟠🟡 | DIMENSIONS.md |
| 可测试性 | 依赖注入 | 🟠🟡 | DIMENSIONS.md |
| 可维护性 | 代码复杂度 | 🟡🟢 | DIMENSIONS.md |
| 可观测性 | 日志、监控 | 🟡🟢 | DIMENSIONS.md |
| API 设计 | 接口质量 | 🟠🟡 | DIMENSIONS.md |
| 技术债务 | TODO/FIXME 跟踪 | 🟡🟢 | DIMENSIONS.md |
| 向后兼容性 | API 稳定性 | 🟠🟡 | DIMENSIONS.md |
| 架构 | ACE Engine 合规性 | 🔴🟠🟡 | ACE_ENGINE_SPECIFIC.md |
ACE Engine 特定检查
架构验证
四层架构:
Frontend Bridge Layer
↓
Component Framework Layer (Pattern/Model/Property)
↓
Layout/Render Layer
↓
Platform Adapter Layer (OHOS/Preview)
检查项:
- 不违反层边界
- 正确使用 Pattern/Model/Property 分层
- 框架层不直接调用平台接口
组件结构
components_ng/pattern/<component>/
├── *_pattern.h/cpp # Business logic & lifecycle
├── *_model.h/cpp # Data model interface
├── *_layout_property.h/cpp # Layout properties
├── *_paint_property.h/cpp # Render properties
└── *_event_hub.h/cpp # Event handling
RefPtr 用法
// ✅ Creation
auto node = AceType::MakeRefPtr<FrameNode>();
// ✅ Type-safe casting
auto pattern = AceType::DynamicCast<MenuPattern>(node->GetPattern());
if (!pattern) {
LOGE("Failed to get pattern");
return false;
}
// ✅ Breaking cycles with WeakPtr
class Child {
WeakPtr<Parent> parent_; // Use weak, not strong
};
// ✅ Safe callbacks
auto weak = AceType::WeakClaim(this);
PostTask([weak]() {
auto pattern = AceType::DynamicCast<MenuPattern>(weak.Upgrade());
if (pattern) pattern->Update();
});
命名约定
class MenuPattern { // PascalCase
public:
void OnModifyDone(); // PascalCase
int GetWidth() const; // Get prefix
private:
int width_; // snake_case_ with trailing underscore
std::string component_id_; // Abbreviations lowercase
};
constexpr int MAX_MENU_ITEMS = 100; // UPPER_CASE
严重级别
🔴 CRITICAL - 合并前必须修复
- 安全漏洞(命令注入、缓冲区溢出)
- 长时间运行的进程中出现内存泄漏
- 使用后释放、重复释放
- 数据竞争
- 崩溃/未定义行为
- 违反架构规范
🟠 HIGH - 应在合并前修复
- 性能下降
- 违反 API 规范
- 违反 SOLID 原则
- 严重的代码异味(大型类、霰弹式修改)
- RefPtr 使用不当
- 不安全的回调捕获
🟡 MEDIUM - 尽快修复
- 轻微的性能问题
- 代码异味(过长的方法、重复代码)
- 违反代码风格
- 非关键路径缺少错误处理
🟢 LOW - 有则更好
- 缺少注释
- 轻微的风格问题
- 优化机会
- 改进代码文档
常见问题模式
| 模式 | 维度 | 严重级别 | 检测方式 |
|---|---|---|---|
| 使用原始指针而非 RefPtr | 内存 | HIGH | 未使用 RefPtr 的 new T() |
| 命令注入 | 安全 | CRITICAL | system(user_input) |
| 缓冲区溢出 | 安全 | CRITICAL | strcpy()、sprintf() |
| 不安全地捕获 this | 线程 | HIGH | PostTask 中的 [this] |
| 方法过长(>50 行) | 代码异味 | MEDIUM | 函数长度 |
| 类过大(>500 行) | 代码异味 | HIGH | 类的大小 |
| 缺少空值检查 | 稳定性 | HIGH | 未验证就使用指针 |
| 使用 static_cast 而非 DynamicCast | 内存 | MEDIUM | static_cast<T*> |
使用示例
审查 Pull Request
"Review the changes in this PR with focus on memory management and threading safety"
AI 将:
- 分析所有已更改的文件
- 检查内存管理(RefPtr、WeakPtr、原始指针)
- 验证线程安全性(回调捕获、PostTask 用法)
- 报告问题及其行号和严重级别
安全审计
"Perform a security audit of path/to/code, focusing on input validation and potential vulnerabilities"
AI 将检查:
- 命令注入风险(system() 调用)
- 缓冲区溢出漏洞(strcpy、sprintf)
- 未经验证的用户输入
- 不安全的类型转换
内存泄漏检测
"Analyze frameworks/core/components for potential memory leaks and improper RefPtr usage"
AI 将识别:
- 未使用智能指针的原始 new/delete
- 未使用 WeakPtr 的循环引用
- DynamicCast 后缺少空值检查
- 所有权语义使用不当
架构合规性检查
"Verify that components_ng/menu follows the four-layer architecture and Pattern/Model/Property separation"
AI 将验证:
- 是否符合四层架构
- Pattern/Model/Property 是否分离
- 是否违反层边界
- 组件生命周期方法(OnModifyDone 等)
集成示例
提交前钩子
对于提交前钩子,可考虑使用传统静态分析工具:
#!/bin/bash
# .git/hooks/pre-commit
CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(cpp|cc|cxx|h|hpp|ts|tsx)$')
if [ -n "$CHANGED_FILES" ]; then
echo "Running basic static analysis..."
# Use clang-tidy, cppcheck, eslint, etc.
for file in $CHANGED_FILES; do
if [[ $file == *.cpp || $file == *.h ]]; then
clang-tidy $file --checks='*' || true
elif [[ $file == *.ts ]]; then
eslint $file || true
fi
done
fi
手动审查工作流
若要进行全面的 AI 驱动审查:
- 确定要审查的代码(PR、特定文件或目录)
- 指定关注领域并请求审查
- AI 根据参考标准分析代码
- 查看带有严重级别标记的问题审查结果
- 处理严重和高优先级问题
- 重新请求审查以进行验证
参考资料
references/ 中提供了所有维度的详细文档:
- DIMENSIONS.md - 全部 19 个以上维度的速查指南
- STABILITY.md - 错误处理、边界条件
- MEMORY.md - 智能指针、内存泄漏、所有权
- SECURITY.md - 输入验证、漏洞
- CODE_SMELLS.md - 22 种代码异味
- SOLID.md - 五项设计原则
- ACE_ENGINE_SPECIFIC.md - 项目特定规则
资源
- report_template.md - 可自定义的 AI 生成审查报告模板
评审清单
合并代码前:
代码质量:
- 无严重问题
- 已解决或记录高优先级问题
- 无编译器警告
- 静态分析通过
架构:
- 遵循四层架构
- 正确区分 Pattern/Model/Property
- 无层边界违规
内存:
- 无内存泄漏
- 正确使用 RefPtr
- 使用 WeakPtr 打破循环引用
- 回调使用 WeakClaim
安全:
- 已验证所有输入
- 无命令注入
- 无缓冲区溢出
- 已保护敏感数据
测试:
- 已添加单元测试
- 已覆盖边缘情况
- 已测试错误场景
评论
支持 Markdown