PEAR class 评论和文件评论嗅探如何协作?

How do PEAR class comment and file comment sniffs cooperate?

PEAR 标准有文件和 Class 注释代码嗅探,我不确定它们如何交互。

PEAR class 评论检查的第一部分是

$commentEnd = $phpcsFile->findPrevious($find, ($stackPtr - 1), null, true);
if ($tokens[$commentEnd]['code'] !== T_DOC_COMMENT_CLOSE_TAG
            && $tokens[$commentEnd]['code'] !== T_COMMENT
        ) {
            $phpcsFile->addError('Missing class doc comment', $stackPtr, 'Missing');
            $phpcsFile->recordMetric($stackPtr, 'Class has doc comment', 'no');
            return;
        }

但是当出现以下文件时,它通过了,因为它(大概)认为文件注释是 class 注释。 以前有没有人遇到过这种情况,如果遇到过,您是如何克服的? 谢谢

/** 
 * 
 *  PLATFORM 3 - APACS 29b Recurring Transaction Update Service (RTUS)
 * ==================================================================
 *
 * This class provides the encoding and decoding of recurring transaction update
 * service enquiry and response files that use the APACS 29b protocol as defined
 * in APACS Standard 70 Book 3.
 *
 * @package     Cardstream
 * @subpackage  Pro/System/Classes
 * @copyright   Copyright (c) 2011 - Cardstream Ltd.
 * @author      Nick Turner <nick.turner@cardstream.com>
 * @link        http://www.cardstream.com
 * @version     $Id: p3apacsrtus.php 8195 2016-09-28 13:36:50Z chris.wilson $
 */

class testClass {
}

嗅探假设评论有 class 个评论。

您发布的代码通过从 class 关键字开始,然后查找先前的非空白和非前缀标记来实现。在你的例子中,它会找到 */ 这是一个 T_DOC_COMMENT_CLOSE_TAG 标记。

嗅探现在使用该评论作为 class 评论。

无法更改此行为。如果你不使用 class 评论,你可能想从你的标准中排除这个嗅探。如果您同时使用 class 和文件注释,请确保您还包含 PEAR.Commenting.FileComment 嗅探。请注意,PEAR 标准已经包含两种嗅探,因此如果您使用 --standard=PEAR.

,则无需执行任何操作

如果您在标准中同时使用这两种嗅探,文件注释嗅探将报告该文件没有文件注释。它还将评论分配给 class 标记。

在这种情况下,

PHPCS 无法知道您是否错过了 class 注释或文件注释,因此它必须将注释分配到一致的位置并确保所有嗅探都使用相同的规则.

一旦您有两个块注释,第一个将分配给文件,第二个分配给 class。