public function testGetTag()
 {
     $doc = new DocBlock(new ReflectionClass('Number'));
     $this->assertSame('v2.1-beta3', $doc->getTag('version'));
     $this->assertSame(['Mathable::add()', 'Mathable::subtract()'], $doc->getTag('see'));
 }
Example #2
0
 /**
  * @param \ReflectionMethod $method
  *
  * @return TypeInfoMember|null
  */
 protected function methodToTypeInfoMember(\ReflectionMethod $method)
 {
     if (substr($method->name, 0, 2) === '__') {
         return;
     }
     $docb = new DocBlock($method);
     $hint = $docb->getComment() ?: '';
     $link = $docb->getTag('link', '') ?: '';
     if (is_array($link)) {
         $link = $link[0];
     }
     if ($docb->tagExists('param')) {
         // detect return from docblock
         $return = explode(' ', $docb->getTag('return', 'void'), 2)[0];
     } else {
         // detect return from reflection
         $return = $this->canInspectReflectionReturnType ? $method->getReturnType() : '';
     }
     if ($docb->tagExists('param')) {
         // detect params from docblock
         $params = array_map([$this, 'parseDocBlockPropOrParam'], $docb->getTag('param', [], true));
     } else {
         // detect params from reflection
         $params = array_map([$this, 'parseReflectedParams'], $method->getParameters());
     }
     $signature = sprintf('<div class="cm-signature">' . '<span class="type">%s</span> <span class="name">%s</span>' . '(<span class="args">%s</span>)</span>' . '</div>', $return, $method->name, implode(', ', array_map(function ($param) {
         $result = '???';
         if ($param) {
             $result = sprintf('<span class="%s" title="%s"><span class="type">%s</span>$%s</span>', $param['hint'] ? 'arg hint' : 'arg', $param['hint'], count($param['types']) ? implode('|', $param['types']) . ' ' : '', $param['name']);
         }
         return $result;
     }, $params)));
     return new TypeInfoMember($method->name, ['method'], $signature . $hint, $link);
 }