mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
checkpatch: improve blank line after declaration test
Avoid multiple false positives by ignoring attributes. Various attributes like volatile and ____cacheline_aligned_in_smp cause checkpatch to emit invalid "Missing a blank line after declarations" messages. Use copies of $sline and $prevline, remove $Attribute and $Sparse, and use the existing tests to avoid these false positives. Miscellanea: o Add volatile to $Attribute This also reduces checkpatch runtime a bit by moving the indentation comparison test to the start of the block to avoid multiple unnecessary regex tests. Link: https://lkml.kernel.org/r/9015fd00742bf4e5b824ad6d7fd7189530958548.camel@perches.com 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>
This commit is contained in:
committed by
Linus Torvalds
parent
4945cca232
commit
b5e8736a95
@@ -382,6 +382,7 @@ our $InitAttribute = qr{$InitAttributeData|$InitAttributeConst|$InitAttributeIni
|
|||||||
# We need \b after 'init' otherwise 'initconst' will cause a false positive in a check
|
# We need \b after 'init' otherwise 'initconst' will cause a false positive in a check
|
||||||
our $Attribute = qr{
|
our $Attribute = qr{
|
||||||
const|
|
const|
|
||||||
|
volatile|
|
||||||
__percpu|
|
__percpu|
|
||||||
__nocast|
|
__nocast|
|
||||||
__safe|
|
__safe|
|
||||||
@@ -3776,43 +3777,48 @@ sub process {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# check for missing blank lines after declarations
|
# check for missing blank lines after declarations
|
||||||
if ($sline =~ /^\+\s+\S/ && #Not at char 1
|
# (declarations must have the same indentation and not be at the start of line)
|
||||||
# actual declarations
|
if (($prevline =~ /\+(\s+)\S/) && $sline =~ /^\+$1\S/) {
|
||||||
($prevline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
|
# use temporaries
|
||||||
|
my $sl = $sline;
|
||||||
|
my $pl = $prevline;
|
||||||
|
# remove $Attribute/$Sparse uses to simplify comparisons
|
||||||
|
$sl =~ s/\b(?:$Attribute|$Sparse)\b//g;
|
||||||
|
$pl =~ s/\b(?:$Attribute|$Sparse)\b//g;
|
||||||
|
if (($pl =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
|
||||||
# function pointer declarations
|
# function pointer declarations
|
||||||
$prevline =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
|
$pl =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
|
||||||
# foo bar; where foo is some local typedef or #define
|
# foo bar; where foo is some local typedef or #define
|
||||||
$prevline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
|
$pl =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
|
||||||
# known declaration macros
|
# known declaration macros
|
||||||
$prevline =~ /^\+\s+$declaration_macros/) &&
|
$pl =~ /^\+\s+$declaration_macros/) &&
|
||||||
# for "else if" which can look like "$Ident $Ident"
|
# for "else if" which can look like "$Ident $Ident"
|
||||||
!($prevline =~ /^\+\s+$c90_Keywords\b/ ||
|
!($pl =~ /^\+\s+$c90_Keywords\b/ ||
|
||||||
# other possible extensions of declaration lines
|
# other possible extensions of declaration lines
|
||||||
$prevline =~ /(?:$Compare|$Assignment|$Operators)\s*$/ ||
|
$pl =~ /(?:$Compare|$Assignment|$Operators)\s*$/ ||
|
||||||
# not starting a section or a macro "\" extended line
|
# not starting a section or a macro "\" extended line
|
||||||
$prevline =~ /(?:\{\s*|\\)$/) &&
|
$pl =~ /(?:\{\s*|\\)$/) &&
|
||||||
# looks like a declaration
|
# looks like a declaration
|
||||||
!($sline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
|
!($sl =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
|
||||||
# function pointer declarations
|
# function pointer declarations
|
||||||
$sline =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
|
$sl =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
|
||||||
# foo bar; where foo is some local typedef or #define
|
# foo bar; where foo is some local typedef or #define
|
||||||
$sline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
|
$sl =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
|
||||||
# known declaration macros
|
# known declaration macros
|
||||||
$sline =~ /^\+\s+$declaration_macros/ ||
|
$sl =~ /^\+\s+$declaration_macros/ ||
|
||||||
# start of struct or union or enum
|
# start of struct or union or enum
|
||||||
$sline =~ /^\+\s+(?:static\s+)?(?:const\s+)?(?:union|struct|enum|typedef)\b/ ||
|
$sl =~ /^\+\s+(?:static\s+)?(?:const\s+)?(?:union|struct|enum|typedef)\b/ ||
|
||||||
# start or end of block or continuation of declaration
|
# start or end of block or continuation of declaration
|
||||||
$sline =~ /^\+\s+(?:$|[\{\}\.\#\"\?\:\(\[])/ ||
|
$sl =~ /^\+\s+(?:$|[\{\}\.\#\"\?\:\(\[])/ ||
|
||||||
# bitfield continuation
|
# bitfield continuation
|
||||||
$sline =~ /^\+\s+$Ident\s*:\s*\d+\s*[,;]/ ||
|
$sl =~ /^\+\s+$Ident\s*:\s*\d+\s*[,;]/ ||
|
||||||
# other possible extensions of declaration lines
|
# other possible extensions of declaration lines
|
||||||
$sline =~ /^\+\s+\(?\s*(?:$Compare|$Assignment|$Operators)/) &&
|
$sl =~ /^\+\s+\(?\s*(?:$Compare|$Assignment|$Operators)/)) {
|
||||||
# indentation of previous and current line are the same
|
if (WARN("LINE_SPACING",
|
||||||
(($prevline =~ /\+(\s+)\S/) && $sline =~ /^\+$1\S/)) {
|
"Missing a blank line after declarations\n" . $hereprev) &&
|
||||||
if (WARN("LINE_SPACING",
|
$fix) {
|
||||||
"Missing a blank line after declarations\n" . $hereprev) &&
|
fix_insert_line($fixlinenr, "\+");
|
||||||
$fix) {
|
}
|
||||||
fix_insert_line($fixlinenr, "\+");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user