From 80cb4a1a187bd4ec593459acc3bc020069d97658 Mon Sep 17 00:00:00 2001 From: Roland Dobai Date: Thu, 31 Jan 2019 14:10:14 +0100 Subject: [PATCH] tools: Don't use backslashes in Kconfigs and ignore long lines to avoid errors Closes https://github.com/espressif/esp-idf/issues/3012 --- components/bt/Kconfig | 6 ++---- components/esp32/Kconfig | 3 +-- tools/check_kconfigs.py | 24 ++++++++++++++++++------ tools/test_check_kconfigs.py | 17 +++-------------- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/components/bt/Kconfig b/components/bt/Kconfig index 2638f1fa8..4551a47f8 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -60,14 +60,12 @@ menu Bluetooth config BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF int - default \ - BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN if BTDM_CONTROLLER_MODE_BR_EDR_ONLY || BTDM_CONTROLLER_MODE_BTDM + default BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN if BTDM_CONTROLLER_MODE_BR_EDR_ONLY || BTDM_CONTROLLER_MODE_BTDM # NOERROR default 0 config BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF int - default \ - BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN if BTDM_CONTROLLER_MODE_BR_EDR_ONLY || BTDM_CONTROLLER_MODE_BTDM + default BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN if BTDM_CONTROLLER_MODE_BR_EDR_ONLY || BTDM_CONTROLLER_MODE_BTDM # NOERROR default 0 choice BTDM_CONTROLLER_PINNED_TO_CORE_CHOICE diff --git a/components/esp32/Kconfig b/components/esp32/Kconfig index be7792655..aecd26a65 100644 --- a/components/esp32/Kconfig +++ b/components/esp32/Kconfig @@ -806,8 +806,7 @@ menu "ESP32-specific" int "Number of cycles for RTC_SLOW_CLK calibration" default 3000 if ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL default 1024 if ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC - range 0 27000 if ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL || ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC \ - || ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 + range 0 27000 if ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL || ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC || ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 # NOERROR range 0 32766 if ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC help When the startup code initializes RTC_SLOW_CLK, it can perform diff --git a/tools/check_kconfigs.py b/tools/check_kconfigs.py index 412aa2c2f..b65f68cda 100755 --- a/tools/check_kconfigs.py +++ b/tools/check_kconfigs.py @@ -44,12 +44,19 @@ CONFIG_NAME_MAX_LENGTH = 60 # TODO increase prefix length (after the names have been refactored) CONFIG_NAME_MIN_PREFIX_LENGTH = 0 +# The checker will not fail if it encounters this string (it can be used for temporarily resolve conflicts) +RE_NOERROR = re.compile(r'\s+#\s+NOERROR\s+$') + # list or rules for lines LINE_ERROR_RULES = [ # (regular expression for finding, error message, correction) (re.compile(r'\t'), 'tabulators should be replaced by spaces', r' ' * SPACES_PER_INDENT), (re.compile(r'\s+\n'), 'trailing whitespaces should be removed', r'\n'), (re.compile(r'.{120}'), 'line should be shorter than 120 characters', None), + # "\" is not recognized due to a bug in tools/kconfig/zconf.l. The bug was fixed but the rebuild of + # mconf-idf is not enforced and an incorrect version is supplied with all previous IDF versions. Backslashes + # cannot be enabled unless everybody updates mconf-idf. + (re.compile(r'\\\n'), 'line cannot be wrapped by backslash', None), ] @@ -81,11 +88,17 @@ class LineRuleChecker(BaseChecker): checks LINE_ERROR_RULES for each line """ def process_line(self, line, line_number): + suppress_errors = RE_NOERROR.search(line) is not None errors = [] for rule in LINE_ERROR_RULES: m = rule[0].search(line) if m: - errors.append(rule[1]) + if suppress_errors: + # just print but no failure + e = InputError(self.path_in_idf, line_number, rule[1], line) + print(e) + else: + errors.append(rule[1]) if rule[2]: line = rule[0].sub(rule[2], line) if len(errors) > 0: @@ -297,11 +310,10 @@ class IndentAndNameChecker(BaseChecker): self.force_next_indent = 0 return - else: - if stripped_line.endswith('\\') and stripped_line.startswith(('config', 'menuconfig', 'choice')): - raise InputError(self.path_in_idf, line_number, - 'Line-wrap with backslash is not supported here', - line) # no suggestion for this + elif stripped_line.endswith('\\') and stripped_line.startswith(('config', 'menuconfig', 'choice')): + raise InputError(self.path_in_idf, line_number, + 'Line-wrap with backslash is not supported here', + line) # no suggestion for this self.check_name_and_update_prefix(stripped_line, line_number) diff --git a/tools/test_check_kconfigs.py b/tools/test_check_kconfigs.py index 866d1d828..737ae4657 100755 --- a/tools/test_check_kconfigs.py +++ b/tools/test_check_kconfigs.py @@ -67,6 +67,9 @@ class TestLineRuleChecker(unittest.TestCase, ApplyLine): self.expt_success('x' * 119) self.expt_success('') + def test_backslashes(self): + self.expect_error('test \\', expect=None) + class TestIndentAndNameChecker(unittest.TestCase, ApplyLine): def setUp(self): @@ -153,15 +156,6 @@ class TestIndent(TestIndentAndNameChecker): self.expt_success('config') self.expt_success(' help') - def test_backslashes(self): - self.expt_success('default \\') - self.expect_error('help', expect=None) - self.expt_success(' CONFIG') - self.expt_success('default \\') - self.expt_success(' LINE1\\') - self.expt_success(' LINE2') - self.expt_success('help') - class TestName(TestIndentAndNameChecker): def setUp(self): @@ -181,11 +175,6 @@ class TestName(TestIndentAndNameChecker): self.expect_error(' choice ' + ('X' * too_long), expect=None) self.expt_success('endmenu') - def test_config_backslash(self): - self.expect_error('config\\', expect=None) - self.expect_error('menuconfig\\', expect=None) - self.expect_error('choice\\', expect=None) - class TestPrefix(TestIndentAndNameChecker): def test_prefix_len(self):