You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
10 KiB

  1. # PR checklists
  2. This is a non-exhaustive checklist of what the QMK Collaborators will be checking when reviewing submitted PRs.
  3. If there are any inconsistencies with these recommendations, you're best off [creating an issue](https://github.com/qmk/qmk_firmware/issues/new) against this document, or getting in touch with a QMK Collaborator on [Discord](https://discord.gg/Uq7gcHh).
  4. ## General PRs
  5. - PR should be submitted using a non-`master` branch on the source repository
  6. - this does not mean you target a different branch for your PR, rather that you're not working out of your own master branch
  7. - if submitter _does_ use their own `master` branch, they'll be given a link to the ["how to git"](https://docs.qmk.fm/#/newbs_git_using_your_master_branch) page after merging -- (end of this document will contain the contents of the message)
  8. - newly-added directories and filenames must be lowercase
  9. - this rule may be relaxed if upstream sources originally had uppercase characters (e.g. ChibiOS, or imported files from other repositories etc.)
  10. - if there is enough justification (i.e. consistency with existing core files etc.) this can be relaxed
  11. - a board designer naming their keyboard with uppercase letters is not enough justification
  12. - valid license headers on all `*.c` and `*.h` source files
  13. - GPL2/GPL3 recommended for consistency
  14. - other licenses are permitted, however they must be GPL-compatible and must allow for redistribution. Using a different license will almost certainly delay a PR getting merged.
  15. - QMK Codebase "best practices" followed
  16. - this is not an exhaustive list, and will likely get amended as time goes by
  17. - `#pragma once` instead of `#ifndef` include guards in header files
  18. - no "old-school" GPIO/I2C/SPI functions used -- must use QMK abstractions unless justifiable (and laziness is not valid justification)
  19. - timing abstractions should be followed too:
  20. - `wait_ms()` instead of `_delay_ms()` (remove `#include <util/delay.h>` too)
  21. - `timer_read()` and `timer_read32()` etc. -- see [timer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/timer.h) for the timing APIs
  22. - if you think a new abstraction is useful, you're encouraged to:
  23. - prototype it in your own keyboard until it's feature-complete
  24. - discuss it with QMK Collaborators on Discord
  25. - refactor it as a separate core change
  26. - remove your specific copy in your board
  27. - rebase and fix all merge conflicts before opening the PR (in case you need help or advice, reach out to QMK Collaborators on Discord)
  28. ## Keymap PRs
  29. - `#include QMK_KEYBOARD_H` preferred to including specific board files
  30. - prefer layer `enum`s to `#define`s
  31. - require custom keycode `enum`s to `#define`s, first entry must have ` = SAFE_RANGE`
  32. - terminating backslash (`\`) in lines of LAYOUT macro parameters is superfluous
  33. - some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
  34. ## Keyboard PRs
  35. Closed PRs (for inspiration, previous sets of review comments will help you eliminate ping-pong of your own reviews):
  36. https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
  37. - `info.json`
  38. - valid URL
  39. - valid maintainer
  40. - displays correctly in Configurator (press Ctrl+Shift+I to preview local file, turn on fast input to verify ordering)
  41. - `readme.md`
  42. - standard template should be present
  43. - flash command has `:flash` at end
  44. - valid hardware availability link (unless handwired) -- private groupbuys are okay, but one-off prototypes will be questioned. If open-source, a link to files should be provided.
  45. - clear instructions on how to reset the board into bootloader mode
  46. - a picture about the keyboard and preferably about the PCB, too
  47. - `rules.mk`
  48. - removed `MIDI_ENABLE`, `FAUXCLICKY_ENABLE` and `HD44780_ENABLE`
  49. - modified `# Enable Bluetooth with the Adafruit EZ-Key HID` -> `# Enable Bluetooth`
  50. - no `(-/+size)` comments related to enabling features
  51. - remove the list of alternate bootloaders if one has been specified
  52. - no re-definitions of the default MCU parameters if same value, when compared to the equivalent MCU in [mcu_selection.mk](https://github.com/qmk/qmk_firmware/blob/master/quantum/mcu_selection.mk)
  53. - keyboard `config.h`
  54. - don't repeat `MANUFACTURER` in the `PRODUCT` value
  55. - no `#define DESCRIPTION`
  56. - no Magic Key Options, MIDI Options or HD44780 configuration
  57. - user preference configurable `#define`s need to be moved to keymap `config.h`
  58. - "`DEBOUNCE`" instead of "`DEBOUNCING_DELAY`"
  59. - bare minimum required code for a board to boot into QMK should be present
  60. - initialisation code for the matrix and critical devices
  61. - mirroring existing functionality of a commercial board (like custom keycodes and special animations etc.) should be handled through non-`default` keymaps
  62. - Vial-related files or changes will not be accepted, as they are not used by QMK firmware (no Vial-specific core code has been submitted or merged)
  63. - `keyboard.c`
  64. - empty `xxxx_xxxx_kb()` or other weak-defined default implemented functions removed
  65. - commented-out functions removed too
  66. - `matrix_init_board()` etc. migrated to `keyboard_pre_init_kb()`, see: [keyboard_pre_init*](https://docs.qmk.fm/#/custom_quantum_functions?id=keyboard_pre_init_-function-documentation)
  67. - prefer `CUSTOM_MATRIX = lite` if custom matrix used, allows for standard debounce, see [custom matrix 'lite'](https://docs.qmk.fm/#/custom_matrix?id=lite)
  68. - prefer LED indicator [Configuration Options](https://docs.qmk.fm/#/feature_led_indicators?id=configuration-options) to custom `led_update_*()` implementations where possible
  69. - `keyboard.h`
  70. - `#include "quantum.h"` appears at the top
  71. - `LAYOUT` macros should use standard definitions if applicable
  72. - use the Community Layout macro names where they apply (preferred above `LAYOUT`/`LAYOUT_all`)
  73. - keymap `config.h`
  74. - no duplication of `rules.mk` or `config.h` from keyboard
  75. - `keymaps/default/keymap.c`
  76. - `QMKBEST`/`QMKURL` removed (sheesh)
  77. - if using `MO(_LOWER)` and `MO(_RAISE)` keycodes or equivalent, and the keymap has an adjust layer when holding both keys -- if the keymap has no "direct-to-adjust" keycode (such as `MO(_ADJUST)`) then you should prefer to write...
  78. ```
  79. layer_state_t layer_state_set_user(layer_state_t state) {
  80. return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
  81. }
  82. ```
  83. ...instead of manually handling `layer_on()`, `update_tri_layer()` inside the keymap's `process_record_user()`.
  84. - default (and via) keymaps should be "pristine"
  85. - bare minimum to be used as a "clean slate" for another user to develop their own user-specific keymap
  86. - standard layouts preferred in these keymaps, if possible
  87. - default keymap should not enable VIA -- the VIA integration documentation requires a keymap called `via`
  88. - submitters can have a personal (or bells-and-whistles) keymap showcasing capabilities in the same PR but it shouldn't be embedded in the 'default' keymap
  89. - submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board
  90. - Do not include VIA json files in the PR. These do not belong in the QMK repository as they are not used by QMK firmware -- they belong in the [VIA Keyboard Repo](https://github.com/the-via/keyboards)
  91. Also, specific to ChibiOS:
  92. - **strong** preference to using existing ChibiOS board definitions.
  93. - a lot of the time, an equivalent Nucleo board can be used with a different flash size or slightly different model in the same family
  94. - example: For an STM32L082KZ, given the similarity to an STM32L073RZ, you can use `BOARD = ST_NUCLEO64_L073RZ` in rules.mk
  95. - QMK is migrating to not having custom board definitions if at all possible, due to the ongoing maintenance burden when upgrading ChibiOS
  96. - if a board definition is unavoidable, `board.c` must have a standard `__early_init()` (as per normal ChibiOS board defs) and an empty `boardInit()`:
  97. - see Arm/ChibiOS [early initialization](https://docs.qmk.fm/#/platformdev_chibios_earlyinit?id=board-init)
  98. - `__early_init()` should be replaced by either `early_hardware_init_pre()` or `early_hardware_init_post()` as appropriate
  99. - `boardInit()` should be migrated to `board_init()`
  100. ## Core PRs
  101. - must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline
  102. - other notes TBD
  103. - core is a lot more subjective given the breadth of posted changes
  104. ---
  105. ## Notes
  106. For when people use their own `master` branch, post this after merge:
  107. ```
  108. For future reference, we recommend against committing to your `master` branch as you've done here, because pull requests from modified `master` branches can make it more difficult to keep your QMK fork updated. It is highly recommended for QMK development – regardless of what is being done or where – to keep your master updated, but **NEVER** commit to it. Instead, do all your changes in a branch (branches are basically free in Git) and issue PRs from your branches when you're developing.
  109. There are instructions on how to keep your fork updated here:
  110. [**Best Practices: Your Fork's Master: Update Often, Commit Never**](https://docs.qmk.fm/#/newbs_git_using_your_master_branch)
  111. [Fixing Your Branch](https://docs.qmk.fm/#/newbs_git_resynchronize_a_branch) will walk you through fixing up your `master` branch moving forward. If you need any help with this just ask.
  112. Thanks for contributing!
  113. ```
  114. ## Review Process
  115. In general, we want to see two (or more) approvals that are meaningful (e.g. that have inspected code) before a PR will be considered for merge. These reviews are not limited to collaborators -- any community member willing to put in the time is welcomed (and encouraged). The only difference is that your checkmark won't be green, and that's fine!
  116. Additionally, PR reviews are something that is done in our free time. We are not paid nor compensated for the time we spend reviewing, as it is a labor of love. As such, this means that it can take time for us to get to your Pull Request. Things like family, or life can get in the way of us getting to PRs, and burnout is a serious concern. The QMK firmware repository averages 200 PRs opened and 200 PRs merged every month, so please have patience.