news 2026/9/16 17:00:46

为 Lean 4 仓库贡献代码:外部贡献指南、PR 流程与质量规范全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为 Lean 4 仓库贡献代码:外部贡献指南、PR 流程与质量规范全解析

为 Lean 4 仓库贡献代码:外部贡献指南、PR 流程与质量规范全解析

【免费下载链接】lean4Lean 4 programming language and theorem prover项目地址: https://gitcode.com/GitHub_Trending/le/lean4

本指南以 Lean 4 仓库根目录的 CONTRIBUTING.md 为骨架,系统讲解外部开发者向 Lean 4 提交贡献(Issue、RFC、Pull Request)的完整流程:从提交前的准备工作、代码质量标准,到 PR 的撰写规范、评审与反馈机制,并延伸至与贡献密切相关的开发环境搭建、构建与测试纪律。读完本文,你将掌握 Lean 4 官方认可的贡献方式、优先级标签体系(P-high / P-medium / P-low)的含义,以及如何写出一份符合提交规范、能被维护者高效评审的 PR。

为什么 Lean 4 需要一份严格的贡献指南

在早期阶段,Lean 4 曾接受绝大多数外部 Pull Request。但这一做法带来了难以维护的代码、性能问题和大量 bug。为了提升代码库的质量与可维护性,Lean 4 团队(由 Lean FRO 管理)制定了严格的外部贡献指南,明确要求贡献者遵循一套标准化的流程。

这意味着:不是所有 PR 都会被合并。贡献者的每一项改动都需要经过 Issue 讨论、质量审查、测试验证与 CI 检查的多重把关。理解这套规则,是让贡献被高效接受的前提。

提交 PR 之前的准备:从 Issue 到 RFC

先用 Issue 讨论,再动手写代码

提交 PR 之前,永远先开一个 Issue,讨论你想解决的问题或想添加的功能。如果你是在提议一个新特性,请使用RFC:(request for comments,征求意见)前缀。先向其他用户征求反馈,并花时间汇总所有反馈——这能让维护者更高效地评估你的提案。

在创建 RFC 时,官方建议回答以下问题:

  • 用户体验(User Experience):这个功能如何改善用户体验?
  • 受益者(Beneficiaries):哪些 Lean 用户和项目最能从这个功能/改动中受益?
  • 社区反馈(Community Feedback):你是否向其他 Lean 用户征求过意见或见解?
  • 可维护性(Maintainability):这个改动是否会简化代码维护或代码结构?

了解项目、保持更新、从 help wanted 入手

  • 理解项目:熟悉项目本身、已有 Issue 和最新提交,确保你的贡献与项目方向和优先级一致。
  • 保持更新:定期从主分支fetchmerge最新改动,确保你的分支不过时、可以平滑集成。
  • Help wanted 标签:仓库中有标记为help wanted的 Issue,是官方推荐的外部贡献切入点。如果对某个 Issue 感兴趣,可以在其中留言、提问,并与核心开发者互动。

与贡献相关的开发环境准备

CONTRIBUTING.md指向的开发环境文档给出了完整的本地搭建流程。由于 Lean 4 是自举(bootstrapped)编译的程序——前端和编译器本身用 Lean 编写——贡献者需要理解其多阶段构建模型(详见 doc/dev/bootstrap.md):

  • stage0使用仓库中检入的预编译 C 源文件构建,是一个"黑盒"引导二进制;
  • make默认构建stage1,用stage0/bin/lean编译含你改动的src/库,再链接成stage1/bin/lean
  • 修改.olean格式等"元层"代码时,需要继续构建stage2,而stage3仅作为一致性检查存在。

因此,任何可能影响 Lean 自身编译的改动(如 parser、elaborator、compiler)都必须先阅读 bootstrapping 文档,且不得直接编辑stage0目录,除非按该文档描述的特定命令操作。

推荐使用elan切换 toolchain(仓库根目录的lean-toolchain文件已配置好lean4-stage0用于srclean4用于tests):

elan toolchain link lean4 build/release/stage1 elan toolchain link lean4-stage0 build/release/stage0

VS Code 用户可直接在仓库根目录执行code .,仓库内置的.vscode/会配置好设置、任务与推荐扩展。另外建议安装ccache加速生成 C 代码的重新编译。

质量优先(Quality Over Quantity)

指南明确将"质量优于数量"作为核心原则,体现在三点:

专注的改动(Focused Changes)

