面向现代 C++ 的下一代 C++ 语言服务器,重点关注高性能和深度代码智能
这是一个从头开始在 LLVM/Clang 上编写的 C++ 语言服务器,其中选择的组件来自 clangd。 clice 重新设计了关键的架构决策,以解决 C++ 工具中长期存在的问题。
C++ 工具中的一些问题需要进行架构变更,而这些变更无法轻易地添加到现有的语言服务器中。 clice 从头开始解决了这些问题:
模板智能 — 在模板体内输入 vec2[0]. 即可获得完整的补全。clice 使用伪实例化来通过嵌套的 typedef 和模板特化解析依赖类型,而无需具体类型参数。像 std::vector>::reference 这样的类型会解析为 std::vector&,从而支持在通用代码中进行补全、悬停和定义跳转。
编译上下文 — clice 中的一个一级概念。对于源文件,可以切换不同的编译命令(例如不同的构建配置)。对于头文件,可以切换提供包含上下文的源文件(预处理器状态,前面的声明)。这能够自然地处理非自包含的头文件和上下文依赖的宏,在导航时自动切换上下文。
C++20命名模块 — 由依赖感知的编译图驱动的并行模块编译,具有利用计数取消功能。预编译模块接口(BMI)在编辑器会话中被缓存,因此重新打开项目可以跳过重复的构建。LSP 层提供了对 import 语句的模块名称补全以及对模块的语义高亮显示。
| 渠道 | 版本 | 从何处获取 |
暂无开放 Issues,或尚未同步最近议题。