#cargo-toml #sorting #cargo #check #cargo-subcommand #dependencies #file-sorting

app cargo-sort

检查 .toml 文件中的表和项是否按字典顺序排序

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

Download history 4520/week @ 2024-04-16 4922/week @ 2024-04-23 5264/week @ 2024-04-30 6559/week @ 2024-05-07 6251/week @ 2024-05-14 5455/week @ 2024-05-21 5683/week @ 2024-05-28 4975/week @ 2024-06-04 5499/week @ 2024-06-11 7007/week @ 2024-06-18 6554/week @ 2024-06-25 6242/week @ 2024-07-02 5721/week @ 2024-07-09 4992/week @ 2024-07-16 5079/week @ 2024-07-23 5152/week @ 2024-07-30

每月下载量 22,386

MIT/Apache

165KB
4K SLoC

Cargo Sort

Rust Stable

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.0MIT 许可证 下授权。
除非您明确表示,否则您提交的任何有意包含在本项目中的贡献,根据 Apache-2.0 许可证定义,将按上述方式双重许可,不附加任何额外条款或条件。

依赖项

~4–13MB
~163K SLoC