Automatically check c/c++ with clang-format and clang-tidy
Project description
cpp-linter-hooks
Using clang-format
and clang-tidy
hooks with pre-commit to lint your C/C++ code.
[!NOTE] Automatically downloads a specific version of
clang-format
orclang-tidy
binaries and installs it on the system.
Usage
Add this to your .pre-commit-config.yaml
repos:
- repo: https://github.com/cpp-linter/cpp-linter-hooks
rev: v0.3.0 # Use the ref you want to point at
hooks:
- id: clang-format
args: [--style=Google] # Other coding style: LLVM, GNU, Chromium, Microsoft, Mozilla, WebKit.
- id: clang-tidy
args: [--checks='boost-*,bugprone-*,performance-*,readability-*,portability-*,modernize-*,clang-analyzer-*,cppcoreguidelines-*']
The example of using custom config: .clang-format
and .clang-tidy
repos:
- repo: https://github.com/cpp-linter/cpp-linter-hooks
rev: v0.3.0
hooks:
- id: clang-format
args: [--style=file] # to load .clang-format
- id: clang-tidy
args: [--checks=.clang-tidy] # path/to/.clang-tidy
The example of using any version of clang-tools.
repos:
- repo: https://github.com/cpp-linter/cpp-linter-hooks
rev: v0.3.0
hooks:
- id: clang-format
args: [--style=file, --version=16]
- id: clang-tidy
args: [--checks=.clang-tidy, --version=16]
Output
clang-format output
clang-format.............................................................Failed
- hook id: clang-format
- files were modified by this hook
Here is the diff between the modified file.
--- a/testing/main.c
+++ b/testing/main.c
@@ -1,3 +1,6 @@
#include <stdio.h>
-int main() {for (;;) break; printf("Hello world!\n");return 0;}
-
+int main() {
+ for (;;) break;
+ printf("Hello world!\n");
+ return 0;
+}
Pass --dry-run
to the args
of clang-format
(can also pass other arg which clang-format supports)
Then it will just print instead of changing the format. E.g:
clang-format.............................................................Failed
- hook id: clang-format
- exit code: 255
main.c:2:11: warning: code should be clang-formatted [-Wclang-format-violations]
int main() {for (;;) break; printf("Hello world!\n");return 0;}
^
main.c:2:13: warning: code should be clang-formatted [-Wclang-format-violations]
int main() {for (;;) break; printf("Hello world!\n");return 0;}
^
main.c:2:21: warning: code should be clang-formatted [-Wclang-format-violations]
int main() {for (;;) break; printf("Hello world!\n");return 0;}
^
main.c:2:28: warning: code should be clang-formatted [-Wclang-format-violations]
int main() {for (;;) break; printf("Hello world!\n");return 0;}
^
main.c:2:54: warning: code should be clang-formatted [-Wclang-format-violations]
int main() {for (;;) break; printf("Hello world!\n");return 0;}
^
main.c:2:63: warning: code should be clang-formatted [-Wclang-format-violations]
int main() {for (;;) break; printf("Hello world!\n");return 0;}
^
clang-tidy output
clang-tidy...............................................................Failed
- hook id: clang-tidy
- exit code: 1
522 warnings generated.
Suppressed 521 warnings (521 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
/home/runner/work/cpp-linter-hooks/cpp-linter-hooks/testing/main.c:4:13: warning: statement should be inside braces [readability-braces-around-statements]
for (;;)
^
{
Contributing
Any contribution is very welcome, including submitting issues, PRs, etc.
License
This project is licensed under the terms of the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for cpp_linter_hooks-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 18b70cd26af92864870321a0199564425820ebffac8a1494b0c412bc5a4ffc9f |
|
MD5 | 78f0583c0b8641e52da32c3fdebe9d10 |
|
BLAKE2b-256 | 6ab2aa0bcc58cc000a9d5a8e9e9102ea2c22f031187c30773089dfb87376a050 |