每个 PR 应只解决一个明确界定的 Issue 或特性,避免把多个不相关的改动塞进同一个 PR。这既方便评审,也便于在出问题时定位和回滚。

写测试(Write Tests)

每个新特性或 bug 修复都应附带相关测试,以保证贡献的健壮性和可靠性。Lean 4 的测试套件结构分为两种:

  • 测试目录(test directory):包含run_test.sh和/或run_bench.sh脚本的目录,代表单个测试或基准测试;
  • 测试堆(test pile):同样包含运行脚本的目录,但目录中每个指定扩展名(通常是.lean)的文件各代表一个测试或基准测试,运行脚本会为每个测试文件各执行一次。

测试目录按用途划分:compile(编译并执行、同时走解释器验证输出)、elab(只展开不执行)、elab_fail(期望退出码为 1)、server/server_interactive(测试 LSP 请求)、lake(Lake 构建工具的测试,相对独立)等。写测试时可以借助fix_expected.py生成.out.expected文件,并用lint.py做规范检查。

更新文档(Documentation)

更新相关文档,包括代码中的注释,解释你改动的逻辑与理由。注意:Lean 自身的src/Lean子模块都使用prelude关键字(见 doc/dev/index.md),与普通 Lean 项目不同,改动Init时不会强制触发Lean的完整重建——理解这一约定有助于你正确组织导入。

编码规范(Coding Standards)

  • 遵循代码风格(Follow the Code Style):确保代码符合项目既有风格。仓库的代码风格约定可参考 doc/style.md 与 doc/std/style.md。
  • 善用 Lean(Lean on Lean):充分利用 Lean 的内置特性和标准库,避免重复造轮子。例如src/Initsrc/Leansrc/Std中的既有抽象与库函数。
  • 性能(Performance):确保改动不引入性能回退,并尽可能针对速度和资源占用做优化。可借助 tests/bench、tests/compile_benchtests/elab_bench等基准目录验证性能影响(TEST_BENCH环境变量用于区分测试与基准场景)。

PR 提交规范(PR Submission)

描述性标题与摘要

PR 标题应简明说明 PR 的目的;摘要需给出更详细的改动内容与原因。不允许以 Zulip 讨论串链接作为摘要——你有责任自行总结讨论内容并获得支持。

遵循提交规范(Commit Convention)

PR 采用squash merge,最终提交信息取自 PR 的标题和正文,因此二者必须遵循提交规范。该规范基于 AngularJS 项目的约定,格式为:

<type>: <subject> <空行> <body> <空行> <footer>
  • <type>必须是:feat(特性)、fix(bug 修复)、doc(文档)、style(格式)、refactor(重构)、test(补充测试)、chore(维护)、perf(性能优化);
  • 每个featfix提交都必须带有changelog-*标签,且提交信息以 "This PR " 开头,以便进入 changelog;
  • <subject>:使用祈使句、现在时("change" 而非 "changed"/"changes"),首字母小写,结尾不加句号;
  • <body>:同样使用祈使句现在时,说明改动动机并与旧行为对比;若带changelog-*标签,正文必须以 "This PR " 开头;
  • <footer>可选,用于标注破坏性变更(Breaking changes,需描述改动、理由与迁移说明),以及引用关闭的 Issue,例如Closes #123, #456

因为改动最终会被 squash,分支上的提交历史与提交信息无需刻意打磨;但应把不想进入最终提交信息的问题和补充信息放到首个评论中,而不是 PR 描述里。

链接相关 Issue

在 PR 中引用其解决的 Issue,为评审提供上下文。

AI 贡献声明

任何由生成式 AI 协助完成的贡献,必须在 PR 描述中注明。作者有责任在打开 PR 前手动检查这些贡献;完全由 AI 单独撰写的 PR 不受欢迎,可能被直接关闭且不做进一步说明。

保持响应(Stay Responsive)

PR 提交后要保持响应,准备好按反馈修改。超过一个月无回应或更新的 PR 将被关闭。

评审与反馈机制(Reviews and Feedback)

lean4 仓库由 Lean FRO 的triage 团队管理,目标是每周对新的 bug 报告、PR 和 RFC 提供初步反馈。反馈通常体现为给工单分配以下优先级之一:

