335 lines
9.4 KiB
PHP
335 lines
9.4 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* A class to represent param tags within a function comment.
|
||
|
*
|
||
|
* 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
|
||
|
*/
|
||
|
|
||
|
if (class_exists('PHP_CodeSniffer_CommentParser_AbstractDocElement', true) === false) {
|
||
|
$error = 'Class PHP_CodeSniffer_CommentParser_AbstractDocElement not found';
|
||
|
throw new PHP_CodeSniffer_Exception($error);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* A class to represent param tags within a function comment.
|
||
|
*
|
||
|
* @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 PHP_CodeSniffer_CommentParser_ParameterElement extends PHP_CodeSniffer_CommentParser_AbstractDocElement
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* The variable name of this parameter name, including the $ sign.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_varName = '';
|
||
|
|
||
|
/**
|
||
|
* The comment of this parameter tag.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_comment = '';
|
||
|
|
||
|
/**
|
||
|
* The variable type of this parameter tag.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_type = '';
|
||
|
|
||
|
/**
|
||
|
* The whitespace that exists before the variable name.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_varNameWhitespace = '';
|
||
|
|
||
|
/**
|
||
|
* The whitespace that exists before the comment.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_commentWhitespace = null;
|
||
|
|
||
|
/**
|
||
|
* The whitespace that exists before the variable type.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_typeWhitespace = '';
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Constructs a PHP_CodeSniffer_CommentParser_ParameterElement.
|
||
|
*
|
||
|
* @param PHP_CodeSniffer_CommentParser_DocElement $previousElement The element
|
||
|
* previous to
|
||
|
* this one.
|
||
|
* @param array $tokens The tokens
|
||
|
* that make up
|
||
|
* this element.
|
||
|
* @param PHP_CodeSniffer_File $phpcsFile The file that
|
||
|
* this element
|
||
|
* is in.
|
||
|
*/
|
||
|
public function __construct(
|
||
|
$previousElement,
|
||
|
$tokens,
|
||
|
PHP_CodeSniffer_File $phpcsFile
|
||
|
) {
|
||
|
parent::__construct($previousElement, $tokens, 'param', $phpcsFile);
|
||
|
|
||
|
// Handle special variable type: array(x => y).
|
||
|
$type = strtolower($this->_type);
|
||
|
if ($this->_varName === '=>' && strpos($type, 'array(') !== false) {
|
||
|
$rawContent = $this->getRawContent();
|
||
|
$matches = array();
|
||
|
$pattern = '/^(\s+)(array\(.*\))(\s+)(\$\S*)(\s+)(.*)/i';
|
||
|
if (preg_match($pattern, $rawContent, $matches) !== 0) {
|
||
|
// Process the sub elements correctly for this special case.
|
||
|
if (count($matches) === 7) {
|
||
|
$this->processSubElement('type', $matches[2], $matches[1]);
|
||
|
$this->processSubElement('varName', $matches[4], $matches[3]);
|
||
|
$this->processSubElement('comment', $matches[6], $matches[5]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}//end __construct()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the element names that this tag is comprised of, in the order
|
||
|
* that they appear in the tag.
|
||
|
*
|
||
|
* @return array(string)
|
||
|
* @see processSubElement()
|
||
|
*/
|
||
|
protected function getSubElements()
|
||
|
{
|
||
|
return array(
|
||
|
'type',
|
||
|
'varName',
|
||
|
'comment',
|
||
|
);
|
||
|
|
||
|
}//end getSubElements()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Processes the sub element with the specified name.
|
||
|
*
|
||
|
* @param string $name The name of the sub element to process.
|
||
|
* @param string $content The content of this sub element.
|
||
|
* @param string $beforeWhitespace The whitespace that exists before the
|
||
|
* sub element.
|
||
|
*
|
||
|
* @return void
|
||
|
* @see getSubElements()
|
||
|
*/
|
||
|
protected function processSubElement($name, $content, $beforeWhitespace)
|
||
|
{
|
||
|
$element = '_'.$name;
|
||
|
$whitespace = $element.'Whitespace';
|
||
|
$this->$element = $content;
|
||
|
$this->$whitespace = $beforeWhitespace;
|
||
|
|
||
|
}//end processSubElement()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the variable name that this parameter tag represents.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getVarName()
|
||
|
{
|
||
|
return $this->_varName;
|
||
|
|
||
|
}//end getVarName()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the variable type that this string represents.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getType()
|
||
|
{
|
||
|
return $this->_type;
|
||
|
|
||
|
}//end getType()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the comment of this comment for this parameter.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getComment()
|
||
|
{
|
||
|
return $this->_comment;
|
||
|
|
||
|
}//end getComment()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the whitespace before the variable type.
|
||
|
*
|
||
|
* @return stirng
|
||
|
* @see getWhiteSpaceBeforeVarName()
|
||
|
* @see getWhiteSpaceBeforeComment()
|
||
|
*/
|
||
|
public function getWhiteSpaceBeforeType()
|
||
|
{
|
||
|
return $this->_typeWhitespace;
|
||
|
|
||
|
}//end getWhiteSpaceBeforeType()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the whitespace before the variable name.
|
||
|
*
|
||
|
* @return string
|
||
|
* @see getWhiteSpaceBeforeComment()
|
||
|
* @see getWhiteSpaceBeforeType()
|
||
|
*/
|
||
|
public function getWhiteSpaceBeforeVarName()
|
||
|
{
|
||
|
return $this->_varNameWhitespace;
|
||
|
|
||
|
}//end getWhiteSpaceBeforeVarName()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the whitespace before the comment.
|
||
|
*
|
||
|
* @return string
|
||
|
* @see getWhiteSpaceBeforeVarName()
|
||
|
* @see getWhiteSpaceBeforeType()
|
||
|
*/
|
||
|
public function getWhiteSpaceBeforeComment()
|
||
|
{
|
||
|
return $this->_commentWhitespace;
|
||
|
|
||
|
}//end getWhiteSpaceBeforeComment()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the postition of this parameter are it appears in the comment.
|
||
|
*
|
||
|
* This method differs from getOrder as it is only relative to method
|
||
|
* parameters.
|
||
|
*
|
||
|
* @return int
|
||
|
*/
|
||
|
public function getPosition()
|
||
|
{
|
||
|
if (($this->getPreviousElement() instanceof PHP_CodeSniffer_CommentParser_ParameterElement) === false) {
|
||
|
return 1;
|
||
|
} else {
|
||
|
return ($this->getPreviousElement()->getPosition() + 1);
|
||
|
}
|
||
|
|
||
|
}//end getPosition()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns true if this parameter's variable aligns with the other's.
|
||
|
*
|
||
|
* @param PHP_CodeSniffer_CommentParser_ParameterElement $other The other param
|
||
|
* to check
|
||
|
* alignment with.
|
||
|
*
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public function alignsVariableWith(
|
||
|
PHP_CodeSniffer_CommentParser_ParameterElement $other
|
||
|
) {
|
||
|
// Format is:
|
||
|
// @param type $variable Comment.
|
||
|
// @param <-a-><---b---->
|
||
|
// Compares the index before param variable.
|
||
|
$otherVar = (strlen($other->_type) + strlen($other->_varNameWhitespace));
|
||
|
$thisVar = (strlen($this->_type) + strlen($this->_varNameWhitespace));
|
||
|
if ($otherVar !== $thisVar) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}//end alignsVariableWith()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns true if this parameter's comment aligns with the other's.
|
||
|
*
|
||
|
* @param PHP_CodeSniffer_CommentParser_ParameterElement $other The other param
|
||
|
* to check
|
||
|
* alignment with.
|
||
|
*
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public function alignsCommentWith(
|
||
|
PHP_CodeSniffer_CommentParser_ParameterElement $other
|
||
|
) {
|
||
|
// Compares the index before param comment.
|
||
|
$otherComment
|
||
|
= (strlen($other->_varName) + strlen($other->_commentWhitespace));
|
||
|
$thisComment
|
||
|
= (strlen($this->_varName) + strlen($this->_commentWhitespace));
|
||
|
|
||
|
if ($otherComment !== $thisComment) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}//end alignsCommentWith()
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns true if this parameter aligns with the other paramter.
|
||
|
*
|
||
|
* @param PHP_CodeSniffer_CommentParser_ParameterElement $other The other param
|
||
|
* to check
|
||
|
* alignment with.
|
||
|
*
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public function alignsWith(PHP_CodeSniffer_CommentParser_ParameterElement $other)
|
||
|
{
|
||
|
if ($this->alignsVariableWith($other) === false) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if ($this->alignsCommentWith($other) === false) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}//end alignsWith()
|
||
|
|
||
|
|
||
|
}//end class
|
||
|
|
||
|
?>
|