Viewing file: DocCommentAlignmentSniff.php (5.37 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Squiz_Sniffs_Commenting_EmptyCatchCommentSniff. * * PHP version 5 * * @category PHP * @package PHP_CodeSniffer * @author Greg Sherwood <gsherwood@squiz.net> * @author Marc McIntyre <mmcintyre@squiz.net> * @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600) * @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence * @link http://pear.php.net/package/PHP_CodeSniffer */
/** * Squiz_Sniffs_Commenting_DocCommentAlignmentSniff. * * Tests that the stars in a doc comment align correctly. * * @category PHP * @package PHP_CodeSniffer * @author Greg Sherwood <gsherwood@squiz.net> * @author Marc McIntyre <mmcintyre@squiz.net> * @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600) * @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence * @version Release: 1.3.3 * @link http://pear.php.net/package/PHP_CodeSniffer */ class Squiz_Sniffs_Commenting_DocCommentAlignmentSniff implements PHP_CodeSniffer_Sniff {
/** * Returns an array of tokens this test wants to listen for. * * @return array */ public function register() { return array(T_DOC_COMMENT);
}//end register()
/** * Processes this test, when one of its tokens is encountered. * * @param PHP_CodeSniffer_File $phpcsFile The file being scanned. * @param int $stackPtr The position of the current token * in the stack passed in $tokens. * * @return void */ public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) { $tokens = $phpcsFile->getTokens();
// We are only interested in function/class/interface doc block comments. $nextToken = $phpcsFile->findNext(PHP_CodeSniffer_Tokens::$emptyTokens, ($stackPtr + 1), null, true); $ignore = array( T_CLASS, T_INTERFACE, T_FUNCTION, T_PUBLIC, T_PRIVATE, T_PROTECTED, T_STATIC, T_ABSTRACT, );
if (in_array($tokens[$nextToken]['code'], $ignore) === false) { // Could be a file comment. $prevToken = $phpcsFile->findPrevious(PHP_CodeSniffer_Tokens::$emptyTokens, ($stackPtr - 1), null, true); if ($tokens[$prevToken]['code'] !== T_OPEN_TAG) { return; } }
// We only want to get the first comment in a block. If there is // a comment on the line before this one, return. $docComment = $phpcsFile->findPrevious(T_DOC_COMMENT, ($stackPtr - 1)); if ($docComment !== false) { if ($tokens[$docComment]['line'] === ($tokens[$stackPtr]['line'] - 1)) { return; } }
$comments = array($stackPtr); $currentComment = $stackPtr; $lastComment = $stackPtr; while (($currentComment = $phpcsFile->findNext(T_DOC_COMMENT, ($currentComment + 1))) !== false) { if ($tokens[$lastComment]['line'] === ($tokens[$currentComment]['line'] - 1)) { $comments[] = $currentComment; $lastComment = $currentComment; } else { break; } }
// The $comments array now contains pointers to each token in the // comment block. $requiredColumn = strpos($tokens[$stackPtr]['content'], '*'); $requiredColumn += $tokens[$stackPtr]['column'];
foreach ($comments as $commentPointer) { // Check the spacing after each asterisk. $content = $tokens[$commentPointer]['content']; $firstChar = substr($content, 0, 1); $lastChar = substr($content, -1); if ($firstChar !== '/' && $lastChar !== '/') { $matches = array(); preg_match('|^(\s+)?\*(\s+)?@|', $content, $matches); if (empty($matches) === false) { if (isset($matches[2]) === false) { $error = 'Expected 1 space between asterisk and tag; 0 found'; $phpcsFile->addError($error, $commentPointer, 'NoSpaceBeforeTag'); } else { $length = strlen($matches[2]); if ($length !== 1) { $error = 'Expected 1 space between asterisk and tag; %s found'; $data = array($length); $phpcsFile->addError($error, $commentPointer, 'SpaceBeforeTag', $data); } } } }//end foreach
// Check the alignment of each asterisk. $currentColumn = strpos($content, '*'); $currentColumn += $tokens[$commentPointer]['column'];
if ($currentColumn === $requiredColumn) { // Star is aligned correctly. continue; }
$error = 'Expected %s space(s) before asterisk; %s found'; $data = array( ($requiredColumn - 1), ($currentColumn - 1), ); $phpcsFile->addError($error, $commentPointer, 'SpaceBeforeAsterisk', $data); }//end foreach
}//end process()
}//end class
?>
|