贡献规范
代码风格
-
统一采用 MoonBit Toolchain 的格式化风格,通过运行以下命令来自动格式化代码。
moon fmt请确保在提交代码之前,使用
moon fmt格式化代码,以保持一致的代码风格。或者,可以使用
ready_to_pr.sh脚本来自动格式化代码、运行检查、生成测试覆盖率文件和.mbti文件。
命名约定
变量命名
- 采用 小写字母和下划线 分隔(例如:
my_var)。 - 变量名应具有描述性,能够准确反映其用途。
函数命名
- 使用 小写字母和下划线 分隔(例如:
calc_total_price())。 - 函数名应简洁且具有描述性,能够清晰表达函数的功能。
Struct 和 Trait 命名
- 使用 首字母大写的驼峰式命名(例如:
MyStruct、MyTrait)。 - 命名应直观地反映该结构体或特征的功能或角色,避免使用过于抽象或不具描述性的名称。
常量命名
- 注意: 由于在 MoonBit 的语境下,“变量”通常称为“binding”,且默认是不可变的,只有添加
mut关键字才能使其可变。因此,常量和“变量”之间没有严格的命名差异,保持一致性。 - 常量名采用 全小写字母和下划线 分隔(例如:
machine_dbl_epsilon)。 - 常量名通常以第一个单词作为前缀,表示常量的用途或分类。例如,
machine_dbl_epsilon中的machine表示与机器相关的常量。 - 常量名应简洁且具有描述性,便于其他开发者理解。
Result的Err构造内容和Err Code
- 采用 全大写字母和下划线 分隔(例如:
E_MAX_ITER)。 - 构造内容通常以字符
E作为前缀,表示其用于Err构造或者错误代码。 - 构造内容应简洁且具有描述性,便于其他开发者理解。
注释
- 简洁性:注释应简洁明了,只包含必要的信息,避免冗长和不相关的内容。
- 一致性:使用一致的术语和风格,避免在不同地方使用不同的方式描述相同的概念。
- 清晰性:确保注释易于理解,避免复杂的术语或模糊的表述。应使任何阅读代码的人能够快速理解注释的意图。
- 准确性:注释必须准确反映代码的功能和目的,避免与代码行为不符的描述。
- 更新性:随着代码的变更,注释也应随时更新,确保注释与代码同步。
我们鼓励开发者采用MoonBit LSP提供的AI代码注释生成来提升注释的编写效率,但需要开发者对AI生成的内容进行审核,以确保其对方法、结构体和特征的解释是正确无误的。
文件规范
文件夹命名
- 对于大的功能模块,请使用小写字母命名的文件夹(包)。
- 命名应简洁、描述性强,且仅使用小写字母和下划线(
_)来分隔单词。请避免使用数字和特殊字符。例如,微分相关功能使用diff,导数相关功能使用deriv。
文件划分
- 文件应该按功能划分,每个文件专注于特定的功能。文件名使用小写字母和下划线。
- 文件名应具备描述性,清楚反映该文件所实现的核心功能。例如,
gauss_kronrod.mbt实现带克龙罗德扩展的高斯求积,adaptive_quadrature_gk.mbt实现基于带克龙罗德扩展的高斯求积的自适应积分。 - 注意:在文件命名中(除了在@internal中不可避免的情况),请避免使用过于通用或模糊的名称,如
utils.mbt,请尽量使文件名与其功能或模块相关联。
提交规范
提交信息
- 在提交前请使用
ready_to_pr.sh脚本来自动格式化代码、运行检查、生成测试覆盖率文件和.mbti文件。 - 每个提交应具有清晰的描述,说明此次提交所做的变更。
- 提交信息应使用英文,并遵循简短、精炼的原则。
- 使用
fix:,feat:,refactor:和doc:等前缀来区分提交的类型
fix: fix bug in something
feat: add feature for something
refactor: refactor something
doc: add docs for something
提交频率
- 尽量保持每次提交都很小且聚焦于一个功能或修复。
- 不要一次性提交大规模的更改。
代码审查
- 非项目维护者和合作者在修改
moon.mod.json内的依赖和版本号前,请先联系维护者或者合作者。 - 所有的代码提交都必须经过代码审查。
- 在审查过程中,关注代码质量、风格、性能和安全性。
- 审查者应提供建设性的反馈,帮助改进代码。