
clice.io
表面上是一个语言服务器,内核是一个实时的编译调度器。它在整个项目上驱动 Clang,用同一个引擎服务编辑器、静态检查、索引和 Agent。

用一个多进程调度器编译、索引整个项目并回答查询。LSP 是它的第一个消费者,lint、index、query 和 doc 紧随其后。

拦截构建过程中派生的每一个进程,捕获命令、从任意构建系统生成 compile_commands.json、分析构建耗时并改写调用。

clice 赖以构建的基础设施:基于 libuv 的协程运行时、编译期反射、属性驱动的编解码、带 LSP 绑定的类型化 IPC、选项解析和 CLI。
clangd 不是够用了吗?
1一个文件对应多条编译命令、头文件只有在包含它的地方才有意义、Clang 一崩整个服务器跟着没,这些 clangd 从第一天起就背着。
clice 用编译上下文、worker 重启时查询照常回答的多进程架构、落盘共享 PCH / PCM 缓存的动态模块图、以及让模板内部补全依然好用的伪实例化器,把它们一个个解决掉。
语言服务器里为什么要塞一个调度器?
2Clang 提供了编译器,却没有提供「编译一个项目」这件事本身的抽象。语言服务器只是 clice 调度器的第一个消费者。
clice lint、index、query、doc、format 跑在同一个引擎上,跨 TU 缓存让它们跳过 clang-tidy 对每个头文件重复做的工作。
现在能用了吗?
3二进制随 VS Code 插件打包,覆盖 Windows / Linux / macOS 的 x64 和 arm64。每天发 nightly,Neovim 和 Zed 也有官方客户端。