-
Notifications
You must be signed in to change notification settings - Fork 0
/
cxl.pl
120 lines (102 loc) · 3.62 KB
/
cxl.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/perl
#==============================================================
# Project: Cxl, Cxxlint
# Function: A perl script for automating cxxlint for use on a web server.
#
# Author: Tom Graham, tgraham@wpi.edu
#==============================================================
use strict;
use warnings;
my $script = $ARGV[1];
my $fileName = $ARGV[0];
my $resultDir = $ARGV[2];
#==============================================================
# Extraction and file directory management:
#==============================================================
my $fileCount = 0;
my $fileCheck = "file $fileName";
if ((`$fileCheck`) =~ "No such file or directory"){
exit;
}
else{
(`unzip -qq $fileName -d temp`);
}
$fileCount = (`ls temp | wc -l`);
#==============================================================
# Build and execute python command for cpplint:
#==============================================================
my $cmd2 = "python $script --verbose=5 --exclude=*/ --exclude=*.zip --exclude=*.txt --quiet --root=chrome/browser temp/*";
(`$cmd2 1>>scriptRaw.txt 2>&1`);
#==============================================================
# Sort through the files, and count errors:
#==============================================================
open my $inFile, '<', 'scriptRaw.txt';
open my $outFile, '>', 'style.txt';
my $whitespaceCount = 0;
my $runtimeCount = 0;
my $copyrightCount = 0;
my $readabilityCount = 0;
my $includeCount = 0;
print $outFile "\n";
my @file = <$inFile>;
foreach my $line (@file)
{
my $math = length($line) - 4;
$line = substr($line, 5, $math);
#TODO
my $f = "Can't open for reading";
my $f2 = "header_guard";
my $f3 = "None";
print $outFile $line unless ($line =~ $f || $line =~ $f2 || $line =~ $f3);
if ($line =~ "whitespace"){
$whitespaceCount++;
}
if ($line =~ "legal"){
$copyrightCount++;
}
if ($line =~ "runtime"){
$runtimeCount++;
}
if ($line =~ "readability"){
$readabilityCount++;
}
if ($line =~ "include"){
$includeCount++;
}
}
#==============================================================
# Calculate score:
# TODO: configure includeCount to work
#==============================================================
my $totalErrors = $runtimeCount + $copyrightCount + $whitespaceCount + $readabilityCount + $includeCount;
my $maxScore = 10;
my $actualScore = $maxScore - $totalErrors;
if ($totalErrors > 10){
$actualScore = 0;
}
#==============================================================
# Generate a readable report:
#==============================================================
open my $f, '<', 'scriptRaw.txt';
open my $outFile2, '>', 'styleSummary.txt';
print $outFile2 "\n";
print $outFile2 "Total files processed:\t\t\t $fileCount";
print $outFile2 "-------- \n";
print $outFile2 "Whitespace or parenthesis errors: \t $whitespaceCount \n";
print $outFile2 "Readability Errors \t \t $readabilityCount \n";
print $outFile2 "Copyright or legal errors: \t\t $copyrightCount \n";
print $outFile2 "Runtime or explicit errors: \t\t $runtimeCount \n\n";
print $outFile2 "Include errors: \t\t $includeCount \n\n";
print $outFile2 "Total Errors \t\t\t\t$totalErrors\n";
print $outFile2 "Score:\t\t\t\t\t $actualScore";
#==============================================================
# Clean up:
#==============================================================
close $inFile, $outFile, $outFile2, $f;
(`mv style.txt $resultDir`);
(`mv scriptRaw.txt $resultDir`);
(`rm -R temp/ && rm $resultDir/1-stdout.txt`);
## (`rm -R temp/ && rm scriptRaw.txt && rm $resultDir/1-stdout.txt`);
##-------------------------------------------------------------
exit(0);
#--------------------------------------------------------------