自动检查代码规范 - 引用现有的规范

引用规则

ruleset.xml里的ruleset节点下除了包含description节点作为规范的介绍以外,还可以包含多个rule节点,而每一个rule正是一个现有代码规范的引用,比如:

<ruleset name="KK_Style">
	<description>kk custom standard.</description>
	<rule ref="Generic.ControlStructures.InlineControlStructure"/>
</ruleset>

以上这个rule的ref属性所指的Generic.ControlStructures.InlineControlStructure就是我D:\phpStudy\php70n\pear\PHP\CodeSniffer\Standards目录下的Generic目录的Sniffs目录下的ControlStructures\InlineControlStructureSniff.php这个规则检查器

省略Sniffs目录后代号就是“Generic.ControlStructures.InlineControlStructure”,这个规则要求if,for,while这些控制结构里面的代码块必须有括号包住


引用整个规范

很简单,rule的ref直接就是Generic就是引用整个Generic规范了


说重点,现成规范都有哪些?

D:\phpStudy\php70n\pear\PHP\CodeSniffer\Standards目录里有什么名字的子目录就是有什么规范,这些就是规范的整体名称,里面由一个个检查项目组成

我们在自定义规范的过程中有些是跟现有规范一样的检查逻辑的,可以直接引用,至于现有的规范哪个文件是什么检查,还真没什么中文资料!以后再看能力或组织些热心人翻译一下列表

现在的话只能自己进去看英文的拼写来理解,我下面列出一些我用到的,已知的现有规范吧:

  • Generic.ControlStructures.InlineControlStructure:if which语句必须有花括号包住

  • Generic.NamingConventions.UpperCaseConstantName:常量名称必须大写下划线分词

  • Squiz.Functions.FunctionDeclarationArgumentSpacing:函数、方法的参数表逗号后面必须加空格隔开

    这个开始跟上面介绍的不同,它并不是直接 <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing"/>这样用就行了,因为这里可以控制空格的数量,所以是在rule里增加properties节点来控制的

    <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
    	<properties>
    		<property name="equalsSpacing" value="1"/>
    	 </properties>
    </rule>
    
  • Generic.Files.LineLength:文件行数限制

    例如限制最大1000行:

    <rule ref="Generic.Files.LineLength">
    	<properties>
    		<property name="lineLimit" value="1000"/>
    		<property name="absoluteLineLimit" value="0"/>
    	</properties>
    </rule>
    
  • Generic.PHP.LowerCaseKeyword:关键词必须小写

    因为echoECHO都是可以的,PHP对大小写不敏感,就是咱们看着揪心。。。

  • Generic.WhiteSpace.ScopeIndent:必须以4个空格取代tab缩进

    例如:

    <rule ref="Generic.WhiteSpace.ScopeIndent">
    	<properties>
    		<property name="ignoreIndentationTokens" type="array" value="T_COMMENT,T_DOC_COMMENT_OPEN_TAG"/>
    	</properties>
    </rule>
    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
    

    这里要2个rule结合使用

  • Generic.NamingConventions.UpperCaseConstantName:常量名称必须大写下划线分词


热心人一起来整理个清单吧

以上规则我可能有的说得不是很准或者理解错误,但我基本都用过,请大家发现问题时及时反馈一下哈

热心的朋友可以一起翻译一下现有的规则,让需要这些规则的人可以直接找到引用,谢谢你了喔!