]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Enhancements to whitespace borkage detector
authorNick Mathewson <nickm@torproject.org>
Mon, 22 Nov 2004 23:28:54 +0000 (23:28 +0000)
committerNick Mathewson <nickm@torproject.org>
Mon, 22 Nov 2004 23:28:54 +0000 (23:28 +0000)
svn:r2944

contrib/checkSpace.pl

index 1589d723c866f5a743042fe50409b356d83d9919..c0f2410bfbe46966f7e20d3c9d3e9f93031e4198 100755 (executable)
@@ -3,16 +3,25 @@
 for $fn (@ARGV) {
     open(F, "$fn");
     $lastnil = 0;
+    $incomment = 0;
     while (<F>) {
+       ## 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);
 }