【问题标题】:PHP CodeSniffer property not recognizedPHP CodeSniffer 属性无法识别
【发布时间】:2014-10-30 15:49:24
【问题描述】:

我的嗅探不起作用并且无法识别私有 $testvar 属性。我想在那里强制设置 Doc-Block。

当我运行代码嗅探器时,似乎没有使用 process 方法。我之前在那里添加了一些回声。

令牌 T_PROPERTY 是否存在?我在 php 手册上找不到它http://php.net/manual/en/tokens.php 然而,在 squiz 实验室源代码中使用了 T_PROPERTY。

<?php
/**
 * Extension for the pear class comment sniff.
 *
 */

/**
 * Extension for the pear class comment sniff.
 *
 */
class XYZ_Sniffs_Commenting_PropertyCommentSniff implements PHP_CodeSniffer_Sniff
{
    private $testvar = 1;

    /**
     * Returns an array of tokens this test wants to listen for.
     *
     * @return array
     */
    public function register()
    {
        return array(T_PROPERTY);
    }

    /**
     * Checks the property comments.
     *
     * @param PHP_CodeSniffer_File $phpcsFile the file object
     * @param int                  $stackPtr  the stack pointer
     *
     * @return void
     */
    public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
    {
        $tokens = $phpcsFile->getTokens();
        $find   = PHP_CodeSniffer_Tokens::$scopeModifiers;
        $find[] = T_WHITESPACE;
        $find[] = T_STATIC;

        $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 property doc comment', $stackPtr, 'Missing');
            $phpcsFile->recordMetric($stackPtr, 'Function has property comment', 'no');
            return;
        } else {
            $phpcsFile->recordMetric($stackPtr, 'Function has property comment', 'yes');
        }
    }
}

感谢您的帮助:)。

【问题讨论】:

    标签: php properties token codesniffer sniffer


    【解决方案1】:

    T_PROPERTY 标记仅在检查 JavaScript 文件时使用。 PHP 文件不存在。

    对于 PHP 文件,您需要使用 AbstractVariableSniff 帮助器。这是一个检查成员变量 cmets 的嗅探:https://github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/Standards/Squiz/Sniffs/Commenting/VariableCommentSniff.php

    注意它是如何扩展 PHP_CodeSniffer_Standards_AbstractVariableSniff 的,然后只实现了 processMemberVar() 方法。它将 processVariable() 和 processVariableInString() 方法留空,因为它不关心代码中的常规变量。

    另外请注意,如果您正在编写评论嗅探,评论解析器在 2.0 版本中完全不同(目前处于测试阶段,但由于现在任何一周都会稳定)。看一下上面sniff的新版本:https://github.com/squizlabs/PHP_CodeSniffer/blob/phpcs-fixer/CodeSniffer/Standards/Squiz/Sniffs/Commenting/VariableCommentSniff.php

    【讨论】:

      猜你喜欢
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多