diff --git a/src/phpDocumentor/Reflection/DocBlock.php b/src/phpDocumentor/Reflection/DocBlock.php index ff517a0..b0e04e2 100644 --- a/src/phpDocumentor/Reflection/DocBlock.php +++ b/src/phpDocumentor/Reflection/DocBlock.php @@ -241,7 +241,7 @@ class DocBlock implements \Reflector /** * Returns the full description or also known as long description. * - * @return \phpDocumentor\Reflection\DocBlock\LongDescription + * @return DocBlock\Description */ public function getLongDescription() { @@ -271,7 +271,7 @@ class DocBlock implements \Reflector /** * Returns the tags for this DocBlock. * - * @return \phpDocumentor\Reflection\DocBlock\Tag[] + * @return DocBlock\Tag[] */ public function getTags() { @@ -284,13 +284,13 @@ class DocBlock implements \Reflector * * @param string $name String to search by. * - * @return \phpDocumentor\Reflection\DocBlock_Tag[] + * @return DocBlock\Tag[] */ public function getTagsByName($name) { $result = array(); - /** @var \phpDocumentor\Reflection\DocBlock\Tag $tag */ + /** @var DocBlock\Tag $tag */ foreach ($this->getTags() as $tag) { if ($tag->getName() != $name) { continue; @@ -311,7 +311,7 @@ class DocBlock implements \Reflector */ public function hasTag($name) { - /** @var \phpDocumentor\Reflection\DocBlock\Tag $tag */ + /** @var DocBlock\Tag $tag */ foreach ($this->getTags() as $tag) { if ($tag->getName() == $name) { return true; diff --git a/src/phpDocumentor/Reflection/DocBlock/Description.php b/src/phpDocumentor/Reflection/DocBlock/Description.php index 41fe263..4300f55 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Description.php +++ b/src/phpDocumentor/Reflection/DocBlock/Description.php @@ -29,9 +29,6 @@ class Description implements \Reflector /** @var array The contents, as an array of strings and Tag objects. */ protected $parsedContents = null; - /** @var \phpDocumentor\Reflection\DocBlock\Tags[] */ - protected $tags = array(); - /** @var DocBlock The DocBlock which this description belongs to. */ protected $docblock = null; diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag.php b/src/phpDocumentor/Reflection/DocBlock/Tag.php index f2b1c16..e32e813 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag.php @@ -23,16 +23,27 @@ use phpDocumentor\Reflection\DocBlock; */ class Tag implements \Reflector { + /** + * PCRE regular expression matching a tag name. + */ + const REGEX_TAGNAME = '[\w\-\_\\\\]+'; + /** @var string Name of the tag */ protected $tag = ''; - /** @var string Content of the tag */ + /** + * @var string|null Content of the tag. + * When set to NULL, it means it needs to be regenerated. + */ protected $content = ''; /** @var string Description of the content of this tag */ protected $description = ''; - /** @var array The description, as an array of strings and Tag objects. */ + /** + * @var array|null The description, as an array of strings and Tag objects. + * When set to NULL, it means it needs to be regenerated. + */ protected $parsedDescription = null; /** @var Location Location of the tag. */ @@ -104,7 +115,7 @@ class Tag implements \Reflector Location $location = null ) { if (!preg_match( - '/^@([\w\-\_\\\\]+)(?:\s*([^\s].*)|$)?/us', + '/^@(' . self::REGEX_TAGNAME . ')(?:\s*([^\s].*)|$)?/us', $tag_line, $matches )) { @@ -173,28 +184,28 @@ class Tag implements \Reflector /** * Parses a tag and populates the member variables. * - * @param string $type Name of the tag. + * @param string $name Name of the tag. * @param string $content The contents of the given tag. * @param DocBlock $docblock The DocBlock which this tag belongs to. * @param Location $location Location of the tag. */ public function __construct( - $type, + $name, $content, DocBlock $docblock = null, Location $location = null ) { - $this->tag = $type; - $this->content = $content; - $this->description = trim($content); - $this->docblock = $docblock; - $this->location = $location; + $this + ->setName($name) + ->setContent($content) + ->setDocBlock($docblock) + ->setLocation($location); } /** - * Returns the name of this tag. + * Gets the name of this tag. * - * @return string + * @return string The name of this tag. */ public function getName() { @@ -202,17 +213,57 @@ class Tag implements \Reflector } /** - * Returns the content of this tag. + * Sets the name of this tag. + * + * @param string $name The new name of this tag. + * + * @return $this + * @throws \InvalidArgumentException When an invalid tag name is provided. + */ + public function setName($name) + { + if (!preg_match('/^' . self::REGEX_TAGNAME . '$/u', $name)) { + throw new \InvalidArgumentException( + 'Invalid tag name supplied: ' . $name + ); + } + + $this->tag = $name; + + return $this; + } + + /** + * Gets the content of this tag. * * @return string */ public function getContent() { + if (null === $this->content) { + $this->content = $this->description; + } + return $this->content; } /** - * Returns the description component of this tag. + * Sets the content of this tag. + * + * @param string $content The new content of this tag. + * + * @return $this + */ + public function setContent($content) + { + $this->setDescription($content); + $this->content = $content; + + return $this; + } + + /** + * Gets the description component of this tag. * * @return string */ @@ -222,7 +273,23 @@ class Tag implements \Reflector } /** - * Returns the parsed text of this description. + * Sets the description component of this tag. + * + * @param string $description The new description component of this tag. + * + * @return $this + */ + public function setDescription($description) + { + $this->content = null; + $this->parsedDescription = null; + $this->description = trim($description); + + return $this; + } + + /** + * Gets the parsed text of this description. * * @return array An array of strings and tag objects, in the order they * occur within the description. @@ -237,14 +304,53 @@ class Tag implements \Reflector } /** - * Get the location of the tag. + * Gets the docblock this tag belongs to. + * + * @return DocBlock The docblock this tag belongs to. + */ + public function getDocBlock() + { + return $this->docblock; + } + + /** + * Sets the docblock this tag belongs to. + * + * @param DocBlock $docblock The new docblock this tag belongs to. Setting + * NULL removes any association. + * + * @return $this + */ + public function setDocBlock(DocBlock $docblock = null) + { + $this->docblock = $docblock; + + return $this; + } + + /** + * Gets the location of the tag. * - * @return Location Tag's location. + * @return Location The tag's location. */ public function getLocation() { return $this->location; } + + /** + * Sets the location of the tag. + * + * @param Location $location The new location of the tag. + * + * @return $this + */ + public function setLocation(Location $location = null) + { + $this->location = $location; + + return $this; + } /** * Builds a string representation of this object. diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php index 0c0cb5a..d5e5f83 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php @@ -12,7 +12,6 @@ namespace phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock; use phpDocumentor\Reflection\DocBlock\Tag; /** @@ -25,36 +24,41 @@ use phpDocumentor\Reflection\DocBlock\Tag; class AuthorTag extends Tag { /** @var string The name of the author */ - protected $name = ''; + protected $authorName = ''; /** @var string The email of the author */ - protected $email = ''; + protected $authorEmail = ''; + + public function getContent() + { + if (null === $this->content) { + $this->content = $this->authorName; + if ('' != $this->authorEmail) { + $this->content .= "<{$this->authorEmail}>"; + } + } + + return $this->content; + } /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'author'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. + * {@inheritdoc} */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - parent::__construct($type, $content, $docblock, $location); + public function setContent($content) + { + parent::setContent($content); if (preg_match( - '/^([^\<]*)(\<([^\>]*)\>)?$/', + '/^([^\<]*)(\<([^\>]*)\>)?$/u', $this->description, $matches )) { - $this->name = trim($matches[1]); + $this->authorName = trim($matches[1]); if (isset($matches[3])) { - $this->email = trim($matches[3]); + $this->authorEmail = trim($matches[3]); } } + + return $this; } /** @@ -64,7 +68,22 @@ class AuthorTag extends Tag */ public function getAuthorName() { - return $this->name; + return $this->authorName; + } + + /** + * Sets the author's name. + * + * @param string $authorName The new author name. + * + * @return $this + */ + public function setAuthorName($authorName) + { + $this->content = null; + $this->authorName = $authorName; + + return $this; } /** @@ -74,6 +93,21 @@ class AuthorTag extends Tag */ public function getAuthorEmail() { - return $this->email; + return $this->authorEmail; + } + + /** + * Sets the author's email. + * + * @param string $authorEmail The new author email. + * + * @return $this + */ + public function setAuthorEmail($authorEmail) + { + $this->content = null; + $this->authorEmail = $authorEmail; + + return $this; } } diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php index 85f5c52..9b53379 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php @@ -24,26 +24,32 @@ use phpDocumentor\Reflection\DocBlock\Tag; */ class ExampleTag extends SourceTag { - /** @var string Path to a file to use as an example. Can also be an URI. */ + /** + * @var string Path to a file to use as an example. + * May also be an absolute URI. + */ protected $filePath = ''; + public function getContent() + { + if (null === $this->content) { + $this->content + = (preg_match('/\s/Su', $this->filePath) + ? '"' . $this->filePath . '"' + : $this->filePath) . ' ' . $this->getContent(); + } + + return $this->content; + } /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'example'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. + * {@inheritdoc} */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - Tag::__construct($type, $content, $docblock, $location); + public function setContent($content) + { + Tag::setContent($content); if (preg_match( '/^ + # File component (?: # File path in quotes \"([^\"]+)\" @@ -57,35 +63,52 @@ class ExampleTag extends SourceTag $this->description, $matches )) { - if ('' !== $matches[1]) { - //Quoted file path. - $this->filePath = trim($matches[1]); - } elseif (false === strpos($matches[2], ':')) { - //Relative URL or a file path with no spaces in it. - $this->filePath = rawurldecode( - str_replace(array('/', '\\'), '%2F', $matches[2]) - ); - } else { - //Absolute URL or URI. - $this->filePath = $matches[2]; - } - + $this->setFilePath('' === $matches[1] ? $matches[2] : $matches[1]); + if (isset($matches[3])) { - parent::__construct($type, $matches[3]); + parent::setContent($matches[3]); $this->content = $content; } else { $this->description = ''; } } + + return $this; } /** * Returns the file path. * - * @return string Path to a file to use as an example. Can also be an URI. + * @return string Path to a file to use as an example. + * May also be an absolute URI. */ public function getFilePath() { return $this->filePath; } + + /** + * Sets the file path. + * + * @param string $filePath The new file path or URI to use as an example. + * + * @return $this + */ + public function setFilePath($filePath) + { + if (preg_match('/\s/Su', $filePath)) { + //Quoted file path. + $this->filePath = trim($filePath); + } elseif (false === strpos($filePath, ':')) { + //Relative URL or a file path with no spaces in it. + $this->filePath = rawurldecode( + str_replace(array('/', '\\'), '%2F', $filePath) + ); + } else { + //Absolute URL or URI. + $this->filePath = $filePath; + } + + return $this; + } } diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php index d9af24d..7b97273 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php @@ -12,7 +12,6 @@ namespace phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock; use phpDocumentor\Reflection\DocBlock\Tag; /** @@ -28,30 +27,34 @@ class LinkTag extends Tag protected $link = ''; /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'link'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. + * {@inheritdoc} */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - parent::__construct($type, $content, $docblock, $location); - $content = preg_split('/\s+/u', $this->description, 2); + public function getContent() + { + if (null === $this->content) { + $this->content = "{$this->link} {$this->description}"; + } - // any output is considered a type - $this->link = $content[0]; - - $this->description = isset($content[1]) ? $content[1] : $content[0]; + return $this->content; } /** - * Returns the link + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); + $content = preg_split('/\s+/Su', $this->description, 2); + + $this->link = $content[0]; + + $this->description = isset($content[1]) ? $content[1] : $content[0]; + + return $this; + } + + /** + * Gets the link * * @return string */ @@ -65,10 +68,13 @@ class LinkTag extends Tag * * @param string $link The link * - * @return void + * @return $this */ public function setLink($link) { + $this->content = null; $this->link = $link; + + return $this; } } diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php index 69c9638..e77cdf7 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php @@ -12,7 +12,6 @@ namespace phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock; use phpDocumentor\Reflection\DocBlock\Tag; /** @@ -32,22 +31,25 @@ class MethodTag extends ReturnTag protected $arguments = ''; /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'method'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. + * {@inheritdoc} */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - Tag::__construct($type, $content, $docblock, $location); + public function getContent() + { + if (null === $this->content) { + $this->content = $this->type . + " {$this->method_name}({$this->arguments}) " . + $this->description; + } - $matches = array(); + return $this; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + Tag::setContent($content); // 1. none or more whitespace // 2. optionally a word with underscores followed by whitespace : as // type for the return value @@ -92,6 +94,8 @@ class MethodTag extends ReturnTag echo date('c') . ' ERR (3): @method contained invalid contents: ' . $this->content . PHP_EOL; } + + return $this; } /** @@ -99,11 +103,14 @@ class MethodTag extends ReturnTag * * @param string $method_name The name of the method. * - * @return void + * @return $this */ public function setMethodName($method_name) { + $this->content = null; $this->method_name = $method_name; + + return $this; } /** @@ -125,7 +132,10 @@ class MethodTag extends ReturnTag */ public function setArguments($arguments) { + $this->content = null; $this->arguments = $arguments; + + return $this; } /** diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php index e10572d..5edab5f 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php @@ -27,25 +27,27 @@ class ParamTag extends ReturnTag /** * @var string */ - protected $variableName = null; + protected $variableName = ''; /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'param'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. + * {@inheritdoc} */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - Tag::__construct($type, $content, $docblock, $location); + public function getContent() + { + if (null === $this->content) { + $this->content + = "{$this->type} {$this->variableName} {$this->description}"; + } + return $this->content; + } + /** + * {@inheritdoc} + */ + public function setContent($content) + { + Tag::setContent($content); $content = preg_split( - '/(\s+)/u', + '/(\s+)/Su', $this->description, 3, PREG_SPLIT_DELIM_CAPTURE @@ -70,6 +72,8 @@ class ParamTag extends ReturnTag } $this->description = implode('', $content); + + return $this; } /** @@ -87,10 +91,13 @@ class ParamTag extends ReturnTag * * @param string $name The new name for this variable. * - * @return void + * @return $this */ public function setVariableName($name) { + $this->content = null; $this->variableName = $name; + + return $this; } } diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php index d903778..b850496 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php @@ -12,7 +12,6 @@ namespace phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock; use phpDocumentor\Reflection\DocBlock\Tag; use phpDocumentor\Reflection\DocBlock\Type\Collection; @@ -32,26 +31,32 @@ class ReturnTag extends Tag protected $types = null; /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'return'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. + * {@inheritdoc} */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - parent::__construct($type, $content, $docblock, $location); - $content = preg_split('/\s+/u', $this->description, 2); + public function getCotnent() + { + if (null === $this->content) { + $this->content = "{$this->type} {$this->description}"; + } + + return $this->cotnent; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); + + $content = preg_split('/\s+/Su', $this->description, 2); // any output is considered a type $this->type = $content[0]; $this->description = isset($content[1]) ? $content[1] : ''; + + return $this; } /** diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php index fdbb5c8..2bf827a 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php @@ -28,30 +28,34 @@ class SeeTag extends Tag protected $refers = null; /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'see'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. + * {@inheritdoc} */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - parent::__construct($type, $content, $docblock, $location); - $content = preg_split('/\s+/u', $this->description, 2); + public function getContent() + { + if (null === $this->content) { + $this->content = "{$this->refers} {$this->description}"; + } + return $this->content; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); + $content = preg_split('/\s+/Su', $this->description, 2); // any output is considered a type $this->refers = $content[0]; $this->description = isset($content[1]) ? $content[1] : ''; + + return $this; } /** - * Returns the type of the variable. + * Gets the structural element this tag refers to. * * @return string */ @@ -59,4 +63,19 @@ class SeeTag extends Tag { return $this->refers; } + + /** + * Sets the structural element this tag refers to. + * + * @param string $refers The new type this tag refers to. + * + * @return $this + */ + public function setReference($refers) + { + $this->content = null; + $this->refers = $refers; + + return $this; + } } diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php index 486c793..001a281 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php @@ -36,20 +36,24 @@ class SourceTag extends Tag protected $lineCount = null; /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'source'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. + * {@inheritdoc} */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - parent::__construct($type, $content, $docblock, $location); + public function getContent() + { + if (null === $this->content) { + $this->content + = "{$this->startingLine} {$this->lineCount} {$this->description}"; + } + + return $this->content; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); if (preg_match( '/^ # Starting line @@ -72,10 +76,12 @@ class SourceTag extends Tag } $this->description = $matches[3]; } + + return $this; } /** - * Returns the starting line. + * Gets the starting line. * * @return int The starting line, relative to the structural element's * location. @@ -85,6 +91,22 @@ class SourceTag extends Tag return $this->startingLine; } + /** + * Sets the starting line. + * + * @param int $startingLine The new starting line, relative to the + * structural element's location. + * + * @return $this + */ + public function setStartingLine($startingLine) + { + $this->content = null; + $this->startingLine = $startingLine; + + return $this; + } + /** * Returns the number of lines. * @@ -95,4 +117,20 @@ class SourceTag extends Tag { return $this->lineCount; } + + /** + * Sets the number of lines. + * + * @param int|null $lineCount The new number of lines, relative to the + * starting line. NULL means "to the end". + * + * @return $this + */ + public function setLineCount($lineCount) + { + $this->content = null; + $this->lineCount = $lineCount; + + return $this; + } } diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php index 16c6ca5..236b2c8 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php @@ -12,9 +12,6 @@ namespace phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock; -use phpDocumentor\Reflection\DocBlock\Tag; - /** * Reflection class for a @var tag in a Docblock. * @@ -24,38 +21,4 @@ use phpDocumentor\Reflection\DocBlock\Tag; */ class VarTag extends ParamTag { - /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'var'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. - */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - Tag::__construct($type, $content, $docblock, $location); - $content = preg_split('/\s+/u', $this->description); - - if (count($content) == 0) { - return; - } - - // var always starts with the variable name - $this->type = array_shift($content); - - // if the next item starts with a $ it must be the variable name - if ((count($content) > 0) - && (strlen($content[0]) > 0) - && ($content[0][0] == '$') - ) { - $this->variableName = array_shift($content); - } - - $this->description = implode(' ', $content); - } } diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php b/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php index f7525be..5f739da 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php @@ -24,39 +24,45 @@ use phpDocumentor\Reflection\DocBlock\Tag; */ class VersionTag extends Tag { + /** + * PCRE regular expression matching a version vector. + * Assumes the "x" modifier. + */ + const REGEX_VECTOR = '(?: + # Normal release vectors. + \d\S* + | + # VCS version vectors. Per PHPCS, they are expected to + # follow the form of the VCS name, followed by ":", followed + # by the version vector itself. + # By convention, popular VCSes like CVS, SVN and GIT use "$" + # around the actual version vector. + [^\s\:]+\:\s*\$[^\$]+\$ + )'; + /** @var string The version vector. */ protected $version = ''; + + public function getContent() + { + if (null === $this->content) { + $this->content = "{$this->version} {$this->description}"; + } + + return $this->content; + } /** - * Parses a tag and populates the member variables. - * - * @param string $type Tag identifier for this tag (should be 'version'). - * @param string $content Contents for this tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. + * {@inheritdoc} */ - public function __construct( - $type, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - parent::__construct($type, $content, $docblock, $location); + public function setContent($content) + { + parent::setContent($content); if (preg_match( '/^ # The version vector - ((?: - # Normal release vectors. - \d\S* - | - # VCS version vectors. Per PHPCS, they are expected to - # follow the form of the VCS name, followed by ":", followed - # by the version vector itself. - # By convention, popular VCSes like CVS, SVN and GIT use "$" - # around the actual version vector. - [^\s\:]+\:\s*\$[^\$]+\$ - )) + (' . self::REGEX_VECTOR . ') \s* # The description (.+)? @@ -67,10 +73,12 @@ class VersionTag extends Tag $this->version = $matches[1]; $this->description = isset($matches[2]) ? $matches[2] : ''; } + + return $this; } /** - * Returns the version section of the tag. + * Gets the version section of the tag. * * @return string The version section of the tag. */ @@ -78,4 +86,23 @@ class VersionTag extends Tag { return $this->version; } + + /** + * Sets the version section of the tag. + * + * @param string $version The new version section of the tag. + * Invalid version vectors will set the version to an empty string. + * + * @return $this + */ + public function setVersion($version) + { + $this->content = null; + $this->version + = preg_match('/^' . self::REGEX_VECTOR . '$/ux', $version) + ? $version + : ''; + + return $this; + } } diff --git a/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php b/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php index b08993d..19e7603 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php +++ b/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php @@ -152,7 +152,7 @@ class Collection extends \ArrayObject } if ($this->isTypeAnArray($type)) { - return $this->expand(substr($type, 0, -2)).self::OPERATOR_ARRAY; + return $this->expand(substr($type, 0, -2)) . self::OPERATOR_ARRAY; } if ($this->isRelativeType($type) && !$this->isTypeAKeyword($type)) { @@ -186,7 +186,7 @@ class Collection extends \ArrayObject */ protected function isTypeAnArray($type) { - return (substr($type, -2) == self::OPERATOR_ARRAY); + return substr($type, -2) === self::OPERATOR_ARRAY; } /** @@ -199,7 +199,7 @@ class Collection extends \ArrayObject */ protected function isTypeAKeyword($type) { - return in_array(strtolower($type), $this->keywords); + return in_array(strtolower($type), $this->keywords, true); } /** diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php index 52b7a71..519a61b 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php @@ -33,8 +33,7 @@ class ExampleTagTest extends \PHPUnit_Framework_TestCase * @param string $exLineCount * @param string $exFilepath * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\ExampleTag::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tag\ExampleTag::getFilePath + * @covers \phpDocumentor\Reflection\DocBlock\Tag\ExampleTag * @dataProvider provideDataForConstuctor * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php index 0578e1a..0c64ed0 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php @@ -32,8 +32,7 @@ class LinkTagTest extends \PHPUnit_Framework_TestCase * @param string $exDescription * @param string $exLink * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\LinkTag::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tag\LinkTag::getLink + * @covers \phpDocumentor\Reflection\DocBlock\Tag\LinkTag * @dataProvider provideDataForConstuctor * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php index 56fb162..72ccb78 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php @@ -34,10 +34,7 @@ class MethodTagTest extends \PHPUnit_Framework_TestCase * @param string $description The short description mentioned in the * signature. * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\MethodTag::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tag\MethodTag::getMethodName - * @covers \phpDocumentor\Reflection\DocBlock\Tag\MethodTag::getArguments - * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\MethodTag * @dataProvider getTestSignatures * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php index 5d8f554..0e05382 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php @@ -33,9 +33,7 @@ class ParamTagTest extends \PHPUnit_Framework_TestCase * @param string $extractedVarName * @param string $extractedDescription * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\ParamTag::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tag\ParamTag::getVariableName - * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\ParamTag * @dataProvider provideDataForConstructor * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php index fcbfc64..9e2aec0 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php @@ -33,7 +33,6 @@ class ReturnTagTest extends \PHPUnit_Framework_TestCase * @param string $extractedDescription * * @covers \phpDocumentor\Reflection\DocBlock\Tag\ReturnTag - * * @dataProvider provideDataForConstructor * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php index c61fc4b..6829b04 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php @@ -31,8 +31,7 @@ class SeeTagTest extends \PHPUnit_Framework_TestCase * @param string $exContent * @param string $exReference * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\SeeTag::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tag\SeeTag::getReference + * @covers \phpDocumentor\Reflection\DocBlock\Tag\SeeTag * @dataProvider provideDataForConstuctor * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php index fa77057..2a40e0a 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php @@ -32,9 +32,7 @@ class SourceTagTest extends \PHPUnit_Framework_TestCase * @param string $exStartingLine * @param string $exLineCount * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\SourceTag::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tag\SourceTag::getStartingLine - * @covers \phpDocumentor\Reflection\DocBlock\Tag\SourceTag::getLineCount + * @covers \phpDocumentor\Reflection\DocBlock\Tag\SourceTag * @dataProvider provideDataForConstuctor * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php index 259384d..3c669d5 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php @@ -33,7 +33,6 @@ class ThrowsTagTest extends \PHPUnit_Framework_TestCase * @param string $extractedDescription * * @covers \phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag - * * @dataProvider provideDataForConstructor * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php index 1847215..9ae2aa5 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php @@ -32,7 +32,7 @@ class VarTagTest extends \PHPUnit_Framework_TestCase * @param string $exVariable * @param string $exDescription * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\VarTag::__construct + * @covers \phpDocumentor\Reflection\DocBlock\Tag\VarTag * @dataProvider provideDataForConstuctor * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php index 1507ba6..e145386 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php @@ -32,8 +32,7 @@ class VersionTagTest extends \PHPUnit_Framework_TestCase * @param string $exDescription * @param string $exVersion * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\VersionTag::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tag\VersionTag::getVersion + * @covers \phpDocumentor\Reflection\DocBlock\Tag\VersionTag * @dataProvider provideDataForConstuctor * * @return void diff --git a/tests/phpDocumentor/Reflection/DocBlock/TagTest.php b/tests/phpDocumentor/Reflection/DocBlock/TagTest.php index ef2ab56..9e873ec 100644 --- a/tests/phpDocumentor/Reflection/DocBlock/TagTest.php +++ b/tests/phpDocumentor/Reflection/DocBlock/TagTest.php @@ -272,9 +272,7 @@ TAG_HANDLER * @param string $content * @param string $exDescription * - * @covers \phpDocumentor\Reflection\DocBlock\Tag::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tag::getDescription - * @covers \phpDocumentor\Reflection\DocBlock\Tag::getContent + * @covers \phpDocumentor\Reflection\DocBlock\Tag * @dataProvider provideDataForConstuctor * * @return void @@ -309,11 +307,6 @@ TAG_HANDLER 'unknown', '', '', - ), - array( - '', - 'unknown', - 'unknown', ) ); }