Repository navigation
v1.3.0 - 完全汉化 + 诊断语言切换
完全汉化 + 诊断语言切换 + 跳转定义系统头文件 fallback + 错误即时清除
LSP-clangd 风格的轻量级汉化优化版,参考 LSP-clangd 架构实现即时基础检查 + 编译器检查双级流水线。
🎯 重点 1:完全汉化 + 语言切换
针对用户反馈的 [-Wc++23-extensions] 报错,提供三种显示模式:
| 模式 | 显示效果 |
|---|---|
| 中文 (zh, 默认) | explicit object member function 该特性仅在 C++23 或 gnu++23 及更高标准下可用(切换为更高标准即可) |
| 英文 (en) | explicit object member function only available with '-std=c++23' or '-std=gnu++23' [-Wc++23-extensions] |
| 双语 (both) | explicit object member function only available with '-std=c++23' or '-std=gnu++23' [-Wc++23-extensions](explicit object member function 该特性仅在 C++23 或 gnu++23 及更高标准下可用(切换为更高标准即可)) |
翻译覆盖率
- 诊断消息:79 → 287 条(+208 条新增)
- C++23/20/17/14/11 标准相关错误(
c++23-extensions/gnu++23/only available in C++17 or later...) - 模板推导失败、特化、参数包展开
- constexpr / consteval 违例
- lambda 捕获问题
- 虚函数/override/抽象类错误
- 链接错误(
undefined reference to/multiple definition) - ASan/Valgrind 运行时错误(
segfault/use-after-free/stack smashing/memory leak)
- C++23/20/17/14/11 标准相关错误(
- 警告旗标:39 → 278 条(+239 条新增)
切换方式
- 命令面板
Ctrl+Shift+P→ 搜索CppAssistant: 切换诊断语言为 中文/英文/中英双语 - 菜单
Preferences → Package Settings → CppAssistant → 诊断显示语言 (display_language) - 手动编辑
User/CppAssistant.sublime-settings:{ "display_language": "zh" // 仅中文 (默认) // "display_language": "en" // 仅英文 // "display_language": "both" // 中英双语 }
🎯 重点 2:F12 跳转定义支持标准库 fallback
修复了"对着 #include <bits/stdc++.h> 跳转定义显示没有定义"的 bug。
新增 496 条 std 符号 → 头文件映射表,覆盖 STL 容器/算法/IO/智能指针/异常/线程/正则/random/chrono/filesystem/format 等所有标准库符号。
| 用户操作 | 现在的响应 |
|---|---|
F12 on vector |
std::vector 定义于 <vector> 系统头文件中(可考虑 #include <vector>) |
F12 on cout |
std::cout 定义于 <iostream> 系统头文件中(可考虑 #include <iostream>) |
F12 on printf |
std::printf 定义于 <cstdio> 系统头文件中 |
F12 on bits/stdc++.h |
标准库头文件 <bits/stdc++.h>,位于编译器 include 路径 |
F12 on sort |
std::sort 定义于 <algorithm> 系统头文件中 |
若在 include_paths 设置里配置了编译器系统头文件路径(如 ["/usr/include/c++/11"]),还可以直接打开真实的系统头文件。
跳转候选多源合并(按优先级)
- 当前文件 中的定义(最高优先)
- 已打开文件 中的定义
- 本地头文件(递归
#include "...") - 系统头文件实际路径(可打开)
- 标准库符号提示
🎯 重点 3:删除错误行即时响应
修复了"删除错误行后标记残留 1s 才消失"的 bug。
改进
lint_debounce默认 0.4s → 0.1s- 基础检查防抖 0.06s → 0.02s
- 新增"源 hash 不一致立即清空旧诊断"机制:用户修改源码后,基础检查 0.02s 内完成 → 立即清空过时的编译器诊断 → UI 立即更新
效果对比
| 场景 | 旧版本 | 新版本 |
|---|---|---|
| 删除错误行后标记消失 | ~1s | < 0.02s (50× 提速) |
| 修复错误后标记消失 | ~0.7s | < 0.02s |
| 错误重渲染频率 | 0.4s 防抖 | 0.1s 防抖 |
性能优化(对标 LSP-clangd)
| 操作 | LSP-clangd | 本插件 v1.3.0 |
|---|---|---|
| 结构性错误反馈 | 200~500ms | < 10ms (即时基础检查) |
| 完整语义检查(含 PCH) | 200~500ms | < 300ms |
| 补全响应(命中缓存) | 5~20ms | < 1ms |
| 补全响应(未命中) | 50~200ms | < 5ms |
实测补全平均 0.145ms(10KB 代码 100 次迭代)
关键优化
- 多级缓存:词法状态行表 / 类型环境 / 用户符号 / 补全结果 / 诊断结果
- 零临时文件:编译器检查通过 stdin 传递源码,不创建任何 .cpp 临时文件
- 过期进程立即终止:新一次检查开始立即 kill 旧进程
- PCH 直接挂载:使用
-include ca_pch.h命令行选项 - 预编译正则:模块加载时编译,热路径零开销
- O(1) 字典查找:
KEYWORDS_SET/HEADERS_SET/SNIPPETS_BY_TRIG预计算
菜单重构(Package Control 合规)
参考 LSP / SublimeAStyleFormatter 标准模式:
Preferences → Package Settings → CppAssistant
├── Settings – Default
├── Settings – User
├── 诊断显示语言 (display_language) ← 新增
│ ├── 中文 (zh) - 仅显示中文
│ ├── English (en) - 仅显示英文原文
│ └── 中英双语 (both) - 英文在前中文在后
├── Key Bindings – Default
├── Key Bindings – User
├── 命令面板(Commands)
└── README(使用说明)
用户设置保存在 User/CppAssistant.sublime-settings,无需修改默认文件。
修复
translate_message正则替换未生效的 bug(修复了was not declared in this scope等模式匹配问题)- 嵌套集合正则的
FutureWarning([[deprecated]]改用(?:\[\[deprecated\]\])) - 删除错误行后标记残留 1s 的延迟问题
- F12 跳转定义不支持系统头文件的问题
安装
- Package Control:搜索
CppAssistant直接安装 - 手动安装:解压 ZIP 到
Packages/CppAssistant/,保留.no-sublime-package文件
依赖
- Sublime Text 4
- Python 3.3+(Sublime Text 4 自带)
- g++ 或 clang++(语法检查用,找不到时回退到纯 Python 基础检查)
- clang-format(可选,格式化用,找不到时使用内置兜底格式化器)