# Reference: https://clangd.llvm.org/config
---
CompileFlags:
  Compiler: clang++
  CompilationDatabase: build
  Add:
    - "-DHAVE_OPENMP"
    - "-DHAVE_MPI"
    # FIXME: clangd 21 and cuda 13 do not work together
    #- "-xcu"
    - "-xc++"
  Remove:
    # remove all nvcc-specific flags that may appear in the compile_commands.json file
    - "-Xcompiler"
    - "-Xcompiler=*"
    - "-Xcudafe"
    - "-Xcudafe=*"
    - "--diag_suppress=*"
    - "--display-error-number"
    - "--extended-lambda"
    - "--expt-relaxed-constexpr"
    - "--default-stream"
    - "--generate-line-info"
    - "-arch=*"
    - "--generate-code=*"
    - "-rdc=*"
    - "-forward-unknown-to-host-compiler"
    - "-fdiagnostics-color"  # passed to gcc, different from clangs -fcolor-diagnostics

Diagnostics:
  ClangTidy:
    Add:
      - bugprone-suspicious-semicolon
      - clang-analyzer-*
      - modernize-*
      - mpi-*
      - openmp-*
      - performance-*
      - readability-*
    Remove:
      - readability-braces-around-statements
      - readability-else-after-return
      - readability-named-parameter
      - readability-magic-numbers
      - readability-math-missing-parentheses
      - readability-function-cognitive-complexity
      - readability-function-size
      - readability-identifier-length
      - readability-use-concise-preprocessor-directives
      - modernize-avoid-c-arrays
      - modernize-use-trailing-return-type
      - modernize-raw-string-literal
    CheckOptions:
      readability-function-size.LineThreshold: 64
      readability-function-size.ParameterThreshold: 15
      readability-magic-numbers.IgnoreAllFloatingPointValues: true
      readability-magic-numbers.IgnorePowersOf2IntegerValues: true
      modernize-use-default-member-init.UseAssignment: true
      modernize-use-auto.MinTypeNameLength: 10
      performance-unnecessary-value-param.AllowedTypes: "std::shared_ptr;std::unique_ptr"
      cppcoreguidelines-pro-type-member-init.UseAssignment: true

  UnusedIncludes: Strict
  MissingIncludes: None  # TODO: switch to Strict?

Completion:
  HeaderInsertion: IWYU

Style:
  AngledHeaders:
    - "TNL/.*"

...
# vim: ft=yaml
