0

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

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

另一个问题,我不想重新发现轮子(我不能)所以需要使用现有的片段。


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


问题 2 的背景

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

  • 每个类和方法都必须有 Doc 注释块。
  • 简短描述是强制性的
  • 简短描述最多可以有 3 行。(每行 <= 120 个字符)
  • 如果有函数参数,@param 对于每个参数都是必需的。
  • 必须为未作为函数参数给出的 @param 引发错误。(这里的开发人员删除了参数,但忘记将它们从文档注释块中删除。这里的常见问题。)
  • 长描述是可选的,但如果存在,短描述和长描述之间需要一个换行符。
  • 描述和@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 代码在做什么。

4

0 回答 0