语言服务器
rust-analyzer 负责.rs 文件。工作区从最近的 Cargo.toml 或 rust-project.json 开始。
rust-analyzer 加载项目期间暂时无法回答跳转请求。OpenIDEA 会等它加载完,而不是直接报“未找到”:刚打开项目就执行 声明或用法(⌘B / Ctrl+B),会在服务器就绪后跳转,最多等待 30 秒。
诊断来自 rust-analyzer 自身的分析,以及每次保存后运行的 cargo check(或 Clippy)。
安装 rust-analyzer
缺少 rust-analyzer 时,OpenIDEA 会弹出 rust-analyzer 未安装 通知,点 安装 即可。也可以在 设置 › 语言和框架 › 语言服务器 中安装,或指定你自己的可执行文件。PATH上有 rustup 时,IDE 执行rustup component add rust-analyzer。- 没有 rustup 时,IDE 从 Open VSX 下载 rust-analyzer 到自己的工具文件夹。
~/.cargo/bin/rust-analyzer 是 rustup 的代理程序,当前工具链没有该组件时会启动失败。这种情况下 IDE 会改用已安装工具链中最新的、带有 rust-analyzer 的那个;如果都没有,就视为未安装并提示安装。
环境配置
设置 › 语言和框架 › Rust 提供以下选项:
重新格式化代码(
⌘⌥L / Ctrl+Alt+L)通过 rust-analyzer 调用 rustfmt。
依赖的 crate 和 Rust 标准库会出现在项目视图的 外部库 下。
运行与测试
OpenIDEA 读取Cargo.toml(以及 [workspace] 的成员),自动识别以下配置:
编辑器左侧栏的图标可以运行或调试:
src/main.rs、src/bin/*.rs和examples/*.rs中的fn main;- 标注了
#[test]、#[tokio::test]、#[async_std::test]、#[actix_rt::test]、#[rstest]或#[test_case]的函数; mod tests以及标注了#[cfg(test)]的模块,会运行其中所有测试。
cargo test -- <path> --exact 运行。结果显示在测试树中,重新运行失败的测试 只重跑失败的用例。详见运行配置和测试。
构建项目 执行
cargo build --all-targets,重新构建项目 会先执行 cargo clean,构建工件 执行 cargo build --release。编译信息显示在构建工具窗口和编辑器中。
使用覆盖率运行 对 cargo test、cargo run 和 cargo nextest 配置使用 cargo llvm-cov。缺少时 IDE 会给出 cargo install cargo-llvm-cov 命令(还需要 rustup 组件 llvm-tools-preview)。见覆盖率。
调试
Rust 调试使用 CodeLLDB。开始调试时如果缺少 CodeLLDB,OpenIDEA 会提示安装,从 GitHub 下载 CodeLLDB 发行版到工具文件夹。cargo 运行 / 测试配置和左侧栏图标都可以调试:CodeLLDB 先用 cargo 构建目标,再启动生成的二进制文件。 附加到进程…(⌥⇧F5 / Ctrl+Alt+F5)会在 Native (LLDB) 分组下列出本机原生进程。详见调试。
限制
- CodeLLDB 没有发布 Windows ARM64 版本,IDE 无法在该平台上安装它。
- rust-analyzer 自己的扩展命令(如 Expand Macro、View Syntax Tree)没有作为 IDE 操作提供。
- 性能分析器只在 Linux 上(借助
perf)支持cargo run。见性能分析。