bintzwing/lint/coding_guidelines.pl
2012-02-07 23:20:46 -08:00

73 lines
1.9 KiB
Prolog
Executable file

#!/usr/bin/env perl
# SJCL coding guidelines:
#
# No tabs in any Javascript
#
# Indentation is two spaces. Alignment of stuff in multi-line statements is
# encouraged.
#
# Braces everywhere, following jslint. I'm pretty sure the Closure compressor
# removes them. Semicolons at the end of every statement.
#
# ++ and -- are allowed.
#
# Variables are in camelCase. I prefer underscore_separated, but JavaScript
# uses camelCase everywhere.
#
# Private members and methods are prefixed by underscores.
#
# Constants (and only constants) are UNDERSCORE_SEPARATED_UPPER_CASE. The
# compression scripts rely on this.
#
# Classes begin with a capital letter (not yet implemented. Namespaces too?)
#
# Block comments are not on the same line as code.
my $in_comment = 0;
my $file = '';
# for some reason, $. doesn't work.
my $line = 0;
while (<>) {
if ($ARGV ne $file) {
# opening a new file
if ($in_comment) {
print STDERR "Opening file $ARGV: comment from $file wasn't closed.\n";
}
$file = $ARGV;
$in_comment = $line = 0;
}
$line ++;
if (/\/\*(?:[^\*]|\*[^\/])*(\*\/\s*)?/) {
# block comment on this line
$in_comment = 1 unless defined $1;
$ba = "$`$'";
# shouldn't have code before or after it
print STDERR "$file line $line: block comment and code together.\n" if $ba =~ /\S/;
next;
} elsif ($in_comment and /\*\//) {
# leaving block comment
$in_comment = 0;
print STDERR "$file line $line: block comment and code together.\n" if $' =~ /\S/;
}
# don't enforce code style in a comment.
next if $in_comment;
reset;
while (?[\.\s+\*/<>=,;:-]([a-zA-Z0-9_]+_[a-zA-Z0-9_]*)?) {
# find variable names with underscores
my $varname = $1;
print STDERR "$file line $line: Variable name $varname contains an underscore\n"
if $varname =~ /[a-z]/;
}
reset;
print STDERR "$file line $line contains a tab\n" if /\t/;
}