在多人协作的项目中,保持代码风格一致非常重要。我们Zino框架除了遵循Rust官方的Style Guide之外,还采用了一些更严格的限制。

开发流程

  1. 采用Rust stable版本进行编译,确保没有使用任何nightly特性。
  2. 所有的代码在提交commit之前都应该已经运行过cargo fmtcargo clippy以及cargo test,修正出现的任何错误和警告。
  3. 我们添加了#![forbid(unsafe_code)],禁止使用任何unsafe代码。

项目依赖

  1. Cargo.tomldependencies要按照crate的名称进行排序以方便查找;
  2. 禁止使用内联表,当配置项比较多的时候会导致该行过长,并且不便于阅读。
  3. 尽可能减少依赖以及不必要的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"]

模块导入

  1. 模块导入项应该按照固定的顺序:use self::*;use super::*;use crate::*;use abc::*;use xyz::*;
  2. 禁止在同一个地方对相同的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};

注释和文档

  1. 所有的block项如类型定义、函数、static变量等都需要编写///注释,确保在docs.rs上生成的文档是100% of the crate is documented
  2. 文档注释的第一个单词是动词,应该使用单数,如Creates an instance而不是Create an instance,并且要以英文句号结尾。
  3. 内部的代码注释应该有助于理解实现细节以及规避潜在的Bug,而不是简单的功能描述(除非代码行数比较长)。

错误调试

  1. 应尽可能使用?返回错误,禁止使用unwrap方法(只有在测试中可以使用)。
  2. 错误信息应简洁明了,不一定是完整的句子,不需要首字母大写,也不需要以句号结尾。
  3. 禁止在提交的代码中使用println!宏,只能用于临时调试时输出信息,调试结束后应删除,输出日志要使用tracinglog库。

photino
17 声望3 粉丝