ci: add astyle pre-commit check

This commit is contained in:
Ivan Grokhotkov 2022-09-08 08:48:30 +02:00
parent d33ee17dee
commit 43741ec803
No known key found for this signature in database
GPG Key ID: 1E050E141B280628
6 changed files with 214 additions and 18 deletions

View File

@ -202,3 +202,9 @@ repos:
hooks: hooks:
- id: conventional-precommit-linter - id: conventional-precommit-linter
stages: [commit-msg] stages: [commit-msg]
- repo: https://github.com/espressif/astyle_py.git
rev: v1.0.2
hooks:
- id: astyle_py
# If you are modifying astyle version, update tools/format.sh as well
args: ['--astyle-version=3.4.7', '--rules=tools/ci/astyle_rules.yml']

View File

@ -193,15 +193,19 @@ For updating a single commit, it is possible to run ``dos2unix FILENAME`` and th
Formatting Your Code Formatting Your Code
^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
You can use ``astyle`` program to format your code according to the above recommendations. ESP-IDF uses Astyle to format source code. The configuration is stored in :project_file:`tools/ci/astyle-rules.yml` file.
If you are writing a file from scratch, or doing a complete rewrite, feel free to re-format the entire file. If you are changing a small portion of file, do not re-format the code you did not change. This will help others when they review your changes. Initially, all components are excluded from formatting checks. You can enable formatting checks for the component by removing it from ``components_not_formatted_temporary`` list. Then run:
To re-format a file, run:
.. code-block:: bash .. code-block:: bash
tools/format.sh components/my_component/file.c pre-commit run --files <path_to_files> astyle_py
Alternatively, you can run ``astyle_py`` manually. You can install it with ``pip install astyle_py==VERSION``. Make sure you have the same version installed as the one specified in :project_file:`.pre-commit-config.yaml` file. With ``astyle_py`` installed, run:
.. code-block:: bash
astyle_py --rules=$IDF_PATH/tools/ci/astyle-rules.yml <path-to-file>
Type Definitions Type Definitions

184
tools/ci/astyle-rules.yml Normal file
View File

@ -0,0 +1,184 @@
DEFAULT:
# These formatting options will be used by default.
# If you are modifying this, update tools/format.sh as well!
options: "--style=otbs --attach-namespaces --attach-classes --indent=spaces=4 --convert-tabs --align-reference=name --keep-one-line-statements --pad-header --pad-oper --unpad-paren --max-continuation-indent=120"
submodules:
# Don't format the code in submodules
check: false
include:
- "/components/bootloader/subproject/components/micro-ecc/micro-ecc/"
- "/components/bt/controller/lib_esp32/"
- "/components/bt/controller/lib_esp32c2/esp32c2-bt-lib/"
- "/components/bt/controller/lib_esp32c3_family/"
- "/components/bt/controller/lib_esp32c6/esp32c6-bt-lib/"
- "/components/bt/controller/lib_esp32h2/esp32h2-bt-lib/"
- "/components/bt/host/nimble/nimble/"
- "/components/cmock/CMock/"
- "/components/esp_coex/lib/"
- "/components/esp_phy/lib/"
- "/components/esp_wifi/lib/"
- "/components/heap/tlsf/"
- "/components/ieee802154/lib/"
- "/components/json/cJSON/"
- "/components/lwip/lwip/"
- "/components/mbedtls/mbedtls/"
- "/components/mqtt/esp-mqtt/"
- "/components/openthread/lib/"
- "/components/openthread/openthread/"
- "/components/protobuf-c/protobuf-c/"
- "/components/spiffs/spiffs/"
- "/components/unity/unity/"
components_not_formatted_temporary:
# Formatting in these components isn't checked yet.
# For each of these components, decide whether it should be formatted or not.
# 1. If yes, format the code and remove the component from the exclude list.
# Add special rules for upstream source files, if necessary.
# To reformat the files:
# - Remove the directory from this exclude list
# - Run 'git add .astyle-rules.yml'
# - Run 'pre-commit run --all-files'
# 2. If no, move it to 'components_not_formatted_permanent' section below.
check: false
include:
- "/components/app_trace/"
- "/components/app_update/"
- "/components/bootloader_support/"
- "/components/bootloader/"
- "/components/bt/"
- "/components/cmock/"
- "/components/console/"
- "/components/cxx/"
- "/components/driver/"
- "/components/efuse/"
- "/components/esp_adc/"
- "/components/esp_app_format/"
- "/components/esp_bootloader_format/"
- "/components/esp_coex/"
- "/components/esp_common/"
- "/components/esp_eth/"
- "/components/esp_event/"
- "/components/esp_gdbstub/"
- "/components/esp_hid/"
- "/components/esp_http_client/"
- "/components/esp_http_server/"
- "/components/esp_https_ota/"
- "/components/esp_https_server/"
- "/components/esp_hw_support/"
- "/components/esp_lcd/"
- "/components/esp_local_ctrl/"
- "/components/esp_mm/"
- "/components/esp_netif/"
- "/components/esp_partition/"
- "/components/esp_phy/"
- "/components/esp_pm/"
- "/components/esp_psram/"
- "/components/esp_ringbuf/"
- "/components/esp_rom/"
- "/components/esp_system/"
- "/components/esp_timer/"
- "/components/esp_wifi/"
- "/components/esp-tls/"
- "/components/espcoredump/"
- "/components/esptool_py/"
- "/components/fatfs/"
- "/components/freertos/"
- "/components/hal/"
- "/components/heap/"
- "/components/idf_test/"
- "/components/ieee802154/"
- "/components/json/"
- "/components/linux/"
- "/components/log/"
- "/components/lwip/"
- "/components/mbedtls/"
- "/components/mqtt/"
- "/components/newlib/"
- "/components/nvs_flash/"
- "/components/nvs_sec_provider/"
- "/components/openthread/"
- "/components/partition_table/"
- "/components/perfmon/"
- "/components/protobuf-c/"
- "/components/protocomm/"
- "/components/pthread/"
- "/components/riscv/"
- "/components/sdmmc/"
- "/components/soc/"
- "/components/spi_flash/"
- "/components/spiffs/"
- "/components/tcp_transport/"
- "/components/touch_element/"
- "/components/ulp/"
- "/components/unity/"
- "/components/usb/"
- "/components/vfs/"
- "/components/wear_levelling/"
- "/components/wifi_provisioning/"
- "/components/wpa_supplicant/"
- "/components/xtensa/"
- "/examples/bluetooth/"
- "/examples/build_system/"
- "/examples/common_components/"
- "/examples/custom_bootloader/"
- "/examples/cxx/"
- "/examples/ethernet/"
- "/examples/get-started/"
- "/examples/mesh/"
- "/examples/network/"
- "/examples/openthread/"
- "/examples/peripherals/"
- "/examples/phy/"
- "/examples/protocols/"
- "/examples/provisioning/"
- "/examples/security/"
- "/examples/storage/"
- "/examples/system/"
- "/examples/wifi/"
- "/examples/zigbee/"
- "/tools/esp_app_trace/test/"
- "/tools/mocks/"
- "/tools/test_apps/"
- "/tools/unit-test-app/"
components_not_formatted_permanent:
# Files which are not supposed to be formatted.
# Typically, these are:
# - Upstream source code we don't want to modify
# - Generated files
check: false
include:
# Xtensa header files (generated)
- "/components/xtensa/esp32/"
- "/components/xtensa/esp32s2/"
- "/components/xtensa/esp32s3/"
- "/components/xtensa/include/xtensa/"
# FAT FS (upstream source code)
- "/components/fatfs/src/"
# Nginx HTTP parser (upstream source code)
- "/components/http_parser/"
# Argtable (upstream source code)
- "/components/console/argtable3/"
# Linenoise (upstream source code)
- "/components/console/linenoise/"
# Catch (upstream source code)
- "/tools/catch/catch.hpp"
# FreeRTOS kernel files (upstream source code).
- "/components/freertos/FreeRTOS-Kernel/"
- "/components/freertos/FreeRTOS-Kernel-SMP/"
- "/components/freertos/FreeRTOS-Kernel-V10.5.1/"
# Segger SystemView (upstream source code).
# Could also try to find suitable astyle options, instead.
- "/components/app_trace/sys_view/Config/"
- "/components/app_trace/sys_view/Sample/"
- "/components/app_trace/sys_view/SEGGER/"
# SoC header files (generated)
- "/components/soc/*/include/soc/"
docs:
# Docs directory contains some .inc files, which are not C include files
# and should not be formatted
check: false
include:
- "/docs/**/*.inc"

