自动检查代码规范 - 引用现有的规范 ¶
引用规则 ¶
在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
:关键词必须小写因为
echo
和ECHO
都是可以的,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
:常量名称必须大写下划线分词
热心人一起来整理个清单吧 ¶
以上规则我可能有的说得不是很准或者理解错误,但我基本都用过,请大家发现问题时及时反馈一下哈
热心的朋友可以一起翻译一下现有的规则,让需要这些规则的人可以直接找到引用,谢谢你了喔!