ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

在 Chromium 中使用 VSCode + rust-analyzer:gn 导出 Rust 项目与 IDE 开发指南

2026/9/10 13:06:01 拓冰建站 浏览量
在 Chromium 中使用 VSCode + rust-analyzer:gn 导出 Rust 项目与 IDE 开发指南 在 Chromium 中使用 VSCode rust-analyzergn 导出 Rust 项目与 IDE 开发指南【免费下载链接】comprehensive-rustThis is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust.项目地址: https://gitcode.com/GitHub_Trending/co/comprehensive-rustRust 代码中大量类型信息会被编译器推导省略type elision这使得一个强大的 IDE 比在 C 中更能发挥价值。本篇指南基于 Google 的《Comprehensive Rust》课程中“Chromium 构建规则”一章讲解如何在 Chromium 代码库中通过gn gen --export-rust-project导出 Rust 项目并配合 VSCode 的rust-analyzer扩展实现跳转定义、查看文档、类型标注与代码大纲等核心 IDE 功能读完即可在自己的 Chromium 开发环境中完成全套配置并动手验证。背景为什么 Chromium 里的 Rust 需要特殊 IDE 配置Chromium 并不使用cargo构建 Rust 代码而是使用gn与ninja以保证静态规则下的最大并行构建效率参见 src/chromium/build-rules.md。rust-analyzer这类语言服务器默认按cargo项目Cargo.toml工作它不知道 Chromium 里 Rust 目标的位置、依赖关系与编译选项。解决办法是让gn导出一份rust-project.json文件——它描述了当前构建图中所有 Rust 目标的元数据源文件、crate 根、依赖、feature 等rust-analyzer读取这份文件后即可对 Chromium 中的 Rust 代码提供完整的语言服务。这正是本页文档src/chromium/build-rules/vscode.md给出的核心方案。前置条件在开始前确保满足以下条件已能构建并运行 Chromium。任何平台与构建参数组合都可以但代码库需要相对较新commit position 1223636 之后对应 2023 年 11 月。课程推荐使用 component debug 构建以加快迭代速度这也是默认配置参见 src/chromium/setup.mdgn gen out/Debug autoninja -C out/Debug chrome out/Debug/chrome # Mac 上为 out/Debug/Chromium.app/Contents/MacOS/Chromium安装了 Visual Studio Codesrc/chromium/setup.md 明确推荐。三步配置让 rust-analyzer 理解 Chromium 构建1. 安装 rust-analyzer 扩展确保 VSCode 安装的是rust-analyzer扩展而不是早期形式的 Rust 支持如旧的rust或rls扩展。rust-analyzer是 Rust 官方语言服务器负责提供补全、跳转、文档、类型标注等能力。2. 使用 gn 导出 Rust 项目在你的输出目录中执行gn gen out/Debug --export-rust-project如果你的输出目录不是out/Debug请使用对应的目录名。该参数会让gn生成一份rust-project.json其中包含当前构建配置下所有 Rust 目标的编译信息。注意在编辑BUILD.gn文件之后本课程的练习会多次修改BUILD.gn必须重新运行gn gen ... --export-rust-project否则rust-project.json会与当前构建图不一致rust-analyzer的跳转与类型信息可能失真或失效。3. 创建符号链接在 Chromium 源码根目录执行ln -s out/Debug/rust-project.json rust-project.jsonrust-analyzer默认会在工作区根目录查找rust-project.json。通过符号链接把它放到源码根目录即可让语言服务器加载 Chromium 的 Rust 项目元数据。配置验证在真实 Chromium 代码上体验 IDE 功能本课程建议使用components/qr_code_generator/qr_code_generator_ffi_glue.rs作为演示样例若你对其他 Chromium 相关 Rust 代码更熟悉也可以自由替换。该文件是 Chromium 中 Rust QR 码生成器qr_code_generator的 C/Rust FFI 胶水代码。完成配置后可以按以下步骤验证功能快捷键为典型绑定可依个人配置调整演示功能典型快捷键VSCode典型快捷键vim/CoC操作说明查看文档show documentationCtrlK IK光标置于QrCode::new调用处约第 26 行跳转定义go to definitionF12g d会跳到//third_party/rust/.../qr_code-.../src/lib.rs查看大纲outline文件资源管理器中的大纲面板Space o导航到QrCode::with_bits方法约第 164 行类型标注type annotations悬停或内联显示—QrCode::with_bits方法内有大量示例其中查看文档将光标悬停在QrCode::new上并触发文档查看可以看到该构造函数的 doc comment跳转定义从qr_code_generator_ffi_glue.rs中的调用处跳转最终抵达//third_party/rust/.../qr_code-.../src/lib.rs中的真实实现验证rust-analyzer已能正确解析//third_party/rust下 vendor 的第三方 crate 源码大纲导航在 VSCode 文件资源管理器面板中的 outline 视图可直接定位到QrCode::with_bits方法约第 164 行便于在较长的实现中快速移动类型标注QrCode::with_bits方法内存在多个类型推导示例是演示 rust-analyzer 类型推断能力的好地方——这正呼应了“Rust 中类型被省略IDE 比 C 更有价值”的开篇论断。与课程练习的衔接在 VSCode 中验证 Hello from Rust本页配置在课程中的实际用途是服务于 src/exercises/chromium/build-rules.md 的构建规则练习。该练习要求你在//ui/base/BUILD.gn中新增一个 Rust 目标注意#[unsafe(no_mangle)]属于 unsafe 代码需要在 gn 目标中设置allow_unsafe true参见 src/chromium/build-rules/unsafe.md// SAFETY: There is no other global function of this name. #[unsafe(no_mangle)] pub extern C fn hello_from_rust() { println!(Hello from Rust!) }将该 Rust 目标加入//ui/base:base的deps参见 src/chromium/build-rules/depending.md在 C 侧声明extern C void hello_from_rust();并从ResourceBundle::MaybeMangleLocalizedString等位置调用构建并运行 Chromium确认大量打印 Hello from Rust!。练习明确指出“如果你使用 VSCode现在就让 Rust 在 VSCode 中良好工作这对后续练习很有用。配置成功后你将能在println!上使用右键Go to definition。”——这正是本页三步骤配置的验收标准也说明rust-project.json方案贯穿了 Chromium 模块的整个练习序列。为什么必须用 gn 模板而非 cargo对 IDE 的隐含影响src/chromium/build-rules.md 的演讲备注还揭示了一个与 IDE 相关的背景Chromium 之所以用rust_static_librarygn 模板而不是 gn 内置的 Rust static library 支持是因为模板额外提供了 CXX interop、Rust feature 与单元测试等能力。这些额外的编译属性feature、interop 配置都会被反映到--export-rust-project导出的rust-project.json中从而让rust-analyzer的分析结果与ninja的真实编译单元保持一致。这也解释了为何修改BUILD.gn例如增删 sources、切换 features后必须重新导出项目文件。常见问题与注意事项找不到rust-project.json确认gn gen使用了--export-rust-project且符号链接创建在源码根目录rust-analyzer默认查找位置。修改BUILD.gn后 IDE 信息过时重新运行gn gen out/Debug --export-rust-project本课程练习会多次编辑BUILD.gn记得每次都重新导出。使用了旧版 Rust 扩展务必安装rust-analyzer扩展而非早期形式的 Rust 支持旧扩展无法读取rust-project.json。快捷键随编辑器而异本文给出 VSCode 与 vim/CoC 两套典型绑定具体以你的编辑器配置为准。小结在 Chromium 中使用 Rust 进行开发时gn gen --export-rust-projectrust-project.json符号链接是打通「gn/ninja 构建系统」与「rust-analyzer 语言服务器」的关键桥梁。通过 src/chromium/build-rules/vscode.md 所述的三步配置你可以在 VSCode 中获得对 Chromium Rust 代码的完整语言服务——包括查看文档、跳转定义、大纲导航与类型标注并能以println!上的“Go to definition”作为配置成功的直观验收标准。该配置与 src/chromium/setup.md 的构建环境、src/chromium/build-rules.md 的 gn 构建规则以及 src/exercises/chromium/build-rules.md 的练习共同构成了课程中 Chromium Rust 开发的完整工作流。【免费下载链接】comprehensive-rustThis is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust.项目地址: https://gitcode.com/GitHub_Trending/co/comprehensive-rust创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考