From 5ee21c442b3a5ad9b3ccfb849714dc2505b1ee62 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 4 Jan 2026 12:09:50 +0100 Subject: [PATCH] skip magic methods in NoDynamicNameRule, as dynamic name expected there --- src/Rules/NoDynamicNameRule.php | 4 ++++ .../NoDynamicNameRule/Fixture/SkipMagicGet.php | 13 +++++++++++++ .../NoDynamicNameRule/NoDynamicNameRuleTest.php | 1 + 3 files changed, 18 insertions(+) create mode 100644 tests/Rules/NoDynamicNameRule/Fixture/SkipMagicGet.php diff --git a/src/Rules/NoDynamicNameRule.php b/src/Rules/NoDynamicNameRule.php index abba040d..eb707ea8 100644 --- a/src/Rules/NoDynamicNameRule.php +++ b/src/Rules/NoDynamicNameRule.php @@ -65,6 +65,10 @@ public function processNode(Node $node, Scope $scope): array } if ($node instanceof MethodCall || $node instanceof StaticCall || $node instanceof FuncCall || $node instanceof PropertyFetch) { + // skip magic calls, as dynamic names expected + if (in_array($scope->getFunctionName(), ['__get', '__set'], true)) { + return []; + } if (! $node->name instanceof Expr) { return []; diff --git a/tests/Rules/NoDynamicNameRule/Fixture/SkipMagicGet.php b/tests/Rules/NoDynamicNameRule/Fixture/SkipMagicGet.php new file mode 100644 index 00000000..f87e230b --- /dev/null +++ b/tests/Rules/NoDynamicNameRule/Fixture/SkipMagicGet.php @@ -0,0 +1,13 @@ +{$name}; + } +} diff --git a/tests/Rules/NoDynamicNameRule/NoDynamicNameRuleTest.php b/tests/Rules/NoDynamicNameRule/NoDynamicNameRuleTest.php index 629352a8..b09c2f66 100644 --- a/tests/Rules/NoDynamicNameRule/NoDynamicNameRuleTest.php +++ b/tests/Rules/NoDynamicNameRule/NoDynamicNameRuleTest.php @@ -38,6 +38,7 @@ public static function provideData(): Iterator yield [__DIR__ . '/Fixture/SkipInvokable.php', []]; yield [__DIR__ . '/Fixture/SkipClosure.php', []]; yield [__DIR__ . '/Fixture/SkipCallable.php', []]; + yield [__DIR__ . '/Fixture/SkipMagicGet.php', []]; yield [__DIR__ . '/Fixture/SkipCallableUnion.php', []]; yield [__DIR__ . '/Fixture/SkipNullableClosure.php', []]; yield [__DIR__ . '/Fixture/SkipImmediatelyInvokedFunctionExpression.php', []];