From 09ca9dfd2c8b9ef9ac7efa896fded43c7f741990 Mon Sep 17 00:00:00 2001 From: morris Date: Mon, 25 Nov 2024 22:07:35 +0800 Subject: [PATCH] feat(ci): add ast-grep rules to lint kconfig in the hal --- sgconfig.yml | 2 +- .../sg_rules/no_kconfig_in_hal_component.yml | 114 ++++++++++++++++++ .../no_private_rom_api_in_examples.yml | 4 +- .../no_std_assert_in_hal_component.yml | 8 +- 4 files changed, 121 insertions(+), 7 deletions(-) create mode 100644 tools/ci/sg_rules/no_kconfig_in_hal_component.yml diff --git a/sgconfig.yml b/sgconfig.yml index 8f89c92acf3..d79b92efcac 100644 --- a/sgconfig.yml +++ b/sgconfig.yml @@ -1,2 +1,2 @@ ruleDirs: -- ./tools/ci/sg_rules + - tools/ci/sg_rules diff --git a/tools/ci/sg_rules/no_kconfig_in_hal_component.yml b/tools/ci/sg_rules/no_kconfig_in_hal_component.yml new file mode 100644 index 00000000000..40bd3f9e5e1 --- /dev/null +++ b/tools/ci/sg_rules/no_kconfig_in_hal_component.yml @@ -0,0 +1,114 @@ +# Refer to https://ast-grep.github.io/guide/rule-config.html for Rule Essentials +id: no-kconfig-in-hal-component +message: Don't use Kconfig macros in the hal component +severity: error # error, warning, info, hint +note: hal component should be able to deliver without 3rd party config system +language: C +files: + - "components/hal/**/*" +ignores: + # porting layer and test apps are allowed to use Kconfig macros + - "components/hal/platform_port/**/*" + - "components/hal/test_apps/**/*" + # the following files should be refactored to remove Kconfig macros + - "components/hal/adc_hal.c" + - "components/hal/adc_oneshot_hal.c" + - "components/hal/apm_hal.c" + - "components/hal/ecdsa_hal.c" + - "components/hal/emac_hal.c" + - "components/hal/mmu_hal.c" + - "components/hal/sha_hal.c" + - "components/hal/spi_flash_encrypt_hal_iram.c" + - "components/hal/spi_flash_hal_iram.c" + - "components/hal/spi_flash_hal.c" + - "components/hal/spi_hal_iram.c" + - "components/hal/spi_hal.c" + - "components/hal/spi_slave_hal_iram.c" + - "components/hal/twai_hal_iram.c" + - "components/hal/twai_hal.c" + - "components/hal/usb_dwc_hal.c" + - "components/hal/wdt_hal_iram.c" + - "components/hal/esp32/efuse_hal.c" + - "components/hal/esp32/gpio_hal_workaround.c" + - "components/hal/esp32/include/hal/twai_ll.h" + - "components/hal/esp32/include/hal/uart_ll.h" + - "components/hal/esp32c2/clk_tree_hal.c" + - "components/hal/*/efuse_hal.c" + - "components/hal/include/hal/adc_types.h" + - "components/hal/include/hal/adc_hal.h" + - "components/hal/include/hal/apm_hal.h" + - "components/hal/include/hal/ecdsa_hal.h" + - "components/hal/include/hal/emac_hal.h" + - "components/hal/include/hal/gpio_hal.h" + - "components/hal/include/hal/mmu_hal.h" + - "components/hal/include/hal/pmu_types.h" + - "components/hal/include/hal/sha_types.h" + - "components/hal/include/hal/spi_slave_hal.h" + - "components/hal/include/hal/spi_types.h" + - "components/hal/include/hal/touch_sensor_legacy_types.h" + - "components/hal/include/hal/twai_types.h" +rule: + any: + - kind: argument_list + has: + kind: identifier + pattern: $N + - kind: preproc_if + has: + field: condition + pattern: $M +constraints: + N: + regex: "^CONFIG" + M: + regex: "^CONFIG" + +--- + +id: no-sdkconfig-include-in-hal-component +message: Don't include sdkconfig.h in the hal component +severity: error # error, warning, info, hint +note: hal component should be able to deliver without 3rd party config system +language: C +files: + - "components/hal/**/*" +ignores: + # porting layer and test apps are allowed to include sdkconfig.h + - "components/hal/platform_port/**/*" + - "components/hal/test_apps/**/*" + # the following files should be refactored to remove sdkconfig.h + - "components/hal/adc_hal.c" + - "components/hal/adc_oneshot_hal.c" + - "components/hal/cache_hal.c" + - "components/hal/emac_hal.c" + - "components/hal/mmu_hal.c" + - "components/hal/mpi_hal.c" + - "components/hal/spi_flash_hal_iram.c" + - "components/hal/twai_hal_iram.c" + - "components/hal/twai_hal.c" + - "components/hal/usb_dwc_hal.c" + - "components/hal/efuse_hal.c" + - "components/hal/esp32/include/hal/twai_ll.h" + - "components/hal/esp32c2/clk_tree_hal.c" + - "components/hal/*/efuse_hal.c" + - "components/hal/include/hal/adc_types.h" + - "components/hal/include/hal/ecdsa_hal.h" + - "components/hal/include/hal/modem_clock_hal.h" + - "components/hal/include/hal/mpi_hal.h" + - "components/hal/include/hal/pmu_types.h" + - "components/hal/include/hal/rtc_hal.h" + - "components/hal/include/hal/sha_types.h" + - "components/hal/include/hal/spi_slave_hal.h" + - "components/hal/include/hal/spi_types.h" + - "components/hal/include/hal/touch_sensor_legacy_types.h" + - "components/hal/include/hal/twai_hal.h" + - "components/hal/include/hal/twai_types.h" +rule: + kind: preproc_include + has: + field: path + pattern: $N +constraints: + N: + regex: '^["<]sdkconfig' # match "sdkconfig.h" or +fix: '' diff --git a/tools/ci/sg_rules/no_private_rom_api_in_examples.yml b/tools/ci/sg_rules/no_private_rom_api_in_examples.yml index ee8dc3d7c21..4c525508283 100644 --- a/tools/ci/sg_rules/no_private_rom_api_in_examples.yml +++ b/tools/ci/sg_rules/no_private_rom_api_in_examples.yml @@ -5,7 +5,7 @@ severity: error # error, warning, info, hint note: Only APIs prefixed with "esp_rom_" are treated as public. language: C files: - - "./examples/**/*" + - "examples/**/*" rule: kind: preproc_include has: @@ -22,7 +22,7 @@ severity: error # error, warning, info, hint note: Only APIs prefixed with "esp_rom_" are treated as public. language: Cpp files: - - "./examples/**/*" + - "examples/**/*" rule: kind: preproc_include has: diff --git a/tools/ci/sg_rules/no_std_assert_in_hal_component.yml b/tools/ci/sg_rules/no_std_assert_in_hal_component.yml index 5f6c3efdbab..1e3a854cc1f 100644 --- a/tools/ci/sg_rules/no_std_assert_in_hal_component.yml +++ b/tools/ci/sg_rules/no_std_assert_in_hal_component.yml @@ -5,9 +5,9 @@ severity: error # error, warning, info, hint note: The standard assert function depends on newlib(G1) component, but hal is a G0 component language: C files: - - "./components/hal/**/*" + - "components/hal/**/*" ignores: - - "./components/hal/test_apps/**/*" + - "components/hal/test_apps/**/*" rule: kind: expression_statement pattern: assert($$$ARGS); @@ -21,9 +21,9 @@ severity: error # error, warning, info, hint note: Please use hal/assert.h to replace assert.h language: C files: - - "./components/hal/**/*" + - "components/hal/**/*" ignores: - - "./components/hal/test_apps/**/*" + - "components/hal/test_apps/**/*" rule: kind: preproc_include has: