Skip to content

Commit a0ad759

Browse files
JoePerchestorvalds
authored andcommitted
checkpatch: improve tests for multiple line function definitions
Add a block that identifies multiple line function definitions. Save the function name into $context_function to improve the embedded function name test. Look for misplaced open brace on the function definition. Emit an OPEN_BRACE error when the function definition is similar to void foo(int arg1, int arg2) { Miscellanea: o Remove the $realfile test in function declaration w/o named arguments test o Comment the function declaration w/o named arguments test Link: http://lkml.kernel.org/r/de620ed6ebab75fdfa323741ada2134a0f545892.1496835238.git.joe@perches.com Signed-off-by: Joe Perches <[email protected]> Tested-by: David Kershner <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 948b133 commit a0ad759

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

scripts/checkpatch.pl

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5899,7 +5899,8 @@ sub process {
58995899
"externs should be avoided in .c files\n" . $herecurr);
59005900
}
59015901

5902-
if ($realfile =~ /\.[ch]$/ && defined $stat &&
5902+
# check for function declarations that have arguments without identifier names
5903+
if (defined $stat &&
59035904
$stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s &&
59045905
$1 ne "void") {
59055906
my $args = trim($1);
@@ -5912,6 +5913,29 @@ sub process {
59125913
}
59135914
}
59145915

5916+
# check for function definitions
5917+
if ($^V && $^V ge 5.10.0 &&
5918+
defined $stat &&
5919+
$stat =~ /^.\s*(?:$Storage\s+)?$Type\s*($Ident)\s*$balanced_parens\s*{/s) {
5920+
$context_function = $1;
5921+
5922+
# check for multiline function definition with misplaced open brace
5923+
my $ok = 0;
5924+
my $cnt = statement_rawlines($stat);
5925+
my $herectx = $here . "\n";
5926+
for (my $n = 0; $n < $cnt; $n++) {
5927+
my $rl = raw_line($linenr, $n);
5928+
$herectx .= $rl . "\n";
5929+
$ok = 1 if ($rl =~ /^[ \+]\{/);
5930+
$ok = 1 if ($rl =~ /\{/ && $n == 0);
5931+
last if $rl =~ /^[ \+].*\{/;
5932+
}
5933+
if (!$ok) {
5934+
ERROR("OPEN_BRACE",
5935+
"open brace '{' following function definitions go on the next line\n" . $herectx);
5936+
}
5937+
}
5938+
59155939
# checks for new __setup's
59165940
if ($rawline =~ /\b__setup\("([^"]*)"/) {
59175941
my $name = $1;

0 commit comments

Comments
 (0)