diff --git a/contrib/checkSpace.pl b/contrib/checkSpace.pl index 1589d723c8..c0f2410bfb 100755 --- a/contrib/checkSpace.pl +++ b/contrib/checkSpace.pl @@ -3,16 +3,25 @@ for $fn (@ARGV) { open(F, "$fn"); $lastnil = 0; + $incomment = 0; while () { + ## Warn about windows-style newlines. if (/\r/) { print " CR:$fn:$.\n"; } + ## Warn about tabs. if (/\t/) { print " TAB:$fn:$.\n"; } + ## Warn about trailing whitespace. if (/ +$/) { print "Space\@EOL:$fn:$.\n"; } + ## Warn about control keywords without following space. + #if (/\s(?:if|while|for|switch)\(/) { + # print " KW(:$fn:$.\n"; + #} + ## Warn about multiple empty lines. if ($lastnil && /^$/) { print " DoubleNL:$fn:$.\n"; } elsif (/^$/) { @@ -20,6 +29,51 @@ for $fn (@ARGV) { } else { $lastnil = 0; } + ### Juju to skip over comments and strings, since the tests + ### we're about to do are okay there. + if ($incomment) { + if (m!\*/!) { + s!.*?\*/!!; + $incomment = 0; + } else { + next; + } + } + if (m!/\*.*?\*/!) { + s!/\*.*?\*/!!; + } elsif (m!/\*!) { + s!/\*!!; + $incomment = 1; + next; + } + s!"(?:[^\"]+|\\.)*"!!g; + next if /^\#/; + ## Warn about C++-style comments. + if (m!//!) { + # print " //:$fn:$.\n"; + s!//.*!!; + } + ## Warn about braces preceded by non-space. + if (/([^\s])\{/) { + print " $1\{:$fn:$.\n"; + } + ## Warn about function calls with space before parens. + if (/(\w+)\s\(/) { + if ($1 ne "if" and $1 ne "while" and $1 ne "for" and + $1 ne "switch" and $1 ne "return" and $1 ne "int" and + $1 ne "void" and $1 ne "__attribute__") { + print " fn ():$fn:$.\n"; + } + } + ## Warn about multiple internal spaces. + #if (/\S\s{2,}[^\s\\]/) { + # print " X X:$fn:$.\n"; + #} + ## Warn about { with stuff after. + #s/\s+$//; + #if (/\{[^\}\\]+$/) { + # print " {X:$fn:$.\n"; + #} } close(F); }