public function store_function(Node\Stmt\Function_ $function) { $parameters = array_map(function ($param) { return array('name' => $param->name, 'default' => !empty($param->default), 'type' => ltrim((string) $param->type, '\\')); }, $function->getParams()); $description = ''; $return_types = array(); if ($comments = $function->getAttribute('comments')) { $phpdoc = new DocBlock($comments[0]->getText()); $description = $phpdoc->getShortDescription(); if ($return = $phpdoc->getTagsByName('return')) { $return_types = array_map('ltrim', explode('|', $return[0]->getType()), array('\\')); } // short circuit @ignore functions if ($phpdoc->hasTag('ignore')) { return; } } $this->store_model('functions', array('function' => $function->name, 'namespace' => !empty($function->namespacedName) ? implode('\\', array_slice($function->namespacedName->parts, 0, -1)) : '', 'file' => $this->_current_file, 'line' => $function->getLine(), 'description' => $description, 'return_types' => json_encode($return_types), 'parameters' => json_encode($parameters))); }
/** * Get the line number that this function ends on. * * @return int */ public function getEndLine() { return (int) $this->node->getAttribute('endLine', -1); }
function getDocBlockReturnType() { return $this->function->getAttribute('namespacedReturn'); }
public function addFunction(FunctionNode $node) { $function = new ReflectionFunction((string) $node->namespacedName); $function->setFilename((string) $this->context->getFilePath()); $function->setStartLine((int) $node->getAttribute('startLine')); $function->setEndLine((int) $node->getAttribute('endLine')); $function->setAliases($this->context->getAliases()); $function->setDocComment((string) $node->getDocComment()); $this->addFunctionLikeParameters($function, $node->params); $this->context->enterReflection($function); $this->context->enterFunctionLike($function); return $function; }