Skip to content

Commit 7b02b99

Browse files
authored
Add clang-tidy (#26)
1 parent 1d50517 commit 7b02b99

File tree

17 files changed

+237
-51
lines changed

17 files changed

+237
-51
lines changed

.clang-tidy

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
---
2+
Checks: '-*,
3+
bugprone-argument-comment,
4+
bugprone-assert-side-effect,
5+
bugprone-bad-signal-to-kill-thread,
6+
bugprone-branch-clone,
7+
bugprone-copy-constructor-init,
8+
bugprone-dangling-handle,
9+
bugprone-dynamic-static-initializers,
10+
bugprone-fold-init-type,
11+
bugprone-forward-declaration-namespace,
12+
bugprone-forwarding-reference-overload,
13+
bugprone-inaccurate-erase,
14+
bugprone-incorrect-roundings,
15+
bugprone-integer-division,
16+
bugprone-lambda-function-name,
17+
bugprone-macro-parentheses,
18+
bugprone-macro-repeated-side-effects,
19+
bugprone-misplaced-operator-in-strlen-in-alloc,
20+
bugprone-misplaced-pointer-arithmetic-in-alloc,
21+
bugprone-misplaced-widening-cast,
22+
bugprone-move-forwarding-reference,
23+
bugprone-multiple-statement-macro,
24+
bugprone-no-escape,
25+
bugprone-parent-virtual-call,
26+
bugprone-posix-return,
27+
bugprone-reserved-identifier,
28+
bugprone-sizeof-container,
29+
bugprone-sizeof-expression,
30+
bugprone-spuriously-wake-up-functions,
31+
bugprone-string-constructor,
32+
bugprone-string-integer-assignment,
33+
bugprone-string-literal-with-embedded-nul,
34+
bugprone-suspicious-enum-usage,
35+
bugprone-suspicious-include,
36+
bugprone-suspicious-memset-usage,
37+
bugprone-suspicious-missing-comma,
38+
bugprone-suspicious-semicolon,
39+
bugprone-suspicious-string-compare,
40+
bugprone-suspicious-memory-comparison,
41+
//bugprone-suspicious-realloc-usage,
42+
bugprone-swapped-arguments,
43+
bugprone-terminating-continue,
44+
bugprone-throw-keyword-missing,
45+
bugprone-too-small-loop-variable,
46+
bugprone-undefined-memory-manipulation,
47+
bugprone-undelegated-constructor,
48+
bugprone-unhandled-self-assignment,
49+
bugprone-unused-raii,
50+
bugprone-unused-return-value,
51+
bugprone-use-after-move,
52+
bugprone-virtual-near-miss,
53+
cert-dcl21-cpp,
54+
cert-dcl58-cpp,
55+
cert-err34-c,
56+
cert-err52-cpp,
57+
cert-err60-cpp,
58+
cert-flp30-c,
59+
cert-msc50-cpp,
60+
cert-msc51-cpp,
61+
cert-str34-c,
62+
cppcoreguidelines-interfaces-global-init,
63+
cppcoreguidelines-narrowing-conversions,
64+
cppcoreguidelines-pro-type-member-init,
65+
cppcoreguidelines-pro-type-static-cast-downcast,
66+
cppcoreguidelines-slicing,
67+
google-default-arguments,
68+
google-explicit-constructor,
69+
google-runtime-operator,
70+
hicpp-exception-baseclass,
71+
hicpp-multiway-paths-covered,
72+
misc-misplaced-const,
73+
misc-new-delete-overloads,
74+
misc-no-recursion,
75+
misc-non-copyable-objects,
76+
misc-throw-by-value-catch-by-reference,
77+
misc-unconventional-assign-operator,
78+
misc-uniqueptr-reset-release,
79+
modernize-avoid-bind,
80+
modernize-concat-nested-namespaces,
81+
modernize-deprecated-headers,
82+
modernize-deprecated-ios-base-aliases,
83+
modernize-loop-convert,
84+
modernize-make-shared,
85+
modernize-make-unique,
86+
modernize-pass-by-value,
87+
modernize-raw-string-literal,
88+
modernize-redundant-void-arg,
89+
modernize-replace-auto-ptr,
90+
modernize-replace-disallow-copy-and-assign-macro,
91+
modernize-replace-random-shuffle,
92+
modernize-return-braced-init-list,
93+
modernize-shrink-to-fit,
94+
modernize-unary-static-assert,
95+
modernize-use-auto,
96+
modernize-use-bool-literals,
97+
modernize-use-emplace,
98+
modernize-use-equals-default,
99+
modernize-use-equals-delete,
100+
modernize-use-nodiscard,
101+
modernize-use-noexcept,
102+
modernize-use-nullptr,
103+
modernize-use-override,
104+
modernize-use-transparent-functors,
105+
modernize-use-uncaught-exceptions,
106+
mpi-buffer-deref,
107+
mpi-type-mismatch,
108+
openmp-use-default-none,
109+
performance-faster-string-find,
110+
performance-for-range-copy,
111+
performance-implicit-conversion-in-loop,
112+
performance-inefficient-algorithm,
113+
performance-inefficient-string-concatenation,
114+
performance-inefficient-vector-operation,
115+
performance-move-const-arg,
116+
performance-move-constructor-init,
117+
performance-no-automatic-move,
118+
performance-noexcept-move-constructor,
119+
performance-trivially-destructible,
120+
performance-type-promotion-in-math-fn,
121+
performance-unnecessary-copy-initialization,
122+
performance-unnecessary-value-param,
123+
portability-simd-intrinsics,
124+
readability-avoid-const-params-in-decls,
125+
readability-const-return-type,
126+
readability-container-size-empty,
127+
readability-convert-member-functions-to-static,
128+
readability-delete-null-pointer,
129+
readability-deleted-default,
130+
readability-inconsistent-declaration-parameter-name,
131+
readability-make-member-function-const,
132+
readability-misleading-indentation,
133+
readability-misplaced-array-index,
134+
readability-non-const-parameter,
135+
readability-redundant-control-flow,
136+
readability-redundant-declaration,
137+
readability-redundant-function-ptr-dereference,
138+
readability-redundant-smartptr-get,
139+
readability-redundant-string-cstr,
140+
readability-redundant-string-init,
141+
readability-simplify-subscript-expr,
142+
readability-static-accessed-through-instance,
143+
readability-static-definition-in-anonymous-namespace,
144+
readability-string-compare,
145+
readability-uniqueptr-delete-release,
146+
readability-use-anyofallof'

.github/workflows/test.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on: [push]
44

55
jobs:
66
build:
7+
name: Build
78
runs-on: ubuntu-latest
89

910
steps:
@@ -35,3 +36,18 @@ jobs:
3536

3637
- name: Lint
3738
run: bin/lint
39+
40+
tidy:
41+
name: Tidy
42+
runs-on: ubuntu-latest
43+
steps:
44+
- uses: actions/checkout@v4
45+
46+
- name: Install clang-tidy
47+
run: sudo apt-get install -y clang-tidy
48+
49+
- name: clang-tidy version
50+
run: clang-tidy --version
51+
52+
- name: Tidy
53+
run: bin/tidy

Brewfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
brew "check"
22
brew "clang-format"
3+
brew "llvm" # for clang and clang-tidy

Makefile

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
exec = erbx
22
test_exec = run_erbx_tests
33

4-
sources = $(wildcard src/*.c)
4+
sources = $(wildcard src/*.c) $(wildcard src/**/*.c)
5+
headers = $(wildcard src/*.h) $(wildcard src/**/*.h)
56
objects = $(sources:.c=.o)
67

8+
extension_sources = $(wildcard ext/**/*.c)
9+
extension_headers = $(wildcard ext/**/*.h)
10+
11+
project_files = $(sources) $(headers)
12+
extension_files = $(extension_sources) $(extension_headers)
13+
project_and_extension_files = $(project_files) $(extension_files)
14+
715
test_sources = $(wildcard test/*.c)
816
test_objects = $(test_sources:.c=.o)
917
non_main_objects = $(filter-out src/main.o, $(objects))
@@ -19,14 +27,20 @@ flags = -g -Wall -fPIC
1927
ifeq ($(os),Linux)
2028
test_cflags = $(flags) -I/usr/include/check
2129
test_ldflags = -L/usr/lib/x86_64-linux-gnu -lcheck -lm -lsubunit
30+
llvm_path = TODO
31+
cc = clang
2232
clang_format = clang-format-19
33+
clang_tidy = clang-tidy
2334
endif
2435

2536
ifeq ($(os),Darwin)
2637
brew_prefix := $(shell brew --prefix check)
2738
test_cflags = $(flags) -I$(brew_prefix)/include
2839
test_ldflags = -L$(brew_prefix)/lib -lcheck -lm
40+
llvm_path = /opt/homebrew/opt/llvm
41+
cc = $(llvm_path)/bin/clang
2942
clang_format = clang-format
43+
clang_tidy = $(llvm_path)/bin/clang-tidy
3044
endif
3145

3246
all: $(exec) $(lib_name) test
@@ -52,7 +66,10 @@ clean:
5266
rm -rf src/*.o test/*.o lib/erbx/*.bundle tmp
5367

5468
format:
55-
$(clang_format) -i $(wildcard src/*.c) $(wildcard src/**/*.c) $(wildcard src/*.h) $(wildcard src/**/*.h) $(wildcard ext/**/*.c) $(wildcard ext/**/*.h)
69+
$(clang_format) -i $(project_and_extension_files)
5670

5771
lint:
58-
$(clang_format) --dry-run --Werror $(wildcard src/*.c) $(wildcard src/**/*.c) $(wildcard src/*.h) $(wildcard src/**/*.h) $(wildcard ext/**/*.c) $(wildcard ext/**/*.h)
72+
$(clang_format) --dry-run --Werror $(project_and_extension_files)
73+
74+
tidy:
75+
$(clang_tidy) $(project_files) -- $(flags)

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,16 @@ This project builds the ERBX program and its associated unit tests using a Makef
1111
- **GCC**
1212
- **Check**: The project uses the [Check](https://libcheck.github.io/check/) library for unit testing.
1313
- **Clang Format**: The project uses [Clang Format](https://clang.llvm.org/docs/ClangFormat.html) for formatting.
14+
- **Clang Tidy**: The project uses [Clang Format](https://clang.llvm.org/docs/ClangFormat.html) for formatting.
1415

1516
For Linux:
1617
```bash
17-
sudo apt-get install check clang-format-19
18+
sudo apt-get install check clang-format-19 clang-tidy
1819
```
1920

2021
For macOS (using Homebrew):
2122
```bash
22-
brew install check clang-format
23+
brew install check clang-format llvm
2324
# or
2425
brew bundle
2526
```

bin/tidy

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/bash
2+
3+
set -e # Exit on error
4+
5+
make tidy
6+
7+
echo "Tidy complete!"

ext/erbx/extension.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "extension.h"
2-
#include "extconf.h"
3-
#include "ruby.h"
2+
#include <ruby.h>
43

54
#include "../../src/include/erbx.h"
65

src/array.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ size_t array_sizeof(void) {
44
return sizeof(array_T);
55
}
66

7-
array_T* array_init(int capacity) {
7+
array_T* array_init(size_t capacity) {
88
array_T* array = (array_T*) malloc(sizeof(array_T));
99

1010
array->size = 0;
@@ -24,28 +24,28 @@ void array_append(array_T* array, void* item) {
2424
array->size++;
2525
}
2626

27-
void* array_get(array_T* array, int index) {
27+
void* array_get(array_T* array, size_t index) {
2828
if (index >= array->size || index < 0) {
2929
return NULL;
3030
}
3131

3232
return array->items[index];
3333
}
3434

35-
void array_set(array_T* array, int index, void* item) {
36-
if (index >= array->size || index < 0) {
35+
void array_set(array_T* array, size_t index, void* item) {
36+
if (index >= array->size) {
3737
return;
3838
}
3939

4040
array->items[index] = item;
4141
}
4242

43-
void array_remove(array_T* array, int index) {
44-
if (index >= array->size || index < 0) {
43+
void array_remove(array_T* array, size_t index) {
44+
if (index >= array->size) {
4545
return;
4646
}
4747

48-
for (int i = index; i < array->size - 1; i++) {
48+
for (size_t i = index; i < array->size - 1; i++) {
4949
array->items[i] = array->items[i + 1];
5050
}
5151

src/include/array.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ typedef struct ARRAY_STRUCT {
99
size_t capacity;
1010
} array_T;
1111

12-
array_T* array_init(int capacity);
12+
array_T* array_init(size_t capacity);
1313

14-
void* array_get(array_T* array, int index);
14+
void* array_get(array_T* array, size_t index);
1515

1616
void array_append(array_T* array, void* item);
17-
void array_set(array_T* array, int index, void* item);
17+
void array_set(array_T* array, size_t index, void* item);
1818
void array_free(array_T* array);
19-
void array_remove(array_T* array, int index);
19+
void array_remove(array_T* array, size_t index);
2020

2121
size_t array_capacity(array_T* array);
2222
size_t array_size(array_T* array);

src/include/lexer_struct.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ typedef enum {
2020
typedef struct LEXER_STRUCT {
2121
char* source;
2222
size_t source_length;
23+
size_t current_position;
24+
size_t current_line;
25+
size_t current_column;
2326
char current_character;
24-
unsigned int current_position;
25-
unsigned int current_line;
26-
unsigned int current_column;
2727
lexer_state_T state;
2828
} lexer_T;
2929

0 commit comments

Comments
 (0)