From 2392fd81c8d35c2e1d50eb26dd9cd3baa85fa2fa Mon Sep 17 00:00:00 2001 From: Brian Henry Date: Fri, 16 May 2025 17:24:12 -0700 Subject: [PATCH 1/8] Mute `command not found: nproc` --- src/voku/SimplePhpParser/Parsers/Helper/Utils.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/voku/SimplePhpParser/Parsers/Helper/Utils.php b/src/voku/SimplePhpParser/Parsers/Helper/Utils.php index dcd4cc4..c624cac 100644 --- a/src/voku/SimplePhpParser/Parsers/Helper/Utils.php +++ b/src/voku/SimplePhpParser/Parsers/Helper/Utils.php @@ -468,7 +468,7 @@ public static function getCpuCores(): int } /** @noinspection PhpUsageOfSilenceOperatorInspection */ - $ret = @\shell_exec('nproc'); + $ret = @\shell_exec('nproc 2>&1'); if (\is_string($ret)) { $ret = \trim($ret); /** @noinspection PhpAssignmentInConditionInspection */ From 5836d87e7879734ad694ed6abb18fdc0c9ea5ada Mon Sep 17 00:00:00 2001 From: Brian Henry Date: Fri, 16 May 2025 17:24:24 -0700 Subject: [PATCH 2/8] Determine number of cores on macOS --- .../SimplePhpParser/Parsers/Helper/Utils.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/voku/SimplePhpParser/Parsers/Helper/Utils.php b/src/voku/SimplePhpParser/Parsers/Helper/Utils.php index c624cac..454ae10 100644 --- a/src/voku/SimplePhpParser/Parsers/Helper/Utils.php +++ b/src/voku/SimplePhpParser/Parsers/Helper/Utils.php @@ -495,6 +495,23 @@ public static function getCpuCores(): int } } + /** + * macOS (FreeBSD) + */ + $ret = @\shell_exec('sysctl -n hw.ncpu'); + if (\is_string($ret)) { + $ret = \trim($ret); + /** @noinspection PhpAssignmentInConditionInspection */ + if ($ret && ($tmp = \filter_var($ret, \FILTER_VALIDATE_INT)) !== false) { + $return = (int)round($tmp / 2); + if ($return > 1) { + return $return; + } + + return 1; + } + } + return 1; } From 846e011e7382b12fdab723ebebaffc778962205f Mon Sep 17 00:00:00 2001 From: Brian Henry Date: Fri, 16 May 2025 17:24:49 -0700 Subject: [PATCH 3/8] `composer require "nikic/php-parser":"^5"` --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 8ecd799..95fc35b 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "phpdocumentor/reflection-common": "~2.2", "phpstan/phpdoc-parser": "~1.23", "voku/simple-cache": "~4.1", - "nikic/php-parser": "~4.16" + "nikic/php-parser": "^5" }, "require-dev": { "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" From 6f1542fb2b3454e2094d881fb9bab486d8522ced Mon Sep 17 00:00:00 2001 From: Brian Henry Date: Fri, 16 May 2025 17:50:45 -0700 Subject: [PATCH 4/8] Add `test-coverage` Composer script --- .gitignore | 1 + composer.json | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/.gitignore b/.gitignore index c1ffed2..c26410d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ composer.lock # php (phpunit) build/logs/ .phpunit.result.cache +/.phpunit.result/ # phpcs fixer .php_cs.cache diff --git a/composer.json b/composer.json index 95fc35b..d3bd127 100644 --- a/composer.json +++ b/composer.json @@ -38,5 +38,16 @@ "psr-4": { "voku\\tests\\": "tests/" } + }, + "scripts": { + "test-coverage": [ + "Composer\\Config::disableProcessTimeout", + "if [ \"$XDEBUG_MODE\" != \"coverage\" ]; then echo \"Run with 'XDEBUG_MODE=coverage composer test-coverage'\"; exit 1; fi;", + "phpunit --coverage-text --coverage-clover .phpunit.result/unitclover.xml --coverage-php .phpunit.result/unitphp.cov --coverage-html .phpunit.result/html -d memory_limit=-1 --order-by=random", + "# Run 'open ./.phpunit.result/html/index.html' to view report." + ] + }, + "scripts-descriptions": { + "test-coverage": "Run PHPUnit tests with coverage. Use 'XDEBUG_MODE=coverage composer test-coverage' to run, 'open ./.phpunit.result/html/index.html' to view." } } From c55dc7aad778426776a25df76c6fa806bd4a5784 Mon Sep 17 00:00:00 2001 From: Brian Henry Date: Sat, 31 May 2025 19:11:05 -0700 Subject: [PATCH 5/8] Instantiate parser via `::createForNewestSupportedVersion()` --- .../SimplePhpParser/Parsers/PhpCodeParser.php | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/voku/SimplePhpParser/Parsers/PhpCodeParser.php b/src/voku/SimplePhpParser/Parsers/PhpCodeParser.php index 5645859..c3b0ea7 100644 --- a/src/voku/SimplePhpParser/Parsers/PhpCodeParser.php +++ b/src/voku/SimplePhpParser/Parsers/PhpCodeParser.php @@ -5,7 +5,6 @@ namespace voku\SimplePhpParser\Parsers; use FilesystemIterator; -use PhpParser\Lexer\Emulative; use PhpParser\NodeTraverser; use PhpParser\NodeVisitor\NameResolver; use PhpParser\ParserFactory; @@ -200,20 +199,7 @@ public static function process( ParserContainer $parserContainer, ASTVisitor $visitor ) { - $parser = (new ParserFactory())->create( - ParserFactory::PREFER_PHP7, - new Emulative( - [ - 'usedAttributes' => [ - 'comments', - 'startLine', - 'endLine', - 'startTokenPos', - 'endTokenPos', - ], - ] - ) - ); + $parser = (new ParserFactory())->createForNewestSupportedVersion(); $errorHandler = new ParserErrorHandler(); From 63113e2b5e8f599889793546dfa70e010c1b8351 Mon Sep 17 00:00:00 2001 From: Brian Henry Date: Sat, 31 May 2025 19:46:29 -0700 Subject: [PATCH 6/8] `composer require "nikic/php-parser":"^4.18 || ^5"` --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index d3bd127..1e6a143 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "phpdocumentor/reflection-common": "~2.2", "phpstan/phpdoc-parser": "~1.23", "voku/simple-cache": "~4.1", - "nikic/php-parser": "^5" + "nikic/php-parser": "^4.18 || ^5" }, "require-dev": { "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" From 9356c18a1e551851fafa0324410d4d38dc813337 Mon Sep 17 00:00:00 2001 From: Brian Henry Date: Sat, 31 May 2025 19:54:42 -0700 Subject: [PATCH 7/8] Check `method_exists` for deprecated `::getParts()` --- src/voku/SimplePhpParser/Parsers/Helper/Utils.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/voku/SimplePhpParser/Parsers/Helper/Utils.php b/src/voku/SimplePhpParser/Parsers/Helper/Utils.php index 454ae10..6e422e1 100644 --- a/src/voku/SimplePhpParser/Parsers/Helper/Utils.php +++ b/src/voku/SimplePhpParser/Parsers/Helper/Utils.php @@ -112,7 +112,9 @@ public static function getPhpParserValueFromNode( && $node->value->name ) { - $value = implode('\\', $node->value->name->getParts()) ?: $node->value->name->name; + $value = method_exists($node->value->name,'getParts') + ? implode('\\', $node->value->name->getParts()) + : $node->value->name->name; return $value === 'null' ? null : $value; } } From a436917e6b1a86850fe070b1e923e7b0d7508afc Mon Sep 17 00:00:00 2001 From: Brian Henry Date: Sat, 31 May 2025 20:21:18 -0700 Subject: [PATCH 8/8] Replace deprecated `Node::getLine()` with `Node::getStartLine()` --- src/voku/SimplePhpParser/Model/BasePHPElement.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/voku/SimplePhpParser/Model/BasePHPElement.php b/src/voku/SimplePhpParser/Model/BasePHPElement.php index 55fc0ac..0ece538 100644 --- a/src/voku/SimplePhpParser/Model/BasePHPElement.php +++ b/src/voku/SimplePhpParser/Model/BasePHPElement.php @@ -97,6 +97,13 @@ protected static function getFQN($node): string protected function prepareNode(Node $node): void { - $this->line = $node->getLine(); + $this->line = method_exists($node, 'getStartLine') + ? $node->getStartLine() + /** + * Deprecated in PHP-Parser v5 + * + * @see https://github.com/nikic/PHP-Parser/blob/master/UPGRADE-5.0.md#miscellaneous-changes + */ + : $node->getLine(); } }