Rust-开发必备-cargo_sort-一键整理你的cargo.toml

88 阅读3分钟

前言

Cargo.toml 是 Rust 语言的核心配置文件,由官方构建工具 Cargo 使用,用于管理项目的元数据、依赖关系、构建配置等。它是 Rust 项目的“清单文件”,类似于其他语言中的 package.json(JavaScript)或 pom.xml(Java)。

不知道你是否有过这样的经历:当你打开一个项目,被眼前杂乱的依赖配置触动了你的强迫症,不可避免地花时间又整理了一番。

如下是一个toml示例,而实际的工程中的场景往往比这个示例中的更加糟糕:

[package]
name = "learn_rust"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
derive_more = { version = "2.0.1", features = ["display"] }
strum = { version = "0.27.1", features = ["derive"] }
strum_macros = "0.27.1"
anyhow = "1.0.98"
serde = "1.0.219"
serde_json = "1.0.140"
tokio = "1.44.2"
actix-web = "4.10.2"
clap = "4.5.37"
mongodb = "3.2.3"
redis = "0.30.0"

在没有变遭之前,通过cargo指令管理你的依赖配置

如果你是一个项目的创建者,那么你可以在一切无法挽回之前,通过cargo命令来使得你的cargo.toml中的依赖配置看起来井然有序。

通过cargo add来添加你的项目依赖,在依赖配置有序的情况下会按序添加至cargo.toml中:

cargo add [OPTIONS] <DEP>[@<VERSION>] ...

cargo add [OPTIONS] --path <PATH> ...

cargo add [OPTIONS] --git <URL> ...

通过cargo remove来移除不需要的项目依赖:

cargo remove [OPTIONS] <DEP_ID>...

更多命令相关介绍可以通过cargo help addcargo help remove或者通过Cargo Book来查看。

这个方法只有在项目还在你的“掌握”之中的情况下才有效。就像示例中的情况,此时即使通过cargo add来添加新的依赖,只会在新增的依赖配置中保持有序,无法改变原有糟糕的依赖配置情况。

通过cargo-sort来排序你的依赖配置

cargo-sort用来使你的项目依赖能够按字典序进行排列。

安装

通过如下命令进行安装:

cargo install cargo-sort

使用

通过如下命令来排序示例中的依赖配置:

cargo sort

使用后的cargo.toml:

[package]
name = "learn_rust"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
actix-web = "4.10.2"
anyhow = "1.0.98"
clap = "4.5.37"
derive_more = { version = "2.0.1", features = ["display"] }
mongodb = "3.2.3"
redis = "0.30.0"
serde = "1.0.219"
serde_json = "1.0.140"
strum = { version = "0.27.1", features = ["derive"] }
strum_macros = "0.27.1"
tokio = "1.44.2"

程序员的强迫症终于有救了。

另一个常用命令是使你项目中workspace内的所有cargo.toml进行排序:

cargo sort -w

更多

指令

cargo-sort更多指令讲解:

选项完整写法功能描述
不设置任何标志时,cargo - sort 会将排序后的结果覆盖写入输入的 Cargo.toml 文件
-c--check如果文件未排序,将以非零退出码报错
-n--no - format不对排序后的 toml 文件进行格式化。此选项仅在写入或打印输出时有效
--check - format--check - format检查排序后原始输入文件是否未发生变化
-g--grouped排序时保留表键值间距。如果存在依赖组,它们将保持在一起并在组内进行排序。需 key_value_newlines 配置选项为 true 才会生效
-p--print将排序后的 toml 文件输出到标准输出
-w--workspace根据标志检查工作区中的每个 crate。只能指定一个根目录
-o--order指定表的排序顺序。所有嵌套表都将被排序并出现在指定表之后。任何未指定的表将排在指定表之后

配置

cargo-sort也可以通过tomlfmt.toml进行配置:

# 数组中的尾随逗号
always_trailing_comma = false
# 多行时的尾随逗号
multiline_trailing_comma = true
# 数组对象字符串的最大字节长度
max_array_line_len = 80
# 缩进的空格数
indent_count = 4
# 等号周围是否有空格
space_around_eq = true
# 去除数组内部的所有间距
compact_arrays = false
# 去除对象内部的所有间距
compact_inline_tables = false
trailing_newline = true
# 表格内部允许存在空行
# 此选项需为true,--grouped标志才有效
key_value_newlines = true
允许的空行数 = 1
# Windows风格的行尾格式(回车换行)
crlf = false
# 用户指定的文档中表格的排序顺序。
# 所有未指定的表格将排在这些之后。
table_order = []