在多人协作的项目中,保持代码风格一致非常重要。我们Zino框架除了遵循Rust官方的Style Guide
之外,还采用了一些更严格的限制。
开发流程
- 采用Rust stable版本进行编译,确保没有使用任何
nightly
特性。 - 所有的代码在提交
commit
之前都应该已经运行过cargo fmt
、cargo clippy
以及cargo test
,修正出现的任何错误和警告。 - 我们添加了
#![forbid(unsafe_code)]
,禁止使用任何unsafe
代码。
项目依赖
Cargo.toml
的dependencies
要按照crate
的名称进行排序以方便查找;- 禁止使用内联表,当配置项比较多的时候会导致该行过长,并且不便于阅读。
- 尽可能减少依赖以及不必要的
features
。
不符合规范的写法:
[dependencies]
chrono = { version = "0.4.38", features = ["serde"] } # 禁止内联
dioxus = "0.5.1"
smallvec = "1.13.2" # 没有排序
dioxus-core = "0.5.1"
dioxus-sdk = { version = "0.5.0", features = ["clipboard", "storage"] } # 禁止内联
推荐的写法:
[dependencies]
dioxus = "0.5.1"
dioxus-core = "0.5.1"
smallvec = "1.13.2"
[dependencies.chrono]
version = "0.4.38"
features = ["serde"]
[dependencies.dioxus-sdk]
version = "0.5.0"
features = ["clipboard", "storage"]
模块导入
- 模块导入项应该按照固定的顺序:
use self::*;
、use super::*;
、use crate::*;
、use abc::*;
、use xyz::*;
; - 禁止在同一个地方对相同的
crate
使用多个use
语句,应该进行合并。
不符合规范的写法:
use crate::{bail, error::Error}; // 没有排序
use super::{ConnectionPool, Executor}; // 没有排序
use std::fmt::Display; // 应进行合并
use std::sync::atomic::Ordering::Relaxed; // 应进行合并
use serde::de::DeserializeOwned; // 没有排序
推荐的写法:
use super::{ConnectionPool, Executor};
use crate::{bail, error::Error};
use serde::de::DeserializeOwned;
use std::{fmt::Display, sync::atomic::Ordering::Relaxed};
注释和文档
- 所有的
block
项如类型定义、函数、static
变量等都需要编写///
注释,确保在docs.rs
上生成的文档是100% of the crate is documented
。 - 文档注释的第一个单词是动词,应该使用单数,如
Creates an instance
而不是Create an instance
,并且要以英文句号结尾。 - 内部的代码注释应该有助于理解实现细节以及规避潜在的Bug,而不是简单的功能描述(除非代码行数比较长)。
错误调试
- 应尽可能使用
?
返回错误,禁止使用unwrap
方法(只有在测试中可以使用)。 - 错误信息应简洁明了,不一定是完整的句子,不需要首字母大写,也不需要以句号结尾。
- 禁止在提交的代码中使用
println!
宏,只能用于临时调试时输出信息,调试结束后应删除,输出日志要使用tracing
和log
库。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。