checkpatch: always warn on missing blank line after variable declaration block
authorJoe Perches <joe@perches.com>
Wed, 4 Jun 2014 23:12:04 +0000 (16:12 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 4 Jun 2014 23:54:19 +0000 (16:54 -0700)
Make the test system wide, modify the message too.

Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
scripts/checkpatch.pl

index 62d005e..f2ef63a 100755 (executable)
@@ -397,6 +397,11 @@ foreach my $entry (@mode_permission_funcs) {
        $mode_perms_search .= $entry->[0];
 }
 
+our $declaration_macros = qr{(?x:
+       (?:$Storage\s+)?(?:DECLARE|DEFINE)_[A-Z]+\s*\(|
+       (?:$Storage\s+)?LIST_HEAD\s*\(
+)};
+
 our $allowed_asm_includes = qr{(?x:
        irq|
        memory
@@ -2268,18 +2273,37 @@ sub process {
                }
 
 # check for missing blank lines after declarations
-               if ($realfile =~ m@^(drivers/net/|net/)@ &&
-                   $prevline =~ /^\+\s+$Declare\s+$Ident/ &&
-                   !($prevline =~ /(?:$Compare|$Assignment|$Operators)\s*$/ ||
-                     $prevline =~ /(?:\{\s*|\\)$/) &&          #extended lines
-                   $sline =~ /^\+\s+/ &&                       #Not at char 1
-                   !($sline =~ /^\+\s+$Declare/ ||
-                     $sline =~ /^\+\s+$Ident\s+$Ident/ ||      #eg: typedef foo
+               if ($sline =~ /^\+\s+\S/ &&                     #Not at char 1
+                       # actual declarations
+                   ($prevline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
+                       # foo bar; where foo is some local typedef or #define
+                    $prevline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
+                       # known declaration macros
+                    $prevline =~ /^\+\s+$declaration_macros/) &&
+                       # for "else if" which can look like "$Ident $Ident"
+                   !($prevline =~ /^\+\s+$c90_Keywords\b/ ||
+                       # other possible extensions of declaration lines
+                     $prevline =~ /(?:$Compare|$Assignment|$Operators)\s*$/ ||
+                       # not starting a section or a macro "\" extended line
+                     $prevline =~ /(?:\{\s*|\\)$/) &&
+                       # looks like a declaration
+                   !($sline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
+                       # foo bar; where foo is some local typedef or #define
+                     $sline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
+                       # known declaration macros
+                     $sline =~ /^\+\s+$declaration_macros/ ||
+                       # start of struct or union or enum
                      $sline =~ /^\+\s+(?:union|struct|enum|typedef)\b/ ||
-                     $sline =~ /^\+\s+(?:$|[\{\}\.\#\"\?\:\(])/ ||
-                     $sline =~ /^\+\s+\(?\s*(?:$Compare|$Assignment|$Operators)/)) {
+                       # start or end of block or continuation of declaration
+                     $sline =~ /^\+\s+(?:$|[\{\}\.\#\"\?\:\(\[])/ ||
+                       # bitfield continuation
+                     $sline =~ /^\+\s+$Ident\s*:\s*\d+\s*[,;]/ ||
+                       # other possible extensions of declaration lines
+                     $sline =~ /^\+\s+\(?\s*(?:$Compare|$Assignment|$Operators)/) &&
+                       # indentation of previous and current line are the same
+                   (($prevline =~ /\+(\s+)\S/) && $sline =~ /^\+$1\S/)) {
                        WARN("SPACING",
-                            "networking uses a blank line after declarations\n" . $hereprev);
+                            "Missing a blank line after declarations\n" . $hereprev);
                }
 
 # check for spaces at the beginning of a line.