如何在 VSCode 中保存时自动运行“cargo fix”?

问题描述 投票:0回答:1
  • 目前,我在编写 Rust 时使用 VSCode 作为 IDE。
  • 我使用
    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 保存文件时自动运行,因为这样做会自动清理未使用的导入。

我怎样才能做到这一点?

(我希望自动清理未使用的导入,就像我想要自动格式化程序一样。手动删除未使用的导入非常乏味,完全浪费我的时间,就像手动添加适当数量的制表符或空格一样.)

rust rust-cargo
1个回答
8
投票

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
    - 即使工作区发生变化也能修复。
© www.soinside.com 2019 - 2024. All rights reserved.