你应该知道的7个Rust Cargo插件

522次阅读  |  发布于11月以前

在这篇文章中,我们将介绍你应该知道的7个Rust Cargo插件:

1 Cargo watch

cargo watch监视你的项目源文件,并在源文件更改时运行Cargo命令。

安装命令如下:

cargo install cargo-watch

例子如下:

fn main() {
    println!("Hello, world!");
    println!("Hello, cargo-watch!");
}

然后,我们可以在命令行输入以下命令,以便在源文件更改时执行cargo run:

cargo watch -x run

输出如下:

cargo watch -x run
[Running 'cargo run']

Hello, world!
Hello, cargo-watch!
[Finished running. Exit status: 0]

如果我们注释掉第2行,我们的代码将自动重新编译。

[Running 'cargo run']

Hello, cargo-watch!
[Finished running. Exit status: 0]

cargo watch也提供了很多其他的选项,如:

cargo watch -c -q -w ./src -x run

2 Cargo edit

cargo edit 允许你从命令行添加、升级和删除依赖项。

安装命令如下:

cargo install cargo-edit

我们在命令行输入以下命令,将rand 0.7版本添加到项目中:

cargo add rand@0.7

这将自动更新Cargo.toml文件:

如图所示,rang 0.7不是最新版本,我们可以使用以下命令来升级依赖项:

cargo upgrade --incompatible

结果如下:

cargo upgrade --incompatible     
    Updating 'https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index' index
    Checking cargo-plugin-example's dependencies
name old req compatible latest new req
==== ======= ========== ====== =======
rand 0.7     0.7.3      0.8.5  0.8    
   Upgrading recursive dependencies

我们还可以通过以下命令来删除依赖项:

cargo rm rand

3 Cargo modules

cargo modules插件允许我们可视化项目的模块结构,以树状格式显示模块结构。

安装命令如下:

cargo install cargo-modules

在命令行输入以下命令:

cargo modules generate tree

输出结果:

crate cargo_plugin_example
├── mod modules: pub(crate)
└── mod utils: pub(crate)

在这里,我们可以看到默认的crate模块,两个顶级模块models和utils,我们还可以看到每个模块的可见性。

通过添加types,fns标志,我们也可以看到每个模块内部的类型,函数等。

cargo modules generate tree --types --fns

结果如下:

crate cargo_plugin_example
├── fn main: pub(crate)
├── mod modules: pub(crate)
│   └── struct Message: pub
└── mod utils: pub(crate)
    └── fn msg_helpers: pub

4 Cargo audit

cargo audit检查项目的依赖项是否有任何安全漏洞,这在持续集成中特别有用。

安装命令如下:

cargo install cargo-audit

要审计你的项目,只需输入如下命令:

cargo audit

结果如下:

Fetching advisory database from `https://github.com/RustSec/advisory-db.git`
      Loaded 578 security advisories (from /Users/Justin/.cargo/advisory-db)
    Updating crates.io index
    Scanning Cargo.lock for vulnerabilities (9 crate dependencies)

在我们的项目中,没有发现任何漏洞。

5 Cargo tarpaulin

cargo tarpaulin 是另一个对持续集成非常有用的插件,这个插件计算项目的代码覆盖率。

安装命令如下:

cargo install cargo-tarpaulin

在项目根目录下,输入如下命令:

cargo tarpaulin

结果如下:

|| Uncovered Lines:
|| src/main.rs: 6-9
|| src/utils.rs: 1
|| Tested/Total Lines:
|| src/main.rs: 0/4 +0.00%
|| src/utils.rs: 0/1 +0.00%
|| 
0.00% coverage, 0/5 lines covered, +0.00% change in coverage

6 Cargo nextest

cargo-nextest 是新一代的rust测试程序,它提供了漂亮的测试结果,片状的测试检测,并且在某些代码库上可以将测试运行速度提高60倍。

安装命令如下:

cargo install cargo-nextest

要使用cargo-nextest执行测试,需要在命令行执行如下命令:

cargo nextest run

结果如下:

正如你所看到的,输出是有组织的,并且具有漂亮的颜色,这有助于提高可读性。

7 Cargo make

cargo-make 是rust的任务运行器和构建工具,它允许你定义一组任务并在流程中运行它们,任务可以在toml文件中定义。

安装命令如下:

cargo install cargo-make

在项目根目录下创建build.toml文件,内容如下:

[tasks.format]
command = "cargo"
args = ["fmt", "--", "--emit=files"]

[tasks.clean]
command = "cargo"
args = ["clean"]

[tasks.build]
command = "cargo"
args = ["build"]
dependencies = ["clean"]

[tasks.test]
command = "cargo"
args = ["nextest", "run"]
dependencies = ["clean"]

[tasks.build-flow]
dependencies = [
    "format",
    "build",
    "test"
]

它包括几个任务:格式化代码,清理代码,构建代码,测试代码。最后定义一个构建流程,按流程给定顺序执行任务。

在命令行执行如下命令执行cargo make:

cargo make --makefile build.toml build-flow

结果如下:

至此,你应该知道的7个Rust Cargo插件已经介绍完了,希望对你有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8