View File

@ -11,6 +11,7 @@ tools/check_term.py
tools/check_python_dependencies.py tools/check_python_dependencies.py
tools/python_version_checker.py tools/python_version_checker.py
tools/generate_debug_prefix_map.py tools/generate_debug_prefix_map.py
tools/ci/astyle-rules.yml
tools/ci/checkout_project_ref.py tools/ci/checkout_project_ref.py
tools/ci/ci_fetch_submodule.py tools/ci/ci_fetch_submodule.py
tools/ci/ci_get_mr_info.py tools/ci/ci_get_mr_info.py
@ -31,7 +32,6 @@ tools/ci/push_to_github.sh
tools/ci/python_packages/wifi_tools.py tools/ci/python_packages/wifi_tools.py
tools/ci/utils.sh tools/ci/utils.sh
tools/eclipse-code-style.xml tools/eclipse-code-style.xml
tools/format-minimal.sh
tools/format.sh tools/format.sh
tools/mocks/**/* tools/mocks/**/*
tools/set-submodules-to-github.sh tools/set-submodules-to-github.sh

View File

@ -1,9 +0,0 @@
#!/usr/bin/env bash
# Runs astyle with parameters which should be checked in a pre-commit hook
astyle \
--style=otbs \
--indent=spaces=4 \
--convert-tabs \
--keep-one-line-statements \
--pad-header \
"$@"

View File

@ -1,14 +1,25 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Runs astyle with the full set of formatting options set -euo pipefail
astyle \
if [ ! -x "$(command -v astyle_py)" ]; then
echo "astyle_py not found, please install astyle_py:"
echo " pip install -U astyle_py==VERSION"
echo "where VERSION is the same as in .pre-commit-config.yaml."
exit 1
fi
# "--astyle-version" here has to be in sync with pre-commit-config.yaml.
# The rest of the options have to be in sync with the default rules in tools/ci/astyle-rules.yml.
astyle_py --astyle-version=3.4.7 \
--style=otbs \ --style=otbs \
--attach-namespaces \ --attach-namespaces \
--attach-classes \ --attach-classes \
--indent=spaces=4 \ --indent=spaces=4 \
--convert-tabs \ --convert-tabs \
--align-pointer=name \
--align-reference=name \ --align-reference=name \
--keep-one-line-statements \ --keep-one-line-statements \
--pad-header \ --pad-header \
--pad-oper \ --pad-oper \
--unpad-paren \
--max-continuation-indent=120 \
"$@" "$@"