Re: [PATCH v2] checkkconfigsymbols.py: Remove skipping of help lines in parse_kconfig_file
From: Masahiro Yamada
Date: Thu Sep 09 2021 - 22:13:31 EST
On Thu, Sep 2, 2021 at 1:50 AM Ariel Marcovitch
<arielmarcovitch@xxxxxxxxx> wrote:
>
> When parsing Kconfig files to find symbol definitions and references,
> lines after a 'help' line are skipped until a new config definition
> starts.
>
> However, Kconfig statements can actually be after a help section, as
> long as these have shallower indentation. These are skipped by the
> parser.
>
> This means that symbols referenced in this kind of statements are
> ignored by this function and thus are not considered undefined
> references in case the symbol is not defined.
>
> Remove the 'skip' logic entirely, as it is not needed if we just use the
> STMT regex to find the end of help lines.
>
> However, this means that keywords that appear as part of the help
> message (i.e. with the same indentation as the help lines) it will be
> considered as a reference/definition. This can happen now as well, but
> only with REGEX_KCONFIG_DEF lines. Also, the keyword must have a SYMBOL
> after it, which probably means that someone referenced a config in the
> help so it seems like a bonus :)
>
> The real solution is to keep track of the indentation when a the first
> help line in encountered and then handle DEF and STMT lines only if the
> indentation is shallower.
>
> Signed-off-by: Ariel Marcovitch <arielmarcovitch@xxxxxxxxx>
> ---
Applied to linux-kbuild. Thanks.
> scripts/checkkconfigsymbols.py | 8 --------
> 1 file changed, 8 deletions(-)
>
> diff --git a/scripts/checkkconfigsymbols.py b/scripts/checkkconfigsymbols.py
> index b9b0f15e5880..4f9dc98f3f60 100755
> --- a/scripts/checkkconfigsymbols.py
> +++ b/scripts/checkkconfigsymbols.py
> @@ -34,7 +34,6 @@ REGEX_SOURCE_SYMBOL = re.compile(SOURCE_SYMBOL)
> REGEX_KCONFIG_DEF = re.compile(DEF)
> REGEX_KCONFIG_EXPR = re.compile(EXPR)
> REGEX_KCONFIG_STMT = re.compile(STMT)
> -REGEX_KCONFIG_HELP = re.compile(r"^\s+help\s*$")
> REGEX_FILTER_SYMBOLS = re.compile(r"[A-Za-z0-9]$")
> REGEX_NUMERIC = re.compile(r"0[xX][0-9a-fA-F]+|[0-9]+")
> REGEX_QUOTES = re.compile("(\"(.*?)\")")
> @@ -432,7 +431,6 @@ def parse_kconfig_file(kfile):
> lines = []
> defined = []
> references = []
> - skip = False
>
> if not os.path.exists(kfile):
> return defined, references
> @@ -448,12 +446,6 @@ def parse_kconfig_file(kfile):
> if REGEX_KCONFIG_DEF.match(line):
> symbol_def = REGEX_KCONFIG_DEF.findall(line)
> defined.append(symbol_def[0])
> - skip = False
> - elif REGEX_KCONFIG_HELP.match(line):
> - skip = True
> - elif skip:
> - # ignore content of help messages
> - pass
> elif REGEX_KCONFIG_STMT.match(line):
> line = REGEX_QUOTES.sub("", line)
> symbols = get_symbols_in_line(line)
>
> base-commit: 087e856cfb76e9eef9a3a6e000854794f3c36e24
> --
> 2.25.1
>
--
Best Regards
Masahiro Yamada