Open-source keyboard firmware for Atmel AVR and Arm USB families
This report presents the forensic synthetic code analysis of qmk/qmk_firmware, a C project with 20,531 GitHub stars. SynthScan v2.0 examined 1,803,866 lines of code across 20570 source files, recording 6080 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 4.9 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 6080 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.cfg | 21 | COMMENT | |
| LOW | setup.cfg | 41 | # | COMMENT |
| LOW | setup.cfg | 61 | # definitions. | COMMENT |
| LOW | setup.cfg | 81 | # | COMMENT |
| LOW | setup.cfg | 101 | # | COMMENT |
| LOW | setup.cfg | 121 | # config = { | COMMENT |
| LOW | setup.cfg | 141 | COMMENT | |
| LOW | setup.cfg | 161 | # 'key2': value1 + | COMMENT |
| LOW | setup.cfg | 181 | # Use spaces around default or named assigns. | COMMENT |
| LOW | setup.cfg | 201 | # | COMMENT |
| LOW | setup.cfg | 241 | # Set to True to prefer splitting before '&', '|' or '^' rather than | COMMENT |
| LOW | setup.cfg | 261 | # | COMMENT |
| LOW | setup.cfg | 281 | split_before_named_assigns=True | COMMENT |
| LOW | setup.cfg | 321 | split_penalty_excess_character=7000 | COMMENT |
| LOW | platforms/pin_defs.h | 21 | #if __has_include("_pin_defs.h") | COMMENT |
| LOW | platforms/progmem.h | 1 | #pragma once | COMMENT |
| LOW | platforms/eeprom.h | 21 | void eeprom_update_dword(uint32_t *__p, uint32_t __value); | COMMENT |
| LOW | platforms/eeprom.h | 41 | # define TOTAL_EEPROM_BYTE_COUNT (WEAR_LEVELING_LOGICAL_SIZE) | COMMENT |
| LOW | platforms/eeprom.h | 61 | # include "eeprom_samd.h" | COMMENT |
| LOW | platforms/eeprom.h | 81 | # error Unknown EEPROM driver. | COMMENT |
| LOW | platforms/wait.h | 21 | extern "C" { | COMMENT |
| LOW | platforms/synchronization_util.c | 1 | // Copyright 2023 Sergey Vlasov (@sigprof) | COMMENT |
| LOW | platforms/atomic_util.h | 21 | COMMENT | |
| LOW | platforms/gpio.h | 21 | # include_next "gpio.h" /* Include the platforms gpio.h */ | COMMENT |
| LOW | platforms/lv_conf.h | 221 | *LV_LOG_LEVEL_USER Only logs added by the user | COMMENT |
| LOW | platforms/lv_conf.h | 261 | /*1: Show CPU usage and FPS count*/ | COMMENT |
| LOW | platforms/lv_conf.h | 281 | /*Change the built in (v)snprintf functions*/ | COMMENT |
| LOW | platforms/lv_conf.h | 341 | #define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/ | COMMENT |
| LOW | platforms/lv_conf.h | 361 | #define LV_FONT_MONTSERRAT_26 0 | COMMENT |
| LOW | platforms/lv_conf.h | 481 | #ifndef LV_USE_LABEL | COMMENT |
| LOW | platforms/lv_conf.h | 521 | #if LV_USE_CALENDAR | COMMENT |
| LOW | platforms/lv_conf.h | 621 | COMMENT | |
| LOW | platforms/lv_conf.h | 681 | #define LV_FREETYPE_CACHE_FT_FACES 0 | COMMENT |
| LOW | platforms/lv_conf.h | 741 | #ifndef LV_USE_DEMO_MUSIC | COMMENT |
| LOW | platforms/suspend.h | 21 | #ifndef USB_SUSPEND_WAKEUP_DELAY | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 21 | # include <hal.h> | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 41 | # define A13 PAL_LINE(GPIOA, 13) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 61 | # define B0 PAL_LINE(GPIOB, 0) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 81 | # define B20 PAL_LINE(GPIOB, 20) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 101 | # define C7 PAL_LINE(GPIOC, 7) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 121 | # define C27 PAL_LINE(GPIOC, 27) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 141 | # define D14 PAL_LINE(GPIOD, 14) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 161 | # define E1 PAL_LINE(GPIOE, 1) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 181 | # define E21 PAL_LINE(GPIOE, 21) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 201 | # define F8 PAL_LINE(GPIOF, 8) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 221 | # define G12 PAL_LINE(GPIOG, 12) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 241 | # define I0 PAL_LINE(GPIOI, 0) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 261 | # define J4 PAL_LINE(GPIOJ, 4) | COMMENT |
| LOW | platforms/chibios/_pin_defs.h | 281 | # define K3 PAL_LINE(GPIOK, 3) | COMMENT |
| LOW | platforms/chibios/gd32v_compatibility.h | 21 | * we just redefine the GD32 names. */ | COMMENT |
| LOW | platforms/chibios/gd32v_compatibility.h | 41 | #define STM32_DMA_CR_MINC GD32_DMA_CTL_MNAGA | COMMENT |
| LOW | platforms/chibios/gd32v_compatibility.h | 61 | # define ADC_SMPR2_SMP_AN1 ADC_SAMPT1_SMP_SPT1 | COMMENT |
| LOW | platforms/chibios/gd32v_compatibility.h | 81 | /* FLASH redefines */ | COMMENT |
| LOW | platforms/chibios/gd32v_compatibility.h | 101 | # if !defined(SERIAL_USART_CR1) | COMMENT |
| LOW | platforms/chibios/gd32v_compatibility.h | 121 | # define SPI_CR1_BR_2 SPI_CTL0_PSC_2 | COMMENT |
| LOW | platforms/chibios/config.h | 1 | // Copyright 2023 Nick Brassel (@tzarc) | COMMENT |
| LOW | platforms/chibios/suspend.c | 1 | /* TODO */ | COMMENT |
| LOW | platforms/chibios/interrupt_handlers.c | 1 | // Copyright 2023 Nick Brassel (@tzarc) | COMMENT |
| LOW | platforms/chibios/interrupt_handlers.c | 41 | #endif // ECC_ERRORS_TRIGGER_NMI_INTERRUPT | COMMENT |
| LOW | platforms/chibios/atomic_util.h | 41 | } | COMMENT |
| 4962 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 15 | //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 17 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 19 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 21 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 23 | //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 25 | // └────────┴────────┴────────┘ └────────┴────────┴────────┘ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 29 | //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 31 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 33 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 35 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 37 | //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 39 | // └────────┴────────┴────────┘ └────────┴────────┴────────┘ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 43 | //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 45 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 47 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 49 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 51 | //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_lm/keymaps/default/keymap.c | 53 | // └────────┴────────┴────────┘ └────────┴────────┴────────┘ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 15 | //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 17 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 19 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 21 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 23 | //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 25 | // └────────┴────────┴────────┘ └────────┴────────┴────────┘ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 29 | //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 31 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 33 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 35 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 37 | //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 39 | // └────────┴────────┴────────┘ └────────┴────────┴────────┘ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 43 | //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 45 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 47 | //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 49 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 51 | //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/iris_ce/keymaps/default/keymap.c | 53 | // └────────┴────────┴────────┘ └────────┴────────┴────────┘ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 11 | //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 13 | //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬─── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 15 | //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬─ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 17 | //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴─ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 19 | //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 21 | //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 25 | //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬─────── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 27 | //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬─── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 29 | //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬─ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 31 | //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴─ | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 33 | //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──── | COMMENT |
| MEDIUM⚡ | keyboards/keebio/tragicforce68/keymaps/default/keymap.c | 35 | //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 42 | //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬──────── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 44 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼──────── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 46 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼──────── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 48 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼──────── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 50 | //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬──── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 52 | //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 56 | //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬──────── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 58 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼──────── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 60 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼──────── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 62 | //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼──────── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 64 | //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬──── | COMMENT |
| MEDIUM⚡ | keyboards/redox/keymaps/default/keymap.c | 66 | //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ | COMMENT |
| 787 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | util/polling_rate.py | 12 | CODE | |
| LOW | util/polling_rate.py | 34 | CODE | |
| LOW | util/uf2conv.py | 37 | CODE | |
| LOW | util/uf2conv.py | 168 | CODE | |
| LOW | util/uf2conv.py | 210 | CODE | |
| LOW | util/uf2conv.py | 278 | CODE | |
| LOW | util/stm32eeprom_parser.py | 105 | CODE | |
| LOW | keyboards/signum/3_0/keymaps/default/generate_km.py | 20 | CODE | |
| LOW | keyboards/signum/3_0/keymaps/default/generate_km.py | 81 | CODE | |
| LOW | keyboards/ferris/keymaps/json2crab.py | 22 | CODE | |
| LOW | keyboards/ergodox_ez/util/compile_keymap.py | 157 | CODE | |
| LOW | keyboards/ergodox_ez/util/compile_keymap.py | 569 | CODE | |
| LOW | …/ergodox_ez/util/keymap_beautifier/KeymapBeautifier.py | 364 | CODE | |
| LOW | lib/python/kle2xy.py | 49 | CODE | |
| LOW | lib/python/qmk/submodules.py | 6 | CODE | |
| LOW | lib/python/qmk/painter.py | 326 | CODE | |
| LOW | lib/python/qmk/painter.py | 409 | CODE | |
| LOW | lib/python/qmk/userspace.py | 130 | CODE | |
| LOW | lib/python/qmk/userspace.py | 154 | CODE | |
| LOW | lib/python/qmk/json_encoders.py | 100 | CODE | |
| LOW | lib/python/qmk/json_encoders.py | 128 | CODE | |
| LOW | lib/python/qmk/json_encoders.py | 161 | CODE | |
| LOW | lib/python/qmk/json_encoders.py | 195 | CODE | |
| LOW | lib/python/qmk/keymap.py | 83 | CODE | |
| LOW | lib/python/qmk/keymap.py | 153 | CODE | |
| LOW | lib/python/qmk/keymap.py | 209 | CODE | |
| LOW | lib/python/qmk/keymap.py | 330 | CODE | |
| LOW | lib/python/qmk/keymap.py | 392 | CODE | |
| LOW | lib/python/qmk/keymap.py | 479 | CODE | |
| LOW | lib/python/qmk/keymap.py | 156 | CODE | |
| LOW | lib/python/qmk/compilation_database.py | 39 | CODE | |
| LOW | lib/python/qmk/compilation_database.py | 69 | CODE | |
| LOW | lib/python/qmk/c_parse.py | 61 | CODE | |
| LOW | lib/python/qmk/c_parse.py | 114 | CODE | |
| LOW | lib/python/qmk/c_parse.py | 178 | CODE | |
| LOW | lib/python/qmk/c_parse.py | 237 | CODE | |
| LOW | lib/python/qmk/makefile.py | 6 | CODE | |
| LOW | lib/python/qmk/search.py | 229 | CODE | |
| LOW | lib/python/qmk/search.py | 268 | CODE | |
| LOW | lib/python/qmk/search.py | 272 | CODE | |
| LOW | lib/python/qmk/info.py | 70 | CODE | |
| LOW | lib/python/qmk/info.py | 625 | CODE | |
| LOW | lib/python/qmk/info.py | 671 | CODE | |
| LOW | lib/python/qmk/info.py | 719 | CODE | |
| LOW | lib/python/qmk/info.py | 739 | CODE | |
| LOW | lib/python/qmk/info.py | 809 | CODE | |
| LOW | lib/python/qmk/info.py | 906 | CODE | |
| LOW | lib/python/qmk/info.py | 933 | CODE | |
| LOW | lib/python/qmk/info.py | 1009 | CODE | |
| LOW | lib/python/qmk/commands.py | 102 | CODE | |
| LOW | lib/python/qmk/flashers.py | 80 | CODE | |
| LOW | lib/python/qmk/flashers.py | 110 | CODE | |
| LOW | lib/python/qmk/flashers.py | 217 | CODE | |
| LOW | lib/python/qmk/keyboard.py | 234 | CODE | |
| LOW | lib/python/qmk/cli/via2json.py | 23 | CODE | |
| LOW | lib/python/qmk/cli/mass_compile.py | 19 | CODE | |
| LOW | lib/python/qmk/cli/license_check.py | 54 | CODE | |
| LOW | lib/python/qmk/cli/license_check.py | 68 | CODE | |
| LOW | lib/python/qmk/cli/info.py | 184 | CODE | |
| LOW | lib/python/qmk/cli/migrate.py | 31 | CODE | |
| 17 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | util/polling_rate.py | 26 | def usb_hid_interface_subclass(subclass): | CODE |
| LOW | util/polling_rate.py | 34 | def usb_hid_interface_protocol(subclass, protocol): | CODE |
| LOW | util/polling_rate.py | 47 | def usb_interface_polling_rate(speed, interval): | CODE |
| LOW | …/ergodox_ez/util/keymap_beautifier/KeymapBeautifier.py | 107 | def index_conversion_map_reversed(self, conversion_map): | STRING |
| LOW | …/ergodox_ez/util/keymap_beautifier/KeymapBeautifier.py | 192 | def calculate_column_max_widths(self, key_symbols): | STRING |
| LOW | lib/python/qmk/painter_qff.py | 163 | def _generate_font_glyphs_list(use_ascii, unicode_glyphs): | CODE |
| LOW | lib/python/qmk/community_modules.py | 45 | def find_available_module_paths(): | CODE |
| LOW | lib/python/qmk/build_targets.py | 148 | def generate_compilation_database(self, build_target: str = None, skip_clean: bool = False, **env_vars) -> None: | CODE |
| LOW | lib/python/qmk/keymap.py | 56 | def _generate_encodermap_table(keymap_json): | STRING |
| LOW | lib/python/qmk/keymap.py | 70 | def _generate_dipswitchmap_table(keymap_json): | STRING |
| LOW | lib/python/qmk/keymap.py | 83 | def _generate_macros_function(keymap_json): | STRING |
| LOW | lib/python/qmk/keymap.py | 156 | def _impl_find_keymap_from_dir(relative_path): | STRING |
| LOW | lib/python/qmk/importers.py | 40 | def _extract_kbfirmware_layout(kbf_data): | CODE |
| LOW | lib/python/qmk/importers.py | 57 | def _extract_kbfirmware_keymap(kbf_data): | CODE |
| LOW | lib/python/qmk/compilation_database.py | 105 | def write_compilation_database(keyboard: str = None, keymap: str = None, output_path: Path = QMK_FIRMWARE / 'compile_com | CODE |
| LOW | lib/python/qmk/json_schema.py | 17 | def _dict_raise_on_duplicates(ordered_pairs): | CODE |
| LOW | lib/python/qmk/keycodes.py | 19 | def _potential_search_versions(version, lang=None): | CODE |
| LOW | lib/python/qmk/info.py | 70 | def _find_invalid_encoder_index(info_data): | CODE |
| LOW | lib/python/qmk/info.py | 504 | def _extract_split_handedness(info_data, config_c): | CODE |
| LOW | lib/python/qmk/info.py | 558 | def _extract_split_right_pins(info_data, config_c): | CODE |
| LOW | lib/python/qmk/flashers.py | 48 | def _check_dfu_programmer_version(): | CODE |
| LOW | lib/python/qmk/keyboard.py | 74 | def keyboard_alias_definitions(): | CODE |
| LOW | lib/python/qmk/tests/test_qmk_keymap.py | 4 | def test_generate_c_pytest_basic(): | CODE |
| LOW | lib/python/qmk/tests/test_qmk_keymap.py | 37 | def test_generate_json_pytest_basic(): | STRING |
| LOW⚡ | lib/python/qmk/tests/test_cli_commands.py | 111 | def test_list_keymaps_community(): | CODE |
| LOW⚡ | lib/python/qmk/tests/test_cli_commands.py | 117 | def test_list_keymaps_kb_only(): | CODE |
| LOW⚡ | lib/python/qmk/tests/test_cli_commands.py | 123 | def test_list_keymaps_vendor_kb(): | CODE |
| LOW⚡ | lib/python/qmk/tests/test_cli_commands.py | 129 | def test_list_keymaps_vendor_kb_rev(): | CODE |
| LOW⚡ | lib/python/qmk/tests/test_cli_commands.py | 135 | def test_list_keymaps_no_keyboard_found(): | CODE |
| LOW | lib/python/qmk/tests/test_cli_commands.py | 224 | def test_info_keyboard_render(): | STRING |
| LOW | lib/python/qmk/tests/test_cli_commands.py | 287 | def test_generate_rgb_breathe_table(): | STRING |
| LOW | lib/python/qmk/tests/test_cli_commands.py | 322 | def test_format_json_keyboard(): | STRING |
| LOW | lib/python/qmk/tests/test_cli_commands.py | 334 | def test_format_json_keyboard_auto(): | STRING |
| LOW | lib/python/qmk/tests/test_cli_commands.py | 340 | def test_format_json_keymap_auto(): | STRING |
| LOW | lib/python/qmk/tests/test_cli_commands.py | 384 | def test_find_multiple_conditions(): | STRING |
| LOW | lib/python/qmk/cli/__init__.py | 18 | def _get_default_distrib_path(): | CODE |
| LOW | lib/python/qmk/cli/__init__.py | 153 | def _find_broken_requirements(requirements): | CODE |
| LOW⚡ | lib/python/qmk/cli/license_check.py | 37 | def _determine_suffix_condition(extensions): | CODE |
| LOW⚡ | lib/python/qmk/cli/license_check.py | 38 | def _default_suffix_condition(s): | CODE |
| LOW⚡ | lib/python/qmk/cli/license_check.py | 46 | def _specific_suffix_condition(s): | CODE |
| LOW | lib/python/qmk/cli/license_check.py | 68 | def _detect_license_from_file_contents(filename, absolute=False, short=False): | CODE |
| LOW | lib/python/qmk/cli/lint.py | 171 | def _chibios_conf_includenext_check(target): | CODE |
| LOW | lib/python/qmk/cli/lint.py | 180 | def _rules_mk_assignment_only(rules_mk): | CODE |
| LOW | lib/python/qmk/cli/lint.py | 206 | def _handle_duplicating_code_defaults(kb, info): | CODE |
| LOW | lib/python/qmk/cli/painter/make_font.py | 36 | def painter_convert_font_image(cli): | CODE |
| LOW | lib/python/qmk/cli/ci/validate_keyboard_targets.py | 9 | def ci_validate_keyboard_targets(cli): | CODE |
| LOW | lib/python/qmk/cli/doctor/check.py | 84 | def _check_arm_gcc_installation(): | CODE |
| LOW | lib/python/qmk/cli/doctor/check.py | 124 | def _check_avr_gcc_installation(): | CODE |
| LOW | lib/python/qmk/cli/doctor/check.py | 172 | def _check_dfu_programmer_version(): | CODE |
| LOW⚡ | lib/python/qmk/cli/doctor/main.py | 30 | def _parse_toolchain_release_file(file): | CODE |
| LOW⚡ | lib/python/qmk/cli/doctor/main.py | 40 | def _parse_flashutils_release_file(file): | CODE |
| LOW | lib/python/qmk/cli/new/keymap.py | 23 | def _list_available_converters(kb_name): | CODE |
| LOW | lib/python/qmk/cli/new/keyboard.py | 61 | def select_default_bootloader(mcu): | CODE |
| LOW | lib/python/qmk/cli/new/keyboard.py | 134 | def prompt_heading_subheading(heading, subheading): | CODE |
| LOW | lib/python/qmk/cli/generate/keymap_h.py | 11 | def _generate_keycodes_function(keymap_json): | CODE |
| LOW | lib/python/qmk/cli/generate/rgb_breathe_table.py | 68 | def generate_rgb_breathe_table(cli): | STRING |
| LOW | lib/python/qmk/cli/generate/config_h.py | 165 | def generate_led_animations_config(feature, led_feature_json, config_h_lines, enable_prefix, animation_prefix): | CODE |
| LOW | lib/python/qmk/cli/generate/make_dependencies.py | 20 | def generate_make_dependencies(cli): | CODE |
| LOW | lib/python/qmk/cli/generate/community_modules.py | 70 | def _render_api_implementations(api, module): | CODE |
| LOW | lib/python/qmk/cli/generate/community_modules.py | 111 | def _render_core_implementation(api, modules): | CODE |
| 14 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | lib/python/qmk/cli/mass_compile.py | 92 | @{{ grep '\\[ERRORS\\]' "{build_log}" >/dev/null 2>&1 && printf "Build %-64s \\e[1;31m[ERRORS]\\e[0m\\n" "{keyboard_nam | CODE |
| HIGH | lib/python/qmk/cli/mass_compile.py | 93 | || {{ grep '\\[WARNINGS\\]' "{build_log}" >/dev/null 2>&1 && printf "Build %-64s \\e[1;33m[WARNINGS]\\e[0m\\n" "{keybo | CODE |
| HIGH | lib/python/qmk/cli/mass_compile.py | 104 | @rm -rf "{builddir}/{target_filename}.elf" 2>/dev/null || true | CODE |
| HIGH | lib/python/qmk/cli/mass_compile.py | 105 | @rm -rf "{builddir}/{target_filename}.map" 2>/dev/null || true | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | util/install_udev.sh | 77 | # Create a temporary directory for downloads | COMMENT |
| MEDIUM | .github/workflows/bootstrap_testing.yml | 134 | # Create a test user for the bootstrap script | COMMENT |
| MEDIUM | lib/python/qmk/painter_qff.py | 272 | # Create the output image | COMMENT |
| MEDIUM | lib/python/qmk/cli/mass_compile.py | 43 | # This file is auto-generated by qmk mass-compile | COMMENT |
| MEDIUM | lib/python/qmk/cli/painter/make_font.py | 19 | # Create the font object | COMMENT |
| MEDIUM | lib/python/qmk/cli/painter/make_font.py | 40 | # Create the font object | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | keyboards/acheron/apollo/readme.md | 21 | ### Step 1: enter bootloader | COMMENT |
| LOW⚡ | keyboards/acheron/apollo/readme.md | 29 | ### Step 2: compile firmware | COMMENT |
| LOW⚡ | keyboards/acheron/apollo/readme.md | 38 | ### Step 3: flashing | COMMENT |
| LOW | docs/configurator_step_by_step.md | 5 | ## Step 1: Select Your Keyboard | COMMENT |
| LOW⚡ | docs/configurator_step_by_step.md | 23 | ## Step 2: Select Your Keyboard Layout | COMMENT |
| LOW⚡ | docs/configurator_step_by_step.md | 31 | ## Step 3: Name Your Keymap | COMMENT |
| LOW⚡ | docs/configurator_step_by_step.md | 39 | ## Step 4: Define Your Keymap | COMMENT |
| LOW | docs/configurator_step_by_step.md | 58 | ## Step 5: Save Your Keymap for Future Changes | COMMENT |
| LOW | docs/configurator_step_by_step.md | 66 | ## Step 6: Compile Your Firmware File | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/python/qmk/keymap.py | 202 | except Exception as e: | STRING |
| LOW | lib/python/qmk/json_schema.py | 44 | except Exception as e: | CODE |
| LOW | lib/python/qmk/info.py | 701 | except Exception as e: | CODE |
| LOW | lib/python/qmk/info.py | 781 | except Exception as e: | CODE |
| LOW | lib/python/qmk/info.py | 826 | except Exception as e: | CODE |
| LOW | lib/python/qmk/cli/__init__.py | 24 | except Exception: | CODE |
| MEDIUM | lib/python/qmk/cli/__init__.py | 237 | _eprint('Error: Your Python is too old! Please upgrade to Python 3.9 or later.') | CODE |
| LOW | lib/python/qmk/cli/kle2json.py | 39 | except Exception as e: | CODE |
| LOW | lib/python/qmk/cli/ci/validate_aliases.py | 11 | except Exception: | CODE |
| MEDIUM | lib/python/qmk/cli/ci/validate_aliases.py | 8 | def _safe_keyboard_folder(target): | CODE |
| LOW⚡ | lib/python/qmk/cli/doctor/main.py | 36 | except Exception as e: | CODE |
| LOW⚡ | lib/python/qmk/cli/doctor/main.py | 46 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | util/stm32eeprom_parser.py | 19 | CODE | |
| LOW | util/ci/discord-results.py | 6 | CODE | |
| LOW | keyboards/ergodox_ez/util/compile_keymap.py | 11 | CODE | |
| LOW | keyboards/ergodox_ez/util/compile_keymap.py | 12 | CODE | |
| LOW | keyboards/ergodox_ez/util/compile_keymap.py | 13 | CODE | |
| LOW | keyboards/ergodox_ez/util/compile_keymap.py | 14 | CODE | |
| LOW | lib/python/qmk/cli/painter/__init__.py | 1 | CODE | |
| LOW | lib/python/qmk/cli/painter/__init__.py | 2 | CODE | |
| LOW | lib/python/qmk/cli/doctor/__init__.py | 5 | CODE | |
| LOW | lib/python/qmk/cli/userspace/__init__.py | 1 | CODE | |
| LOW | lib/python/qmk/cli/userspace/__init__.py | 2 | CODE | |
| LOW | lib/python/qmk/cli/userspace/__init__.py | 3 | CODE | |
| LOW | lib/python/qmk/cli/userspace/__init__.py | 4 | CODE | |
| LOW | lib/python/qmk/cli/userspace/__init__.py | 5 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/python/qmk/painter_qff.py | 352 | # Check if we have all the ASCII glyphs present | COMMENT |
| LOW | lib/python/qmk/flashers.py | 200 | # Check if the provided mcu has an avrdude-specific name, otherwise pass on what the user provided | COMMENT |
| LOW | lib/python/qmk/cli/via2json.py | 80 | # Check if passed LAYOUT is correct | COMMENT |
| LOW | lib/python/qmk/cli/kle2json.py | 32 | # Check if info.json exists, allow overwrite with force | COMMENT |
| LOW | lib/python/qmk/cli/generate/info_json.py | 92 | # Display the results | COMMENT |
| LOW | lib/python/qmk/cli/format/json.py | 114 | # Display the results if print was set | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/coding_conventions_python.md | 120 | Return the number of seconds since 1970 Jan 1 00:00 UTC. This function always returns an integer number of seconds. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | drivers/sensors/adns5050.c | 142 | // Don't forget to use the register map (as defined in the header file). | COMMENT |
| LOW | drivers/sensors/adns5050.c | 213 | // Don't forget to use the definitions for CPI in the header file. | COMMENT |
| LOW | tmk_core/protocol/vusb/usbconfig.h | 244 | * Don't forget to keep the array and this define in sync! | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | quantum/quantum_keycodes.h | 84 | #define RAG(kc) (QK_RALT | QK_RGUI | (kc)) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/__capabilities_inc.md | 1 | Lorem ipsum dolor sit amet. | CODE |
| LOW | docs/__capabilities_inc.md | 1 | Lorem ipsum dolor sit amet. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | util/env-bootstrap.sh | 24 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/python/qmk/tests/test_cli_commands.py | 12 | CODE |