rust-analyzer
VSCode 扩展,因为它似乎是 Rust 最好的扩展(截至 2022 年)。我的 VSCode 的“settings.json”中有以下两个条目:
{
"rust-analyzer.checkOnSave.command": "clippy",
"[rust]": {
"editor.formatOnSave": true,
},
}
clippy
(linter)在按 Ctrl + s 保存文件时自动运行。rustfmt
(格式化程序)在按 Ctrl + s 保存文件时自动运行。除了这两件事之外,我还希望
cargo fix
在按 Ctrl + s 保存文件时自动运行,因为这样做会自动清理未使用的导入。
我怎样才能做到这一点?
(我希望自动清理未使用的导入,就像我想要自动格式化程序一样。手动删除未使用的导入非常乏味,完全浪费我的时间,就像手动添加适当数量的制表符或空格一样.)
Clippy 有一个
--fix
选项,可以自动应用建议的修复。因此,您所需要做的就是更改保存时检查命令。但是,您需要两个参数 clippy
和 --fix
,为此您不能使用 rust-analyzer.check.command
并且必须覆盖完整命令:
{
"rust-analyzer.check.overrideCommand": [
"cargo",
"clippy",
"--fix",
"--workspace",
"--message-format=json",
"--all-targets",
"--allow-dirty"
],
}
但是请注意,它将应用所有自动适用的建议,而不仅仅是删除未使用的导入。
所有这些标志都是 rust-analyzer 自动添加到
rust-analyzer.check.command
的内容,但是当您使用 rust-analyzer.check.overrideCommand
时,您必须自己指定它们。这是它们的简短描述(文档有更多详细信息):
--workspace
- 将命令应用于 Cargo 工作区中的所有成员,而不仅仅是一个包。--message-format=json
- 发出 JSON 作为响应而不是人类可读的输出,以便 rust-analyzer 可以分析响应并显示错误。--all-targets
- 检查所有内容,即二进制文件、库、示例、测试和基准。--allow-dirty
- 即使工作区发生变化也能修复。