checkpatch: adjust to QEMUisms

Change checkpatch.pl for QEMU use:
 - Root directory detection
 - Forbid tabs
 - Indent at 4 spaces
 - Allow typedefs
 - Enforce brace use even for single statement blocks
 - Don't suggest nonexistent cleanup tools

Mention the script in CODING_STYLE.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
Blue Swirl 2011-01-20 20:58:56 +00:00
parent 1ec3f6f9ab
commit b646968336
2 changed files with 21 additions and 46 deletions

View File

@ -1,6 +1,9 @@
Qemu Coding Style Qemu Coding Style
================= =================
Please use the script checkpatch.pl in the scripts directory to check
patches before submitting.
1. Whitespace 1. Whitespace
Of course, the most important aspect in any coding style is whitespace. Of course, the most important aspect in any coding style is whitespace.

64
scripts/checkpatch.pl Normal file → Executable file
View File

@ -328,9 +328,9 @@ sub top_of_kernel_tree {
my ($root) = @_; my ($root) = @_;
my @tree_check = ( my @tree_check = (
"COPYING", "CREDITS", "Kbuild", "MAINTAINERS", "Makefile", "COPYING", "MAINTAINERS", "Makefile",
"README", "Documentation", "arch", "include", "drivers", "README", "docs", "VERSION",
"fs", "init", "ipc", "kernel", "lib", "scripts", "vl.c"
); );
foreach my $check (@tree_check) { foreach my $check (@tree_check) {
@ -1494,31 +1494,13 @@ sub process {
# check we are in a valid source file C or perl if not then ignore this hunk # check we are in a valid source file C or perl if not then ignore this hunk
next if ($realfile !~ /\.(h|c|pl)$/); next if ($realfile !~ /\.(h|c|pl)$/);
# at the beginning of a line any tabs must come first and anything # in QEMU, no tabs are allowed
# more than 8 must use tabs. if ($rawline =~ /\t/) {
if ($rawline =~ /^\+\s* \t\s*\S/ ||
$rawline =~ /^\+\s* \s*/) {
my $herevet = "$here\n" . cat_vet($rawline) . "\n"; my $herevet = "$here\n" . cat_vet($rawline) . "\n";
ERROR("code indent should use tabs where possible\n" . $herevet); ERROR("code indent should never use tabs\n" . $herevet);
$rpt_cleaners = 1; $rpt_cleaners = 1;
} }
# check for space before tabs.
if ($rawline =~ /^\+/ && $rawline =~ / \t/) {
my $herevet = "$here\n" . cat_vet($rawline) . "\n";
WARN("please, no space before tabs\n" . $herevet);
}
# check for spaces at the beginning of a line.
# Exceptions:
# 1) within comments
# 2) indented preprocessor commands
# 3) hanging labels
if ($rawline =~ /^\+ / && $line !~ /\+ *(?:$;|#|$Ident:)/) {
my $herevet = "$here\n" . cat_vet($rawline) . "\n";
WARN("please, no spaces at the start of a line\n" . $herevet);
}
# check we are in a valid C source file if not then ignore this hunk # check we are in a valid C source file if not then ignore this hunk
next if ($realfile !~ /\.(h|c)$/); next if ($realfile !~ /\.(h|c)$/);
@ -1746,7 +1728,7 @@ sub process {
#print "line<$line> prevline<$prevline> indent<$indent> sindent<$sindent> check<$check> continuation<$continuation> s<$s> cond_lines<$cond_lines> stat_real<$stat_real> stat<$stat>\n"; #print "line<$line> prevline<$prevline> indent<$indent> sindent<$sindent> check<$check> continuation<$continuation> s<$s> cond_lines<$cond_lines> stat_real<$stat_real> stat<$stat>\n";
if ($check && (($sindent % 8) != 0 || if ($check && (($sindent % 4) != 0 ||
($sindent <= $indent && $s ne ''))) { ($sindent <= $indent && $s ne ''))) {
WARN("suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n"); WARN("suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n");
} }
@ -1869,16 +1851,6 @@ sub process {
$herecurr); $herecurr);
} }
# check for new typedefs, only function parameters and sparse annotations
# make sense.
if ($line =~ /\btypedef\s/ &&
$line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ &&
$line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ &&
$line !~ /\b$typeTypedefs\b/ &&
$line !~ /\b__bitwise(?:__|)\b/) {
WARN("do not add new typedefs\n" . $herecurr);
}
# * goes on variable not on type # * goes on variable not on type
# (char*[ const]) # (char*[ const])
if ($line =~ m{\($NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)\)}) { if ($line =~ m{\($NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)\)}) {
@ -2514,13 +2486,13 @@ sub process {
WARN("vmlinux.lds.h needs VMLINUX_SYMBOL() around C-visible symbols\n" . $herecurr); WARN("vmlinux.lds.h needs VMLINUX_SYMBOL() around C-visible symbols\n" . $herecurr);
} }
# check for redundant bracing round if etc # check for missing bracing round if etc
if ($line =~ /(^.*)\bif\b/ && $1 !~ /else\s*$/) { if ($line =~ /(^.*)\bif\b/ && $line !~ /\#\s*if/) {
my ($level, $endln, @chunks) = my ($level, $endln, @chunks) =
ctx_statement_full($linenr, $realcnt, 1); ctx_statement_full($linenr, $realcnt, 1);
#print "chunks<$#chunks> linenr<$linenr> endln<$endln> level<$level>\n"; #print "chunks<$#chunks> linenr<$linenr> endln<$endln> level<$level>\n";
#print "APW: <<$chunks[1][0]>><<$chunks[1][1]>>\n"; #print "APW: <<$chunks[1][0]>><<$chunks[1][1]>>\n";
if ($#chunks > 0 && $level == 0) { if ($#chunks >= 0 && $level == 0) {
my $allowed = 0; my $allowed = 0;
my $seen = 0; my $seen = 0;
my $herectx = $here . "\n"; my $herectx = $here . "\n";
@ -2558,8 +2530,8 @@ sub process {
$allowed = 1; $allowed = 1;
} }
} }
if ($seen && !$allowed) { if (!$seen) {
WARN("braces {} are not necessary for any arm of this statement\n" . $herectx); WARN("braces {} are necessary for all arms of this statement\n" . $herectx);
} }
} }
} }
@ -2605,7 +2577,7 @@ sub process {
$allowed = 1; $allowed = 1;
} }
} }
if ($level == 0 && $block =~ /^\s*\{/ && !$allowed) { if ($level == 0 && $block !~ /^\s*\{/ && !$allowed) {
my $herectx = $here . "\n";; my $herectx = $here . "\n";;
my $cnt = statement_rawlines($block); my $cnt = statement_rawlines($block);
@ -2613,7 +2585,7 @@ sub process {
$herectx .= raw_line($linenr, $n) . "\n";; $herectx .= raw_line($linenr, $n) . "\n";;
} }
WARN("braces {} are not necessary for single statement blocks\n" . $herectx); WARN("braces {} are necessary even for single statement blocks\n" . $herectx);
} }
} }
@ -2918,10 +2890,10 @@ sub process {
if ($quiet == 0) { if ($quiet == 0) {
# If there were whitespace errors which cleanpatch can fix # If there were whitespace errors which cleanpatch can fix
# then suggest that. # then suggest that.
if ($rpt_cleaners) { # if ($rpt_cleaners) {
print "NOTE: whitespace errors detected, you may wish to use scripts/cleanpatch or\n"; # print "NOTE: whitespace errors detected, you may wish to use scripts/cleanpatch or\n";
print " scripts/cleanfile\n\n"; # print " scripts/cleanfile\n\n";
} # }
} }
if ($clean == 1 && $quiet == 0) { if ($clean == 1 && $quiet == 0) {