# .clang-tidy — C11 static analysis configuration (BLOCKING).
#
# ALL checks enabled. WarningsAsErrors: '*'.
# Check thresholds configured for idiomatic C11 (not C++).

Checks: >
  -*,
  bugprone-*,
  cert-*,
  concurrency-*,
  darwin-*,
  linuxkernel-*,
  misc-*,
  performance-*,
  portability-*,
  readability-*,
  clang-analyzer-*,
  -misc-no-recursion,
  -bugprone-multi-level-implicit-pointer-conversion,
  -bugprone-branch-clone,
  -bugprone-command-processor,
  -readability-avoid-nested-conditional-operator,
  -readability-redundant-casting,
  -bugprone-implicit-widening-of-multiplication-result,
  -bugprone-unchecked-string-to-number-conversion,
  -bugprone-easily-swappable-parameters,
  -clang-analyzer-core.CallAndMessage,
  -clang-analyzer-security.ArrayBound,
  -clang-analyzer-unix.Malloc,
  -clang-analyzer-optin.portability.UnixAPI,
  -clang-analyzer-core.NullPointerArithm,
  -performance-no-int-to-ptr,
  -concurrency-mt-unsafe,
  -cert-err33-c,
  -clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,
  -clang-analyzer-security.insecureAPI.strcpy,
  -misc-include-cleaner,

WarningsAsErrors: '*'

CheckOptions:
  bugprone-implicit-widening-of-multiplication-result.UseCXXStaticCastsInCppSources: false
  # C idiom: i, j, k, n, p, s are standard variable names
  readability-identifier-length.MinimumVariableNameLength: 1
  readability-identifier-length.MinimumParameterNameLength: 1
  readability-identifier-length.MinimumLoopCounterNameLength: 1
  # C idiom: if (!ptr), if (count) are standard
  readability-implicit-bool-conversion.AllowIntegerConditions: true
  readability-implicit-bool-conversion.AllowPointerConditions: true
  # Systems C uses bit shifts, buffer sizes, hash constants, protocol sizes
  readability-magic-numbers.IgnoredIntegerValues: "1;2;3;4;5;6;7;8;9;10;11;12;14;15;16;20;24;32;48;64;100;128;200;256;493;512;755;1000;1024;1040;2048;4096;8192;16384;32768;65536;500000;1000000;1000000000"
  readability-magic-numbers.IgnoredFloatingPointValues: "0.0;0.25;0.5;0.7;0.75;0.8;0.85;0.9;0.95;1.0;2.0;100.0;1e308"
  # Cypher parser + tree-sitter resolver have deeply nested execution logic
  readability-function-cognitive-complexity.Threshold: 250
  readability-function-size.StatementThreshold: 400
  readability-function-size.LineThreshold: 800

HeaderFilterRegex: '^(src|tests)/.*\.h$'

ExtraArgs:
  - '-std=c11'
  - '-Isrc'
  - '-Ivendored'
  - '-Ivendored/sqlite3'
  - '-Iinternal/cbm'
  - '-Iinternal/cbm/vendored/ts_runtime/include'
