From c1abe33f0f6f4a02bf58d813b744024dbb4d08af Mon Sep 17 00:00:00 2001 From: arkener Date: Mon, 15 Aug 2022 14:46:47 +0200 Subject: [PATCH] Ignore function call arguments on static declarations processing (#272) --- .../fixtures/ClassWithMembersFixture.php | 8 ++++++++ .../fixtures/FunctionWithClosureFixture.php | 7 +++++++ .../Sniffs/CodeAnalysis/VariableAnalysisSniff.php | 6 ++++++ 3 files changed, 21 insertions(+) diff --git a/Tests/VariableAnalysisSniff/fixtures/ClassWithMembersFixture.php b/Tests/VariableAnalysisSniff/fixtures/ClassWithMembersFixture.php index 6154b735..20adf83e 100644 --- a/Tests/VariableAnalysisSniff/fixtures/ClassWithMembersFixture.php +++ b/Tests/VariableAnalysisSniff/fixtures/ClassWithMembersFixture.php @@ -175,3 +175,11 @@ public function baz3($param) { // Unused variable $param return 'foobar'; } } + +class ClassWithStaticCreateMethod { + + public static function createStatic($value) { + return new static($value); + } + +} diff --git a/Tests/VariableAnalysisSniff/fixtures/FunctionWithClosureFixture.php b/Tests/VariableAnalysisSniff/fixtures/FunctionWithClosureFixture.php index c595c2c9..d5cb237b 100644 --- a/Tests/VariableAnalysisSniff/fixtures/FunctionWithClosureFixture.php +++ b/Tests/VariableAnalysisSniff/fixtures/FunctionWithClosureFixture.php @@ -94,3 +94,10 @@ function function_with_fully_qualified_type_argument_in_closure($items, $item_id return $line_item->item_id === $item_id; }); } + +function function_with_static_closure() { + $params = array(); + array_map(static function ($inner_param) { + echo $inner_param; + }, $params); +} diff --git a/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php b/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php index a1aa0673..94d1e9fb 100644 --- a/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php +++ b/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php @@ -1333,6 +1333,12 @@ protected function processVariableAsStaticDeclaration(File $phpcsFile, $stackPtr return false; } + // Is the token inside a function call? If so, this is not a static + // declaration. + if (Helpers::isTokenInsideFunctionCallArgument($phpcsFile, $stackPtr)) { + return false; + } + // Is the keyword a late static binding? If so, this isn't the static // keyword we're looking for, but since static:: isn't allowed in a // compile-time constant, we also know we can't be part of a static