[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/devtools/krazy/tplugins
From:       Allen Winter <winter () kde ! org>
Date:       2006-08-24 18:25:50
Message-ID: 1156443950.595551.30984.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 576741 by winterz:

more better.


 M  +219 -44   style  


--- trunk/playground/devtools/krazy/tplugins/style #576740:576741
@@ -34,6 +34,7 @@
 
 use strict;
 use Getopt::Long;
+use Tie::IxHash;
 
 my($Prog) = "style";
 my($Version) = "1.0";
@@ -55,6 +56,11 @@
 &Explain() if $explain;
 if ($#ARGV != 0){ &Help(); exit 0; }
 
+my($MAXLEN)=80;
+
+# has of all issues we need to keep track of
+tie my(%Issues), "Tie::IxHash";
+
 # Check Condition
 my($f) = $ARGV[0];
 
@@ -91,102 +97,185 @@
 my($line);
 my($tline);
 my($lstr) = "";
+my($lline) = "";
+my($indent,$lindent) = (0,0);
+&initIssues();
 foreach $line (@lines) {
+  $line =~ s+^\s++;   #the comment stripper can leave a leading space
   $linecnt++;
 
   $tline = $line;
   $line =~ s+//.*++;  #skip C++ comments
 
   if ($line =~ m/\([[:alnum:]]/ || $line =~ m/\( {2,}/) {
-    $cnt++;
-    if ($cnt == 1) {
-      $lstr = "line\#" . $linecnt;
-    } else {
-      $lstr = $lstr . "," . $linecnt;
+    if ($line !~ m/\(\*/ && $line !~ m/[0-9-]{2,}\)/) {
+      $Issues{'PARENSPACE'}{'count'}++;
+      if ($Issues{'PARENSPACE'}{'count'} == 1) {
+	$Issues{'PARENSPACE'}{'lines'} = "line\#" . $linecnt;
+      } else {
+	$Issues{'PARENSPACE'}{'lines'} .= "," . $linecnt;
+      }
+      print "$linecnt (no space after \() => $line\n" if ($verbose);
     }
-    print "$linecnt (no space after \() => $line\n" if ($verbose);
   }
   if ($line =~ m/[[:alnum:]]\)/ || $line =~ m/ {2,}\)/) {
-    $cnt++;
-    if ($cnt == 1) {
-      $lstr = "line\#" . $linecnt;
-    } else {
-      $lstr = $lstr . "," . $linecnt;
+    if ($line !~ m/\)->/ && $line !~ m/[0-9-]{2,}\)/) {
+      $Issues{'SPACEPAREN'}{'count'}++;
+      if ($Issues{'SPACEPAREN'}{'count'} == 1) {
+	$Issues{'SPACEPAREN'}{'lines'} = "line\#" . $linecnt;
+      } else {
+	$Issues{'SPACEPAREN'}{'lines'} .= "," . $linecnt;
+      }
+      print "$linecnt (no space before \)) => $line\n" if ($verbose);
     }
-    print "$linecnt (no space before \)) => $line\n" if ($verbose);
   }
   if ($line =~ m/,[[:alnum:]]/ || $line =~ m/, {2,}/) {
     if ($line !~ m/,[[:space:]]*$/) {
-      $cnt++;
-      if ($cnt == 1) {
-	$lstr = "line\#" . $linecnt;
+      $Issues{'COMMASPACE'}{'count'}++;
+      if ($Issues{'COMMASPACE'}{'count'} == 1) {
+	$Issues{'COMMASPACE'}{'lines'} = "line\#" . $linecnt;
       } else {
-	$lstr = $lstr . "," . $linecnt;
+	$Issues{'COMMASPACE'}{'lines'} .= "," . $linecnt;
       }
       print "$linecnt (no space after ,) => $line\n" if ($verbose);
     }
   }
   if ($line =~ m/[[:alnum:]]\*[[:space:]]/ || $line =~ m/[[:alnum:]]&[[:space:]]/) {
-    $cnt++;
-    if ($cnt == 1) {
-      $lstr = "line\#" . $linecnt;
+    $Issues{'STARSPACE'}{'count'}++;
+    if ($Issues{'STARSPACE'}{'count'} == 1) {
+      $Issues{'STARSPACE'}{'lines'} = "line\#" . $linecnt;
     } else {
-      $lstr = $lstr . "," . $linecnt;
+      $Issues{'STARSPACE'}{'lines'} .= "," . $linecnt;
     }
     print "$linecnt (space after *) => $line\n" if ($verbose);
   }
   if ($line =~ m/[[:space:]]*if[[:space:]]\(/ && $line !~ m/\{$/ && $line !~ \
                m/\|\|$/ && $line !~ m/&&$/) {
-    $cnt++;
-    if ($cnt == 1) {
-      $lstr = "line\#" . $linecnt;
+    $Issues{'IFBRACE'}{'count'}++;
+    if ($Issues{'IFBRACE'}{'count'} == 1) {
+      $Issues{'IFBRACE'}{'lines'} = "line\#" . $linecnt;
     } else {
-      $lstr = $lstr . "," . $linecnt;
+      $Issues{'IFBRACE'}{'lines'} .= "," . $linecnt;
     }
     print "$linecnt (missing {)=> $line\n" if ($verbose);
   }
+  if ($line =~ m/[[:space:]]*else[[:space:]]*/  && $line !~ m/else if/ && $line !~ \
m/} else {/) { +    $Issues{'ELSEBRACE'}{'count'}++;
+    if ($Issues{'ELSEBRACE'}{'count'} == 1) {
+      $Issues{'ELSEBRACE'}{'lines'} = "line\#" . $linecnt;
+    } else {
+      $Issues{'ELSEBRACE'}{'lines'} .= "," . $linecnt;
+    }
+    print "$linecnt (} else {)=> $line\n" if ($verbose);
+  }
+  if (($line =~ m/[[:space:]]*for[[:space:]]\(/ || $line =~ \
m/[[:space:]]*foreach[[:space:]]\(/) && $line !~ m/\{$/ && $line !~ m/\;$/) { +    \
$Issues{'FORBRACE'}{'count'}++; +    if ($Issues{'FORBRACE'}{'count'} == 1) {
+      $Issues{'FORBRACE'}{'lines'} = "line\#" . $linecnt;
+    } else {
+      $Issues{'FORBRACE'}{'lines'} .= "," . $linecnt;
+    }
+    print "$linecnt (missing {)=> $line\n" if ($verbose);
+  }
+  if ($line =~ m/[[:space:]]*while[[:space:]]\(/ && $line !~ m/\{$/ && $line !~ \
m/\|\|$/ && $line !~ m/&&$/) { +    $Issues{'WHILEBRACE'}{'count'}++;
+    if ($Issues{'WHILEBRACE'}{'count'} == 1) {
+      $Issues{'WHILEBRACE'}{'lines'} = "line\#" . $linecnt;
+    } else {
+      $Issues{'WHILEBRACE'}{'lines'} .= "," . $linecnt;
+    }
+    print "$linecnt (missing {)=> $line\n" if ($verbose);
+  }
+  if ($line =~ m/[[:space:]]*if\(/ || $line =~ m/[[:space:]]*for\(/ || $line =~ \
m/[[:space:]]*while\(/ || $line =~ m/[[:space:]]*foreach\(/) { +    \
$Issues{'CONDSPACE'}{'count'}++; +    if ($Issues{'CONDSPACE'}{'count'} == 1) {
+      $Issues{'CONDSPACE'}{'lines'} = "line\#" . $linecnt;
+    } else {
+      $Issues{'CONDSPACE'}{'lines'} .= "," . $linecnt;
+    }
+    print "$linecnt (space before ()=> $line\n" if ($verbose);
+  }
   if ($line =~ m/==/ && $line !~ m/[[:space:]]{1}==[[:space:]]{1}/ && $line !~ \
                m/==[[:space:]]*\(/) {
-    $cnt++;
-    if ($cnt == 1) {
-      $lstr = "line\#" . $linecnt;
+    $Issues{'EQUALSPACE'}{'count'}++;
+    if ($Issues{'EQUALSPACE'}{'count'} == 1) {
+      $Issues{'EQUALSPACE'}{'lines'} = "line\#" . $linecnt;
     } else {
-      $lstr = $lstr . "," . $linecnt;
+      $Issues{'EQUALSPACE'}{'lines'} .= "," . $linecnt;
     }
     print "$linecnt (==) => $line\n" if ($verbose);
   }
-  if ($line =~ m/};/ && $line !~ m/[[:space:]]};/ && $line !~ m/{};/) {
-    $cnt++;
-    if ($cnt == 1) {
-      $lstr = "line\#" . $linecnt;
+  if ($line =~ m/!=/ && $line !~ m/[[:space:]]{1}!=[[:space:]]{1}/ && $line !~ \
m/!=[[:space:]]*\(/) { +    $Issues{'EQUALSPACE'}{'count'}++;
+    if ($Issues{'EQUALSPACE'}{'count'} == 1) {
+      $Issues{'EQUALSPACE'}{'lines'} = "line\#" . $linecnt;
     } else {
-      $lstr = $lstr . "," . $linecnt;
+      $Issues{'EQUALSPACE'}{'lines'} .= "," . $linecnt;
     }
+    print "$linecnt (==) => $line\n" if ($verbose);
+  }
+  if ($line =~ m/};/ && $line =~ m/[[:space:]]{/ && $line !~ m/{[[:space:]]*};/) {
+    $Issues{'BRACESEMI'}{'count'}++;
+    if ($Issues{'BRACESEMI'}{'count'} == 1) {
+      $Issues{'BRACESEMI'}{'lines'} = "line\#" . $linecnt;
+    } else {
+      $Issues{'BRACESEMI'}{'lines'} .= "," . $linecnt;
+    }
     print "$linecnt (brace-semi) => $line\n" if ($verbose);
   }
+  if ($line =~ m/{};/) {
+    $Issues{'BADSEMI'}{'count'}++;
+    if ($Issues{'BADSEMI'}{'count'} == 1) {
+      $Issues{'BADSEMI'}{'lines'} = "line\#" . $linecnt;
+    } else {
+      $Issues{'BADSEMI'}{'lines'} .= "," . $linecnt;
+    }
+    print "$linecnt (brace-semi) => $line\n" if ($verbose);
+  }
   if ($line =~ m/\t/) {
-    $cnt++;
-    if ($cnt == 1) {
-      $lstr = "line\#" . $linecnt;
+    $Issues{'TAB'}{'count'}++;
+    if ($Issues{'TAB'}{'count'} == 1) {
+      $Issues{'TAB'}{'lines'} = "line\#" . $linecnt;
     } else {
-      $lstr = $lstr . "," . $linecnt;
+      $Issues{'TAB'}{'lines'} .= "," . $linecnt;
     }
     print "$linecnt (tab) => $line\n" if ($verbose);
   }
-  if (length($tline) > 80) {
-    $cnt++;
-    if ($cnt == 1) {
-      $lstr = "line\#" . $linecnt;
+  if (length($tline) > $MAXLEN) {
+    $Issues{'LINELEN'}{'count'}++;
+    if ($Issues{'LINELEN'}{'count'} == 1) {
+      $Issues{'LINELEN'}{'lines'} = "line\#" . $linecnt;
     } else {
-      $lstr = $lstr . "," . $linecnt;
+      $Issues{'LINELEN'}{'lines'} .= "," . $linecnt;
     }
     print "$linecnt (line too long) => $tline\n" if ($verbose);
   }
+
+  # do this test last please
+  $line =~ s/\s+$//;
+  $tline = $line;
+  $tline =~ s/^\s+//;
+  $indent = length($line) - length($tline);
+  if (($indent % 2) || (($indent > 0) && ($indent < $lindent))) {
+    if ($line !~ m/}/ && $lline !~ m/\|\|$/ && $lline !~ m/&&$/ && $lline !~ m/,$/ \
&& $lline !~ m/break/) { # legit reduce indent conditions +      if(! ($lline =~ \
m/{$/ && $lline !~ m/^[[:space:]]for/ && $lline !~ m/^[[:space:]]while/ && $lline !~ \
m/^[[:space:]]if/)) { # last is continue if,while,for \
+	$Issues{'BADINDENT'}{'count'}++; +	if ($Issues{'BADINDENT'}{'count'} == 1) {
+	  $Issues{'BADINDENT'}{'lines'} = "line\#" . $linecnt;
+	} else {
+	  $Issues{'BADINDENT'}{'lines'} .= "," . $linecnt;
+	}
+	print "$linecnt (bad indent) => $tline\n" if ($verbose);
+      }
+    }
+  }
+  $lindent = $indent;
+  $lline = $line;
 }
 
+$cnt = &printResults();
 if (!$cnt) {
   print "okay\n" if (!$quiet);
   exit 0;
 } else {
-  print "$lstr ($cnt)\n" if (!$quiet);
   exit $cnt;
 }
 
@@ -201,6 +290,92 @@
 }
 
 sub Explain {
-  print "<describe problem with solution.>\n";
+  print "Please follow the coding style guidelines at \
<http://korganizer.kde.org/develop/hacking.html>\n";  exit 0 if $explain;
 }
+
+sub initIssues() {
+
+  $Issues{'SPACEPAREN'}{'issue'} = 'Put a space before a closing paren';
+  $Issues{'SPACEPAREN'}{'count'} = 0;
+  $Issues{'SPACEPAREN'}{'lines'} = '';
+
+  $Issues{'PARENSPACE'}{'issue'} = 'Put a space after an opening paren';
+  $Issues{'PARENSPACE'}{'count'} = 0;
+  $Issues{'PARENSPACE'}{'lines'} = '';
+
+  $Issues{'COMMASPACE'}{'issue'} = 'Bad spacing after a comma';
+  $Issues{'COMMASPACE'}{'count'} = 0;
+  $Issues{'COMMASPACE'}{'lines'} = '';
+
+  $Issues{'CONDSPACE'}{'issue'} = 'Put a space before the opening paren';
+  $Issues{'CONDSPACE'}{'count'} = 0;
+  $Issues{'CONDSPACE'}{'lines'} = '';
+
+  $Issues{'STARSPACE'}{'issue'} = 'Do not put a space after an asterisk or \
ampersand'; +  $Issues{'STARSPACE'}{'count'} = 0;
+  $Issues{'STARSPACE'}{'lines'} = '';
+
+  $Issues{'IFBRACE'}{'issue'} = 'Put a brace on the line with the \'if\'';
+  $Issues{'IFBRACE'}{'count'} = 0;
+  $Issues{'IFBRACE'}{'lines'} = '';
+
+  $Issues{'ELSEBRACE'}{'issue'} = 'Put a brace on the line with the \'else\'';
+  $Issues{'ELSEBRACE'}{'count'} = 0;
+  $Issues{'ELSEBRACE'}{'lines'} = '';
+
+  $Issues{'FORBRACE'}{'issue'} = 'Put a brace on the line with the \'for\'';
+  $Issues{'FORBRACE'}{'count'} = 0;
+  $Issues{'FORBRACE'}{'lines'} = '';
+
+  $Issues{'WHILEBRACE'}{'issue'} = 'Put a brace on the line with the \'while\'';
+  $Issues{'WHILEBRACE'}{'count'} = 0;
+  $Issues{'WHILEBRACE'}{'lines'} = '';
+
+  $Issues{'EQUALSPACE'}{'issue'} = 'Put spaces around \'==\' and \'!=\'';
+  $Issues{'EQUALSPACE'}{'count'} = 0;
+  $Issues{'EQUALSPACE'}{'lines'} = '';
+
+  $Issues{'BRACESEMI'}{'issue'} = 'Invalid semicolon after closing brace';
+  $Issues{'BRACESEMI'}{'count'} = 0;
+  $Issues{'BRACESEMI'}{'lines'} = '';
+
+  $Issues{'BADSEMI'}{'issue'} = 'Invalid semicolon';
+  $Issues{'BADSEMI'}{'count'} = 0;
+  $Issues{'BADSEMI'}{'lines'} = '';
+
+  $Issues{'TAB'}{'issue'} = 'Do not use tabs';
+  $Issues{'TAB'}{'count'} = 0;
+  $Issues{'TAB'}{'lines'} = '';
+
+  $Issues{'LINELEN'}{'issue'} = "Line longer than $MAXLEN characters";
+  $Issues{'LINELEN'}{'count'} = 0;
+  $Issues{'LINELEN'}{'lines'} = '';
+
+  $Issues{'BADINDENT'}{'issue'} = "Bad ident";
+  $Issues{'BADINDENT'}{'count'} = 0;
+  $Issues{'BADINDENT'}{'lines'} = '';
+}
+
+sub printResults() {
+  my($guy);
+  my($check_num)=0;
+  my($tot)=0;
+  my($cline,$rline);
+  my($fred);
+  foreach $guy (keys %Issues) {
+    $cline = "$Issues{$guy}{'issue'}: ";
+
+    if ($Issues{$guy}{'count'}) {
+      $tot += $Issues{$guy}{'count'};
+      print "$cline $Issues{$guy}{'lines'}\n";
+    }
+  }
+  return $tot;
+}
+
+# printCheck function: print the "check" and "result" strings
+sub printCheck(){
+  my($check,$result) = @_;
+  print "$check $result\n";
+}


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic