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')); }
/** * @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); }