rust-analyzer是唯一推荐的Rust语言服务器,必须禁用rust-lang.rust插件;否则String标红、补全跳转失效。它依赖PATH中的cargo/rustc、含Cargo.toml的根目录及rust-src组件,缺一即卡在Loading…或报No Rust project detected。

必须装 rust-analyzer,不是 rust-lang.rust;否则连 String 都标红报 unresolved,补全、跳转、宏展开全部失效。
为什么 rust-analyzer 是唯一选择
VS Code 自身不带 Rust 支持,rust-lang.rust(红黑熊图标)插件早已归档,它走的是已停更的 RLS 协议,不支持 async/await、#[derive] 展开、proc-macro 诊断等现代特性。而 rust-analyzer(蓝色原子图标)是当前 Rust 官方推荐、唯一活跃维护的语言服务器(LSP),所有智能功能都依赖它。
- 装了
rust-lang.rust后又装rust-analyzer?两者会冲突,rust-analyzer常被静默禁用 - 验证方式:打开命令面板(
Ctrl+Shift+P),执行Extensions: Show Enabled Extensions,只留rust-analyzer启用状态 - 状态栏右下角出现
rust-analyzer进度条 ≠ 就绪;需在输出面板(Ctrl+Shift+U)中看到project model loaded才算真正加载成功
rustc 和 cargo 找不到?问题几乎全出在 PATH 和启动方式
rust-analyzer 不自带编译器,它完全依赖系统 PATH 中可调用的 cargo 和 rustc。终端能跑不代表 VS Code 能用。
- 先在终端运行
cargo --version和rustc --version,两个都必须输出版本号(如rustc 1.80.1) - 再打开 VS Code 集成终端,同样执行这两条命令——若失败,说明 VS Code 没继承 shell 的 PATH
- macOS/Linux:别从桌面图标启动 VS Code,改用终端执行
code .;若必须图形启动,手动在设置中补全terminal.integrated.env.macos,例如:"PATH": "/Users/xxx/.cargo/bin:${env:PATH}" - Windows:确认
%USERPROFILE%\.cargo\bin已加入系统环境变量;若用 Scoop 安装 rustup,还要加%USERPROFILE%\scoop\shims
项目一打开就卡在 “Loading…”?检查这三个硬性条件
rust-analyzer 要正常工作,必须同时满足三项,缺一不可:
- VS Code 启动时能调用
cargo和rustc(见上一条) - 打开的是含
Cargo.toml的**项目根目录**,不是子文件夹,也不是单个.rs文件 - 项目中已安装
rust-src组件:rustup component add rust-src;否则跳转到std::vec::Vec会失败,报Failed to load stdlib - 若仍卡住,按
Ctrl+Shift+P→ 输入Rust Analyzer: Reload Workspace手动触发,并紧盯输出面板日志
配置项别乱堆,默认够用,但这几个必须设
全局设置易跨项目干扰,尤其多人协作或混合 edition 时。直接在项目根目录建 .vscode/settings.json:
{
"rust-analyzer.cargo.loadOutDirsFromCheck": true,
"rust-analyzer.procMacro.enable": true,
"rust-analyzer.checkOnSave.command": "check"
}
-
"rust-analyzer.cargo.loadOutDirsFromCheck": true:让插件通过cargo check推导target/路径,避免因权限或路径异常导致构建信息缺失 -
"rust-analyzer.procMacro.enable": true:开启宏展开(如#[derive(Serialize)]、sqlx::query!),但别开除非真用到——开了容易拖慢启动、内存暴涨 -
"rust-analyzer.checkOnSave.command": "check":保存时只做轻量检查;想用 clippy,手动运行cargo clippy或交给 CI
误删过 target/?别指望自动重建——rust-analyzer 依赖其中的 rmeta 文件生成语义索引。删了就执行 Rust Analyzer: Reload Workspace,然后耐心等它重新跑完 cargo check。


















