9632360caa5e6511b0ec13cb4c55eb64408232b5

Author
Jeff Epler <jepler@gmail.com>
Committer
GitHub <noreply@github.com>
Date

Message

Use a macro to compute the size of arrays at compile time (#18044)

* Add ARRAY_SIZE and CEILING utility macros

* Apply a coccinelle patch to use ARRAY_SIZE

* fix up some straggling items

* Fix 'make test:secure'

* Enhance ARRAY_SIZE macro to reject acting on pointers

The previous definition would not produce a diagnostic for
```
int *p;
size_t num_elem = ARRAY_SIZE(p)
```
but the new one will.

* explicitly get definition of ARRAY_SIZE

* Convert to ARRAY_SIZE when const is involved

The following spatch finds additional instances where the array is
const and the division is by the size of the type, not the size of
the first element:
```
@ rule5a using "empty.iso" @
type T;
const T[] E;
@@

- (sizeof(E)/sizeof(T))
+ ARRAY_SIZE(E)

@ rule6a using "empty.iso" @
type T;
const T[] E;
@@

- sizeof(E)/sizeof(T)
+ ARRAY_SIZE(E)
```

* New instances of ARRAY_SIZE added since initial spatch run

* Use `ARRAY_SIZE` in docs (found by grep)

* Manually use ARRAY_SIZE

hs_set is expected to be the same size as uint16_t, though it's made
of two 8-bit integers

* Just like char, sizeof(uint8_t) is guaranteed to be 1

This is at least true on any plausible system where qmk is actually used.

Per my understanding it's universally true, assuming that uint8_t exists:
https://stackoverflow.com/questions/48655310/can-i-assume-that-sizeofuint8-t-1

* Run qmk-format on core C files touched in this branch

Co-authored-by: Stefan Kerkmann <karlk90@pm.me>

Diff

This diff is truncated to protect this page.

  1diff --git a/docs/feature_combo.md b/docs/feature_combo.md
  2index 42d965509b9678e93f2488adbc12d99905f9af00..bb0b5d7aa0571baae37ca068fa24ca71abc4adb6 100644
  3--- a/docs/feature_combo.md
  4+++ b/docs/feature_combo.md
  5@@ -255,7 +255,7 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode
  6 ```
  7 
  8 ## Variable Length Combos
  9diff --git a/drivers/haptic/solenoid.c b/drivers/haptic/solenoid.c
 10index 637a77da3dbd2be215c7bda675e489593bc7f971..4e4390325527947b4b958ba7d6d3aa4166d32a2a 100644
 11--- a/drivers/haptic/solenoid.c
 12+++ b/drivers/haptic/solenoid.c
 13@@ -20,11 +20,12 @@
 14 #include "haptic.h"
 15 #include "gpio.h"
 16 #include "usb_device_state.h"
 17+#include "util.h"
 18 #include <stdlib.h>
 19 
 20 uint8_t      solenoid_dwell  = SOLENOID_DEFAULT_DWELL;
 21 static pin_t solenoid_pads[] = SOLENOID_PINS;
 22-#define NUMBER_OF_SOLENOIDS (sizeof(solenoid_pads) / sizeof(pin_t))
 23+#define NUMBER_OF_SOLENOIDS ARRAY_SIZE(solenoid_pads)
 24 bool     solenoid_on[NUMBER_OF_SOLENOIDS]      = {false};
 25 bool     solenoid_buzzing[NUMBER_OF_SOLENOIDS] = {false};
 26 uint16_t solenoid_start[NUMBER_OF_SOLENOIDS]   = {0};
 27@@ -147,7 +148,7 @@ void solenoid_check(void) {
 28 void solenoid_setup(void) {
 29 #ifdef SOLENOID_PINS_ACTIVE_STATE
 30     bool    state_temp[] = SOLENOID_PINS_ACTIVE_STATE;
 31-    uint8_t bound_check  = (sizeof(state_temp) / sizeof(bool));
 32+    uint8_t bound_check  = ARRAY_SIZE(state_temp);
 33 #endif
 34 
 35     for (uint8_t i = 0; i < NUMBER_OF_SOLENOIDS; i++) {
 36diff --git a/drivers/sensors/pmw33xx_common.c b/drivers/sensors/pmw33xx_common.c
 37index 4993cc2d34a8aae9cb4a78d27f42a718bec1c362..b8d4e532ca321fe4617f6ef720e199e94d0529ed 100644
 38--- a/drivers/sensors/pmw33xx_common.c
 39+++ b/drivers/sensors/pmw33xx_common.c
 40@@ -17,10 +17,10 @@
 41 extern const uint8_t pmw33xx_firmware_data[PMW33XX_FIRMWARE_LENGTH] PROGMEM;
 42 extern const uint8_t pmw33xx_firmware_signature[3] PROGMEM;
 43 
 44-static const pin_t cs_pins[]                                 = PMW33XX_CS_PINS;
 45-static bool        in_burst[sizeof(cs_pins) / sizeof(pin_t)] = {0};
 46+static const pin_t cs_pins[]                     = PMW33XX_CS_PINS;
 47+static bool        in_burst[ARRAY_SIZE(cs_pins)] = {0};
 48 
 49-const size_t pmw33xx_number_of_sensors = sizeof(cs_pins) / sizeof(pin_t);
 50+const size_t pmw33xx_number_of_sensors = ARRAY_SIZE(cs_pins);
 51 
 52 bool __attribute__((cold)) pmw33xx_upload_firmware(uint8_t sensor);
 53 bool __attribute__((cold)) pmw33xx_check_signature(uint8_t sensor);
 54diff --git a/keyboards/25keys/zinc/keymaps/ginjake/keymap.c b/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
 55index 93dfc590e9bed40bf27bb34fbbe22f85bac00b41..26190a2a916c871ded2be388bc2e9933662c3efd 100644
 56--- a/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
 57+++ b/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
 58@@ -333,7 +333,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 59       aqours_num++;
 60       aqours_next_color_timer_count = 0;
 61       target_col = 0;
 62-      if (aqours_num == sizeof(aqours_h) / sizeof(int)) {
 63+      if (aqours_num == ARRAY_SIZE(aqours_h)) {
 64         aqours_num = 0;
 65       }
 66     }
 67diff --git a/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c b/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c
 68index cae98411d6e81c8744a26b31badb62dd56590168..fd7f556b56946009c2923545b452553e5434f7d8 100755
 69--- a/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c
 70+++ b/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c
 71@@ -94,7 +94,7 @@ encoder_mode_t encoder_modes[] = {
 72 	// Insert your custom encoder mode here
 73 };
 74 
 75-#define NUM_ENCODER_MODES (sizeof(encoder_modes)/sizeof(encoder_modes[0]))
 76+#define NUM_ENCODER_MODES ARRAY_SIZE(encoder_modes)
 77 
 78 // This counter is used to track what encoder mode is being used at a certain time
 79 int encoder_mode_count = 0;
 80diff --git a/keyboards/adafruit/macropad/lib/ssd1306_sh1106.c b/keyboards/adafruit/macropad/lib/ssd1306_sh1106.c
 81index dc1289fdb1367325f092133c509c2288d335dcb6..1b05809640575b1ebee18e7c2f45d6195fe38136 100644
 82--- a/keyboards/adafruit/macropad/lib/ssd1306_sh1106.c
 83+++ b/keyboards/adafruit/macropad/lib/ssd1306_sh1106.c
 84@@ -94,8 +94,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 85 
 86 #define OLED_ALL_BLOCKS_MASK (((((OLED_BLOCK_TYPE)1 << (OLED_BLOCK_COUNT - 1)) - 1) << 1) | 1)
 87 
 88-#define ARRAY_SIZE(arr) sizeof(arr)/sizeof(arr[0])
 89-
 90 // spi defines
 91 #define OLED_STATUS_SUCCESS SPI_STATUS_SUCCESS
 92 
 93diff --git a/keyboards/crkbd/keymaps/gotham/oled.c b/keyboards/crkbd/keymaps/gotham/oled.c
 94index c4ac5e736c7052ad7f96ba5cd76b5af3ffa26ba4..c285a37c5bad469965a99ee2352cca44bcc55fe5 100644
 95--- a/keyboards/crkbd/keymaps/gotham/oled.c
 96+++ b/keyboards/crkbd/keymaps/gotham/oled.c
 97@@ -176,7 +176,7 @@ void add_keylog(uint16_t keycode) {
 98     keylog_str[i] = keylog_str[i - 1];
 99   }
100 
101-  if (keycode < (sizeof(code_to_name) / sizeof(char))) {
102+  if (keycode < ARRAY_SIZE(code_to_name)) {
103     keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
104   }
105 }
106diff --git a/keyboards/crkbd/keymaps/thunderbird2086/oled.c b/keyboards/crkbd/keymaps/thunderbird2086/oled.c
107index bee9bc26dee6aecc56fdec79b7dbb121e5e12467..108f3e0cdde67f7ca7b4717f2011c4a765b20135 100644
108--- a/keyboards/crkbd/keymaps/thunderbird2086/oled.c
109+++ b/keyboards/crkbd/keymaps/thunderbird2086/oled.c
110@@ -189,7 +189,7 @@ void add_keylog(uint16_t keycode) {
111         keylog_str[i] = keylog_str[i - 1];
112     }
113 
114-    if (keycode < (sizeof(code_to_name) / sizeof(char))) {
115+    if (keycode < ARRAY_SIZE(code_to_name)) {
116         keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
117     }
118 }
119diff --git a/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c b/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
120index 819b76e739d39e2510217541557a1ecab715f7e5..0442c930fe8e791aa551f1760604cdf330e1dcef 100644
121--- a/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
122+++ b/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
123@@ -242,7 +242,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
124 void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
125     switch (led_mode) {
126       case LEDMODE_MODS:
127-        for (int i=0;i<sizeof(modifiers) / sizeof(modifiers[0]);i++) {
128+        for (int i=0;i<ARRAY_SIZE(modifiers);i++) {
129           if(keycode==modifiers[i]) {
130             if (record->event.pressed) {
131               writePinHigh(led);
132diff --git a/keyboards/dm9records/plaid/keymaps/default/keymap.c b/keyboards/dm9records/plaid/keymaps/default/keymap.c
133index d96c25060917cbc5b204924f6d6a8c4e863b6b37..aa0bd8b093e1dad42edcdf8dea990eab3bea1e91 100644
134--- a/keyboards/dm9records/plaid/keymaps/default/keymap.c
135+++ b/keyboards/dm9records/plaid/keymaps/default/keymap.c
136@@ -245,7 +245,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
137 void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
138     switch (led_mode) {
139       case LEDMODE_MODS:
140-        for (int i=0;i<sizeof(modifiers) / sizeof(modifiers[0]);i++) {
141+        for (int i=0;i<ARRAY_SIZE(modifiers);i++) {
142           if(keycode==modifiers[i]) {
143             if (record->event.pressed) {
144               writePinHigh(led);
145diff --git a/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c b/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
146index 354599f3403c0db117176cb95e39bb3f0b4a907c..9a0e89bd894e54e35b30c3ed45b6797920a0abb3 100644
147--- a/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
148+++ b/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
149@@ -184,7 +184,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
150 void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
151     switch (led_mode) {
152       case LEDMODE_MODS:
153-        for (int i=0;i<sizeof(modifiers) / sizeof(modifiers[0]);i++) {
154+        for (int i=0;i<ARRAY_SIZE(modifiers);i++) {
155           if(keycode==modifiers[i]) {
156             if (record->event.pressed) {
157               writePinHigh(led);
158diff --git a/keyboards/dmqdesign/spin/keymaps/spidey3_pad/keymap.c b/keyboards/dmqdesign/spin/keymaps/spidey3_pad/keymap.c
159index 8c9af7202beb1651c7380feef646ec8ab6c9b90b..77534b9a7576396a236b16625034108c5b696150 100644
160--- a/keyboards/dmqdesign/spin/keymaps/spidey3_pad/keymap.c
161+++ b/keyboards/dmqdesign/spin/keymaps/spidey3_pad/keymap.c
162@@ -111,7 +111,7 @@ const rgblight_segment_t *const PROGMEM _rgb_layers[] = {
163 };
164 // clang-format off
165 
166-const uint8_t PROGMEM _n_rgb_layers = sizeof(_rgb_layers) / sizeof(_rgb_layers[0]) - 1;
167+const uint8_t PROGMEM _n_rgb_layers = ARRAY_SIZE(_rgb_layers) - 1;
168 
169 void clear_rgb_layers(void) {
170     dprint("clear_rgb_layers()\n");
171diff --git a/keyboards/evolv/keymaps/gondolindrim/keymap.c b/keyboards/evolv/keymaps/gondolindrim/keymap.c
172index 3ab66bd056e6687eede4c86325f8399694486c24..bf0944fbd100ff986fdd84039ec5c66596084f03 100755
173--- a/keyboards/evolv/keymaps/gondolindrim/keymap.c
174+++ b/keyboards/evolv/keymaps/gondolindrim/keymap.c
175@@ -129,7 +129,7 @@ const encoder_mode_t encoder_modes[] = {
176 	// Insert your custom encoder mode here
177 };
178 
179-#define NUM_ENCODER_MODES (sizeof(encoder_modes)/sizeof(encoder_modes[0])) // DO NOT CHANGE THIS. NUM_ENCODER_MODES calculates how many modes there are.
180+#define NUM_ENCODER_MODES ARRAY_SIZE(encoder_modes) // DO NOT CHANGE THIS. NUM_ENCODER_MODES calculates how many modes there are.
181 
182 // This counter is used to track what encoder mode is being used at a certain time
183 int encoder_mode_count = 0;
184diff --git a/keyboards/gboards/butterstick/keymaps/default/keymap.c b/keyboards/gboards/butterstick/keymaps/default/keymap.c
185index 749e9ba07138f402c55a9a8e37459042e85f48a3..d0c6af65df544bc0546421c77f5c34c2b0681797 100644
186--- a/keyboards/gboards/butterstick/keymaps/default/keymap.c
187+++ b/keyboards/gboards/butterstick/keymaps/default/keymap.c
188@@ -180,4 +180,4 @@ uint32_t processQwerty(bool lookup) {
189 }
190 
191 // Don't fuck with this, thanks.
192-size_t keymapsCount  = sizeof(keymaps)/sizeof(keymaps[0]);
193+size_t keymapsCount  = ARRAY_SIZE(keymaps);
194diff --git a/keyboards/gboards/butterstick/sten.c b/keyboards/gboards/butterstick/sten.c
195index 197abaf92f5af62c2ad7457616edc65e4e12f779..8820127848039cd340d6d4132f044520c2ba77f1 100644
196--- a/keyboards/gboards/butterstick/sten.c
197+++ b/keyboards/gboards/butterstick/sten.c
198@@ -21,7 +21,7 @@ uint32_t tChord			= 0;		// Protects state of cChord
199 
200 #ifndef STENOLAYERS
201 uint32_t stenoLayers[] = { PWR };
202-size_t 	 stenoLayerCount = sizeof(stenoLayers)/sizeof(stenoLayers[0]);
203+size_t 	 stenoLayerCount = ARRAY_SIZE(stenoLayers);
204 #endif
205 
206 // Mode state
207diff --git a/keyboards/gboards/engine/keymap_engine.h b/keyboards/gboards/engine/keymap_engine.h
208index c8a42a052bf11184ecfe01d722703984292afe3e..599c1ca3e406d1f18c00c9de4c72475c7d883293 100644
209--- a/keyboards/gboards/engine/keymap_engine.h
210+++ b/keyboards/gboards/engine/keymap_engine.h
211@@ -114,8 +114,8 @@ void testCollisions(void) {
212 #include "dicts.def"
213 
214 // Get size data back into the engine
215-size_t funcsLen   = sizeof(funDict) / sizeof(funDict[0]);
216-size_t stringLen  = sizeof(strDict) / sizeof(strDict[0]);
217-size_t keyLen     = sizeof(keyDict) / sizeof(keyDict[0]);
218-size_t comboLen   = sizeof(cmbDict) / sizeof(cmbDict[0]);
219-size_t specialLen = sizeof(spcDict) / sizeof(spcDict[0]);
220+size_t funcsLen   = ARRAY_SIZE(funDict);
221+size_t stringLen  = ARRAY_SIZE(strDict);
222+size_t keyLen     = ARRAY_SIZE(keyDict);
223+size_t comboLen   = ARRAY_SIZE(cmbDict);
224+size_t specialLen = ARRAY_SIZE(spcDict);
225diff --git a/keyboards/gboards/g/keymap_engine.h b/keyboards/gboards/g/keymap_engine.h
226index 93a4423340f80a027014649e89fb8fb145418310..055b5941e433da95c10ab673e11c7b5540f43be7 100644
227--- a/keyboards/gboards/g/keymap_engine.h
228+++ b/keyboards/gboards/g/keymap_engine.h
229@@ -115,8 +115,8 @@ void testCollisions(void) {
230 #include "dicts.def"
231 
232 // Get size data back into the engine
233-size_t funcsLen   = sizeof(funDict) / sizeof(funDict[0]);
234-size_t stringLen  = sizeof(strDict) / sizeof(strDict[0]);
235-size_t keyLen     = sizeof(keyDict) / sizeof(keyDict[0]);
236-size_t comboLen   = sizeof(cmbDict) / sizeof(cmbDict[0]);
237-size_t specialLen = sizeof(spcDict) / sizeof(spcDict[0]);
238+size_t funcsLen   = ARRAY_SIZE(funDict);
239+size_t stringLen  = ARRAY_SIZE(strDict);
240+size_t keyLen     = ARRAY_SIZE(keyDict);
241+size_t comboLen   = ARRAY_SIZE(cmbDict);
242+size_t specialLen = ARRAY_SIZE(spcDict);
243diff --git a/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c b/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c
244index 29b35f6abd9ea265ffd2f6dc55295535be56efa0..af7edc2a9b9d25c5bb0a75f65b6a2f2138350933 100644
245--- a/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c
246+++ b/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c
247@@ -302,5 +302,5 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
248 };
249 
250 // Don't fuck with this, thanks.
251-size_t keymapsCount  = sizeof(keymaps)/sizeof(keymaps[0]);
252-size_t stenoLayerCount = sizeof(stenoLayers)/sizeof(stenoLayers[0]);
253+size_t keymapsCount  = ARRAY_SIZE(keymaps);
254+size_t stenoLayerCount = ARRAY_SIZE(stenoLayers);
255diff --git a/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c b/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c
256index 09243f2a24816a87332d7092c3b86132462c8c53..a3324b11cdf11d3c107eadc2e37f70497feede10 100644
257--- a/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c
258+++ b/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c
259@@ -234,4 +234,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
260 };
261 
262 // Don't fuck with this, thanks.
263-size_t keymapsCount  = sizeof(keymaps)/sizeof(keymaps[0]);
264+size_t keymapsCount  = ARRAY_SIZE(keymaps);
265diff --git a/keyboards/gboards/georgi/keymaps/default/keymap.c b/keyboards/gboards/georgi/keymaps/default/keymap.c
266index 93c551af2748ed26985fcf4170818ab981c07189..78964dc8406c3d0cad9130ddd09c67f3bc74d656 100644
267--- a/keyboards/gboards/georgi/keymaps/default/keymap.c
268+++ b/keyboards/gboards/georgi/keymaps/default/keymap.c
269@@ -244,4 +244,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
270 };
271 
272 // Don't fuck with this, thanks.
273-size_t keymapsCount  = sizeof(keymaps)/sizeof(keymaps[0]);
274+size_t keymapsCount  = ARRAY_SIZE(keymaps);
275diff --git a/keyboards/gboards/georgi/keymaps/minimal/keymap.c b/keyboards/gboards/georgi/keymaps/minimal/keymap.c
276index e9294c5cc83ce6f635035b00fdfd0d10ae0e4c89..c4e78033bde1e380f9cf3a91d31378f35d118293 100644
277--- a/keyboards/gboards/georgi/keymaps/minimal/keymap.c
278+++ b/keyboards/gboards/georgi/keymaps/minimal/keymap.c
279@@ -219,4 +219,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
280     )
281 };
282 // Don't fuck with this, thanks.
283-size_t keymapsCount  = sizeof(keymaps)/sizeof(keymaps[0]);
284+size_t keymapsCount  = ARRAY_SIZE(keymaps);
285diff --git a/keyboards/gboards/georgi/keymaps/norman/keymap.c b/keyboards/gboards/georgi/keymaps/norman/keymap.c
286index 4591aab22fe0eebc0bb649f6a03c416faa3e98b4..870e460e2c5bfa09d650a8bc6d05529e26ee7aca 100644
287--- a/keyboards/gboards/georgi/keymaps/norman/keymap.c
288+++ b/keyboards/gboards/georgi/keymaps/norman/keymap.c
289@@ -263,4 +263,4 @@ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_PGDN, KC_LEFT, KC
290 			  KC_TRNS, KC_TRNS, KC_TRNS,	                        KC_TRNS, KC_TRNS, KC_TRNS)
291 };
292 // Don't fuck with this, thanks.
293-size_t keymapsCount  = sizeof(keymaps)/sizeof(keymaps[0]);
294+size_t keymapsCount  = ARRAY_SIZE(keymaps);
295diff --git a/keyboards/gboards/georgi/sten.c b/keyboards/gboards/georgi/sten.c
296index c7469b6394e78acd3d1839e55dc2f56f1e072a15..bd96dee758e8edd578559f7c48c299a3879b1bc4 100644
297--- a/keyboards/gboards/georgi/sten.c
298+++ b/keyboards/gboards/georgi/sten.c
299@@ -21,7 +21,7 @@ uint32_t tChord			= 0;		// Protects state of cChord
300 
301 #ifndef STENOLAYERS
302 uint32_t stenoLayers[] = { PWR };
303-size_t 	 stenoLayerCount = sizeof(stenoLayers)/sizeof(stenoLayers[0]);
304+size_t 	 stenoLayerCount = ARRAY_SIZE(stenoLayers);
305 #endif
306 
307 // Mode state
308diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c
309index 09f8aa147a2945a20112e80fa62095aab94f6996..3aa3fd828e78c805e97cb7736cc439269fe0d7af 100644
310--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c
311+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c
312@@ -107,16 +107,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
313 
314     // Capslock, Scroll lock and Numlock  indicator on Left side lights.
315     void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
316-        loop_colorset(LED_REGION_A,      (sizeof(LED_REGION_A) / sizeof(LED_REGION_A[0])),           hsv_cl_blue);
317-        loop_colorset(LED_REGION_B,      (sizeof(LED_REGION_B) / sizeof(LED_REGION_B[0])),           hsv_cl_purple);
318-        loop_colorset(LED_REGION_L_SIDE, (sizeof(LED_REGION_L_SIDE) / sizeof(LED_REGION_L_SIDE[0])), hsv_cl_purple);
319-        loop_colorset(LED_REGION_R_SIDE, (sizeof(LED_REGION_R_SIDE) / sizeof(LED_REGION_R_SIDE[0])), hsv_cl_purple);
320+        loop_colorset(LED_REGION_A,      ARRAY_SIZE(LED_REGION_A),
321+                                 hsv_cl_blue);
322+        loop_colorset(LED_REGION_B,      ARRAY_SIZE(LED_REGION_B),
323+                                 hsv_cl_purple);
324+        loop_colorset(LED_REGION_L_SIDE, ARRAY_SIZE(LED_REGION_L_SIDE),
325+                      hsv_cl_purple);
326+        loop_colorset(LED_REGION_R_SIDE, ARRAY_SIZE(LED_REGION_R_SIDE),
327+                      hsv_cl_purple);
328 
329         switch(get_highest_layer(layer_state)){  // special handling per layer
330             case 1:  //layer 1
331                 //rgb_matrix_set_color_all(RGB_AZURE);
332-                loop_colorset(LED_REGION_NUMPAD, (sizeof(LED_REGION_NUMPAD) / sizeof(LED_REGION_NUMPAD[0])), hsv_cl_numpad);
333-                loop_colorset(LED_REGION_OTHER,  (sizeof(LED_REGION_OTHER) / sizeof(LED_REGION_OTHER[0])),   hsv_cl_mods);
334+                loop_colorset(LED_REGION_NUMPAD,
335+                              ARRAY_SIZE(LED_REGION_NUMPAD), hsv_cl_numpad);
336+                loop_colorset(LED_REGION_OTHER,  ARRAY_SIZE(LED_REGION_OTHER),
337+                                 hsv_cl_mods);
338             break;
339             default: //layer 0
340                 //
341@@ -148,7 +154,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
342             rgb_matrix_set_color(LED_L6,   bad_rgb.r, bad_rgb.g, bad_rgb.b);
343             rgb_matrix_set_color(LED_L7,   bad_rgb.r, bad_rgb.g, bad_rgb.b);
344             rgb_matrix_set_color(LED_L8,   bad_rgb.r, bad_rgb.g, bad_rgb.b);
345-            loop_colorset(LED_REGION_CAPS, (sizeof(LED_REGION_CAPS) / sizeof(LED_REGION_CAPS[0])), hsv_cl_bad);
346+            loop_colorset(LED_REGION_CAPS, ARRAY_SIZE(LED_REGION_CAPS),
347+                          hsv_cl_bad);
348         }
349     }
350 #endif
351diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c
352index ab986936491a181f54d2014b8ce00ed3dd3acc80..9b20399e002d532f691e038fa5ff467f78803c3a 100644
353--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c
354+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c
355@@ -538,7 +538,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
356 
357         } else if (paddle_lives == 0) {
358             // Game over
359-            for (uint8_t i = 0; i < sizeof(LED_GAME_OVER) / sizeof(LED_GAME_OVER[0]); i++) {
360+            for (uint8_t i = 0; i < ARRAY_SIZE(LED_GAME_OVER); i++) {
361                 rgb_matrix_set_color(LED_GAME_OVER[i], RGB_RED);
362             }
363 
364diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c
365index e59db7b98484282b499ee7dd1c7e0a1cdb906350..164ff67e22fe9d28c45d971c8b78ff9015c74636 100644
366--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c
367+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c
368@@ -201,15 +201,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
369 				else { ++rgb_value.r; }
370 			}
371 			
372-            for (uint8_t i=0; i<sizeof(LED_RGB)/sizeof(LED_RGB[0]); i++) {
373+            for (uint8_t i=0; i<ARRAY_SIZE(LED_RGB); i++) {
374                 rgb_matrix_set_color(LED_RGB[i], rgb_value.r, rgb_value.g, rgb_value.b);
375             }
376 			
377-            for (uint8_t i=0; i<sizeof(LED_WHITE)/sizeof(LED_WHITE[0]); i++) {
378+            for (uint8_t i=0; i<ARRAY_SIZE(LED_WHITE); i++) {
379                 rgb_matrix_set_color(LED_WHITE[i], RGB_WHITE);
380             }
381 
382-            for (uint8_t i=0; i<sizeof(LED_GREEN)/sizeof(LED_GREEN[0]); i++) {
383+            for (uint8_t i=0; i<ARRAY_SIZE(LED_GREEN); i++) {
384                 rgb_matrix_set_color(LED_GREEN[i], RGB_GREEN);
385             }
386 			
387@@ -274,7 +274,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
388 
389 			} else if (paddle_lives == 0) {
390 				// Game over
391-				for (uint8_t i=0; i<sizeof(LED_GAME_OVER)/sizeof(LED_GAME_OVER[0]); i++) {
392+				for (uint8_t i=0; i<ARRAY_SIZE(LED_GAME_OVER); i++) {
393 					rgb_matrix_set_color(LED_GAME_OVER[i], RGB_RED);
394 				}
395 			
396@@ -439,12 +439,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
397 
398             rgb_matrix_set_color(LED_CAPS, RGB_WHITE);
399             if (caps_flash_on) {
400-				for (uint8_t i=0; i<sizeof(LED_SIDE_LEFT)/sizeof(LED_SIDE_LEFT[0]); i++) {
401+				for (uint8_t i=0; i<ARRAY_SIZE(LED_SIDE_LEFT); i++) {
402 					rgb_matrix_set_color(LED_SIDE_LEFT[i], RGB_RED);
403 					rgb_matrix_set_color(LED_SIDE_RIGHT[i], RGB_RED);
404 				}
405 			} else {
406-				for (uint8_t i=0; i<sizeof(LED_SIDE_LEFT)/sizeof(LED_SIDE_LEFT[0]); i++) {
407+				for (uint8_t i=0; i<ARRAY_SIZE(LED_SIDE_LEFT); i++) {
408 					rgb_matrix_set_color(LED_SIDE_LEFT[i], 0, 0, 0);
409 					rgb_matrix_set_color(LED_SIDE_RIGHT[i], 0, 0, 0);
410 				}
411diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c
412index b28809fdf662fb445e62bc40a60d314c50eb4578..fd941883c5c964c6296613c90255d24e6dfdd454 100644
413--- a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c
414+++ b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c
415@@ -84,7 +84,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
416         }
417     HSV tempHSV = {.h = 0, .s = 255, .v = current_value};
418     RGB tempRGB = hsv_to_rgb(tempHSV);
419-    for (uint8_t i = 0; i < sizeof(left_side_leds) / sizeof(left_side_leds[0]); i++) {
420+    for (uint8_t i = 0; i < ARRAY_SIZE(left_side_leds); i++) {
421         rgb_matrix_set_color(left_side_leds[i], tempRGB.r, tempRGB.g, tempRGB.b);
422         rgb_matrix_set_color(right_side_leds[i], tempRGB.r, tempRGB.g, tempRGB.b);
423         }
424@@ -95,7 +95,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
425        case 2:  //layer one
426          break;
427        case 1:
428-         for (uint8_t i = 0; i < sizeof(l2_functions) / sizeof(l2_functions[0]); i++) {
429+         for (uint8_t i = 0; i < ARRAY_SIZE(l2_functions); i++) {
430              RGB_MATRIX_INDICATOR_SET_COLOR(l2_functions[i], 255, 0, 0);
431          }
432          break;
433diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/gourdo1/keymap.c
434index 30e8fc5f44dffa00596f7bffcd5c43d28b238370..004a8c2014bdea8c26ab460b5e1b2b3f4384626c 100644
435--- a/keyboards/gmmk/pro/rev1/iso/keymaps/gourdo1/keymap.c
436+++ b/keyboards/gmmk/pro/rev1/iso/keymaps/gourdo1/keymap.c
437@@ -551,7 +551,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
438 
439         } else if (paddle_lives == 0) {
440             // Game over
441-            for (uint8_t i = 0; i < sizeof(LED_GAME_OVER) / sizeof(LED_GAME_OVER[0]); i++) {
442+            for (uint8_t i = 0; i < ARRAY_SIZE(LED_GAME_OVER); i++) {
443                 rgb_matrix_set_color(LED_GAME_OVER[i], RGB_RED);
444             }
445 
446diff --git a/keyboards/gopolar/gg86/keymaps/horrortroll/keymap_stuff.h b/keyboards/gopolar/gg86/keymaps/horrortroll/keymap_stuff.h
447index ad7a3238ceca0e4967174911a10cc540140ad200..e5f5c9115174ce6ef2151c68ea26783f6d085fd7 100644
448--- a/keyboards/gopolar/gg86/keymaps/horrortroll/keymap_stuff.h
449+++ b/keyboards/gopolar/gg86/keymaps/horrortroll/keymap_stuff.h
450@@ -118,7 +118,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
451     {{205, 250, 255}, {140, 215, 125}, false },
452     };
453 
454-    uint8_t gp_length = sizeof(gradient_presets)/sizeof(gradient_presets[0]);
455+    uint8_t gp_length = ARRAY_SIZE(gradient_presets);
456 
457     switch (keycode) {
458         case G1_HUI:
459diff --git a/keyboards/gopolar/gg86/lib/wave.h b/keyboards/gopolar/gg86/lib/wave.h
460index 11a3198ab12a0681b8c0af12310a236a6a2c5e55..f4e5e5052cd6e3c3adb1334725ee48603d6581b4 100644
461--- a/keyboards/gopolar/gg86/lib/wave.h
462+++ b/keyboards/gopolar/gg86/lib/wave.h
463@@ -69,7 +69,7 @@ void add_keylog(uint16_t keycode) {
464         keycode = 0;
465     }
466 
467-    if (keycode < (sizeof(code_to_name) / sizeof(char))) {
468+    if (keycode < ARRAY_SIZE(code_to_name)) {
469         char log_char = pgm_read_byte(&code_to_name[keycode]);
470 
471         for (uint8_t j = 0; j < OLED_FONT_WIDTH; j++) {
472diff --git a/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c b/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c
473index c2eb4406d14292cd80debf5efaeadb3e82df31ee..bc5b025b4841d160e32290de1b972b750639c1ea 100644
474--- a/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c
475+++ b/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c
476@@ -191,8 +191,8 @@ void keyboard_post_init_user(void) {
477     const pin_t pins[] = {D0, D1, D2};
478     uint8_t i, j;
479 
480-    for (i = 0 ; i < sizeof(pins) / sizeof(pins[0]) + 2 ; i += 1) {
481-        for (j = 0 ; j < sizeof(pins) / sizeof(pins[0]) ; j += 1) {
482+    for (i = 0 ; i < ARRAY_SIZE(pins) + 2 ; i += 1) {
483+        for (j = 0 ; j < ARRAY_SIZE(pins); j += 1) {
484             setPinOutput(pins[j]);
485             writePin(pins[j], (j == i || j == i - 1));
486         }
487diff --git a/keyboards/handwired/myskeeb/oled.c b/keyboards/handwired/myskeeb/oled.c
488index 081ca8395a28f28540e751970cc35b688cf7d01d..3f43590b8e907de7104b4d2bea79a10ae3ff9cdf 100644
489--- a/keyboards/handwired/myskeeb/oled.c
490+++ b/keyboards/handwired/myskeeb/oled.c
491@@ -183,7 +183,7 @@ void add_keylog(uint16_t keycode) {
492         keylog_str[i] = keylog_str[i - 1];
493     }
494 
495-    if (keycode < (sizeof(code_to_name) / sizeof(char))) {
496+    if (keycode < ARRAY_SIZE(code_to_name)) {
497         keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
498     }
499 }
500diff --git a/keyboards/handwired/nicekey/keymaps/default/keymap.c b/keyboards/handwired/nicekey/keymaps/default/keymap.c
501index d7539a5c175e362b559815092bc1bd8959c0cef3..a4391eaa30042efe2141301ad2b879a8043eec4e 100644
502--- a/keyboards/handwired/nicekey/keymaps/default/keymap.c
503+++ b/keyboards/handwired/nicekey/keymaps/default/keymap.c
504@@ -116,7 +116,7 @@ PGM_P const sentences[] PROGMEM = {
505 
506 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
507     if (record->event.pressed) {
508-        int sentences_size = sizeof(sentences) / sizeof(sentences[0]);
509+        int sentences_size = ARRAY_SIZE(sentences);
510         int i = rand() % sentences_size;
511 
512         switch (keycode) {
513diff --git a/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c b/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c
514index ecf67d3b3c6cae0ab85fb3271268df90ba5d1789..65983c8dd8d87faa0d8ebd9c717848885c7bd3ec 100644
515--- a/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c
516+++ b/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c
517@@ -34,11 +34,11 @@ static const uint32_t waiting_values[] = {0, 1, 5, 10, 25, 50, 100, 150, 200, 50
518 void housekeeping_task_user(void) {
519     static uint32_t last_bench = 0;
520     if (timer_elapsed32(last_bench) > 500) {
521-        for (int i = 0; i < (sizeof(waiting_values) / sizeof(waiting_values[0])); i++) {
522+        for (int i = 0; i < ARRAY_SIZE(waiting_values); i++) {
523             wait_us_polling_with_strobe(waiting_values[i]);
524             wait_us(10);
525         }
526-        for (int i = 0; i < (sizeof(waiting_values) / sizeof(waiting_values[0])); i++) {
527+        for (int i = 0; i < ARRAY_SIZE(waiting_values); i++) {
528             wait_us_yield_with_strobe(waiting_values[i]);
529             wait_us(10);
530         }
531diff --git a/keyboards/handwired/promethium/keymaps/default/keymap.c b/keyboards/handwired/promethium/keymaps/default/keymap.c
532index 77f83361e6fe9e1d7987c26cac208f70385d1b7c..fcfcf51f24c7abc23d91d10e3680a2bd84c474dc 100644
533--- a/keyboards/handwired/promethium/keymaps/default/keymap.c
534+++ b/keyboards/handwired/promethium/keymaps/default/keymap.c
535@@ -55,7 +55,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
536 #endif
537 #include "outputselect.h"
538 #include "led.h"
539-#define COUNT(x) (sizeof (x) / sizeof (*(x)))
540+#define COUNT(x) ARRAY_SIZE((x))
541 
542 #define KC_WWWB KC_WWW_BACK
543 #define KC_WWWF KC_WWW_FORWARD
544diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
545index 31ce811e530d3d5b07bb1deaccdc15e1cc93cd73..4df95111a71f326233167d4446fc7273ff0114f4 100644
546--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
547+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
548@@ -57,7 +57,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
549 #include "outputselect.h"
550 #endif
551 #include "led.h"
552-#define COUNT(x) (sizeof (x) / sizeof (*(x)))
553+#define COUNT(x) ARRAY_SIZE((x))
554 
555 #define KC_WWWB KC_WWW_BACK
556 #define KC_WWWF KC_WWW_FORWARD
557diff --git a/keyboards/handwired/symmetric70_proto/matrix_debug/matrix.c b/keyboards/handwired/symmetric70_proto/matrix_debug/matrix.c
558index ba0018a70f81b7288080990e5952c76ac238dc6f..7e15761a98b68a4eda67d4d0fcb4d367ad22bc67 100644
559--- a/keyboards/handwired/symmetric70_proto/matrix_debug/matrix.c
560+++ b/keyboards/handwired/symmetric70_proto/matrix_debug/matrix.c
561@@ -159,7 +159,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
562         do {
563             MATRIX_DEBUG_DELAY_START();
564             is_pressed = false;
565-            for (uint8_t i = 0; i < sizeof(delay_ports) / sizeof(pin_t); i++) {
566+            for (uint8_t i = 0; i < ARRAY_SIZE(delay_ports); i++) {
567 #            ifdef MATRIX_IO_DELAY_MULSEL
568                 writePin(MATRIX_MUL_SELECT, delay_sel[i]);
569                 waitInputPinDelay();
570diff --git a/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h b/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h
571index a97b46e5e46d6fc50f64fc0ea8a06f631b6285ad..8c4f9d0d4b585ca589071cbe8b80c062bdb79e00 100644
572--- a/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h
573+++ b/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h
574@@ -110,7 +110,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
575     {{205, 250, 255}, {140, 215, 125}, false },
576     };
577 
578-    uint8_t gp_length = sizeof(gradient_presets)/sizeof(gradient_presets[0]);
579+    uint8_t gp_length = ARRAY_SIZE(gradient_presets);
580 
581     switch (keycode) {
582         case G1_HUI:
583diff --git a/keyboards/horrortroll/handwired_k552/keymaps/via/keymap_stuff.h b/keyboards/horrortroll/handwired_k552/keymaps/via/keymap_stuff.h
584index a97b46e5e46d6fc50f64fc0ea8a06f631b6285ad..8c4f9d0d4b585ca589071cbe8b80c062bdb79e00 100644
585--- a/keyboards/horrortroll/handwired_k552/keymaps/via/keymap_stuff.h
586+++ b/keyboards/horrortroll/handwired_k552/keymaps/via/keymap_stuff.h
587@@ -110,7 +110,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
588     {{205, 250, 255}, {140, 215, 125}, false },
589     };
590 
591-    uint8_t gp_length = sizeof(gradient_presets)/sizeof(gradient_presets[0]);
592+    uint8_t gp_length = ARRAY_SIZE(gradient_presets);
593 
594     switch (keycode) {
595         case G1_HUI:
596diff --git a/keyboards/horrortroll/handwired_k552/lib/wave.c b/keyboards/horrortroll/handwired_k552/lib/wave.c
597index 79b4e0ced7f3dd4969a1e301768cf58cf4f1095f..700f73aee5d530f713977b055acb3d5a0f0587bb 100644
598--- a/keyboards/horrortroll/handwired_k552/lib/wave.c
599+++ b/keyboards/horrortroll/handwired_k552/lib/wave.c
600@@ -68,7 +68,7 @@ void add_keylog(uint16_t keycode) {
601         keycode = 0;
602     }
603 
604-    if (keycode < (sizeof(code_to_name) / sizeof(char))) {
605+    if (keycode < ARRAY_SIZE(code_to_name)) {
606         char log_char = pgm_read_byte(&code_to_name[keycode]);
607 
608         for (uint8_t j = 0; j < OLED_FONT_WIDTH; j++) {
609diff --git a/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/keymap.c b/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/keymap.c
610index 667e8859e2df29e8321ac51fbc057dd409fb87ed..38eb656892beeb0184407c356653628a4374f6e6 100644
611--- a/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/keymap.c
612+++ b/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/keymap.c
613@@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
614 };
615 
616 const uint8_t number_leds[] = {8, 9, 10, 11, 12, 13, 15, 16, 17};
617-const uint8_t number_leds_size = sizeof(number_leds) / sizeof(uint8_t);
618+const uint8_t number_leds_size = ARRAY_SIZE(number_leds);
619 
620 bool led_update_user(led_t led_state) {
621     for (uint8_t i = 0; i < number_leds_size; i++)
622diff --git a/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c b/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c
623index ddcf30b68dd471af375add79a88adb31ff42f80c..eee2eaf628a65ef414b1e426bee05ab693ee2455 100644
624--- a/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c
625+++ b/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c
626@@ -129,8 +129,7 @@ static uint8_t COLOR_PATTERNS[][COLOR_PATTERN_RGB_COUNT][3] = {
627         { 66,  66,  66}, { 45,  45,  45}, { 23,  23,  23},
628     },
629 };
630-static const uint8_t COLOR_PATTERNS_COUNT = (
631-        sizeof(COLOR_PATTERNS) / sizeof(COLOR_PATTERNS[0]));
632+static const uint8_t COLOR_PATTERNS_COUNT = ARRAY_SIZE(COLOR_PATTERNS);
633 
634 /**
635  * trimed down version of `ISSI3733_LED_MAP`:
636diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c
637index 50b1b6471c76ac9460cee4d519fee15bdd82c511..9dbd4d3f19f329811d47973bfc6a56bc71434f54 100644
638--- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c
639+++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c
640@@ -83,7 +83,7 @@ static const encoder_key PROGMEM encoder_keys[] = {
641     {"Play", "", "", KC_MEDIA_PLAY_PAUSE}
642 };
643 
644-#define NUMBER_OF_ENCODER_KEYS sizeof(encoder_keys)/sizeof(encoder_keys[0])
645+#define NUMBER_OF_ENCODER_KEYS ARRAY_SIZE(encoder_keys)
646 
647 static uint8_t selected_encoder_key_id = 0;
648 static encoder_key selected_encoder_key;
649diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c
650index 267d3add14de6b936c7d044b1562d4dc5cb3db77..9b28c6867289d1894bb7dcc7c2ea7d34148e98a5 100644
651--- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c
652+++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c
653@@ -82,7 +82,7 @@ static const encoder_key PROGMEM encoder_keys[] = {
654     {"Play", "", "", KC_MEDIA_PLAY_PAUSE}
655 };
656 
657-#define NUMBER_OF_ENCODER_KEYS sizeof(encoder_keys)/sizeof(encoder_keys[0])
658+#define NUMBER_OF_ENCODER_KEYS ARRAY_SIZE(encoder_keys)
659 
660 static uint8_t selected_encoder_key_id = 0;
661 static encoder_key selected_encoder_key;
662diff --git a/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c b/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
663index 5c22abee3fbe065c25e24cf0422d918b964247fd..a8f1d488d4fb3049aa453984a3269071cc0ee044 100755
664--- a/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
665+++ b/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
666@@ -71,7 +71,7 @@ static const keycodedescType PROGMEM keyselection[] = {
667         {"FLASH",   QK_BOOT},   // firmware flash mode
668 };
669 
670-#define MAX_KEYSELECTION sizeof(keyselection)/sizeof(keyselection[0])
671+#define MAX_KEYSELECTION ARRAY_SIZE(keyselection)
672 
673 static uint8_t selectedkey_idx = 0;
674 static keycodedescType selectedkey_rec;
675diff --git a/keyboards/mechwild/murphpad/keymaps/jonavin/keymap.c b/keyboards/mechwild/murphpad/keymaps/jonavin/keymap.c
676index b0288c5d7a5e66202488f06f2e31919a829e5b12..58db97d093b9ad8d6aa62dc23d9b1fbd974ee48c 100644
677--- a/keyboards/mechwild/murphpad/keymaps/jonavin/keymap.c
678+++ b/keyboards/mechwild/murphpad/keymaps/jonavin/keymap.c
679@@ -178,7 +178,7 @@ static const keycodedescType PROGMEM keyselection[] = {
680         {"QK_BOOT",   QK_BOOT},   // firmware flash mode
681 };
682 
683-#define MAX_KEYSELECTION sizeof(keyselection)/sizeof(keyselection[0])
684+#define MAX_KEYSELECTION ARRAY_SIZE(keyselection)
685 
686 static uint8_t selectedkey_idx = 0;
687 static keycodedescType selectedkey_rec;
688diff --git a/keyboards/mechwild/puckbuddy/puckbuddy.c b/keyboards/mechwild/puckbuddy/puckbuddy.c
689index b82d06f56516b01b44e29433ac4157a13361bfc0..495cb7e825dfe32ab6f078308a59aec0cbf3957f 100644
690--- a/keyboards/mechwild/puckbuddy/puckbuddy.c
691+++ b/keyboards/mechwild/puckbuddy/puckbuddy.c
692@@ -16,7 +16,7 @@
693 
694 keyboard_config_t keyboard_config;
695 uint16_t          dpi_array[] = GLIDEPOINT_DPI_OPTIONS;
696-#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
697+#define DPI_OPTION_SIZE ARRAY_SIZE(dpi_array)
698 
699 void board_init(void) {
700     // B9 is configured as I2C1_SDA in the board file; that function must be
701diff --git a/keyboards/mitosis/keymaps/datagrok/keymap.c b/keyboards/mitosis/keymaps/datagrok/keymap.c
702index 7c77eb882f6606359f6cf354ca73b8fdb6e7ff7a..848af3de0083a1c7a6b594246094cfa94f4ec6bd 100644
703--- a/keyboards/mitosis/keymaps/datagrok/keymap.c
704+++ b/keyboards/mitosis/keymaps/datagrok/keymap.c
705@@ -97,7 +97,7 @@ const bool defaultlayers[] = {
706   [_xN] = false,
707   [_xF] = false,
708 };
709-const size_t defaultlayers_n = sizeof(defaultlayers) / sizeof(defaultlayers[0]);
710+const size_t defaultlayers_n = ARRAY_SIZE(defaultlayers);
711 
712 // New keycode KC_LAYO rotates between available default layers (for e.g.,
713 // selecting a base layout). Shift+KC_LAYO makes the current one persistent.
714diff --git a/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/keymap_stuff.h b/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/keymap_stuff.h
715index c8b80153630efd605aabcb59f000af035b7ca661..eea031698a07f9c705cf6a6b58d5e37eb0a8f016 100644
716--- a/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/keymap_stuff.h
717+++ b/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/keymap_stuff.h
718@@ -116,7 +116,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
719     {{205, 250, 255}, {140, 215, 125}, false },
720     };
721 
722-    uint8_t gp_length = sizeof(gradient_presets)/sizeof(gradient_presets[0]);
723+    uint8_t gp_length = ARRAY_SIZE(gradient_presets);
724 
725     switch (keycode) {
726         case G1_HUI:
727diff --git a/keyboards/mxss/keymaps/default/keymap.c b/keyboards/mxss/keymaps/default/keymap.c
728index 519547f15ab54b3c79581326ac6be2a473dde72f..3b7150f7fab52fccb5fd4c7c6117a3dd49ca9396 100644
729--- a/keyboards/mxss/keymaps/default/keymap.c
730+++ b/keyboards/mxss/keymaps/default/keymap.c
731@@ -27,7 +27,7 @@ hs_set layer_colors[4] = {
732     [2] = {.hue = 36,    .sat = 255},  // Color for Layer 2
733     [3] = {.hue = 185,   .sat = 255},  // Color for Layer 3
734 };
735-size_t lc_size = sizeof(layer_colors) / sizeof(uint16_t);
736+size_t lc_size = ARRAY_SIZE(layer_colors);
737 
738 // Use NEW_SAFE_RANGE to define new custom keycodes in order to not overwrite the ones used for front LED control
739 enum custom_keycodes {