11#!/usr/bin/env php
22<?php
3+
34use PhpParser \Error ;
45use PhpParser \NodeDumper ;
56use PhpParser \ParserFactory ;
@@ -8,6 +9,7 @@ use PhpParser\NodeVisitorAbstract;
89use PhpParser \Node ;
910use PhpParser \Node \Scalar \String_ ;
1011use PhpParser \Node \Expr \FuncCall ;
12+ use PhpParser \Node \Expr \Throw_ ;
1113
1214// Depends on nikic/php-parser
1315
@@ -21,9 +23,23 @@ if (count($argv) <= 2) {
2123$ plugin = trim ($ argv [1 ]);
2224$ dir = trim ($ argv [2 ]);
2325
24- $ iterator = new RecursiveIteratorIterator (new RecursiveDirectoryIterator ($ dir , RecursiveDirectoryIterator::SKIP_DOTS | RecursiveIteratorIterator::LEAVES_ONLY ));
25- $ results = [];
26+ $ directory = new \RecursiveDirectoryIterator ($ dir , \FilesystemIterator::FOLLOW_SYMLINKS );
27+ $ filter = new \RecursiveCallbackFilterIterator ($ directory , function ($ current , $ key , $ iterator ) {
28+ // Skip hidden files and directories.
29+ if (str_starts_with ($ current ->getFilename (), '. ' )) {
30+ return false ;
31+ }
32+
33+ // Skip node_modules and vendor directory
34+ if ($ current ->isDir ()) {
35+ return ! in_array ($ current ->getFilename (), ['vendor ' , 'node_modules ' ]);
36+ }
2637
38+ return $ current ->getExtension () == "php " ;
39+ });
40+ $ iterator = new \RecursiveIteratorIterator ($ filter );
41+
42+ $ results = [];
2743$ currentFile = '' ;
2844$ parser = (new ParserFactory ())->createForNewestSupportedVersion ();
2945$ traverser = new NodeTraverser ();
@@ -50,15 +66,11 @@ $traverser->addVisitor(new class extends NodeVisitorAbstract {
5066});
5167
5268foreach ($ iterator as $ file ) {
53- if (! $ file ->isFile () || str_starts_with ($ file ->getPathname (), './vendor/ ' ) || str_starts_with ($ file ->getPathname (), './node_modules/ ' )|| $ file ->getExtension () !== 'php ' ) {
54- continue ;
55- }
56-
5769 $ currentFile = $ file ->getPathname ();
5870 $ fileContents = file_get_contents ($ file ->getPathname ());
5971 try {
6072 $ ast = $ parser ->parse ($ fileContents );
61- } catch (Error $ error ) {
73+ } catch (Throwable $ error ) {
6274 echo "Parse error in file {$ file ->getPathname ()}: {$ error ->getMessage ()}\n" ;
6375 exit (1 );
6476 }
0 commit comments