代码贡献规范

C++代码规范

  • 除模板类型用大驼峰外,其余一切标识符用小写+下划线命名

  • 使用根目录下的.clang-format文件格式化代码

  • 使用C++17标准,确保代码能在gcc和msvc下正常编译(clang由于pmr的原因暂不支持)

  • 尽可能使用const/auto/override/final/noexcept/constexpr/static/[[noreturn]]/[[nodiscard]]/[[fallthrough]]等标记

  • 尽可能使用类型擦除技术减少类型暴露,即大部分暴露在外的类型都是Interface

  • 不引入任何命名空间,除自定义字面量外

  • 尽可能使用pmr作为容器的内存分配器

  • 按值传递所有权,其余一般按const引用传递参数。拥有SSO优化的string除外

  • 使用智能指针,一般情况下不出现任何形式的new/delete

  • 谨慎引入第三方依赖库

  • 仅允许Resharper和clang的linter标记

  • 确保所有代码开头都有SPDX-License-Identifier标记,即所有代码文件头均为// SPDX-License-Identifier: MIT

  • 为迁移至C++20做准备

API设计规范

  • 尽可能减少API的变动,一旦变动则强制取消老式API并重点标注(长期维护前随意)

  • 尽可能避免代码重复

  • 尽可能确保在编译通过后任何输入都能得到期望的结果,即把一切不合理的输入拦截在编译期,否则需要在运行期强制验证输入。

  • widget与layout不暴露和region/primitive有关的接口

commit规范

  • commit信息应遵循Angular规范,建议使用commitizen

  • 不要求commit的内容完整性,但要求commit的内容单一性,即修改尽可能保持在小范围内

  • 记得重点标记API变化

  • 谨慎提交二进制文件,禁止提交个人配置文件

PR规范

  • 按照给定的pr模板填写

  • pr的内容需要完整,或者分阶段进行(即具备基本功能),应确保demo中有相关用例用于展示

  • pr通过CI后才能merge进主分支

  • 提及相关issue,并由管理员关闭