utils/checkpackagelib/lib_mk.py: handle 'else' and 'elif' statements
PATCH 1/1 utils/checkpackagelib/lib_mk.py: handle 'else' and 'elif' statements
From: Thomas De Schampheleire <[email protected]>
An 'else' or 'elif' clause inside a make conditional should not be indented in the same way as the if/endif clause. check-package did not recognize the else statement and expected an indentation.
For example:
ifdef FOOBAR
interesting
else
more interesting
endif
would, according to check-package, need to become:
ifdef FOOBAR
interesting
else
more interesting
endif
Treat 'else' and 'elif' the same as if-like keywords in the Indent test, but take into account that 'else' is also valid shell, so we need to correctly handle line continuation to prevent complaining about the 'else' in:
ifdef FOOBAR
if true; \ ... \ else \ ... \ fi
endif
We don't add the 'else' and 'elif' statements to start_conditional, because it would cause incorrect nesting counting in class OverriddenVariable.
--- utils/checkpackagelib/lib_mk.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
utils/checkpackagelib/lib_mk.py +3 -2
@@ -16,12 +16,13 @@ from checkpackagelib.lib import Utf8Characters # noqa: F401 # used in more than one check start_conditional = ["ifdef", "ifeq", "ifndef", "ifneq"] +continue_conditional = ["elif", "else"] end_conditional = ["endif"] class Indent(_CheckFunction): COMMENT = re.compile(r"^\s*#") - CONDITIONAL = re.compile(r"^\s*({})\s".format("|".join(start_conditional + end_conditional))) + CONDITIONAL = re.compile(r"^\s*({})\s".format("|".join(start_conditional + end_conditional + continue_conditional))) ENDS_WITH_BACKSLASH = re.compile(r"^[^#].*\\$") END_DEFINE = re.compile(r"^\s*endef\s") MAKEFILE_TARGET = re.compile(r"^[^# \t]+:\s")
@@ -43,7 +44,7 @@ class Indent(_CheckFunction): expect_tabs = False if self.define or self.backslash or self.makefile_target: expect_tabs = True - if self.CONDITIONAL.search(text): + if not self.backslash and self.CONDITIONAL.search(text): expect_tabs = False # calculate for next line
Signature · 1 line
2.26.2
Thomas Petazzoni
AppliedPATCH 1/1 utils/checkpackagelib/lib_mk.py: handle 'else' and 'elif' statements
Quoted 34 lines · On Wed, 9 Dec 2020 16:32:18 +0100 Thomas De Schampheleire…
From: Thomas De Schampheleire <[email protected]>
An 'else' or 'elif' clause inside a make conditional should not be indented in the same way as the if/endif clause. check-package did not recognize the else statement and expected an indentation.
For example:
ifdef FOOBAR
interesting
else
more interesting
endifwould, according to check-package, need to become:
ifdef FOOBAR
interesting
else
more interesting
endifTreat 'else' and 'elif' the same as if-like keywords in the Indent test, but take into account that 'else' is also valid shell, so we need to correctly handle line continuation to prevent complaining about the 'else' in:
ifdef FOOBAR
if true; \ ... \ else \ ... \ fiendif
Quoted 7 lines
We don't add the 'else' and 'elif' statements to
start_conditional, because it would cause incorrect nesting counting in class OverriddenVariable.Signed-off-by Thomas De Schampheleire <[email protected]>--- utils/checkpackagelib/lib_mk.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
Applied to master, thanks.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
PATCH 1/1 utils/checkpackagelib/lib_mk.py: handle 'else' and 'elif' statements
In reply to Thomas De SchampheleireQuoted 33 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Thomas" == Thomas De Schampheleire <[email protected]> writes:
From: Thomas De Schampheleire <[email protected]> An 'else' or 'elif' clause inside a make conditional should not be indented in the same way as the if/endif clause. check-package did not recognize the else statement and expected an indentation.
For example:
ifdef FOOBAR
interesting
else
more interesting
endifwould, according to check-package, need to become:
ifdef FOOBAR
interesting
else
more interesting
endifTreat 'else' and 'elif' the same as if-like keywords in the Indent test, but take into account that 'else' is also valid shell, so we need to correctly handle line continuation to prevent complaining about the 'else' in:
ifdef FOOBAR
if true; \ ... \ else \ ... \ fi
Quoted 6 lines
endif
We don't add the 'else' and 'elif' statements to
start_conditional, because it would cause incorrect nesting counting in class OverriddenVariable.Signed-off-by Thomas De Schampheleire <[email protected]>
Committed to 2020.02.x and 2020.11.x, thanks.
Signature · 1 line
Bye, Peter Korsgaard