How to customise PHP_CodeSniffer (writing custom coding standards)
PHP_CodeSniffer is a PEAR package which detects potential coding problems and enforces your style guide.
The default is the PEAR coding standard, but you can easily change that.
First,
Second, create a new folder somewhere -
Third, you'll want to make a
It should look somewhat like:
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
Once you have your package.xml; you just want to type
Testing it:
To set it to your default coding standard:
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.
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.
Labels: continuous integration, open source, pear, php, quality
3 Comments:
Nice tip, thank you. We've been playing around with creating our own standard for internal projects, I'd been wondering about a nice way to package it.
However, we run phpcs via phpUnderControl (http://www.phpundercontrol.org/). Much nicer than using cron.
How about how to do HTML output like PEAR does?
If you use the --report=xml argument you can get a nice summary.
You can then use simplexml or xslt to transform that output into something human friendly.
Personally, I'm holding out for logging into a database; so I can do all sorts of neat tricks with it.
Post a Comment
<< Home