Skip to content

Commit

Permalink
checkpatch: always warn on missing blank line after variable declarat…
Browse files Browse the repository at this point in the history
…ion block

Make the test system wide, modify the message too.

Signed-off-by: Joe Perches <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
JoePerches authored and torvalds committed Jun 4, 2014
1 parent 185d566 commit 3f7bac0
Showing 1 changed file with 34 additions and 10 deletions.
44 changes: 34 additions & 10 deletions scripts/checkpatch.pl
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,11 @@ sub hash_show_words {
$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
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit 3f7bac0

Please sign in to comment.