MergeIQ: Automatically Score & Prioritise PR Complexity for GitLab and GitHub

Polar Sponsor
爱发电 赞助
.NET 9.0

使用四维度框架评估任意 GitLab MR 或 GitHub PR 的复杂度:规模(20%),认知负荷(30%),审查工作量(30%),风险/影响(20%)...

MR / PR 复杂计分器.

功能概述

MR / PR 复杂计分器.是一项面向实际任务的技能,主要用于A 用于合并请求( GitLab) 和 Pull 请求( GitHub) 的提供- 不可知复杂计分引擎. 构建于 4- dimension 框架, 以捕捉“ 复杂” 行为。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

核心要点

  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

MR / PR 复杂度评分器

一个与平台无关的合并请求(GitLab MR)和拉取请求(GitHub PR)复杂度评分引擎。基于四维框架构建,精准刻画代码评审中“复杂”的真实含义——而不仅限于变更行数。

复杂度维度

维度 权重 衡量内容
Size(规模) 20% 代码变更量(对数尺度——大型 PR 会快速趋于饱和)
Cognitive Load(认知负荷) 30% 目录广度、跨模块变更、文件类型多样性
Review Effort(评审投入) 30% 讨论深度、评审人数量、审批迭代次数
Risk / Impact(风险 / 影响) 20% 破坏性变更、迁移任务、安全标签、依赖项变更

输出等级: trivial / simple / moderate / complex / highly_complex

适用场景

  • 在评审会议前,按复杂度对积压的开放 PR 进行优先级排序
  • 标记高复杂度 MR,强制要求二次评审
  • 为团队生成周度复杂度趋势报告
  • 理解某 PR 耗时较长的**根本原因**(各维度分解)
  • 构建工程总监看板(参见 score_mr.py)

快速开始

# 评分一个 GitHub PR(基础模式 —— 仅传入 PR 对象)
curl -s "https://api.github.com/repos/OWNER/REPO/pulls/NUMBER" 
     -H "Authorization: Bearer $GITHUB_TOKEN" 
     | python score_mr.py --provider github

# 评分一个 GitLab MR(含 diff 统计信息)
curl -s "https://gitlab.com/api/v4/projects/PROJECT_ID/merge_requests/IID?include_diff_stats=true" 
     -H "PRIVATE-TOKEN: $GITLAB_TOKEN" 
     | python score_mr.py --provider gitlab

# 更丰富的评分 —— 同时获取文件列表 + 评审记录
curl -s ".../pulls/NUMBER" > pr.json
curl -s ".../pulls/NUMBER/files" > files.json
curl -s ".../pulls/NUMBER/reviews" > reviews.json
python score_mr.py --provider github --pr pr.json --files files.json --reviews reviews.json

示例输出

{
  "provider": "github",
  "id": 412,
  "title": "Migrate auth service to OAuth2",
  "score": {
    "total": 74.2,
    "tier": "complex",
    "size": 68.0,
    "cognitive": 81.5,
    "review_effort": 72.0,
    "risk_impact": 60.0
  },
  "summary": "High mental load: 14 files across 6 directories, 3 reviewers involved",
  "tier_insight": "Needs careful review — high cognitive load and cross-module impact.",
  "stats": {
    "additions": 412,
    "deletions": 87,
    "files_changed": 14,
    "reviewers": 3,
    "discussions": 9,
    "net_lines": 325
  }
}

文件结构

mr-complexity-scorer/
  SKILL.md                      # 本文件
  mr_complexity_service.py      # 核心四维评分引擎(纯 Python 实现)
  score_mr.py                   # CLI 工具:接收 API 返回的 JSON 输入,输出复杂度 JSON
  requirements.txt              # 无外部依赖 —— 仅使用标准库,支持 Python 3.9+
  adapters/
    gitlab_adapter.py           # 将 GitLab MR API 字典映射为 MRData
    github_adapter.py           # 将 GitHub PR API 字典映射为 MRData

在自有代码中使用

from mr_complexity_service import MRComplexityCalculator, MRData
from adapters.github_adapter import github_pr_to_mrdata

# 从 GitHub PR 字典(来自 API 或 webhook payload)构建 MRData
mr_data = github_pr_to_mrdata(
    pr=pr_dict,
    files=files_list,       # 可选:/pulls/:number/files
    commits=commits_list,   # 可选:/pulls/:number/commits
    reviews=reviews_list,   # 可选:/pulls/:number/reviews
)

calculator = MRComplexityCalculator()
result = calculator.calculate(mr_data)

print(result.complexity_tier)   # "complex"
print(result.total_score)       # 74.2
print(result.human_summary)     # "High mental load: ..."

增强数据 —— 哪些 API 调用值得获取

额外 API 调用 解锁能力 是否推荐?
/pulls/:n/files 基于文件路径的认知负荷分析 是,始终推荐
/pulls/:n/reviews 准确的评审人数量与审批轮次统计 评审维度必需
/pulls/:n/commits 破坏性变更检测 建议获取(Nice to have)
/pulls/:n/comments 内联讨论数量统计 可选

即使不进行数据增强,评分器仍可正常工作——它会使用基础 PR 对象中的 changed_filesreview_commentsrequested_reviewers 字段。增强数据可显著提升评分准确性。

扩展至其他平台

只需实现一个轻量适配器,将目标平台的 MR/PR 字典映射为 MRData 类型即可:

from mr_complexity_service import MRData

def linear_issue_to_mrdata(issue: dict) -> MRData:
    return MRData(
        iid=issue["number"],
        title=issue["title"],
        # ... 映射其余字段
    )

已验证兼容:GitLab、GitHub、Gitea、Bitbucket、Azure DevOps —— 任何提供 MR/PR 元数据的平台均可支持。

调整权重配置

from mr_complexity_service import MRComplexityCalculator, ComplexityConfig

config = ComplexityConfig(
    weight_size=0.15,
    weight_cognitive=0.35,
    weight_review=0.30,
    weight_risk=0.20,
)
calculator = MRComplexityCalculator(config=config)

相关专题

更多
GitHub官网入口版本汇总
GitHub官网入口版本汇总

本专题整合了GitHub入口版本地址汇总,阅读专题下面的文章了解更多详细内容。

2026.04.02

558

19

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

2026.01.21

7965

27

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

2281

6

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

2517

7

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

2023.07.24

714

5

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

2023.07.06

1260

6

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

2023.07.05

3859

9

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

0

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

0

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 7.8万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.8万人学习