A-A+

使用PHP_CodeSniffer实现对SVN提交的代码规范检查

2013年03月18日 Linux, PHP 暂无评论

PHP_CodeSniffer是一套用来检查代码规范的工具,是PEAR的一个包,可以通过PEAR直接安装:

pear install PHP_CodeSniffer

详细的官方文档参见这里:http://pear.php.net/manual/en/package.php.phpdocumentor.php

安装完成之后,便可参照此文档新建自己的编码标准了:http://pear.php.net/manual/en/package.php.php-codesniffer.coding-standard-tutorial.php

注意新建自己的标准的时候:DisallowHashCommentsSniff.php  文件里面的类名要根据自己的标准名定的 class MyStandard_****

安装完成的位置:/usr/local/lib/php/test/PHP_CodeSniffer

设置自己的标准为默认标准:phpcs --config-set default_standard Zend

phpcs --config-set default_standard /usr/local/lib/php/test/PHP_CodeSniffer/CodeSniffer/Standards/ZX

列举一个常见的规范规则片段:

<?xml version="1.0"?>
<ruleset name="ZX">

<description>The ZX coding standard.</description>
 
 <rule ref="Generic">
  <exclude name="Generic.Functions.OpeningFunctionBraceKernighanRitchie.BraceOnNewLine"/>
  <exclude name="Generic.Functions.OpeningFunctionBraceBsdAllman.BraceOnSameLine"/>
 </rule>
 
 <rule ref="Generic.Formatting.MultipleStatementAlignment.IncorrectWarning">
  <message>赋值表达式格式错误,变量与“=”之间应该空%d格,实际空了%d格</message>
 </rule>
 <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter.Found">
  <message>参数%s在函数中没有用到</message>
 </rule>
 
 <rule ref="PEAR">
  <exclude name="PEAR.Commenting.FileComment.Missing"/>
  <exclude name="PEAR.Commenting.ClassComment.MissingTag"/>
  <exclude name="PEAR.NamingConventions.ValidVariableName.PrivateNoUnderscore"/>
 </rule>
 
 <rule ref="PEAR.NamingConventions.ValidClassName.StartWithCaptial">
  <message>类名必须大写字母开头</message>
 </rule>
 
 <rule ref="PEAR.Classes.ClassDeclaration.OpenBraceNewLine">
  <message>类定义的左花括号 { 应另起一行</message>
 </rule>
 
 <rule ref="PEAR.Functions.ValidDefaultValue.NotAtEnd">
  <message>带有默认值的参数,必须放到参数表的末端</message>
 </rule>
 <rule ref="PEAR.Functions.FunctionDeclaration.BraceOnSameLine">
  <message>函数/方法定义的左花括号 { 应另起一行</message>
 </rule>
 <rule ref="PEAR.WhiteSpace.ScopeClosingBrace.Line">
  <message>右花括号 } 应另起一行</message>
 </rule>
 <rule ref="PEAR.WhiteSpace.ScopeClosingBrace.Indent">
  <message>右花括号 } 缩进空格数错误,应该为%d,实际为%d</message>
 </rule>
 <rule ref="PEAR.WhiteSpace.ScopeIndent.Incorrect">
  <message>缩进空格数错误,应该为%d,实际为%d</message>
 </rule>
 
 <rule ref="PEAR.Commenting.FunctionComment.Missing">
  <message>缺少函数/方法的块注释</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.WrongStyle">
  <message>错误的块注释格式,应以 /** 开头</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.MissingParamTag">
  <message>函数/方法的块注释中,缺少参数 %s 的说明</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.MissingReturn">
  <message>函数/方法的块注释中,缺少 @return 标签</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.SpacingBeforeTags">
  <message>函数/方法的块注释中,@TAG标签前需要空一行</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.SpacingBeforeParamType">
  <message>参数注释@param中,参数类型前应该只有一个空格</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.ParameterNamesNotAligned">
  <message>参数注释@param中,%s(%d)与%s(%d)的参数名称未对齐</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.ParameterCommentsNotAligned">
  <message>参数注释@param中,%s(%d)与%s(%d)的参数说明未对齐</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.ParamNameNoMatch">
  <message>参数注释@param中,参数名“%s”与实际名称不符</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.MissingParamName">
  <message>参数注释@param中,缺少参数名称</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.MissingParamComment">
  <message>参数注释@param中,缺少参数说明</message>
 </rule>
 <rule ref="PEAR.Commenting.FunctionComment.SpacingAfterParams">
  <message>最后一个参数注释@param后,应该空一行</message>
 </rule>
 
 <rule ref="Squiz.WhiteSpace.OperatorSpacing.NoSpaceBefore">
  <message>操作符前边应该有一个空格</message>
 </rule>
 <rule ref="Squiz.WhiteSpace.OperatorSpacing.NoSpaceAfter">
  <message>操作符后边应该有一个空格</message>
 </rule>
 
</ruleset>

新建好自己的编码标准,并设置为默认使用的编码标准后,便可将之与SVN的hooks进行关联。

找到自己对应项目的版本控制的配置目录:/path/to/repository/hooks/

这个目录下有svn项目的相关各种配置文件

post-commit.tmpl
post-lock.tmpl
post-revprop-change.tmpl
post-unlock.tmpl
pre-commit.tmpl
pre-lock.tmpl
pre-revprop-change.tmpl
pre-unlock.tmpl
start-commit.tmpl

打开并编辑文件:pre-commit

在文件其尾部添加:

/path/to/PHP_CodeSniffer/scripts/phpcs-svn-pre-commit "$REPOS" -t "$TXN" 1>&2 || exit 1
exit 0

一般在:/usr/local/bin/scripts/phpcs-svn-pre-commit
当然目录位置是根据相应的配置决定的,可通过此命令查找对应的路径: locate phpcs-svn-pre-commit

这样当提交SVN的代码时就会自动调用phpcs命令并按照新增的代码规范进行检查,不通过则在SVN的提示里抛出对应的错误。

标签:

给我留言

Copyright © 破晓Web实验室 保留所有权利.   Theme  Ality 沪ICP备14044094号

用户登录