Code Sniffer正确的文件

时间:2013-10-04 07:38:30

标签: php zend-framework code-snippets codesniffer

首先让我承认我昨天第一次遇到Code Sniffer。

我想为我的ZF 1.x项目设置自定义规则文件。但是,所有Zend片段都不适用。

又一个问题,我不想重新发现轮子(& I cant)所以需要使用现有的代码片段。


问题1:问题在于,如何知道我想要的规则是否存在现有代码段。作为最后一个选项,我总是可以去测试每个片段,但这显然不是最有效的方法。最好的方法是浏览现有代码段的文档,但单个代码段的文档在哪里?


问题2的背景

我需要一些复杂的规则,比如Doc评论块(只是一个例子,我不打算全部实现):

  • 每个类和方法都必须有Doc注释块。
  • 简短说明是必须的
  • 简短描述最多可包含3行。 (每行<= 120个字符)
  • 如果有功能参数,则每个参数都必须使用@param。
  • 必须为@param引发错误,而不是作为函数参数给出。 (这里的开发人员删除参数但忘记将其从doc注释块中删除。常见问题在这里。)
  • 长描述是可选的,但如果存在,则短描述和长描述之间需要一个换行符。
  • 描述和@tags之间需要一个换行符。
  • @tags之间没有换行符,但@return(如果存在)必须在结尾处。
  • @return后只允许@throws。
  • 如果@author存在,则必须是公司名称,而不是个人名称。
  • @version不允许。

显然有很多自定义要求,所以我想我永远不会得到现有的代码片段,需要编写自定义代码段,但如何?我已经浏览了一些片段的php文件,乍一看,它看起来有点复杂。只有两个选项,了解完整的CS代码,在这种情况下,我更喜欢使用phabricator进行人工审核,或者阅读文档,这些文档似乎并不完整且有用。


问题2:接下来的问题是,在需要的情况下,哪些方法可以了解CS代码并编写自己的代码?


PS:在提出这个问题之前,我已经浏览了pear.php.net上提供的所有10页CS文档,这10页完全没有回答上述两个问题。

首次评论后修改

我现有的规则集文件:

<?xml version="1.0"?>
<ruleset name="eetest">
 <description>Below are the standard builds based on coding standards need to follow in 
BAS development.</description>
 <!-- Include some specific sniffs -->
 <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter"/>
 <rule ref="Generic.Commenting.Todo"/>
 <rule ref="Generic.ControlStructures.InlineControlStructure"/>
 <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
 <rule ref="Generic.Formatting.SpaceAfterCast"/>
 <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
 <rule ref="Generic.NamingConventions.ConstructorName"/>
 <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
 <rule ref="Generic.PHP.DeprecatedFunctions"/>
 <rule ref="Generic.PHP.DisallowShortOpenTag"/>
 <rule ref="Generic.PHP.LowerCaseKeyword"/>
 <rule ref="Generic.Strings.UnnecessaryStringConcat"/>
 <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
 <rule ref="Generic.WhiteSpace.ScopeIndent"/>
 <rule ref="PEAR.ControlStructures.MultiLineCondition"/>
 <rule ref="PEAR.Files.IncludingFile"/>
 <rule ref="PEAR.Formatting.MultiLineAssignment"/>
 <rule ref="Zend.Debug.CodeAnalyzer"/>
 <rule ref="Zend.NamingConventions.ValidVariableName"/>
 <rule ref="Zend.Files.ClosingTag"/>

 <!-- Method names MUST be declared in camelCase(). -->
 <rule ref="Generic.NamingConventions.CamelCapsFunctionName">
  <properties>
   <property name="strict" value="true"/>
  </properties>
 </rule>

 <!-- We don't want gsjlint throwing errors for things we already check -->
 <rule ref="Generic.Debug.ClosureLinter">
  <properties>
   <property name="errorCodes" type="array" value="0210"/>
   <property name="ignoreCodes" type="array" value="0001,0110,0240"/>
  </properties>
 </rule>
 <rule ref="Generic.Debug.ClosureLinter.ExternalToolError">
  <message>%2$s</message>
 </rule>

 <!-- Only one argument per line in multi-line function calls -->
 <rule ref="PEAR.Functions.FunctionCallSignature">
  <properties>
   <property name="allowMultipleArguments" value="false"/>
  </properties>
 </rule>
</ruleset>

直到现在还没有自定义PHP代码,因为我正在努力理解sippet代码正在做什么。

0 个答案:

没有答案