From 96ae92687ecb40b8e1ae1f7d5972c12745d97152 Mon Sep 17 00:00:00 2001 From: Kevin Ullyott Date: Thu, 16 Oct 2025 02:04:39 -0400 Subject: [PATCH 1/2] Refactor VariableDefinitionVisitor to streamline variable definition marking and remove unused NodeConnectingVisitor service Signed-off-by: Kevin Ullyott --- config/extension.neon | 4 -- .../VariableDefinitionVisitor.php | 60 ++++++++----------- 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/config/extension.neon b/config/extension.neon index a5604d8..c5ade24 100644 --- a/config/extension.neon +++ b/config/extension.neon @@ -114,10 +114,6 @@ parameters: maximum: 15 services: - - - class: PhpParser\NodeVisitor\NodeConnectingVisitor - tags: - - phpstan.parser.richParserNodeVisitor - class: Orrison\MeliorStan\Rules\CamelCaseVariableName\VariableDefinitionVisitor tags: diff --git a/src/Rules/CamelCaseVariableName/VariableDefinitionVisitor.php b/src/Rules/CamelCaseVariableName/VariableDefinitionVisitor.php index 9afe067..e65e467 100644 --- a/src/Rules/CamelCaseVariableName/VariableDefinitionVisitor.php +++ b/src/Rules/CamelCaseVariableName/VariableDefinitionVisitor.php @@ -3,6 +3,8 @@ namespace Orrison\MeliorStan\Rules\CamelCaseVariableName; use PhpParser\Node; +use PhpParser\Node\Expr\Array_; +use PhpParser\Node\Expr\ArrayItem; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\List_; use PhpParser\Node\Expr\Variable; @@ -19,56 +21,46 @@ final class VariableDefinitionVisitor extends NodeVisitorAbstract public function enterNode(Node $node): ?Node { - if (! $node instanceof Variable) { - return null; + if ($node instanceof Assign) { + $this->markDefinitionTargets($node->var); } - if ($this->isVariableDefinition($node)) { - $node->setAttribute(self::ATTRIBUTE_NAME, true); + if ($node instanceof Foreach_) { + $this->markDefinitionTargets($node->keyVar); + $this->markDefinitionTargets($node->valueVar); + } + + if ($node instanceof For_) { + foreach ($node->init as $initExpr) { + if ($initExpr instanceof Assign) { + $this->markDefinitionTargets($initExpr->var); + } + } } return null; } - private function isVariableDefinition(Variable $node): bool + private function markDefinitionTargets(?Node $target): void { - $parent = $node->getAttribute('parent'); - - // Early return if parent attribute is not set (e.g., if NodeConnectingVisitor is misconfigured) - if ($parent === null) { - return false; + if ($target === null) { + return; } - // Check for assignment: $var = ... - if ($parent instanceof Assign && $parent->var === $node) { - return true; - } + if ($target instanceof Variable) { + $target->setAttribute(self::ATTRIBUTE_NAME, true); - // Check for foreach: foreach ($array as $var) or foreach ($array as $key => $var) - if ($parent instanceof Foreach_) { - if ($parent->valueVar === $node || $parent->keyVar === $node) { - return true; - } + return; } - // Check for for loop: for ($i = 0; ...) - if ($parent instanceof For_) { - foreach ($parent->init as $initExpr) { - if ($initExpr instanceof Assign && $initExpr->var === $node) { - return true; + if ($target instanceof List_ || $target instanceof Array_) { + foreach ($target->items as $item) { + if (! $item instanceof ArrayItem) { + continue; } - } - } - // Check for list destructuring: list($var) = ... - if ($parent instanceof List_) { - foreach ($parent->items as $item) { - if ($item && $item->value === $node) { - return true; - } + $this->markDefinitionTargets($item->value); } } - - return false; } } From 046de70d038774c0b31cdfa3d4cbe2ee2cc8997d Mon Sep 17 00:00:00 2001 From: Kevin Ullyott Date: Thu, 16 Oct 2025 02:12:18 -0400 Subject: [PATCH 2/2] Remove unused Array_ import and simplify condition in VariableDefinitionVisitor Signed-off-by: Kevin Ullyott --- src/Rules/CamelCaseVariableName/VariableDefinitionVisitor.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Rules/CamelCaseVariableName/VariableDefinitionVisitor.php b/src/Rules/CamelCaseVariableName/VariableDefinitionVisitor.php index e65e467..ba3eb0e 100644 --- a/src/Rules/CamelCaseVariableName/VariableDefinitionVisitor.php +++ b/src/Rules/CamelCaseVariableName/VariableDefinitionVisitor.php @@ -3,7 +3,6 @@ namespace Orrison\MeliorStan\Rules\CamelCaseVariableName; use PhpParser\Node; -use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayItem; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\List_; @@ -53,7 +52,7 @@ private function markDefinitionTargets(?Node $target): void return; } - if ($target instanceof List_ || $target instanceof Array_) { + if ($target instanceof List_) { foreach ($target->items as $item) { if (! $item instanceof ArrayItem) { continue;