Adding coding standards checks to minaccept in Makefile
[mahara:mahara.git] / test / coding-standard-check.pl
1 #!/usr/bin/perl
2 # This is slightly modified from Andrew Morton's Perfect Patch.
3 # Lines you introduce should not have trailing whitespace.
4 # Also check for an indentation that has SP before a TAB.
5 my $found_bad = 0;
6 my $filename;
7 my $reported_filename = "";
8 my $lineno;
9 sub bad_line {
10     my ($why, $line) = @_;
11
12     if (!$found_bad) {
13         print STDERR "*\n";
14         print STDERR "* You have some suspicious patch lines:\n";
15         print STDERR "*\n";
16         $found_bad = 1;
17     }
18     if ($reported_filename ne $filename) {
19         print STDERR "* In $filename\n";
20         $reported_filename = $filename;
21     }
22
23     print STDERR "* $why (line $lineno)\n";
24     print STDERR "$filename:$lineno:$line\n";
25 }
26
27 while (<>) {
28     if (m|^diff --git a/(.*) b/\1$|) {
29         $filename = $1;
30         next;
31     }
32     if (/^@@ -\S+ \+(\d+)/) {
33         $lineno = $1 - 1;
34         next;
35     }
36     if (/^ /) {
37         $lineno++;
38         next;
39     }
40     if (s/^\+//) {
41         $lineno++;
42         chomp;
43         if ($filename !~ /\.(php|js)$/) {
44             next;
45         }
46         if (/\s$/) {
47             bad_line("trailing whitespace", $_);
48         }
49         if (/\t+/) {
50             bad_line("TABs should be replaced by 4 spaces.", $_);
51         }
52         if (/^([<>])\1{6} |^={7}$/) {
53             bad_line("unresolved merge conflict", $_);
54         }
55         if (/\}\s*else/) {
56             bad_line("cuddled elses are against Mahara coding guidelines", $_);
57         }
58         if (/elseif/) {
59             bad_line("a single space is requred between an else and an if on the same line", $_);
60         }
61         if (/(if|while|for)\(/ || /(if|while|for)\s\s+\(/) {
62             bad_line("conditional and looping statements should have a space between keywords ".
63                      "and the condition brackets", $_);
64         }
65         if (/^\s*{/) {
66             bad_line("opening curly braces are do no need their own line.", $_);
67         }
68         if (/require_once\s+\(?/) {
69             bad_line("a require_once statement should look like a function call, ".
70                      "without a space between the keyword and the bracket.", $_);
71         }
72     }
73 }
74
75 exit($found_bad);