Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/php-static-scanner-instrumentalization.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/nikic/php-parser/bin/php-parse')
-rwxr-xr-xvendor/nikic/php-parser/bin/php-parse193
1 files changed, 193 insertions, 0 deletions
diff --git a/vendor/nikic/php-parser/bin/php-parse b/vendor/nikic/php-parser/bin/php-parse
new file mode 100755
index 0000000..dc35a68
--- /dev/null
+++ b/vendor/nikic/php-parser/bin/php-parse
@@ -0,0 +1,193 @@
+#!/usr/bin/env php
+<?php
+
+foreach ([__DIR__ . '/../../../autoload.php', __DIR__ . '/../vendor/autoload.php'] as $file) {
+ if (file_exists($file)) {
+ require $file;
+ break;
+ }
+}
+
+ini_set('xdebug.max_nesting_level', 3000);
+
+// Disable XDebug var_dump() output truncation
+ini_set('xdebug.var_display_max_children', -1);
+ini_set('xdebug.var_display_max_data', -1);
+ini_set('xdebug.var_display_max_depth', -1);
+
+list($operations, $files, $attributes) = parseArgs($argv);
+
+/* Dump nodes by default */
+if (empty($operations)) {
+ $operations[] = 'dump';
+}
+
+if (empty($files)) {
+ showHelp("Must specify at least one file.");
+}
+
+$lexer = new PhpParser\Lexer\Emulative(array('usedAttributes' => array(
+ 'startLine', 'endLine', 'startFilePos', 'endFilePos', 'comments'
+)));
+$parser = (new PhpParser\ParserFactory)->create(
+ PhpParser\ParserFactory::PREFER_PHP7,
+ $lexer
+);
+$dumper = new PhpParser\NodeDumper(['dumpComments' => true]);
+$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
+$serializer = new PhpParser\Serializer\XML;
+
+$traverser = new PhpParser\NodeTraverser();
+$traverser->addVisitor(new PhpParser\NodeVisitor\NameResolver);
+
+foreach ($files as $file) {
+ if (strpos($file, '<?php') === 0) {
+ $code = $file;
+ echo "====> Code $code\n";
+ } else {
+ if (!file_exists($file)) {
+ die("File $file does not exist.\n");
+ }
+
+ $code = file_get_contents($file);
+ echo "====> File $file:\n";
+ }
+
+ if ($attributes['with-recovery']) {
+ $errorHandler = new PhpParser\ErrorHandler\Collecting;
+ $stmts = $parser->parse($code, $errorHandler);
+ foreach ($errorHandler->getErrors() as $error) {
+ $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
+ echo $message . "\n";
+ }
+ if (null === $stmts) {
+ continue;
+ }
+ } else {
+ try {
+ $stmts = $parser->parse($code);
+ } catch (PhpParser\Error $error) {
+ $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
+ die($message . "\n");
+ }
+ }
+
+ foreach ($operations as $operation) {
+ if ('dump' === $operation) {
+ echo "==> Node dump:\n";
+ echo $dumper->dump($stmts), "\n";
+ } elseif ('pretty-print' === $operation) {
+ echo "==> Pretty print:\n";
+ echo $prettyPrinter->prettyPrintFile($stmts), "\n";
+ } elseif ('serialize-xml' === $operation) {
+ echo "==> Serialized XML:\n";
+ echo $serializer->serialize($stmts), "\n";
+ } elseif ('var-dump' === $operation) {
+ echo "==> var_dump():\n";
+ var_dump($stmts);
+ } elseif ('resolve-names' === $operation) {
+ echo "==> Resolved names.\n";
+ $stmts = $traverser->traverse($stmts);
+ }
+ }
+}
+
+function formatErrorMessage(PhpParser\Error $e, $code, $withColumnInfo) {
+ if ($withColumnInfo && $e->hasColumnInfo()) {
+ return $e->getMessageWithColumnInfo($code);
+ } else {
+ return $e->getMessage();
+ }
+}
+
+function showHelp($error = '') {
+ if ($error) {
+ echo $error . "\n\n";
+ }
+ die(<<<OUTPUT
+Usage: php-parse [operations] file1.php [file2.php ...]
+ or: php-parse [operations] "<?php code"
+Turn PHP source code into an abstract syntax tree.
+
+Operations is a list of the following options (--dump by default):
+
+ -d, --dump Dump nodes using NodeDumper
+ -p, --pretty-print Pretty print file using PrettyPrinter\Standard
+ --serialize-xml Serialize nodes using Serializer\XML
+ --var-dump var_dump() nodes (for exact structure)
+ -N, --resolve-names Resolve names using NodeVisitor\NameResolver
+ -c, --with-column-info Show column-numbers for errors (if available)
+ -r, --with-recovery Use parsing with error recovery
+ -h, --help Display this page
+
+Example:
+ php-parse -d -p -N -d file.php
+
+ Dumps nodes, pretty prints them, then resolves names and dumps them again.
+
+
+OUTPUT
+ );
+}
+
+function parseArgs($args) {
+ $operations = array();
+ $files = array();
+ $attributes = array(
+ 'with-column-info' => false,
+ 'with-recovery' => false,
+ );
+
+ array_shift($args);
+ $parseOptions = true;
+ foreach ($args as $arg) {
+ if (!$parseOptions) {
+ $files[] = $arg;
+ continue;
+ }
+
+ switch ($arg) {
+ case '--dump':
+ case '-d':
+ $operations[] = 'dump';
+ break;
+ case '--pretty-print':
+ case '-p':
+ $operations[] = 'pretty-print';
+ break;
+ case '--serialize-xml':
+ $operations[] = 'serialize-xml';
+ break;
+ case '--var-dump':
+ $operations[] = 'var-dump';
+ break;
+ case '--resolve-names':
+ case '-N';
+ $operations[] = 'resolve-names';
+ break;
+ case '--with-column-info':
+ case '-c';
+ $attributes['with-column-info'] = true;
+ break;
+ case '--with-recovery':
+ case '-r':
+ $attributes['with-recovery'] = true;
+ break;
+ case '--help':
+ case '-h';
+ showHelp();
+ break;
+ case '--':
+ $parseOptions = false;
+ break;
+ default:
+ if ($arg[0] === '-') {
+ showHelp("Invalid operation $arg.");
+ } else {
+ $files[] = $arg;
+ }
+ }
+ }
+
+ return array($operations, $files, $attributes);
+}