[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