From 88d7be3d936f27b581bc6a461bcf91c2a8032df4 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 21 Feb 2022 18:23:33 +0700 Subject: [PATCH] [Php81] Add ConstFetch and ClassConstFetch arg support on NewInInitializerRector (#1848) Co-authored-by: GitHub Action --- .../pass_class_const_fetch_arg.php.inc | 35 ++++++++++++++++++ .../Fixture/pass_const_fetch_arg.php.inc | 37 +++++++++++++++++++ ...lass_const_fetch_arg_dynamic_class.php.inc | 18 +++++++++ .../Source/SomeValueObject.php | 10 +++++ .../Php81/NodeAnalyzer/ComplexNewAnalyzer.php | 21 +++++++++++ 5 files changed, 121 insertions(+) create mode 100644 rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/pass_class_const_fetch_arg.php.inc create mode 100644 rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/pass_const_fetch_arg.php.inc create mode 100644 rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/skip_pass_class_const_fetch_arg_dynamic_class.php.inc create mode 100644 rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Source/SomeValueObject.php diff --git a/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/pass_class_const_fetch_arg.php.inc b/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/pass_class_const_fetch_arg.php.inc new file mode 100644 index 00000000000..3bb04a4a1af --- /dev/null +++ b/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/pass_class_const_fetch_arg.php.inc @@ -0,0 +1,35 @@ +dateTime = $dateTime ?? new DateTime(SomeValueObject::NOW); + } +} + +?> +----- + diff --git a/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/pass_const_fetch_arg.php.inc b/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/pass_const_fetch_arg.php.inc new file mode 100644 index 00000000000..9ab86eead13 --- /dev/null +++ b/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/pass_const_fetch_arg.php.inc @@ -0,0 +1,37 @@ +dateTime = $dateTime ?? new DateTime(NOW); + } +} + +?> +----- + diff --git a/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/skip_pass_class_const_fetch_arg_dynamic_class.php.inc b/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/skip_pass_class_const_fetch_arg_dynamic_class.php.inc new file mode 100644 index 00000000000..27e4476b283 --- /dev/null +++ b/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Fixture/skip_pass_class_const_fetch_arg_dynamic_class.php.inc @@ -0,0 +1,18 @@ +dateTime = $dateTime ?? new DateTime($class::NOW); + } +} diff --git a/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Source/SomeValueObject.php b/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Source/SomeValueObject.php new file mode 100644 index 00000000000..3004b30e9fe --- /dev/null +++ b/rules-tests/Php81/Rector/ClassMethod/NewInInitializerRector/Source/SomeValueObject.php @@ -0,0 +1,10 @@ +isAllowedConstFetchOrClassConstFeth($value)) { + continue; + } + return true; } return false; } + private function isAllowedConstFetchOrClassConstFeth(Expr $expr): bool + { + if (! in_array($expr::class, [ConstFetch::class, ClassConstFetch::class], true)) { + return false; + } + + if ($expr instanceof ClassConstFetch) { + return $expr->class instanceof Name && $expr->name instanceof Identifier; + } + + return true; + } + private function isAllowedNew(Expr $expr): bool { if ($expr instanceof New_) {