我的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

posted @ 2025-08-30 13:59  T0fV404  阅读(32)  评论(0)    收藏  举报