诊断
核心
Clang 诊断(错误、警告、备注)
严重程度映射(错误、警告)
带源位置的诊断范围
相关信息(附加到诊断的备注)
被包含头文件中的错误定位到引入该头文件的
#include处,模板实例化中的错误定位到请求该实例化的代码处Preamble 中的预处理指令所产生的警告(
#warning、#pragma message、宏重定义)跨文件诊断的文件 URI 转换
拉取式诊断模型(
textDocument/diagnostic),用于声明支持它的客户端;其他客户端的诊断仍由服务端推送报告所有因缺少
#include而产生的错误,而不只是第一个——解析器遇到首个致命错误后便会停止cpp#include "missing_a.h" // error reported #include "missing_b.h" // error NOT reported (parser already stopped) #include "missing_c.h" // error NOT reported显示源自头文件的诊断的完整包含链(clangd#1392)
// current: "In included file: expected ';'" // expected: "In main.cpp → utils.h → detail/impl.h: expected ';'"在诊断中反映头文件的未保存更改(clangd#488)
// header.h (unsaved buffer): added new_func() // main.cpp: calls new_func() → should NOT show "undeclared identifier"Preamble 头文件中的模板实例化错误诊断(clangd#137)
标签
-
-Wdeprecated诊断的Deprecated标签 - 未使用变量/参数警告的
Unnecessary标签
发布
- 编译完成时推送诊断
- 文件关闭时清除诊断
- 按文件对诊断分组(主文件和头文件)
- 诊断
code字段包含 Clang 错误代码 -
codeDescription中提供指向 Clang 文档的链接 - 诊断
source字段区分 clang 与 clang-tidy - 可配置计算诊断前的防抖延迟(clangd#1471)
- 后台索引完成后重新计算已打开文件的诊断(clangd#2604)
诊断抑制
- 使用
// NOLINT注释抑制clice lint中的诊断 - 使用
// NOLINTNEXTLINE注释抑制clice lint中的诊断 -
clice lint中的// NOLINTBEGIN/// NOLINTEND块级抑制 - include-cleaner 诊断支持
NOLINT(clangd#1982) - 配置文件中可按诊断类别配置严重程度(clangd#1937)
- 根据版本控制 diff 过滤诊断——仅显示变更行附近的警告(clangd#822)
诊断操作
- 将自动修复建议作为代码操作附加到诊断
头文件诊断
针对未使用或缺少的
#include指令提供 include-cleaner 诊断抑制头文件中的 static inline 函数所触发的
-Wunused-function误报(clangd#1211)cpp// utils.h static inline int helper() { return 42; } // should NOT warn "unused function" when checking header standalone传递来自头文件的
-Wpadded等布局警告(clangd#1429)抑制 Preamble 优化导致的
-Wempty-translation-unit误报(clangd#2358)跨头文件边界的线程安全分析(clangd#2386)
clang-tidy 集成
- clang-tidy 诊断(由配置控制)
- 在
clice lint中抑制源自系统头文件中宏的 clang-tidy 警告(clangd#1587、clangd#2000) - Clang 静态分析器支持(clangd#905)
- 特定版本的 clang-tidy 文档链接(clangd#2136)
- 对位于代码之前的预处理指令进行诊断(clangd#2501)
诊断显示
限定类型名的正确诊断范围——为完整名称标注下划线,而不只是基名(clangd#1035)
cppns::Inner obj(42); // ^^^^^ only base name underlined // should underline "ns::Inner"将优化备注(
-Rpass)显示为诊断(clangd#2519)列出整个项目的警告(clangd#1973)
配置文件诊断
- 为格式错误的
.clang-tidy和.clang-format文件报告诊断(clangd#2313、clangd#2591)
诊断正确性
应正确处理的已知问题:
- 宏重定义警告指向同一位置(clangd#2479)
- 针对嵌套数组初始化给出错误的
-Wmissing-braces修复建议(clangd#2434) - Preamble 失效导致诊断消息混杂时出现无效的严重级别 0(clangd#2124)
- 未声明标识符诊断被与更正相关的诊断隐藏(clangd#547)
-
--include文件缺失时产生误导性的后续诊断(clangd#2229)
