OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  pr-reviewer:包含差异分析与 Lint 检查的 GitHub PR 自动审查

pr-reviewer:包含差异分析与 Lint 检查的 GitHub PR 自动审查

 
  eight ·  2026-02-02 15:13:37 · 17 次点击  · 0 条评论  

名称: pr-reviewer
版本: 1.0.1
描述: 自动化的 GitHub PR 代码审查工具,支持差异分析、代码检查集成和结构化报告。适用于审查拉取请求、检查安全问题、错误处理缺失、测试覆盖率和代码风格问题。支持 Go、Python 和 JavaScript/TypeScript。要求已安装并认证了仓库访问权限的 gh CLI。
元数据:
openclaw:
requires:
bins: ["gh", "python3"]
anyBins: ["golangci-lint", "ruff"]


PR 审查助手

为 GitHub 拉取请求提供自动化代码审查。分析代码差异,检查安全问题、错误处理缺失、风格问题和测试覆盖率。

先决条件

  • 已安装并认证 gh CLI (gh auth status)
  • 仓库访问权限(至少需要读取权限,如需发布评论则需要写入权限)
  • 可选:用于 Go 代码检查的 golangci-lint,用于 Python 代码检查的 ruff

快速开始

# 审查当前仓库中所有打开的 PR
scripts/github/pr-reviewer.sh check

# 审查特定 PR
scripts/github/pr-reviewer.sh review 42

# 将审查结果作为 GitHub 评论发布
scripts/github/pr-reviewer.sh post 42

# 检查所有打开 PR 的状态
scripts/github/pr-reviewer.sh status

# 列出未审查的 PR(适用于心跳检测或定时任务集成)
scripts/github/pr-reviewer.sh list-unreviewed

配置

设置以下环境变量,脚本也可从当前 git 仓库自动检测:

  • PR_REVIEW_REPO — GitHub 仓库,格式为 所有者/仓库(默认:从 gh repo view 检测)
  • PR_REVIEW_DIR — 用于代码检查的本地检出路径(默认:当前工作目录的 git 根目录)
  • PR_REVIEW_STATE — 状态文件路径(默认:./data/pr-reviews.json
  • PR_REVIEW_OUTDIR — 报告输出目录(默认:./data/pr-reviews/

写入的目录

  • PR_REVIEW_STATE (默认:./data/pr-reviews.json) — 记录已审查的 PR 及其最新的提交 SHA
  • PR_REVIEW_OUTDIR (默认:./data/pr-reviews/) — Markdown 格式的审查报告

检查内容

类别 图标 示例
安全 🔴 硬编码凭证、AWS 密钥、代码中的敏感信息
错误处理 🟡 被忽略的错误(Go 中的 _ :=)、空的 except:(Python)、未检查的 Close()
风险 🟠 panic() 调用、process.exit()
风格 🔵 生产代码中的 fmt.Print/print()/console.log、超长行
待办项 📝 TODO、FIXME、HACK、XXX 标记
测试覆盖率 📊 源文件变更但未同步更新对应的测试文件

智能重新审查

跟踪每个 PR 的最新提交 SHA。仅在有新提交推送时重新审查。使用 review <PR编号> 可强制重新审查。

报告格式

报告以 Markdown 文件形式保存在输出目录中。每份报告包含:

  • PR 元数据(作者、分支、变更内容)
  • 提交列表
  • 按语言/类型分类的变更文件
  • 自动化差异分析结果,包含文件、行号、类别和上下文
  • 测试覆盖率分析
  • 本地代码检查结果(当仓库在本地检出时)
  • 总结评估:🔴 安全问题 / 🟡 需要关注 / 🔵 次要建议 / ✅ 状态良好

心跳检测/定时任务集成

可集成到定期检查(心跳检测、cron 任务或 CI)中:

UNREVIEWED=$(scripts/github/pr-reviewer.sh list-unreviewed)
if [ -n "$UNREVIEWED" ]; then
  scripts/github/pr-reviewer.sh check
fi

扩展功能

脚本中的分析模式按语言组织。可以通过在 analyze_diff() 函数的相关模式列表后追加来添加新模式:

# 添加一个新的 Go 模式
go_patterns.append((r'^\+.*os\.Exit\(', 'RISK', '直接调用 os.Exit() — 建议返回错误'))
17 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 28 ms
Developed with Cursor