/** * @param array $files * @param string $root * * @return array */ function parse_files($files, $root) { $output = array(); foreach ($files as $filename) { $file = new File_Reflector($filename); $path = ltrim(substr($filename, strlen($root)), DIRECTORY_SEPARATOR); $file->setFilename($path); $file->process(); // TODO proper exporter $out = array('file' => export_docblock($file), 'path' => str_replace(DIRECTORY_SEPARATOR, '/', $file->getFilename()), 'root' => $root); if (!empty($file->uses)) { $out['uses'] = export_uses($file->uses); } foreach ($file->getIncludes() as $include) { $out['includes'][] = array('name' => $include->getName(), 'line' => $include->getLineNumber(), 'type' => $include->getType()); } foreach ($file->getConstants() as $constant) { $out['constants'][] = array('name' => $constant->getShortName(), 'line' => $constant->getLineNumber(), 'value' => $constant->getValue()); } if (!empty($file->uses['hooks'])) { $out['hooks'] = export_hooks($file->uses['hooks']); } foreach ($file->getFunctions() as $function) { $func = array('name' => $function->getShortName(), 'line' => $function->getLineNumber(), 'end_line' => $function->getNode()->getAttribute('endLine'), 'arguments' => export_arguments($function->getArguments()), 'doc' => export_docblock($function), 'hooks' => array()); if (!empty($function->uses)) { $func['uses'] = export_uses($function->uses); if (!empty($function->uses['hooks'])) { $func['hooks'] = export_hooks($function->uses['hooks']); } } $out['functions'][] = $func; } foreach ($file->getClasses() as $class) { $class_data = array('name' => $class->getShortName(), 'line' => $class->getLineNumber(), 'end_line' => $class->getNode()->getAttribute('endLine'), 'final' => $class->isFinal(), 'abstract' => $class->isAbstract(), 'extends' => $class->getParentClass(), 'implements' => $class->getInterfaces(), 'properties' => export_properties($class->getProperties()), 'methods' => export_methods($class->getMethods()), 'doc' => export_docblock($class)); $out['classes'][] = $class_data; } $output[] = $out; } return $output; }
public static function get_parser_phpdoc($files, $root) { $output = array(); // Fix WordPress Themes constants // Move all files inside wp-content folder to first elements $list = array(); foreach ($files as $k => $file) { if (false !== strpos($file, 'wp-content')) { $list[] = $file; unset($files[$k]); } } $files = array_merge($list, $files); foreach ($files as $filename) { $file = new File_Reflector($filename); $file->setFilename(ltrim(substr($filename, strlen($root)), '/')); $file->process(); // TODO proper exporter $out = array('file' => \WP_Parser\export_docblock($file), 'path' => $file->getFilename(), 'root' => $root); if (!empty($file->uses)) { $out['uses'] = \WP_Parser\export_uses($file->uses); } foreach ($file->getIncludes() as $include) { $out['includes'][] = array('name' => $include->getName(), 'line' => $include->getLineNumber(), 'type' => $include->getType()); } foreach ($file->getConstants() as $constant) { $out['constants'][] = array('name' => $constant->getShortName(), 'line' => $constant->getLineNumber(), 'value' => $constant->getValue(), 'doc' => \WP_Parser\export_docblock($constant)); } if (!empty($file->uses['hooks'])) { $out['hooks'] = \WP_Parser\export_hooks($file->uses['hooks']); } foreach ($file->getFunctions() as $function) { $func = array('name' => $function->getShortName(), 'line' => $function->getLineNumber(), 'end_line' => $function->getNode()->getAttribute('endLine'), 'arguments' => \WP_Parser\export_arguments($function->getArguments()), 'doc' => \WP_Parser\export_docblock($function), 'hooks' => array()); if (!empty($function->uses)) { $func['uses'] = \WP_Parser\export_uses($function->uses); if (!empty($function->uses['hooks'])) { $func['hooks'] = \WP_Parser\export_hooks($function->uses['hooks']); } } $out['functions'][] = $func; } foreach ($file->getClasses() as $class) { $class_data = array('name' => $class->getShortName(), 'line' => $class->getLineNumber(), 'end_line' => $class->getNode()->getAttribute('endLine'), 'final' => $class->isFinal(), 'abstract' => $class->isAbstract(), 'extends' => $class->getParentClass(), 'implements' => $class->getInterfaces(), 'properties' => \WP_Parser\export_properties($class->getProperties()), 'methods' => \WP_Parser\export_methods($class->getMethods()), 'doc' => \WP_Parser\export_docblock($class)); $out['classes'][] = $class_data; } $output[] = $out; } return $output; }