我的嗅探功能不起作用,并且无法识别属性私有$ testvar。我想在那里强制使用Doc-Block。
当我运行代码嗅探器时,似乎没有使用进程方法。我之前添加了一些回声。
令牌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');
}
}
}
感谢您的帮助:)。
答案 0 :(得分:1)
T_PROPERTY标记仅在检查JavaScript文件时使用。它不存在于PHP文件中。
对于PHP文件,您将要使用AbstractVariableSniff帮助程序。以下是检查成员变量评论的嗅探:https://github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/Standards/Squiz/Sniffs/Commenting/VariableCommentSniff.php
注意它如何扩展PHP_CodeSniffer_Standards_AbstractVariableSniff然后只实现processMemberVar()方法。它使processVariable()和processVariableInString()方法为空,因为它不关心代码中的常规变量。
另请注意,如果您正在撰写评论嗅探,则评论解析器在2.0版本中完全不同(目前处于测试阶段但由于现在任何一周都处于稳定状态)。在这里查看上面嗅探的新版本:https://github.com/squizlabs/PHP_CodeSniffer/blob/phpcs-fixer/CodeSniffer/Standards/Squiz/Sniffs/Commenting/VariableCommentSniff.php