Visual Studio Code 内置 Rust CLI(cli)工程环境搭建:从 vcpkg/OpenSSL 到 Clippy 与调试
发布时间:2026/9/4 11:50:57 作者:尧图编辑部 阅读量:1,286
工程环境搭建:从 vcpkg/OpenSSL 到 Clippy 与调试)
Visual Studio Code 内置 Rust CLIcli工程环境搭建从 vcpkg/OpenSSL 到 Clippy 与调试【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode本文基于仓库文档 cli/CONTRIBUTING.md 展开系统讲解 Visual Studio Code 代码库中 Rust 编写的命令行工具cli/目录的开发环境搭建流程包括子模块初始化、Rust 扩展配置、Windows 平台下 OpenSSL/vcpkg 的安装步骤与原理以及如何利用工作区调试任务运行 CLI。读完后你能够独立完成该 Rust 工程的本地构建、理解其对 OpenSSL 的依赖来源并知晓 CI 对该模块执行了哪些强制校验。一、cli 模块在仓库中的定位VS Code 仓库除了 TypeScript 主体src/之外还在根目录维护了一个独立的 Rust 工程 cli它负责提供code命令行入口。从 cli/Cargo.toml 可以看到该工程的结构包名为code-cli默认运行的二进制为codedefault-run code同时导出一个名为cli的库[lib]指向 cli/src/lib.rs便于其他二进制复用逻辑。从源码结构看cli/src 下按职责拆分为多个模块commands/子命令实现、tunnels/Basis 隧道、auth.rs认证、rpc.rs/json_rpc.rs/msgpack_rpc.rs与 workbench 的 RPC 通信、self_update.rs与update_service.rs自更新、singleton.rs单实例管理等。文档 cli/CONTRIBUTING.md 讲的所有内容——构建、OpenSSL、调试——都围绕这个工程展开。依赖层面有几个值得注意的点均见 cli/Cargo.tomltunnels来自microsoft/dev-tunnels的 git 依赖固定到特定 rev启用connectionsfeature这是后文 Windows 需要 OpenSSL 的直接原因reqwest与tokio-tungstenite分别启用了native-tls在 Windows 上即映射到 OpenSSL/sChannel 的 TLS 实现keyring启用linux-secret-service-rt-tokio-crypto-openssl等跨平台 featureLinux 密钥环路径同样涉及 OpenSSL通过[patch.crates-io]将russh系列 crate 指向microsoft/vscode-russh分支用于 SSH 隧道的底层能力。这些依赖共同解释了该工程对系统级 TLS 库的强依赖也正是 CONTRIBUTING 文档中 Windows 一节存在的原因。二、开发环境搭建Setup 完整流程cli/CONTRIBUTING.md 的 Setup 部分给出了三步操作完整继承如下克隆仓库后执行git submodule update --init --recursive该命令用于初始化并递归拉取仓库声明的所有 Git 子模块确保构建所需的完整依赖树就位。安装两个 Rust 开发扩展按扩展 ID 安装rust-lang.rust-analyzerRust 语言服务提供补全、跳转、诊断与格式化能力vadimcn.vscode-lldbCodeLLDBLLDB 调试适配器用于后文的 Rust 断点调试。确保工作区以launcher文件夹作为根目录打开文档原文要求。补充仓库内的实际佐证根目录的 .vscode/settings.json 已经为整个团队固化了 Rust 开发体验——[rust]: { editor.defaultFormatter: rust-lang.rust-analyzer, editor.formatOnSave: true }, rust-analyzer.linkedProjects: [ cli/Cargo.toml ]即打开仓库后 rust-analyzer 会自动以cli/Cargo.toml作为关联项目Rust 文件保存时自动按 rustfmt 格式化工程内另有 cli/rustfmt.toml 提供格式规则。同时files.exclude与search.exclude均排除了cli/target/**避免 Rust 构建产物污染文件树和全文搜索——这间接也说明cargo build的产物统一落在cli/target下。三、在 Windows 上构建 CLIOpenSSL 与 vcpkg这是文档中信息密度最高的一节。Windows 默认不安装 OpenSSL而当前阶段构建 CLI 必需它。文档给出的安装步骤为按微软官方文档中“Set up vcpkg”的第 1、2 步获取vcpkg可执行文件将vcpkg目录位置加入系统或用户PATH重启终端使 PATH 变更生效后执行vcpkg install openssl:x64-windows-static-md此时应当能够成功执行cargo build。为什么必须 OpenSSL文档给出的解释是它用于转发 Basis 隧道时的密钥交换key exchange。团队期望在“所有相关 Basis 客户端都支持 ED25519”之后可以完全改用 libsodium但在文档撰写时 Chromium 侧该特性并无活跃开发因此暂时保留 OpenSSL。结合源码可以进一步印证这一依赖链cli/Cargo.toml 中的tunnels依赖Basis 隧道转发对应 cli/src/tunnels.rs 与 cli/src/tunnels 模块、启用native-tls的reqwest/tokio-tungstenite、以及启用linux-secret-service-rt-tokio-crypto-openssl的keyring都使 OpenSSL 成为跨平台构建的硬依赖。Windows 上通过 vcpkg 安装openssl:x64-windows-static-md静态链接、MD 运行时变体后Rust 的native-tls实现即可链接到该库完成编译。适用前提说明该流程针对文档撰写时的依赖状态Basis 客户端尚未全面支持 ED25519。若后续上游依赖切换到 libsodium/纯 ED25519 方案此节 OpenSSL 步骤可能不再必需以仓库当前 cli/Cargo.toml 的实际依赖为准。四、调试 CLIDebug文档 Debug 一节的原文建议是直接使用已配置好的 Debug 任务来运行 launcher。仓库根目录 .vscode 下维护着团队共享的调试配置.vscode/tasks.json定义了工作区可用的运行/构建任务任务面板中可直接调用.vscode/launch.json定义了各调试配置。配合第二节安装的 CodeLLDBvadimcn.vscode-lldb在 Rust 代码上设置断点后选择对应的调试配置/任务启动即可进入 LLDB 会话。由于 .vscode/settings.json 已声明rust-analyzer.linkedProjects指向cli/Cargo.toml诊断信息会正确关联到 CLI 工程因此调试入口与代码跳转都保持一致。五、CI 对该模块的强制校验补充佐证文档中的本地操作要求在 CI 侧有对应的强制检查。工作流 .github/workflows/pr-linux-cli-test.yml通过workflow_call由其他流水线复用在 Linux 自托管 runner 上执行# 安装指定工具链rustup_toolchain 由调用方输入 curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal --default-toolchain $RUSTUP_TOOLCHAIN rustup component add clippy # Lint警告即失败 cargo clippy -- -D warnings # working-directory: cli # 单元测试 cargo test # working-directory: cli两点含义本地开发时应保持cargo clippy零警告-D warnings会直接把警告升级为错误这与第二节“保存即 rust-analyzer 格式化”共同构成该模块的代码风格约束cargo test是合入门槛之一修改 cli/src 下任何模块如rpc、tunnels、commands后都应本地跑通。六、关键路径速查内容路径本文所依据的官方文档cli/CONTRIBUTING.mdRust 工程清单与依赖声明cli/Cargo.toml库入口cli/src/lib.rs命令模块cli/src/commandsBasis 隧道模块cli/src/tunnelsRust 格式规则cli/rustfmt.toml团队 Rust 编辑器配置.vscode/settings.jsonCLI 的 CI 校验流程.github/workflows/pr-linux-cli-test.yml【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考