diff --git a/composer.json b/composer.json index c1d333fd..ea991db4 100644 --- a/composer.json +++ b/composer.json @@ -8,13 +8,13 @@ ], "bin": ["bin/svc"], "require": { - "php": "~7.1.3||~7.2.0||~7.3.0", + "php": "~7.1.3||~7.2.0||~7.3.0||~7.4.0", "phpstan/phpdoc-parser": "^0.3.5", "symfony/console": "~4.1.0||~4.4.0", - "tomzx/php-semver-checker": "^0.13.0", + "tomzx/php-semver-checker": "^0.14.0", "wikimedia/less.php": "~1.8.0", "zendframework/zend-stdlib": "^3.2.1", - "nikic/php-parser": "^3.1" + "nikic/php-parser": "^4.4" }, "require-dev": { "phpunit/phpunit": "^6.5.0", diff --git a/composer.lock b/composer.lock index 647195a4..ee4731cd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,32 +4,33 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "97c29ab87137d8c0e984e439871455d0", + "content-hash": "f3225ee314196beeeee271d15a904b04", "packages": [ { "name": "hassankhan/config", - "version": "0.11.2", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/hassankhan/config.git", - "reference": "7fbc236c32dc6cc53a7b00992a2739cf8b41c085" + "reference": "16fa4d3320ac9bb611dda0c8ea980edb58d227c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hassankhan/config/zipball/7fbc236c32dc6cc53a7b00992a2739cf8b41c085", - "reference": "7fbc236c32dc6cc53a7b00992a2739cf8b41c085", + "url": "https://api.github.com/repos/hassankhan/config/zipball/16fa4d3320ac9bb611dda0c8ea980edb58d227c9", + "reference": "16fa4d3320ac9bb611dda0c8ea980edb58d227c9", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.5.9" }, "require-dev": { - "phpunit/phpunit": "~4.0", + "phpunit/phpunit": "~4.8 || ~5.7 || ~6.5 || ~7.5", "scrutinizer/ocular": "~1.1", - "squizlabs/php_codesniffer": "~2.2" + "squizlabs/php_codesniffer": "~2.2", + "symfony/yaml": "~3.4" }, "suggest": { - "symfony/yaml": "~2.5" + "symfony/yaml": "~3.4" }, "type": "library", "autoload": { @@ -61,28 +62,29 @@ "yaml", "yml" ], - "time": "2017-11-07T22:49:43+00:00" + "time": "2019-09-01T15:51:42+00:00" }, { "name": "nikic/php-parser", - "version": "v3.1.5", + "version": "v4.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce" + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce", - "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.5" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" + "ircmaxell/php-yacc": "0.0.5", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" }, "bin": [ "bin/php-parse" @@ -90,7 +92,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -112,7 +114,7 @@ "parser", "php" ], - "time": "2018-02-28T20:30:58+00:00" + "time": "2020-04-10T16:34:50+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -212,16 +214,16 @@ }, { "name": "symfony/console", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9" + "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/4fa15ae7be74e53f6ec8c83ed403b97e23b665e9", - "reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9", + "url": "https://api.github.com/repos/symfony/console/zipball/10bb3ee3c97308869d53b3e3d03f6ac23ff985f7", + "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7", "shasum": "" }, "require": { @@ -284,20 +286,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-02-24T13:10:00+00:00" + "time": "2020-03-30T11:41:10+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38" + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", "shasum": "" }, "require": { @@ -309,7 +311,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -342,20 +344,20 @@ "polyfill", "portable" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", "shasum": "" }, "require": { @@ -367,7 +369,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -401,20 +403,20 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.14.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675" + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675", - "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", "shasum": "" }, "require": { @@ -423,7 +425,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -459,24 +461,24 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "time": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/service-contracts", - "version": "v1.1.8", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf" + "reference": "144c5e51266b281231e947b51223ba14acf1a749" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffc7f5692092df31515df2a5ecf3b7302b3ddacf", - "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", + "reference": "144c5e51266b281231e947b51223ba14acf1a749", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^7.2.5", "psr/container": "^1.0" }, "suggest": { @@ -485,7 +487,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -517,20 +519,20 @@ "interoperability", "standards" ], - "time": "2019-10-14T12:27:06+00:00" + "time": "2019-11-18T17:27:11+00:00" }, { "name": "symfony/yaml", - "version": "v4.4.5", + "version": "v4.4.7", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "94d005c176db2080e98825d98e01e8b311a97a88" + "reference": "ef166890d821518106da3560086bfcbeb4fadfec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/94d005c176db2080e98825d98e01e8b311a97a88", - "reference": "94d005c176db2080e98825d98e01e8b311a97a88", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ef166890d821518106da3560086bfcbeb4fadfec", + "reference": "ef166890d821518106da3560086bfcbeb4fadfec", "shasum": "" }, "require": { @@ -576,7 +578,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2020-02-03T10:46:43+00:00" + "time": "2020-03-30T11:41:10+00:00" }, { "name": "tomzx/finder", @@ -629,29 +631,29 @@ }, { "name": "tomzx/php-semver-checker", - "version": "v0.13.0", + "version": "v0.14.0", "source": { "type": "git", "url": "https://github.com/tomzx/php-semver-checker.git", - "reference": "d26fbefeb8405f4dc6ae7fb3a003af3b5b5f948a" + "reference": "4496ada7e8370e485054ffddc4c563fe74684ed1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tomzx/php-semver-checker/zipball/d26fbefeb8405f4dc6ae7fb3a003af3b5b5f948a", - "reference": "d26fbefeb8405f4dc6ae7fb3a003af3b5b5f948a", + "url": "https://api.github.com/repos/tomzx/php-semver-checker/zipball/4496ada7e8370e485054ffddc4c563fe74684ed1", + "reference": "4496ada7e8370e485054ffddc4c563fe74684ed1", "shasum": "" }, "require": { - "hassankhan/config": "^0.11", - "nikic/php-parser": "^3.1", - "php": ">=5.6.0", - "symfony/console": "^2.7|^3.0|^4.0", - "symfony/yaml": "^2.7|^3.0|^4.0", + "hassankhan/config": "^2.0", + "nikic/php-parser": "^4.0", + "php": ">=7.2.29", + "symfony/console": "^4.0", + "symfony/yaml": "^4.0", "tomzx/finder": "^0.1" }, "require-dev": { "mockery/mockery": "^1.0", - "phpunit/phpunit": "^4.0|^5.0" + "phpunit/phpunit": "^7.0|^8.0" }, "bin": [ "bin/php-semver-checker" @@ -659,7 +661,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "0.13-dev" + "dev-master": "0.14-dev" } }, "autoload": { @@ -685,27 +687,27 @@ "semantic versioning", "semver" ], - "time": "2019-03-09T19:02:35+00:00" + "time": "2020-04-17T04:34:42+00:00" }, { "name": "wikimedia/less.php", - "version": "1.8.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/wikimedia/less.php.git", - "reference": "f0f7768f6fa8a9d2ac6a0274f6f477c72159bf9b" + "reference": "e238ad228d74b6ffd38209c799b34e9826909266" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/less.php/zipball/f0f7768f6fa8a9d2ac6a0274f6f477c72159bf9b", - "reference": "f0f7768f6fa8a9d2ac6a0274f6f477c72159bf9b", + "url": "https://api.github.com/repos/wikimedia/less.php/zipball/e238ad228d74b6ffd38209c799b34e9826909266", + "reference": "e238ad228d74b6ffd38209c799b34e9826909266", "shasum": "" }, "require": { - "php": ">=5.3" + "php": ">=7.2.9" }, "require-dev": { - "phpunit/phpunit": "~4.8.24" + "phpunit/phpunit": "7.5.14" }, "bin": [ "bin/lessc" @@ -724,6 +726,10 @@ "Apache-2.0" ], "authors": [ + { + "name": "Josh Schmidt", + "homepage": "https://github.com/oyejorge" + }, { "name": "Matt Agar", "homepage": "https://github.com/agar" @@ -731,10 +737,6 @@ { "name": "Martin Jantošovič", "homepage": "https://github.com/Mordred" - }, - { - "name": "Josh Schmidt", - "homepage": "https://github.com/oyejorge" } ], "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)", @@ -746,7 +748,7 @@ "php", "stylesheet" ], - "time": "2019-01-19T01:01:33+00:00" + "time": "2019-11-06T18:30:11+00:00" }, { "name": "zendframework/zend-stdlib", @@ -1057,41 +1059,38 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.4", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", - "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", - "webmozart/assert": "^1.0" + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" }, "require-dev": { - "doctrine/instantiator": "^1.0.5", - "mockery/mockery": "^1.0", - "phpdocumentor/type-resolver": "0.4.*", - "phpunit/phpunit": "^6.4" + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1102,33 +1101,36 @@ { "name": "Mike van Riel", "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2019-12-28T18:55:12+00:00" + "time": "2020-02-22T12:28:44+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.2", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" + "ext-tokenizer": "^7.2", + "mockery/mockery": "~1" }, "type": "library", "extra": { @@ -1152,7 +1154,7 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2019-08-22T18:11:29+00:00" + "time": "2020-02-18T18:59:58+00:00" }, { "name": "phpspec/prophecy", @@ -2171,16 +2173,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.5.4", + "version": "3.5.5", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "dceec07328401de6211037abbb18bda423677e26" + "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dceec07328401de6211037abbb18bda423677e26", - "reference": "dceec07328401de6211037abbb18bda423677e26", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/73e2e7f57d958e7228fce50dc0c61f58f017f9f6", + "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6", "shasum": "" }, "require": { @@ -2218,7 +2220,7 @@ "phpcs", "standards" ], - "time": "2020-01-30T22:20:29+00:00" + "time": "2020-04-17T01:09:41+00:00" }, { "name": "theseer/tokenizer", @@ -2315,7 +2317,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~7.1.3||~7.2.0||~7.3.0" + "php": "~7.1.3||~7.2.0||~7.3.0||~7.4.0" }, "platform-dev": [] } diff --git a/src/Analyzer/ClassAnalyzer.php b/src/Analyzer/ClassAnalyzer.php index 51b4b8a2..c74dfa75 100644 --- a/src/Analyzer/ClassAnalyzer.php +++ b/src/Analyzer/ClassAnalyzer.php @@ -34,7 +34,7 @@ class ClassAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($node) { - return $node->name; + return $node->name->toString(); } /** diff --git a/src/Analyzer/ClassConstantAnalyzer.php b/src/Analyzer/ClassConstantAnalyzer.php index 94f4c097..6d2bd9a8 100644 --- a/src/Analyzer/ClassConstantAnalyzer.php +++ b/src/Analyzer/ClassConstantAnalyzer.php @@ -39,7 +39,7 @@ class ClassConstantAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($constant) { - return $constant->consts[0]->name; + return $constant->consts[0]->name->toString(); } /** diff --git a/src/Analyzer/ClassExtendsAnalyzer.php b/src/Analyzer/ClassExtendsAnalyzer.php index daa95506..110c6513 100644 --- a/src/Analyzer/ClassExtendsAnalyzer.php +++ b/src/Analyzer/ClassExtendsAnalyzer.php @@ -31,7 +31,7 @@ class ClassExtendsAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($node) { - return $node->name; + return $node->name->toString(); } /** diff --git a/src/Analyzer/ClassImplementsAnalyzer.php b/src/Analyzer/ClassImplementsAnalyzer.php index 307516d0..8bdc1fa8 100644 --- a/src/Analyzer/ClassImplementsAnalyzer.php +++ b/src/Analyzer/ClassImplementsAnalyzer.php @@ -32,7 +32,7 @@ class ClassImplementsAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($node) { - return $node->name; + return $node->name->toString(); } /** diff --git a/src/Analyzer/ClassMethodAnalyzer.php b/src/Analyzer/ClassMethodAnalyzer.php index f3c04a5a..7fdc0a7a 100644 --- a/src/Analyzer/ClassMethodAnalyzer.php +++ b/src/Analyzer/ClassMethodAnalyzer.php @@ -90,7 +90,7 @@ class ClassMethodAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($method) { - return $method->name; + return $method->name->toString(); } /** @@ -125,7 +125,7 @@ protected function reportAddedNode($report, $fileAfter, $classAfter, $methodAfte foreach ($class->getExtends() as $entity) { $methods = $entity->getMethodList(); // checks if the method is already exiting in parent class - if (isset($methods[$methodAfter->name])) { + if (isset($methods[$methodAfter->name->toString()])) { $report->add( $this->context, new ClassMethodOverwriteAdded($this->context, $fileAfter, $classAfter, $methodAfter) @@ -252,7 +252,7 @@ protected function reportChanged($report, $contextBefore, $contextAfter, $method if (!$signatureChanged && $beforeCount > $afterCount) { $remainingBefore = array_slice($paramsBefore, $minCount); if ($sameVarNames) { - if (strtolower($methodBefore->name) === "__construct") { + if (strtolower($methodBefore->name->toString()) === "__construct") { $data = new ClassConstructorLastParameterRemoved( $this->context, $this->fileAfter, @@ -283,7 +283,7 @@ protected function reportChanged($report, $contextBefore, $contextAfter, $method if (!$signatureChanged && $beforeCount < $afterCount) { $remainingAfter = array_slice($paramsAfter, $minCount); - if (strtolower($methodBefore->name) === '__construct') { + if (strtolower($methodBefore->name->toString()) === '__construct') { $data = $this->analyzeRemainingConstructorParams($contextAfter, $methodAfter, $remainingAfter); } else { $data = $this->analyzeRemainingMethodParams($contextAfter, $methodAfter, $remainingAfter); diff --git a/src/Analyzer/ClassMethodExceptionAnalyzer.php b/src/Analyzer/ClassMethodExceptionAnalyzer.php index cf93ff4f..8fe08d25 100644 --- a/src/Analyzer/ClassMethodExceptionAnalyzer.php +++ b/src/Analyzer/ClassMethodExceptionAnalyzer.php @@ -48,7 +48,7 @@ class ClassMethodExceptionAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($node) { - return $node->name; + return $node->name->toString(); } /** diff --git a/src/Analyzer/ClassTraitAnalyzer.php b/src/Analyzer/ClassTraitAnalyzer.php index 89d119ab..ce008afe 100644 --- a/src/Analyzer/ClassTraitAnalyzer.php +++ b/src/Analyzer/ClassTraitAnalyzer.php @@ -32,7 +32,7 @@ class ClassTraitAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($node) { - return $node->name; + return $node->name->toString(); } /** diff --git a/src/Analyzer/InterfaceAnalyzer.php b/src/Analyzer/InterfaceAnalyzer.php index 165ef39f..718822c8 100644 --- a/src/Analyzer/InterfaceAnalyzer.php +++ b/src/Analyzer/InterfaceAnalyzer.php @@ -34,7 +34,7 @@ class InterfaceAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($node) { - return $node->name; + return $node->name->toString(); } /** diff --git a/src/Analyzer/InterfaceExtendsAnalyzer.php b/src/Analyzer/InterfaceExtendsAnalyzer.php index 2ba6a946..206d9381 100644 --- a/src/Analyzer/InterfaceExtendsAnalyzer.php +++ b/src/Analyzer/InterfaceExtendsAnalyzer.php @@ -32,7 +32,7 @@ class InterfaceExtendsAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($node) { - return $node->name; + return $node->name->toString(); } /** diff --git a/src/Analyzer/MethodDocBlockAnalyzer.php b/src/Analyzer/MethodDocBlockAnalyzer.php index a24d0155..58b599dc 100644 --- a/src/Analyzer/MethodDocBlockAnalyzer.php +++ b/src/Analyzer/MethodDocBlockAnalyzer.php @@ -15,6 +15,8 @@ use Magento\SemanticVersionChecker\Operation\DocblockAnnotations\ClassMethodReturnTypeMovedFromInlineToDoc; use Magento\SemanticVersionChecker\Operation\DocblockAnnotations\ClassMethodVariableTypeMovedFromDocToInline; use Magento\SemanticVersionChecker\Operation\DocblockAnnotations\ClassMethodVariableTypeMovedFromInlineToDoc; +use PhpParser\Node\Identifier; +use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\ClassLike; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Param; @@ -119,18 +121,8 @@ public function analyzeTypeHintMovementsBetweenDocAndMethod( $docParamTypesRemoved = array_diff($docParamTypesBefore, $docParamTypesAfter) ?? ['']; //check return type - $inlineReturnTypeBefore[] = $methodBefore->returnType ?? ''; - if (is_object($inlineReturnTypeBefore[0]) && property_exists($inlineReturnTypeBefore[0], 'parts')) { - $inlineReturnTypeBefore[0] = end($inlineReturnTypeBefore[0]->parts); - } elseif (is_object($inlineReturnTypeBefore[0]) && property_exists($inlineReturnTypeBefore[0], 'type')) { - $inlineReturnTypeBefore[0] = $inlineReturnTypeBefore[0]->type; - } - $inlineReturnTypeAfter[] = $methodAfter->returnType ?? ''; - if (is_object($inlineReturnTypeAfter[0]) && property_exists($inlineReturnTypeAfter[0], 'parts')) { - $inlineReturnTypeAfter[0] = end($inlineReturnTypeAfter[0]->parts); - } elseif (is_object($inlineReturnTypeAfter[0]) && property_exists($inlineReturnTypeAfter[0], 'type')) { - $inlineReturnTypeAfter[0] = $inlineReturnTypeAfter[0]->type; - } + $inlineReturnTypeBefore[] = $this->getTypeName($methodBefore->returnType); + $inlineReturnTypeAfter[] = $this->getTypeName($methodAfter->returnType); $docReturnTypeBefore = $this->getMethodDocDeclarationByTag($methodBefore, self::DOC_RETURN_TAG) ?? ['']; $docReturnTypeAfter = $this->getMethodDocDeclarationByTag($methodAfter, self::DOC_RETURN_TAG) ?? ['']; $returnTypeMovedFromInlineToDoc = false; @@ -207,15 +199,35 @@ private function getParamTypes(array $params): array $formattedParams = []; /** @var Param $param */ foreach ($params as $param) { - $paramType = $param->type; - if (!empty($paramType) && is_object($paramType)) { - $paramParts = property_exists($paramType, 'parts') ? $paramType->parts : []; - $formattedParams['$' . $param->name] = end($paramParts); - } elseif (!empty($paramType)) { - $formattedParams['$' . $param->name] = $paramType; + $paramType = $this->getTypeName($param->type); + if (!empty($paramType)) { + $formattedParams['$' . $param->var->name] = $paramType; } } return $formattedParams ?? ['']; } + + /** + * Resolve given type to name + * + * @param FullyQualified|Identifier|null $type + * + * @return string + */ + private function getTypeName($type) + { + $typeClass = (is_null($type)) ? '' : get_class($type); + switch ($typeClass) { + case FullyQualified::class: + $returnType = $type->getLast(); + break; + case Identifier::class: + $returnType = $type->toString(); + break; + default: + $returnType = ''; + } + return $returnType; + } } diff --git a/src/Analyzer/PropertyAnalyzer.php b/src/Analyzer/PropertyAnalyzer.php index e68a2a4d..4baba484 100644 --- a/src/Analyzer/PropertyAnalyzer.php +++ b/src/Analyzer/PropertyAnalyzer.php @@ -38,7 +38,7 @@ class PropertyAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($property) { - return $property->props[0]->name; + return $property->props[0]->name->toString(); } /** diff --git a/src/Analyzer/TraitAnalyzer.php b/src/Analyzer/TraitAnalyzer.php index 084996a7..d21bb0ac 100644 --- a/src/Analyzer/TraitAnalyzer.php +++ b/src/Analyzer/TraitAnalyzer.php @@ -29,7 +29,7 @@ class TraitAnalyzer extends AbstractCodeAnalyzer */ protected function getNodeName($node) { - return $node->name; + return $node->name->toString(); } /** diff --git a/src/ClassHierarchy/Entity.php b/src/ClassHierarchy/Entity.php index 563bf236..43908545 100644 --- a/src/ClassHierarchy/Entity.php +++ b/src/ClassHierarchy/Entity.php @@ -383,7 +383,7 @@ public function addMethod(ClassMethod $method): void { //remove stmts from Method $method->stmts = []; - $this->methodList[$method->name] = $method; + $this->methodList[$method->name->toString()] = $method; } /** diff --git a/src/Comparator/Signature.php b/src/Comparator/Signature.php index 7170db7c..b65131c9 100644 --- a/src/Comparator/Signature.php +++ b/src/Comparator/Signature.php @@ -55,7 +55,7 @@ public static function isOptionalParams(array $params) public static function isObjectParams(array $params) { foreach ($params as $param) { - if (is_object($param->type)) { + if ($param->type instanceof \PhpParser\Node\Name\FullyQualified) { return true; } } diff --git a/src/Helper/ClassParser.php b/src/Helper/ClassParser.php index 426b12d1..b115ba26 100644 --- a/src/Helper/ClassParser.php +++ b/src/Helper/ClassParser.php @@ -96,7 +96,7 @@ public function getParentFullClassName() } foreach ($nodeTree->stmts as $stmt) { - if ($stmt instanceof Use_ && $stmt->uses[0]->alias === $extendedClass) { + if ($stmt instanceof Use_ && $stmt->uses[0]->getAlias()->toString() === $extendedClass) { return implode("\\", $stmt->uses[0]->name->parts); } } @@ -262,7 +262,7 @@ public function getImplementedInterfacesNames() $namespace = $nodeTree->name->toString(); foreach ($nodeTree->stmts as $stmt) { if ($stmt instanceof Use_) { - $uses[$stmt->uses[0]->alias] = $stmt->uses[0]; + $uses[$stmt->uses[0]->getAlias()->toString()] = $stmt->uses[0]; } } @@ -310,9 +310,9 @@ public function getFullyQualifiedName(string $alias): string //is the class, interface, trait defined in the very same file? if ( $stmt instanceof ClassLike - && $stmt->name === $alias + && $stmt->name->toString() === $alias ) { - return $nodeTree->name->toString() . '\\' . $stmt->name; + return $nodeTree->name->toString() . '\\' . $stmt->name->toString(); } //is the class being imported? @@ -320,7 +320,7 @@ public function getFullyQualifiedName(string $alias): string foreach ($stmt->uses as $useUseStmnt) { $fullyQualifiedName = $useUseStmnt->name->toString(); - if ($useUseStmnt->alias === $alias || $fullyQualifiedName === $alias) { + if ($useUseStmnt->getAlias()->toString() === $alias || $fullyQualifiedName === $alias) { return $fullyQualifiedName; } } diff --git a/src/Node/Statement/ClassConstant.php b/src/Node/Statement/ClassConstant.php index a3e49538..30a7a13c 100644 --- a/src/Node/Statement/ClassConstant.php +++ b/src/Node/Statement/ClassConstant.php @@ -23,11 +23,11 @@ class ClassConstant extends BaseClassConstant */ public static function getFullyQualifiedName(Stmt $context, BaseClassConstant $constant) { - $fqcn = $context->name; + $fqcn = $context->name->toString(); if ($context->namespacedName) { $fqcn = $context->namespacedName->toString(); } - return $fqcn . '::' . $constant->consts[0]->name; + return $fqcn . '::' . $constant->consts[0]->name->toString(); } } diff --git a/tests/Unit/Helper/ClassParserTest.php b/tests/Unit/Helper/ClassParserTest.php new file mode 100644 index 00000000..2906b8c3 --- /dev/null +++ b/tests/Unit/Helper/ClassParserTest.php @@ -0,0 +1,46 @@ +assertEquals('Test\VcsA\ClassA', $parser->getParentFullClassName()); + } + + public function testExtendsFull() + { + $path = __DIR__ . '/_files/ClassExtendFull.php'; + $parser = new ClassParser($path); + $this->assertEquals('Test\VcsA\ClassA', $parser->getParentFullClassName()); + } + + public function testImplementsAlias() + { + $path = __DIR__ . '/_files/ClassExtendAlias.php'; + $parser = new ClassParser($path); + $result = $parser->getImplementedInterfacesNames(); + $this->assertCount(1, $result); + $this->assertArraySubset(['Test\VcsA\A\InterfaceA'], $parser->getImplementedInterfacesNames()); + } + + public function testImplementsFull() + { + $path = __DIR__ . '/_files/ClassExtendFull.php'; + $parser = new ClassParser($path); + $result = $parser->getImplementedInterfacesNames(); + $this->assertCount(1, $result); + $this->assertArraySubset(['Test\VcsA\A\InterfaceA'], $parser->getImplementedInterfacesNames()); + } +} diff --git a/tests/Unit/Helper/_files/ClassA.php b/tests/Unit/Helper/_files/ClassA.php new file mode 100644 index 00000000..e7451c0c --- /dev/null +++ b/tests/Unit/Helper/_files/ClassA.php @@ -0,0 +1,8 @@ +