Vera++ can look in alternative directories for input like rules and profiles, but it doesn't look in multiple directories.
So if we customize it by using a ~/.vera++
directory, it ignores /usr/lib/vera++
.
We must there fore copy the latter to the former:
cp -rp /usr/lib/vera++ ~/.vera++
if
Vera++ 1.2.1 and vera++ 1.3 apparently expect different layouts of their configuration directories. So we add a symlink, to make them both work:
ln -sT ../rules ~/.vera++/scripts/rules
A rule might be a Tcl script.
This is ~/.vera++/rules/J001
:
#!/usr/bin/tclsh # Binary operators should have whitespace on both sides. # FixMe: '*' and '&' not checked because vera++ doesn't know whether they are # pointer or arithmetic operators, and I've insufficient tcl skills to expand # the state machine set binops { andand andassign assign divide divideassign equal greater greaterequal less lessequal minus minusassign notequal or orassign oror percent percentassign plus plusassign question_mark shiftleft shiftleftassign shiftright shiftrightassign starassign xor xorassign } proc isBinop {s} { global binops return [expr [lsearch $binops $s] != -1] } # Current token set tokenName "other" set tokenValue "" set line "0" set column "0" # Previous token set tmin1Name "other" set tmin1Val "" set tmin1Line "0" set tmin1Col "0" # Two tokens ago set tmin2Name "other" # Don't remember anything else about tmin2 foreach f [getSourceFileNames] { foreach t [getTokens $f 1 0 -1 -1 {}] { set tmin1Line $line set tmin1Col $column set line [lindex $t 1] set column [lindex $t 2] set tmin2Name $tmin1Name set tmin1Name $tokenName set tmin1Val $tokenValue set tokenValue [lindex $t 0] set tokenName [lindex $t 3] if [isBinop $tmin1Name] { if {$tmin2Name != "space" || $tokenName != "space"} { report $f $line "binary operator \'${tmin1Val}\' not surrounded by whitespace" } } } }
This is ~/.vera++/profiles/cppc
:
# L002 No tabs # L003 No leading and no trailing empty lines # L004 Line cannot be too long # L005 There should not be too many consecutive empty lines # L006 Source file should not be too long # T001 One-line comments should not have forced continuation # T004 Some keywords should be immediately followed by a colon # T005 Keywords break and continue should be immediately followed by a # T006 Keywords return and throw should be immediately followed by a # T008 Blank after keywords (if, for, while, ...) # T018 Using namespace is not allowed in header files # T011 Curly brackets from the same pair should be either in the same # J001 Blanks around binary operators set rules { L002 L003 L004 L005 L006 T001 T004 T005 T006 T008 T011 T018 J001 }
Now we can check sources:
vera++ -e -p cppc --parameters ~/.vera++/profiles/cppc.params main.cc