Add clang-format and clang-tidy to pre-commit hooks

- .pre-commit-config.yaml: Integrate clang-format (v17) and clang-tidy for C/C++ linting
  Excludes build artifacts (.pio), tests, and board configs from linting
- .clang-format: Configure LLVM-style formatting with 4-space indents, 88-char line limit
  Enforces right pointer alignment, comment reflow, consistent brace placement
- .clang-tidy: Configure strict static analysis with snake_case identifiers
  Enables all checks except Fuchsia/LLVM lib checks and abseil checks
  Treats warnings as errors
This commit is contained in:
Maze X
2026-03-27 17:41:27 +01:00
parent cb14666710
commit 2924c8e792
3 changed files with 70 additions and 0 deletions

18
.clang-format Normal file
View File

@@ -0,0 +1,18 @@
---
Language: C
Standard: C99
BasedOnStyle: LLVM
IndentWidth: 4
ColumnLimit: 88
UseTab: Never
BreakBeforeBraces: Attach
AllowShortBlocksOnASingleLine: Never
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: Never
AlwaysBreakBeforeMultilineStrings: false
BreakStringLiterals: true
PointerAlignment: Right
DerivePointerAlignment: false
SortIncludes: true
ReflowComments: true
MaxEmptyLinesToKeep: 2

24
.clang-tidy Normal file
View File

@@ -0,0 +1,24 @@
---
Checks: |
*,
-fuchsia-*,
-llvmlibc-*,
-abseil-*,
-google-readability-braces-around-statements,
-readability-braces-around-statements,
-readability-implicit-bool-conversion,
HeaderFilterRegex: 'src/.*\.h'
WarningsAsErrors: '*'
CheckOptions:
- key: readability-identifier-naming.VariableCase
value: snake_case
- key: readability-identifier-naming.FunctionCase
value: snake_case
- key: readability-identifier-naming.MacroDefinitionCase
value: UPPER_CASE
- key: readability-identifier-naming.EnumConstantCase
value: UPPER_CASE
- key: modernize-use-auto.MinTypeNameLength
value: '8'
- key: performance-inefficient-string-concatenation.WarnOnImplicitConversion
value: '1'

View File

@@ -19,3 +19,31 @@ repos:
hooks: hooks:
- id: markdownlint - id: markdownlint
args: ['--fix', '--disable', 'MD040', '--disable', 'MD013'] args: ['--fix', '--disable', 'MD040', '--disable', 'MD013']
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v17.0.6
hooks:
- id: clang-format
types: [c, c++, header]
args: ['-i'] # In-place formatting
exclude: |
(?x)^(
\.pio/|
test/|
soc/|
hardware/
)
- repo: https://github.com/pocc/pre-commit-hooks
rev: v1.3.5
hooks:
- id: clang-tidy
types: [c, c++, header]
args: ['-checks=*,-fuchsia-*,-llvmlibc-*']
exclude: |
(?x)^(
\.pio/|
test/|
soc/|
hardware/
)