Skip to content

v1.3.0 - 完全汉化 + 诊断语言切换

Choose a tag to compare

@chenmoulaile chenmoulaile released this 03 Sep 12:59
· 16 commits to main since this release

完全汉化 + 诊断语言切换 + 跳转定义系统头文件 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)
  • 警告旗标:39 → 278 条(+239 条新增)

切换方式

  1. 命令面板 Ctrl+Shift+P → 搜索 CppAssistant: 切换诊断语言为 中文/英文/中英双语
  2. 菜单 Preferences → Package Settings → CppAssistant → 诊断显示语言 (display_language)
  3. 手动编辑 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"]),还可以直接打开真实的系统头文件。

跳转候选多源合并(按优先级)

  1. 当前文件 中的定义(最高优先)
  2. 已打开文件 中的定义
  3. 本地头文件(递归 #include "...")
  4. 系统头文件实际路径(可打开)
  5. 标准库符号提示

🎯 重点 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(可选,格式化用,找不到时使用内置兜底格式化器)