1
0
mirror of https://github.com/php/phd.git synced 2026-04-27 08:58:03 +02:00
Files
2024-12-29 19:58:10 +00:00

88 lines
2.5 KiB
PHP

<?php
namespace phpdotnet\phd;
class Package_IDE_PHPStub extends Package_IDE_Base {
public function __construct(
Config $config,
OutputHandler $outputHandler
) {
parent::__construct($config, $outputHandler);
$this->registerFormatName('IDE-PHPStub');
$this->setExt($this->config->ext === null ? ".php" : $this->config->ext);
}
public function parseFunction() {
$str = <<< EOD
{$this->renderFunctionDocBlock()}
{$this->renderFunctionDefinition()}
EOD;
return $str;
}
private function renderFunctionDefinition() {
return "function {$this->function['name']}({$this->renderParamBody()}) {}";
}
private function renderFunctionDocBlock() {
$valid_parts = array_filter(array(
'/**',
$this->renderFunctionVersion(),
$this->renderFunctionPurpose(),
$this->renderFunctionLink(),
$this->renderParamDocs(),
$this->renderReturnDocBlock()
));
return implode("\n", $valid_parts) . "\n */";
}
private function renderFunctionVersion() {
if (empty($this->function['version'])) {
return "";
}
return " * ({$this->function['version']})<br/>";
}
private function renderFunctionPurpose() {
if (empty($this->function['purpose'])) {
return "";
}
return " * {$this->function['purpose']}";
}
private function renderFunctionLink() {
return " * @link http://php.net/manual/en/{$this->function['manualid']}.php";
}
private function renderReturnDocBlock() {
$description = preg_replace('/\n\s+/', "\n * ", $this->function['return']['description'] ?? '');
return " * @return {$this->function['return']['type']} $description";
}
private function renderParamDocs() {
$result = array();
foreach($this->function['params'] as $param) {
$optional = $param['optional'] ? '[optional]' : '';
$result[] = " * @param {$param['type']} \${$param['name']} $optional <p> TODO DESCRIPTION </p>";
}
return implode("\n", $result);
}
private function renderParamBody() {
$result = array();
foreach($this->function['params'] as $param) {
if ($param['optional'] && isset($param['initializer'])) {
$result[] = "\${$param['name']} = {$param['initializer']}";
} else {
$result[] = "\${$param['name']}";
}
}
return implode(", ", $result);
}
}