1

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

PEAR 类注释检查的第一部分是

$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;
        }

但是当出现以下文件时,它会传递,因为它(可能)认为文件注释是类注释。以前有没有人遇到过这种情况,如果有,您是如何克服的?谢谢

/** 
 * 
 *  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 {
}
4

1 回答 1

1

嗅探假设该注释是类注释。

您发布的代码通过从class关键字开始,然后查找以前的非空白和非前缀标记来做到这一点。在您的情况下,它将找到*/哪个是T_DOC_COMMENT_CLOSE_TAG令牌。

嗅探器现在使用该注释作为类注释。

没有办法改变这种行为。如果您不使用类注释,您可能希望从您的标准中排除这种嗅探。如果您同时使用类和文件注释,请确保您还包括PEAR.Commenting.FileComment嗅探。请注意,PEAR 标准已经包含这两种嗅探器,因此如果您使用--standard=PEAR.

如果您在标准中使用这两种嗅探,文件注释嗅探将报告该文件没有文件注释。它也将注释分配给class令牌。

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

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

于 2017-05-19T02:22:03.490 回答