mcppls
统一多编译器 C++20/23 Modules 的语言服务器
项目简介
mcpp-language-server(项目名 mcppls)是一个专注于 C++20/23 标准命名模块(Named Modules)的语言服务器,旨在解决主流编译器对模块实现不一致的问题,让开发者在任何编译器(GCC、Clang、MSVC、MinGW、clang-cl)下都能获得一致的模块语义支持,并支持通过 MCP 协议与 AI Coding Agent 直接交互。
核心功能
- 跨编译器模块语义统一:将 GCC、Clang、MinGW、MSVC、clang-cl 等各编译器的模块实现(BMI 格式、依赖扫描、import std 来源)统一为一份标准描述,确保换一个编译器不会导致编辑器的代码理解断裂
- 零配置自动检测:支持从 mcpp、CMake、compile_commands.json 或无构建文件四种方式自动识别项目结构并生成模块描述,无需手动编写配置
- MCP 协议支持:内置 MCP 协议端点,AI Agent 可通过 MCP 直接查询模块信息,CI 也可以通过命令行获得一致的模块数据
- 驱动 pinned clangd:内部驱动一个固定版本的 clangd,基于标准化后的模块描述回答编辑器发起的模块级语言查询
- 多编辑器支持:官方提供或兼容 VS Code、Zed、Neovim、CLion 的 LSP 插件,覆盖主流 C++ 开发者工作流
- For agents 文档:提供专门的 AI Agent 使用文档,说明如何通过 MCP 或命令行查询模块信息
技术实现
mcppls 的核心思路是将各种构建系统的差异抽象为一个统一的模块描述层。当接收到来自编辑器的模块级请求时,它首先分析项目的构建配置(支持 mcpp、CMake、compile_commands.json 或无构建四种模式),将结果转换为 clangd 可以理解的标准化模块视图,然后由内部的 pinned clangd 处理实际的语义查询。这样做的好处是,无论底层使用哪套工具链,clangd 拿到的模块依赖图和语义信息都是一致的。
模块层面,C++20 引入了命名模块机制,但 GCC 的 BMI 格式、Clang 的模块映射方式、MSVC 的 std 模块路径各不相同,导致同一份模块代码在不同编译器下编译成功后,编辑器的语法提示、跳转、引用等功能会失效。mcppls 通过统一抽象解决了这个跨编译器兼容问题。
快速上手
- 安装:访问 GitHub Releases 页面下载对应平台的二进制文件,或阅读官方安装文档进行构建安装
- 编辑器配置:在 VS Code / Zed / Neovim / CLion 中安装对应 LSP 插件,配置语言服务器路径为 mcppls
- 打开 C++ 项目:用支持 C++20 Modules 的编译器(GCC 10+、Clang 13+、MSVC 19.29+)打开项目
- 零配置启动:mcppls 会自动检测项目根目录的构建文件(mcpp.yaml、CMakeLists.txt 或 compile_commands.json),自动生成模块描述
适用人群
- 需要在项目中使用 C++20/23 Modules 的开发者
- 多编译器团队(成员使用不同工具链但需要一致的 IDE 支持)
- 使用 AI Coding Agent(如 Claude Code、Cursor)进行 C++ 开发的程序员
- 需要在 CI 环境中进行模块级代码分析的工具链开发者
官方链接
团队信息
AI产品库
官方
由 AI 猎手自动发现
评论与建议
登录 后参与评论或提建议