前言
Cargo.toml
是 Rust 语言的核心配置文件,由官方构建工具 Cargo 使用,用于管理项目的元数据、依赖关系、构建配置等。它是 Rust 项目的"清单文件",类似于其他语言中的 package.json
(JavaScript)或 pom.xml
(Java)。
不知道你是否有过这样的经历:当你打开一个项目,被眼前杂乱的依赖配置触动了你的强迫症,不可避免地花时间又整理了一番。
如下是一个toml示例,而实际的工程中的场景往往比这个示例中的更加糟糕:
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
中:
shell
cargo add [OPTIONS] <DEP>[@<VERSION>] ...
cargo add [OPTIONS] --path <PATH> ...
cargo add [OPTIONS] --git <URL> ...
通过cargo remove
来移除不需要的项目依赖:
shell
cargo remove [OPTIONS] <DEP_ID>...
更多命令相关介绍可以通过cargo help add
,cargo help remove
或者通过Cargo Book来查看。
这个方法只有在项目还在你的"掌握"之中的情况下才有效。就像示例中的情况,此时即使通过cargo add
来添加新的依赖,只会在新增的依赖配置中保持有序,无法改变原有糟糕的依赖配置情况。
通过cargo-sort来排序你的依赖配置
cargo-sort用来使你的项目依赖能够按字典序进行排列。
安装
通过如下命令进行安装:
shell
cargo install cargo-sort
使用
通过如下命令来排序示例中的依赖配置:
shell
cargo sort
使用后的cargo.toml:
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进行排序:
shell
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 | 将排序后的 toml 文件输出到标准输出 |
|
-w | --workspace | 根据标志检查工作区中的每个 crate 。只能指定一个根目录 |
-o | --order | 指定表的排序顺序。所有嵌套表都将被排序并出现在指定表之后。任何未指定的表将排在指定表之后 |
配置
cargo-sort也可以通过tomlfmt.toml
进行配置:
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 = []