diff --git a/build/controllers/PhpDocController.php b/build/controllers/PhpDocController.php index 1249966..ccb0b82 100644 --- a/build/controllers/PhpDocController.php +++ b/build/controllers/PhpDocController.php @@ -54,21 +54,21 @@ class PhpDocController extends Controller $files = FileHelper::findFiles($root, $options); $nFilesTotal = 0; $nFilesUpdated = 0; - foreach ($files as $file) { - $result = $this->generateClassPropertyDocs($file); - if ($result !== false) { - list($className, $phpdoc) = $result; - if ($updateFiles) { - if ($this->updateClassPropertyDocs($file, $className, $phpdoc)) { - $nFilesUpdated++; - } - } elseif (!empty($phpdoc)) { - $this->stdout("\n[ " . $file . " ]\n\n", Console::BOLD); - $this->stdout($phpdoc); - } - } - $nFilesTotal++; - } + foreach ($files as $file) { + $result = $this->generateClassPropertyDocs($file); + if ($result !== false) { + list($className, $phpdoc) = $result; + if ($updateFiles) { + if ($this->updateClassPropertyDocs($file, $className, $phpdoc)) { + $nFilesUpdated++; + } + } elseif (!empty($phpdoc)) { + $this->stdout("\n[ " . $file . " ]\n\n", Console::BOLD); + $this->stdout($phpdoc); + } + } + $nFilesTotal++; + } $this->stdout("\n\nParsed $nFilesTotal files.\n"); $this->stdout("Updated $nFilesUpdated files.\n"); @@ -189,12 +189,12 @@ class PhpDocController extends Controller protected function generateClassPropertyDocs($fileName) { - $phpdoc = ""; - $file = str_replace("\r", "", str_replace("\t", " ", file_get_contents($fileName, true))); + $phpdoc = ""; + $file = str_replace("\r", "", str_replace("\t", " ", file_get_contents($fileName, true))); $ns = $this->match('#\nnamespace (?[\w\\\\]+);\n#', $file); $namespace = reset($ns); $namespace = $namespace['name']; - $classes = $this->match('#\n(?:abstract )?class (?\w+)( |\n)(extends )?.+\{(?.*)\n\}(\n|$)#', $file); + $classes = $this->match('#\n(?:abstract )?class (?\w+)( |\n)(extends )?.+\{(?.*)\n\}(\n|$)#', $file); if (count($classes) > 1) { $this->stderr("[ERR] There should be only one class in a file: $fileName\n", Console::FG_RED); @@ -213,74 +213,76 @@ class PhpDocController extends Controller } $className = null; - foreach ($classes as &$class) { + foreach ($classes as &$class) { - $className = $namespace . '\\' . $class['name']; + $className = $namespace . '\\' . $class['name']; - $gets = $this->match( - '#\* @return (?\w+)(?: (?(?:(?!\*/|\* @).)+?)(?:(?!\*/).)+|[\s\n]*)\*/' . - '[\s\n]{2,}public function (?get)(?\w+)\((?:,? ?\$\w+ ?= ?[^,]+)*\)#', - $class['content']); - $sets = $this->match( - '#\* @param (?\w+) \$\w+(?: (?(?:(?!\*/|\* @).)+?)(?:(?!\*/).)+|[\s\n]*)\*/' . - '[\s\n]{2,}public function (?set)(?\w+)\(\$\w+(?:, ?\$\w+ ?= ?[^,]+)*\)#', - $class['content']); - $acrs = array_merge($gets, $sets); - //print_r($acrs); continue; + $gets = $this->match( + '#\* @return (?\w+)(?: (?(?:(?!\*/|\* @).)+?)(?:(?!\*/).)+|[\s\n]*)\*/' . + '[\s\n]{2,}public function (?get)(?\w+)\((?:,? ?\$\w+ ?= ?[^,]+)*\)#', + $class['content']); + $sets = $this->match( + '#\* @param (?\w+) \$\w+(?: (?(?:(?!\*/|\* @).)+?)(?:(?!\*/).)+|[\s\n]*)\*/' . + '[\s\n]{2,}public function (?set)(?\w+)\(\$\w+(?:, ?\$\w+ ?= ?[^,]+)*\)#', + $class['content']); + $acrs = array_merge($gets, $sets); + //print_r($acrs); continue; - $props = array(); - foreach ($acrs as &$acr) { - $acr['name'] = lcfirst($acr['name']); - $acr['comment'] = trim(preg_replace('#(^|\n)\s+\*\s?#', '$1 * ', $acr['comment'])); - $props[$acr['name']][$acr['kind']] = array( - 'type' => $acr['type'], - 'comment' => $this->fixSentence($acr['comment']), - ); - } + $props = array(); + foreach ($acrs as &$acr) { + $acr['name'] = lcfirst($acr['name']); + $acr['comment'] = trim(preg_replace('#(^|\n)\s+\*\s?#', '$1 * ', $acr['comment'])); + $props[$acr['name']][$acr['kind']] = array( + 'type' => $acr['type'], + 'comment' => $this->fixSentence($acr['comment']), + ); + } + + ksort($props); // foreach ($props as $propName => &$prop) // I don't like write-only props... // if (!isset($prop['get'])) // unset($props[$propName]); - if (count($props) > 0) { - $phpdoc .= " *\n"; - foreach ($props as $propName => &$prop) { - $phpdoc .= ' * @'; + if (count($props) > 0) { + $phpdoc .= " *\n"; + foreach ($props as $propName => &$prop) { + $phpdoc .= ' * @'; // if (isset($prop['get']) && isset($prop['set'])) // Few IDEs support complex syntax $phpdoc .= 'property'; // elseif (isset($prop['get'])) // $phpdoc .= 'property-read'; // elseif (isset($prop['set'])) // $phpdoc .= 'property-write'; - $phpdoc .= ' ' . $this->getPropParam($prop, 'type') . " $$propName " . $this->getPropParam($prop, 'comment') . "\n"; - } - $phpdoc .= " *\n"; - } - } - return array($className, $phpdoc); + $phpdoc .= ' ' . $this->getPropParam($prop, 'type') . " $$propName " . $this->getPropParam($prop, 'comment') . "\n"; + } + $phpdoc .= " *\n"; + } + } + return array($className, $phpdoc); } protected function match($pattern, $subject) { - $sets = array(); - preg_match_all($pattern . 'suU', $subject, $sets, PREG_SET_ORDER); - foreach ($sets as &$set) - foreach ($set as $i => $match) - if (is_numeric($i) /*&& $i != 0*/) - unset($set[$i]); - return $sets; + $sets = array(); + preg_match_all($pattern . 'suU', $subject, $sets, PREG_SET_ORDER); + foreach ($sets as &$set) + foreach ($set as $i => $match) + if (is_numeric($i) /*&& $i != 0*/) + unset($set[$i]); + return $sets; } protected function fixSentence($str) { // TODO fix word wrap - if ($str == '') - return ''; - return strtoupper(substr($str, 0, 1)) . substr($str, 1) . ($str[strlen($str) - 1] != '.' ? '.' : ''); + if ($str == '') + return ''; + return strtoupper(substr($str, 0, 1)) . substr($str, 1) . ($str[strlen($str) - 1] != '.' ? '.' : ''); } protected function getPropParam($prop, $param) { - return isset($prop['get']) ? $prop['get'][$param] : $prop['set'][$param]; + return isset($prop['get']) ? $prop['get'][$param] : $prop['set'][$param]; } } \ No newline at end of file