The default is the PEAR coding standard, but you can easily change that.
First,
pear install PHP_CodeSnifferand
pear install PEAR_PackageFileManager_Cli.
Second, create a new folder somewhere -
PHP/CodeSniffer/Standards/Foo
Third, you'll want to make a
FooCodingStandard.phpin that directory.
It should look somewhat like:
<?php
if (class_exists('PHP_CodeSniffer_Standards_CodingStandard', true) === false) {
throw new PHP_CodeSniffer_Exception('Class PHP_CodeSniffer_Standards_CodingStandard not found');
}
class PHP_CodeSniffer_Standards_Foo_FooCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard
{
public function getIncludedSniffs()
{
return array(
'Generic/Sniffs/Functions/OpeningFunctionBraceKernighanRitchieSniff.php',
'Generic/Sniffs/NamingConventions/UpperCaseConstantNameSniff.php',
'Generic/Sniffs/Metrics/NestingLevelSniff.php',
'Generic/Sniffs/PHP/DisallowShortOpenTagSniff.php',
'Generic/Sniffs/PHP/ForbiddenFunctionsSniff.php',
'Generic/Sniffs/PHP/LowerCaseConstantSniff.php',
'Generic/Sniffs/WhiteSpace/DisallowTabIndentSniff.php',
'PEAR/Sniffs/Files/IncludingFileSniff.php',
'PEAR/Sniffs/Functions/FunctionCallArgumentSpacingSniff.php',
'PEAR/Sniffs/Functions/FunctionCallSignatureSniff.php',
'PEAR/Sniffs/ControlStructures/ControlSignatureSniff.php',
);
}//end getIncludedSniffs()
}//end class
Spend a little time searching for the sniffs you want to use - some can be a huge help, or a huge pain.
Next, use the CLI tool
pfmto create a package.xml in
PHP/. You want to set the base install directory to PHP/; and you want to watch out for case senstivity and the like.
Once you have your package.xml; you just want to type
pear packagein the same directory - if it works, you should have a new .tgz with you can install -
pear install PHP_CodeSniffer_Standards_Foo-0.0.1.tgz
Testing it:
phpcs -ishould show your new coding standard listed here if everything is working correctly.
To set it to your default coding standard:
phpcs --config-set default_standard Foo
What next?
You could set it up to run via Cron across your entire project, or you could integrate it with an SVN post commit hook.