mcppls

统一多编译器 C++20/23 Modules 的语言服务器

AI编程开发 部分免费

项目简介

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 通过统一抽象解决了这个跨编译器兼容问题。

快速上手

  1. 安装:访问 GitHub Releases 页面下载对应平台的二进制文件,或阅读官方安装文档进行构建安装
  2. 编辑器配置:在 VS Code / Zed / Neovim / CLion 中安装对应 LSP 插件,配置语言服务器路径为 mcppls
  3. 打开 C++ 项目:用支持 C++20 Modules 的编译器(GCC 10+、Clang 13+、MSVC 19.29+)打开项目
  4. 零配置启动:mcppls 会自动检测项目根目录的构建文件(mcpp.yaml、CMakeLists.txt 或 compile_commands.json),自动生成模块描述

适用人群

  • 需要在项目中使用 C++20/23 Modules 的开发者
  • 多编译器团队(成员使用不同工具链但需要一致的 IDE 支持)
  • 使用 AI Coding Agent(如 Claude Code、Cursor)进行 C++ 开发的程序员
  • 需要在 CI 环境中进行模块级代码分析的工具链开发者

官方链接

https://github.com/Sunrisepeak/mcpp-language-server

团队信息

由 AI 猎手自动发现

评论与建议

0 条评论