Exemplo n.º 1
0
function parseHtml($html = null)
{
    if ($html == null) {
        return false;
    }
    $tags = findNodes($html);
    if (is_array($tags) == false) {
        return false;
    }
    return parseNodes($tags);
}
function analyzeCodeInPath($srcPath)
{
    $objects = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($srcPath), \RecursiveIteratorIterator::SELF_FIRST);
    $extensions = ['php', 'php5', 'phtml', 'inc', 'module', 'install'];
    $regexString = '#.*\\.(' . implode('|', $extensions) . ')#';
    $templateObjects = new \RegexIterator($objects, $regexString);
    $sourceFiles = [];
    foreach ($templateObjects as $key => $var) {
        $sourceFiles[] = $var;
    }
    try {
        foreach ($sourceFiles as $sourceFile) {
            $parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7);
            try {
                $code = @file_get_contents($sourceFile);
                if ($code === false) {
                    echo "Failed to get contents of {$sourceFile} \n";
                    continue;
                }
                $nodes = $parser->parse($code);
                if ($code === null) {
                    echo "Failed to parse code for file {$sourceFile}";
                    continue;
                }
                $classes = parseNodes($nodes);
                $sourceLocator = new SingleFileSourceLocator($sourceFile);
                $reflector = new ClassReflector($sourceLocator);
                foreach ($classes as $class) {
                    echo "Attempting to analyze class [{$class}]\n";
                    $reflClass = $reflector->reflect($class);
                    if ($reflClass == null) {
                        echo "Failed to reflect class [{$reflClass}]";
                        break 2;
                    }
                    $properties = $reflClass->getProperties();
                    $methods = $reflClass->getMethods();
                    $clashingProperties = [];
                    foreach ($properties as $property) {
                        foreach ($methods as $method) {
                            if (strcasecmp($property->getName(), $method->getName()) === 0) {
                                $clashingProperties[] = $property->getName();
                            }
                        }
                    }
                    if (count($clashingProperties) == 0) {
                        echo "Class [{$class}] has no clashing properties\n";
                    } else {
                        echo "Class [{$class}] has the following clashing properties\n";
                        foreach ($clashingProperties as $clashingProperty) {
                            echo "    {$clashingProperty}\n";
                        }
                    }
                }
            } catch (PhpParser\Error $e) {
                echo "Failed to parse code\n";
            }
        }
    } catch (\Throwable $t) {
        echo "Code analysis failed.'\n";
        echo get_class($t) . " : " . $t->getMessage() . "\n";
        echo $t->getTraceAsString();
    }
}