History

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

Joe Perches committed 9 years ago

Commit a0ad7591 parent 948b1331 file · +25 −1Browse files

Showing the changes to scripts/checkpatch.pl (1 of 1 file). Show all

Unified · Split

scripts/checkpatch.pl+25−1
@@ -5899,7 +5899,8 @@ sub process { · 5898 unmodified lines
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 { · 6 unmodified lines
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;