代码贡献规范¶
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,并由管理员关闭