diff --git a/Tests/VariableAnalysisSniff/ArrowFunctionTest.php b/Tests/VariableAnalysisSniff/ArrowFunctionTest.php index 94db882..531f98a 100644 --- a/Tests/VariableAnalysisSniff/ArrowFunctionTest.php +++ b/Tests/VariableAnalysisSniff/ArrowFunctionTest.php @@ -58,6 +58,7 @@ public function testArrowFunctionsWithoutUnusedBeforeUsed() 102, 112, 150, + 184, ]; $this->assertSame($expectedWarnings, $lines); } diff --git a/Tests/VariableAnalysisSniff/fixtures/ArrowFunctionFixture.php b/Tests/VariableAnalysisSniff/fixtures/ArrowFunctionFixture.php index f3f48e8..9cfea71 100644 --- a/Tests/VariableAnalysisSniff/fixtures/ArrowFunctionFixture.php +++ b/Tests/VariableAnalysisSniff/fixtures/ArrowFunctionFixture.php @@ -175,3 +175,14 @@ function arrowFunctionWithNestedArrowFunction() { ]; $fn(); } + +// Arrow function in global scope +array_map( + fn( + $dir, + string $bar, + \My\Class|bool $foo, // Unused variable $foo + \My\Class|bool $baz, + ) => PREFIX_DIR . $dir . $bar . $baz, + PHP_ERROR_LOGS['ignore_dirs'] +); diff --git a/VariableAnalysis/Lib/Helpers.php b/VariableAnalysis/Lib/Helpers.php index 9b779aa..ae06129 100644 --- a/VariableAnalysis/Lib/Helpers.php +++ b/VariableAnalysis/Lib/Helpers.php @@ -429,7 +429,8 @@ public static function findVariableScope(File $phpcsFile, $stackPtr, $varName = $varName = isset($varName) ? $varName : self::normalizeVarName($token['content']); $enclosingScopeIndex = self::findVariableScopeExceptArrowFunctions($phpcsFile, $stackPtr); - if ($enclosingScopeIndex) { + + if (!is_null($enclosingScopeIndex)) { $arrowFunctionIndex = self::getContainingArrowFunctionIndex($phpcsFile, $stackPtr, $enclosingScopeIndex); $isTokenInsideArrowFunctionBody = is_int($arrowFunctionIndex); if ($isTokenInsideArrowFunctionBody) { @@ -446,7 +447,7 @@ public static function findVariableScope(File $phpcsFile, $stackPtr, $varName = } } - return self::findVariableScopeExceptArrowFunctions($phpcsFile, $stackPtr); + return $enclosingScopeIndex; } /** diff --git a/composer.json b/composer.json index 544bc3c..b11fae4 100644 --- a/composer.json +++ b/composer.json @@ -1,64 +1,63 @@ { - "name": "sirbrillig/phpcs-variable-analysis", - "description": "A PHPCS sniff to detect problems with variables.", - "type": "phpcodesniffer-standard", - "keywords" : [ "phpcs", "static analysis" ], - "license": "BSD-2-Clause", - "authors": [ - { - "name": "Sam Graham", - "email": "php-codesniffer-variableanalysis@illusori.co.uk" - }, - { - "name": "Payton Swick", - "email": "payton@foolord.com" - } - ], - "support" : { - "issues": "https://github.com/sirbrillig/phpcs-variable-analysis/issues", - "wiki" : "https://github.com/sirbrillig/phpcs-variable-analysis/wiki", - "source": "https://github.com/sirbrillig/phpcs-variable-analysis" - }, - "config": { - "sort-order": true, - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - }, - "lock": false - }, - "autoload": { - "psr-4": { - "VariableAnalysis\\": "VariableAnalysis/" - } - }, - "autoload-dev": { - "psr-4": { - "VariableAnalysis\\Tests\\": "Tests/" - } - }, - "minimum-stability": "dev", - "prefer-stable": true, - "scripts": { - "test": "./vendor/bin/phpunit --no-coverage", - "coverage": "./vendor/bin/phpunit", - "test-lte9": "./vendor/bin/phpunit -c phpunitlte9.xml.dist --no-coverage", - "coverage-lte9": "./vendor/bin/phpunit -c phpunitlte9.xml.dist", - "lint": "./vendor/bin/phpcs", - "fix": "./vendor/bin/phpcbf", - "phpstan": "./vendor/bin/phpstan analyse", - "psalm": "./vendor/bin/psalm --no-cache", - "static-analysis": "composer phpstan && composer psalm" - }, - "require" : { - "php" : ">=5.4.0", - "squizlabs/php_codesniffer": "^3.5.6" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0 || ^10.5.32 || ^11.3.3", - "sirbrillig/phpcs-import-detection": "^1.1", - "phpcsstandards/phpcsdevcs": "^1.1", - "phpstan/phpstan": "^1.7", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0", - "vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0" - } + "name": "sirbrillig/phpcs-variable-analysis", + "description": "A PHPCS sniff to detect problems with variables.", + "type": "phpcodesniffer-standard", + "keywords": ["phpcs", "static analysis"], + "license": "BSD-2-Clause", + "authors": [ + { + "name": "Sam Graham", + "email": "php-codesniffer-variableanalysis@illusori.co.uk" + }, + { + "name": "Payton Swick", + "email": "payton@foolord.com" + } + ], + "support": { + "issues": "https://github.com/sirbrillig/phpcs-variable-analysis/issues", + "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki", + "source": "https://github.com/sirbrillig/phpcs-variable-analysis" + }, + "config": { + "sort-order": true, + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "lock": false + }, + "autoload": { + "psr-4": { + "VariableAnalysis\\": "VariableAnalysis/" + } + }, + "autoload-dev": { + "psr-4": { + "VariableAnalysis\\Tests\\": "Tests/" + } + }, + "minimum-stability": "dev", + "prefer-stable": true, + "scripts": { + "test": "./vendor/bin/phpunit --no-coverage", + "coverage": "./vendor/bin/phpunit", + "test-lte9": "./vendor/bin/phpunit -c phpunitlte9.xml.dist --no-coverage", + "coverage-lte9": "./vendor/bin/phpunit -c phpunitlte9.xml.dist", + "lint": "./vendor/bin/phpcs", + "fix": "./vendor/bin/phpcbf", + "phpstan": "./vendor/bin/phpstan analyse", + "psalm": "./vendor/bin/psalm --no-cache", + "static-analysis": "composer phpstan && composer psalm" + }, + "require": { + "php": ">=5.4.0", + "squizlabs/php_codesniffer": "^3.5.6" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0 || ^10.5.32 || ^11.3.3", + "phpcsstandards/phpcsdevcs": "^1.1", + "phpstan/phpstan": "^1.7", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0", + "vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0" + } } diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 808ae0e..ff63b21 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -30,7 +30,7 @@ @@ -59,7 +59,6 @@ -