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
5899 "externs should be avoided in .c files\n" . $herecurr);5899 "externs should be avoided in .c files\n" . $herecurr);
5900 }5900 }
5901 5901
5902 if ($realfile =~ /\.[ch]$/ && defined $stat &&5902# check for function declarations that have arguments without identifier names
5903 if (defined $stat &&
5903 $stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s &&5904 $stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s &&
5904 $1 ne "void") {5905 $1 ne "void") {
5905 my $args = trim($1);5906 my $args = trim($1);
@@ -5912,6 +5913,29 @@ sub process { · 6 unmodified lines
5912 }5913 }
5913 }5914 }
5914 5915
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
5915# checks for new __setup's5939# checks for new __setup's
5916 if ($rawline =~ /\b__setup\("([^"]*)"/) {5940 if ($rawline =~ /\b__setup\("([^"]*)"/) {
5917 my $name = $1;5941 my $name = $1;