10 个稳定版本
1.0.9 | 2022年10月14日 |
---|---|
1.0.8 | 2022年10月7日 |
1.0.7 | 2021年12月21日 |
1.0.6 | 2021年11月26日 |
1.0.2 | 2021年5月11日 |
在 Cargo 插件 中排名第 8
每月下载量 22,386
165KB
4K SLoC
Cargo Sort
Cargo Sort 是一个检查 Cargo.toml 依赖项是否按字母顺序排序的工具。该项目作为对 @dtolnay 的 实现请求 #29 的解决方案而创建。跨平台实现,兼容 Windows。在 cmd.exe 和 powershell 中都能正常工作。通过键对表和嵌套表头进行排序/检查(不对嵌套表头中的项进行排序,只对表本身进行排序)。cargo sort
使用 toml-edit 将 toml 文件解析为有用的格式。
使用 --format
选项可能会导致 toml 格式不正确;请提交问题。
使用方法
cargo-sort 可以使用三种模式
- 默认
- 没有设置标志时,cargo-sort 将将排序后的结果写入输入 Cargo.toml 文件。
- -c 或 --check
- 如果文件未排序,将以非零退出代码失败。
- -n 或 --no-format
- 将 不会 格式化排序后的 toml。此选项仅在写入或打印时才有效。
- -g 或 --grouped
- 排序时保持表键值间距。如果您有依赖项组,它们将保持但将按分组排序。需要将
key_value_newlines
配置选项设置为true
才能产生任何效果。
- 排序时保持表键值间距。如果您有依赖项组,它们将保持但将按分组排序。需要将
- -p 或 --print
- 将排序后的 toml 文件写入 stdout。
- -w 或 --workspace
- 根据标志检查工作区中的每个 crate。只能提供一个根。
- -o 或 --order
- 指定表排序的顺序。所有嵌套表都将按指定顺序排序并出现在指定表之后。任何未指定的表将在指定之后。
配置
cargo sort
使用配置文件进行格式化,配置文件名为 tomlfmt.toml
。这是可选的,如果没有在当前工作目录中找到,将使用默认值。
如果没有找到 tomlfmt.toml
,以下是默认设置:
# trailing comma in arrays
always_trailing_comma = false
# trailing comma when multi-line
multiline_trailing_comma = true
space_around_eq = true
# remove all the spacing inside the array
compact_arrays = false
# remove all the spacing inside the object
compact_inline_tables = false
trailing_newline = true
# is it ok to have blank lines inside of a table
# this option needs to be true for the --grouped flag
key_value_newlines = true
allowed_blank_lines = 1
# windows style line endings
crlf = false
# The user specified ordering of tables in a document.
# All unspecified tables will come after these.
table_order = []
包括在排序检查中的内容:
["dependencies"]
["dev-dependencies"]
["build-dependencies"]
["workspace.members"]
["workspace.exclude"]
如果您需要添加标题,请提交一个 PR,它们非常受欢迎。
安装
cargo install cargo-sort
pre-commit
如果您在项目中使用 pre-commit,可以通过将以下条目添加到您的 .pre-commit0-config.yaml
配置中,将 cargo-sort 作为钩子添加:
repos:
- repo: https://github.com/DevinR528/cargo-sort
rev: v1.0.4
hooks:
- id: cargo-sort
请确保将 rev
设置为该仓库的最新标签,因为这里显示的标签可能不一定是最新的版本。
运行
感谢 dspicher 提出的 问题 #4,现在您可以将 cargo sort
检查作为 cargo 子命令调用。
cargo sort [FLAGS] [path]
支持通配符展开,因此您可以这样做:
cargo-sort [FLAGS] [path/to/*/Cargo.toml | path/to/*]
或者任何其他您的终端支持的模式。这也意味着可以处理多个路径。
cargo-sort [FLAGS] path/to/a path/to/b path/to/c/Cargo.toml
最后,cargo sort 有 --workspace 标志,它将在 workspace 中对每个 Cargo.toml 文件进行排序。
cargo-sort -w/--workspace
这些都是有效的。文件名和扩展名可以在一些路径上使用,但不能在其他路径上使用,如果省略,则工具将默认为 Cargo.toml。
cargo sort 1.0.0
Devin R <[email protected]>
Ensure Cargo.toml dependency tables are sorted.
USAGE:
cargo-sort [FLAGS] [CWD]
FLAGS:
-c, --check exit with non-zero if Cargo.toml is unsorted, overrides default behavior
-f, --format formats the given Cargo.toml according to tomlfmt.toml
-g, --grouped when sorting groups of key value pairs blank lines are kept
-h, --help Prints help information
-p, --print prints Cargo.toml, lexically sorted, to stdout
-V, --version Prints version information
-w, --workspace checks every crate in a workspace
ARGS:
<CWD>... sets cwd, must contain a Cargo.toml file
Docker
构建镜像
docker build -t cargo-sort .
运行容器
docker run -it --rm -v "$(pwd)/Cargo.toml":/app/Cargo.toml cargo-sort
镜像也可在 Docker Hub 上找到
docker run -it --rm -v "$(pwd)/Cargo.toml":/app/Cargo.toml devinr528/cargo-sort:latest
示例
[dependencies]
a="0.1.1"
# comments will stay with the item
c="0.1.1"
# If --grouped is used the blank line will stay.
b="0.1.1"
[dependencies.alpha]
version="0"
[build-dependencies]
foo="0"
bar="0"
# comments will also stay with header
[dependencies.zed]
version="0"
[dependencies.beta]
version="0"
[dev-dependencies]
bar="0"
foo="0"
将排序到或失败,直到组织如下:
[dependencies]
a="0.1.1"
# If --grouped is used the blank line will stay
b="0.1.1"
# comments will stay with the item
c="0.1.1"
[dependencies.alpha]
version="0"
[dependencies.beta]
version="0"
# comments will also stay with header
[dependencies.zed]
version="0"
# Tables are ordered by their appearance so
# if dev-dependencies was before build it would be
# sorted that way unless --order is specified
[build-dependencies]
bar="0"
foo="0"
[dev-dependencies]
bar="0"
foo="0"
许可证
根据您的选择,在 Apache License, Version 2.0 或 MIT 许可证 下授权。除非您明确表示,否则您提交的任何有意包含在本项目中的贡献,根据 Apache-2.0 许可证定义,将按上述方式双重许可,不附加任何额外条款或条件。
依赖项
~4–13MB
~163K SLoC