Skip to content
clice mascot

clice.io

下一代 C++ 工具链

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

支持的编辑器VS CodeNeovimZed
运行平台WindowsLinuxmacOSx64arm64

项目

clice

clice

语言服务器 · 调度器

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

catter

catter

构建拦截器

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

kotatsu

kotatsu

C++23 工具箱

clice 赖以构建的基础设施:基于 libuv 的协程运行时、编译期反射、属性驱动的编解码、带 LSP 绑定的类型化 IPC、选项解析和 CLI。

为什么还要再写一个?

Q

clangd 不是够用了吗?

skeptical1

难的它一个都没解决。

一个文件对应多条编译命令、头文件只有在包含它的地方才有意义、Clang 一崩整个服务器跟着没,这些 clangd 从第一天起就背着。

clice 用编译上下文、worker 重启时查询照常回答的多进程架构、落盘共享 PCH / PCM 缓存的动态模块图、以及让模板内部补全依然好用的伪实例化器,把它们一个个解决掉。

Q

语言服务器里为什么要塞一个调度器?

surprised2

因为 Clang 从来没有过。

Clang 提供了编译器,却没有提供「编译一个项目」这件事本身的抽象。语言服务器只是 clice 调度器的第一个消费者。

clice lint、index、query、doc、format 跑在同一个引擎上,跨 TU 缓存让它们跳过 clang-tidy 对每个头文件重复做的工作。

Q

现在能用了吗?

smiling3

装上插件就能用。

二进制随 VS Code 插件打包,覆盖 Windows / Linux / macOS 的 x64 和 arm64。每天发 nightly,Neovim 和 Zed 也有官方客户端。