标签含义
P-high我们会处理这个 Issue
P-medium有时间的话我们可能会处理
P-low我们暂不计划处理
closed已修复、不是问题,或与项目路线图不符,不会处理也不接受外部贡献
  • 对于bug 报告,所列优先级反映的是修复该问题的承诺,通常与处理该 bug 的外部贡献所能获得的优先级相近但不完全等同;
  • 对于PR 和 RFC,优先级反映的是评审并将其推进到可接受状态的承诺;被接受的 RFC 会打上RFC accepted标签,随后像 bug 报告一样被分配新的"实现"优先级。

与评审互动时遵循三条原则:

  • 保持耐心(Be Patient):全职维护者数量有限、PR 数量大,评审可能需要一些时间;
  • 建设性沟通(Engage Constructively):以积极、建设性的态度对待反馈,评审是为了保证项目质量,而非针对个人;
  • 通过 CI(Continuous Integration):确保 PR 上所有 CI 检查通过,失败的检查会拖延评审——维护者不会检查包含失败项的 PR

你会得到什么(What to Expect)

  • 并非所有 PR 都会被合并:我们感谢每一份贡献,但只有与项目目标、质量标准一致的改动才会被合入;
  • 反馈是礼物(Feedback is a Gift):评审反馈既能改进项目,也能帮助你作为开发者成长;
  • 社区参与(Community Involvement):在 Lean 社区的沟通渠道中保持互动,有助于更好地协作并理解项目方向。

贡献前的自检清单

综合全文,正式提交 PR 前建议逐项确认:

  1. 已先开启 Issue 或RFC:讨论并获得反馈;
  2. 分支基于最新 master,无冲突;
  3. 改动聚焦单一问题,包含测试(tests/ 下合适的目录或测试堆);
  4. 文档与代码注释已同步更新;
  5. 遵循代码风格、使用 Lean 内置能力、无性能回退;
  6. PR 标题与描述符合提交规范,带changelog-*标签与 "This PR " 开头(如适用),并在 footer 中Closes #xxx
  7. 引用了相关 Issue,AI 协助已在描述中注明;
  8. 本地 CI 全部通过,且未触碰stage0(除非按 bootstrap.md 流程操作);
  9. 提交后保持响应,避免超过一个月无更新。

遵循以上流程,你的贡献将能以最高效的方式进入 Lean 4 这一自举编译器/证明助手的代码库,并被src/kernelsrc/Leansrc/Inittests/等目录的既有代码风格所认可。

【免费下载链接】lean4Lean 4 programming language and theorem prover项目地址: https://gitcode.com/GitHub_Trending/le/lean4

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 17:00:06

银行培训性价比打分:不同价位课程的实际价值对比

报班花钱&#xff0c;性价比是大家最关心的问题之一。但性价比不是越便宜越好&#xff0c;也不是越贵越值&#xff0c;而是看你花的钱买到了多少实实在在的内容和服务。今天就从课程内容、服务配置、价格、隐形消费、退费政策五个维度&#xff0c;给5家机构的性价比打个分。说明…

作者头像 李华
网站建设 2026/9/16 16:59:56

北京30m地形地貌栅格处理:GDAL解包、投影与面积统计

简介&#xff1a;北京市最新30m精度地形地貌数据包&#xff0c;依据海拔、起伏程度与成因形态&#xff0c;将北京市划分为低海拔至极高海拔、丘陵至极大起伏、平原山脉沟壑等地貌类型&#xff0c;并区分海积、湖积、冲积、洪积、风积、冰碛等成因。面向GIS专业学生、规划人员和…

作者头像 李华
网站建设 2026/9/16 16:56:47

BP神经网络训练前的数据预处理:标准化、编码与验证指南

简介&#xff1a;这是一份面向BP神经网络建模的完整数据预处理实践资源&#xff0c;适合机器学习初学者与需要使用MATLAB完成分类/回归任务的研究者。压缩包共11个文件&#xff0c;含10个Excel数据文件和1个MATLAB脚本&#xff0c;大小仅111KB。Excel文件覆盖原始样本、归一化样…

作者头像 李华
网站建设 2026/9/16 16:56:28

微信小程序仿58同城分类信息平台源码深度解析

简介&#xff1a;这套源码是以58同城为参考的本地生活服务类小程序前端实现&#xff0c;面向微信小程序开发者和前端学习者&#xff0c;适合用作家乡信息平台、二手交易或分类信息展示场景的起步模板&#xff0c;也可作为仿站项目练手。资源包共14个文件&#xff0c;以png图片素…

作者头像 李华