我的Clangd配置
Clangd配置
我到现在才真正搞清楚Clangd,Clang,LLVM,GNU/g++,MSVC的区别…
主要是发现在helix默认配置中,Clangd没支持C++20的标准,感觉很奇怪,就去搜索了一下发现了新天地.
用ai生成了Clangd的配置:
# .clangd - Clangd配置文件(C/C++通用,含详细注释)
# 编译选项 - 控制代码如何被编译和分析
CompileFlags:
# C++默认选项
Add:
- -std=c++20 # 使用C++20标准
- -Wall # 启用基本所有常见警告
- -Wextra # 启用额外警告(如空指针比较)
- -Wpedantic # 严格遵循C++标准,警告非标准特性
- -Wconversion # 警告可能丢失数据的隐式类型转换
# - -Werror # 将所有警告视为错误(强制零警告)
- -Wshadow # 警告变量隐藏(如内部作用域重定义变量)
- -Wstrict-overflow=3 # 检查整数溢出(级别5最严格)
- -Wnull-dereference # 检测可能的空指针解引用
- -Wformat=2 # 严格检查printf/fscanf格式字符串
- -Wnon-virtual-dtor # 警告基类析构函数未声明为virtual
- -Woverloaded-virtual # 警告虚函数重载问题(签名不匹配)
- -Wsign-promo # 警告有符号/无符号类型提升问题
Remove:
- -Wmissing-prototypes # C++中不需要函数原型,禁用此警告
- -Wold-style-cast # C++建议用C++风格强制转换,禁用旧风格警告
# C文件的特殊设置(覆盖上面的默认选项)
Fallbacks:
- NameFilter: "\\.(c|h)$" # 匹配C源文件和头文件
CompileFlags:
Add:
- -xc # 强制将文件视为C语言
- -std=c20 # 使用C17标准
- -Wimplicit-function-declaration # 警告隐式函数声明
- -Wstrict-prototypes # 警告函数原型不严格(如参数列表为空)
Remove:
- -std=c++20 # 移除C++标准
- -Woverloaded-virtual # C语言没有虚函数,禁用此警告
- -Wnon-virtual-dtor # C语言没有虚析构函数,禁用此警告
- -Wsign-promo # C语言对符号提升更宽松,禁用此警告
# 诊断检查 - 控制静态分析规则
Diagnostics:
ClangTidy:
Check: ['*', '-cppcoreguidelines-*', '-modernize-*'] # 启用所有检查,排除C++现代化建议
Disable:
- 'google-build-using-namespace' # 不禁用using namespace可能导致的命名冲突
- 'google-readability-todo' # 不禁用TODO格式检查
# 针对C文件的特殊诊断规则
FileMatch:
- Name: "*.c"
ClangTidy:
Disable: ['*', '-bugprone-*', '-cert-*'] # 对C文件仅保留安全关键检查
# 代码格式化 - Google风格配置
Format:
Style: Google # 基于Google代码风格
BasedOnStyle: Google
ColumnLimit: 80 # 每行最大80个字符
IndentWidth: 2 # 使用2个空格缩进
TabWidth: 2 # Tab宽度为2个空格
UseTab: Never # 始终使用空格,不使用Tab
AccessModifierOffset: -2 # 访问修饰符(public/private)缩进减少2格
PointerAlignment: Left # 指针星号靠近类型 (int* ptr)
# 针对C文件的特殊格式化规则
FileMatch:
- Name: "*.c"
BreakBeforeBraces: Attach # C文件函数大括号跟随函数名
AlignConsecutiveDeclarations: true # 对齐连续声明
# 性能优化 - 控制索引和后台分析行为
Index:
Background: Build # 后台构建索引
Comments: false # 不索引注释,提高性能
然后helix是单独用clang-format,所以后续稍微搞了下format配置,google风格+K&R