From 80b5c71bbd04dbe2c35ae182abd86df280156f36 Mon Sep 17 00:00:00 2001 From: Payton Swick Date: Mon, 24 Aug 2020 15:01:40 -0400 Subject: [PATCH 1/3] Add test for fully qualified type in closure arguments --- .../fixtures/FunctionWithClosureFixture.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Tests/VariableAnalysisSniff/fixtures/FunctionWithClosureFixture.php b/Tests/VariableAnalysisSniff/fixtures/FunctionWithClosureFixture.php index 98445ee8..c595c2c9 100644 --- a/Tests/VariableAnalysisSniff/fixtures/FunctionWithClosureFixture.php +++ b/Tests/VariableAnalysisSniff/fixtures/FunctionWithClosureFixture.php @@ -82,3 +82,15 @@ function method_with_self_inside_closure() { echo static::$static_member; } } + +function function_with_type_argument_in_closure($items, $item_id) { + return array_filter($items, function (Taxed_Line_Item $line_item) use ($item_id) { + return $line_item->item_id === $item_id; + }); +} + +function function_with_fully_qualified_type_argument_in_closure($items, $item_id) { + return array_filter($items, function (\Taxed_Line_Item $line_item) use ($item_id) { + return $line_item->item_id === $item_id; + }); +} From de638493c5d10672e651c612a99dbf6d372e8ad4 Mon Sep 17 00:00:00 2001 From: Payton Swick Date: Mon, 24 Aug 2020 15:03:01 -0400 Subject: [PATCH 2/3] Improve error messages for processVariableAsUseImportDefinition --- .../Sniffs/CodeAnalysis/VariableAnalysisSniff.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php b/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php index 1f6a4aeb..4c50097a 100644 --- a/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php +++ b/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php @@ -587,11 +587,11 @@ protected function processVariableAsUseImportDefinition(File $phpcsFile, $stackP $endOfArgsPtr = $phpcsFile->findPrevious([T_CLOSE_PARENTHESIS], $stackPtr - 1, null); if (! is_int($endOfArgsPtr)) { - throw new \Exception("Arguments index not found for function use index {$stackPtr}"); + throw new \Exception("Arguments index not found for function use index {$stackPtr} when processing variable {$varName}"); } $functionPtr = Helpers::getFunctionIndexForFunctionArgument($phpcsFile, $endOfArgsPtr); if (! is_int($functionPtr)) { - throw new \Exception("Function index not found for function use index {$stackPtr}"); + throw new \Exception("Function index not found for function use index {$stackPtr} when processing variable {$varName}"); } // Use is both a read (in the enclosing scope) and a define (in the function scope) From 30f0f98ea6158417308aa823aabc69698ca0de83 Mon Sep 17 00:00:00 2001 From: Payton Swick Date: Mon, 24 Aug 2020 15:06:21 -0400 Subject: [PATCH 3/3] Allow namespace separators in getFunctionIndexForFunctionArgument --- VariableAnalysis/Lib/Helpers.php | 1 + 1 file changed, 1 insertion(+) diff --git a/VariableAnalysis/Lib/Helpers.php b/VariableAnalysis/Lib/Helpers.php index 34cb52af..4ce3b247 100644 --- a/VariableAnalysis/Lib/Helpers.php +++ b/VariableAnalysis/Lib/Helpers.php @@ -120,6 +120,7 @@ public static function getFunctionIndexForFunctionArgument(File $phpcsFile, $sta $nonFunctionTokenTypes[] = T_COMMA; $nonFunctionTokenTypes[] = T_STRING; $nonFunctionTokenTypes[] = T_BITWISE_AND; + $nonFunctionTokenTypes[] = T_NS_SEPARATOR; $functionPtr = self::getIntOrNull($phpcsFile->findPrevious($nonFunctionTokenTypes, $stackPtr - 1, null, true, null, true)); if (! is_int($functionPtr)) { return null;