From 0b1fff5936ceb8eb76afbfd80f0ef1586fb10644 Mon Sep 17 00:00:00 2001 From: Daniil Gentili Date: Tue, 1 Sep 2020 14:31:23 +0200 Subject: [PATCH] Add single plugins --- src/Context.php | 2 +- src/Plugin/IssetExpressionFixer.php | 2 +- src/Plugin/NestedExpressionFixer.php | 6 +- src/Plugin/ReGenerator/ReGenerator.php | 18 +- src/Plugin/ReGeneratorInternal.php | 1 - src/Target/Php70.php | 4 + src/Target/Php70/IssetExpressionFixer.php | 299 +++++++++++ src/Target/Php70/NestedExpressionFixer.php | 562 +++++++++++++++++++++ src/Target/Php71.php | 12 +- src/Target/Php71/IssetExpressionFixer.php | 9 + src/Target/Php71/ListKey.php | 2 +- src/Target/Php71/NestedExpressionFixer.php | 9 + src/Target/Php71/NullableType.php | 2 +- src/Target/Php71/VoidReturnType.php | 2 +- src/Target/Php72.php | 4 + src/Target/Php72/IssetExpressionFixer.php | 9 + src/Target/Php72/NestedExpressionFixer.php | 9 + src/Target/Php73.php | 11 +- src/Target/Php73/IssetExpressionFixer.php | 9 + src/Target/Php73/NestedExpressionFixer.php | 39 ++ src/Target/Php74.php | 19 +- src/Target/Php74/ArrayUnpack.php | 1 - src/Target/Php74/IssetExpressionFixer.php | 9 + src/Target/Php74/NestedExpressionFixer.php | 9 + src/Target/Php74/TypedProperty.php | 3 +- src/Target/Php80.php | 4 + src/Target/Php80/IssetExpressionFixer.php | 36 ++ src/Target/Php80/NestedExpressionFixer.php | 103 ++++ test/dump.php | 2 +- test/exprGen.php | 59 ++- 30 files changed, 1224 insertions(+), 32 deletions(-) create mode 100644 src/Target/Php70/IssetExpressionFixer.php create mode 100644 src/Target/Php70/NestedExpressionFixer.php create mode 100644 src/Target/Php71/IssetExpressionFixer.php create mode 100644 src/Target/Php71/NestedExpressionFixer.php create mode 100644 src/Target/Php72/IssetExpressionFixer.php create mode 100644 src/Target/Php72/NestedExpressionFixer.php create mode 100644 src/Target/Php73/IssetExpressionFixer.php create mode 100644 src/Target/Php73/NestedExpressionFixer.php create mode 100644 src/Target/Php74/IssetExpressionFixer.php create mode 100644 src/Target/Php74/NestedExpressionFixer.php create mode 100644 src/Target/Php80/IssetExpressionFixer.php create mode 100644 src/Target/Php80/NestedExpressionFixer.php diff --git a/src/Context.php b/src/Context.php index f89a99a..58ca1ed 100644 --- a/src/Context.php +++ b/src/Context.php @@ -93,7 +93,7 @@ class Context } while ($argument instanceof ArrayDimFetch && $argument->var instanceof ArrayDimFetch); if ($argument instanceof Variable && \is_string($argument->name)) { $this->variables->top()->addVar($argument->name); - } + } } } } diff --git a/src/Plugin/IssetExpressionFixer.php b/src/Plugin/IssetExpressionFixer.php index f574a9c..e350f32 100644 --- a/src/Plugin/IssetExpressionFixer.php +++ b/src/Plugin/IssetExpressionFixer.php @@ -61,7 +61,7 @@ class IssetExpressionFixer extends Plugin { foreach ($isset->vars as $key => &$var) { /** @var array, true>> */ - $subNodes = $this->getConfig(\get_class($var), false) + $subNodes = $this->getConfig(\get_class($var), false); if (!$subNodes) { continue; } diff --git a/src/Plugin/NestedExpressionFixer.php b/src/Plugin/NestedExpressionFixer.php index 3f79f5e..3c79780 100644 --- a/src/Plugin/NestedExpressionFixer.php +++ b/src/Plugin/NestedExpressionFixer.php @@ -23,7 +23,7 @@ use PhpParser\Node\Scalar\LNumber; class NestedExpressionFixer extends Plugin { /** - * Recursively extract bottom ArrayDimFetch + * Recursively extract bottom ArrayDimFetch. * * @param Node $var * @return Node @@ -100,11 +100,11 @@ class NestedExpressionFixer extends Plugin } /** - * Check if a is instance of b + * Check if a is instance of b. * * @param class-string|object $a * @param class-string|object $b - * + * * @return boolean */ public static function instanceOf($a, $b): bool diff --git a/src/Plugin/ReGenerator/ReGenerator.php b/src/Plugin/ReGenerator/ReGenerator.php index fb93601..e2e5015 100644 --- a/src/Plugin/ReGenerator/ReGenerator.php +++ b/src/Plugin/ReGenerator/ReGenerator.php @@ -96,10 +96,10 @@ class ReGenerator implements \Iterator } /** - * Send value into generator + * Send value into generator. * * @param mixed $value Value - * + * * @return mixed */ public function send($value) @@ -120,10 +120,10 @@ class ReGenerator implements \Iterator return $value; } /** - * Throw value into generator + * Throw value into generator. * * @param \Throwable $throwable Excpeption - * + * * @return mixed */ public function throw(\Throwable $throwable) @@ -145,7 +145,7 @@ class ReGenerator implements \Iterator } /** - * Get current value + * Get current value. * * @return mixed */ @@ -155,7 +155,7 @@ class ReGenerator implements \Iterator return $this->yieldValue; } /** - * Get current key + * Get current key. * * @return mixed */ @@ -165,7 +165,7 @@ class ReGenerator implements \Iterator return $this->yieldKey; } /** - * Advance generator + * Advance generator. * * @return void */ @@ -174,7 +174,7 @@ class ReGenerator implements \Iterator $this->send(null); } /** - * Rewind generator + * Rewind generator. * * @return void */ @@ -195,7 +195,7 @@ class ReGenerator implements \Iterator $this->start(); } /** - * Check if generator is valid + * Check if generator is valid. * * @return boolean */ diff --git a/src/Plugin/ReGeneratorInternal.php b/src/Plugin/ReGeneratorInternal.php index e96a689..173ba2c 100644 --- a/src/Plugin/ReGeneratorInternal.php +++ b/src/Plugin/ReGeneratorInternal.php @@ -41,6 +41,5 @@ class ReGeneratorInternal extends Plugin } public function enterRoot(FunctionLike $func) { - } } diff --git a/src/Target/Php70.php b/src/Target/Php70.php index 1eb7093..408f1d1 100644 --- a/src/Target/Php70.php +++ b/src/Target/Php70.php @@ -8,6 +8,8 @@ use Phabel\Target\Php70\ClosureCallReplacer; use Phabel\Target\Php70\CompoundAccess; use Phabel\Target\Php70\DefineArrayReplacer; use Phabel\Target\Php70\GroupUseReplacer; +use Phabel\Target\Php70\IssetExpressionFixer; +use Phabel\Target\Php70\NestedExpressionFixer; use Phabel\Target\Php70\NullCoalesceReplacer; use Phabel\Target\Php70\ReservedNameReplacer; use Phabel\Target\Php70\ScalarTypeHintsRemover; @@ -30,6 +32,8 @@ class Php70 extends Plugin public static function runWithAfter(): array { return [ + IssetExpressionFixer::class, + NestedExpressionFixer::class, AnonymousClassReplacer::class, ClosureCallReplacer::class, CompoundAccess::class, diff --git a/src/Target/Php70/IssetExpressionFixer.php b/src/Target/Php70/IssetExpressionFixer.php new file mode 100644 index 0000000..6071216 --- /dev/null +++ b/src/Target/Php70/IssetExpressionFixer.php @@ -0,0 +1,299 @@ + [ + 'PhpParser\\Node\\Expr\\ArrayDimFetch' => + [ + 'var' => + [ + 'PhpParser\\Node\\Expr\\Array_' => true, + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BitwiseNot' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\Clone_' => true, + 'PhpParser\\Node\\Expr\\Closure' => true, + 'PhpParser\\Node\\Expr\\ClosureUse' => true, + 'PhpParser\\Node\\Expr\\ConstFetch' => true, + 'PhpParser\\Node\\Expr\\Empty_' => true, + 'PhpParser\\Node\\Expr\\ErrorSuppress' => true, + 'PhpParser\\Node\\Expr\\Eval_' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Isset_' => true, + 'PhpParser\\Node\\Expr\\New_' => true, + 'PhpParser\\Node\\Expr\\PostDec' => true, + 'PhpParser\\Node\\Expr\\PostInc' => true, + 'PhpParser\\Node\\Expr\\PreDec' => true, + 'PhpParser\\Node\\Expr\\PreInc' => true, + 'PhpParser\\Node\\Expr\\Print_' => true, + 'PhpParser\\Node\\Expr\\ShellExec' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\UnaryMinus' => true, + 'PhpParser\\Node\\Expr\\UnaryPlus' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\Cast\\Array_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Double' => true, + 'PhpParser\\Node\\Expr\\Cast\\Int_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Object_' => true, + 'PhpParser\\Node\\Expr\\Cast\\String_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => true, + 'PhpParser\\Node\\Scalar\\DNumber' => true, + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + 'PhpParser\\Node\\Scalar\\LNumber' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\ClassConstFetch' => + [ + 'class' => + [ + 'PhpParser\\Node\\Expr\\ClassConstFetch' => true, + 'PhpParser\\Node\\Expr\\FuncCall' => true, + 'PhpParser\\Node\\Expr\\MethodCall' => true, + 'PhpParser\\Node\\Expr\\PropertyFetch' => true, + 'PhpParser\\Node\\Expr\\StaticCall' => true, + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\PropertyFetch' => + [ + 'var' => + [ + 'PhpParser\\Node\\Expr\\Array_' => true, + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BitwiseNot' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\Clone_' => true, + 'PhpParser\\Node\\Expr\\Closure' => true, + 'PhpParser\\Node\\Expr\\ClosureUse' => true, + 'PhpParser\\Node\\Expr\\Empty_' => true, + 'PhpParser\\Node\\Expr\\ErrorSuppress' => true, + 'PhpParser\\Node\\Expr\\Eval_' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Isset_' => true, + 'PhpParser\\Node\\Expr\\New_' => true, + 'PhpParser\\Node\\Expr\\PostDec' => true, + 'PhpParser\\Node\\Expr\\PostInc' => true, + 'PhpParser\\Node\\Expr\\PreDec' => true, + 'PhpParser\\Node\\Expr\\PreInc' => true, + 'PhpParser\\Node\\Expr\\Print_' => true, + 'PhpParser\\Node\\Expr\\ShellExec' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\UnaryMinus' => true, + 'PhpParser\\Node\\Expr\\UnaryPlus' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\Cast\\Array_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Double' => true, + 'PhpParser\\Node\\Expr\\Cast\\Int_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Object_' => true, + 'PhpParser\\Node\\Expr\\Cast\\String_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => true, + 'PhpParser\\Node\\Scalar\\DNumber' => true, + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + 'PhpParser\\Node\\Scalar\\LNumber' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => + [ + 'class' => + [ + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BitwiseNot' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\ClassConstFetch' => true, + 'PhpParser\\Node\\Expr\\Clone_' => true, + 'PhpParser\\Node\\Expr\\Closure' => true, + 'PhpParser\\Node\\Expr\\ClosureUse' => true, + 'PhpParser\\Node\\Expr\\Empty_' => true, + 'PhpParser\\Node\\Expr\\ErrorSuppress' => true, + 'PhpParser\\Node\\Expr\\Eval_' => true, + 'PhpParser\\Node\\Expr\\FuncCall' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Isset_' => true, + 'PhpParser\\Node\\Expr\\MethodCall' => true, + 'PhpParser\\Node\\Expr\\New_' => true, + 'PhpParser\\Node\\Expr\\PostDec' => true, + 'PhpParser\\Node\\Expr\\PostInc' => true, + 'PhpParser\\Node\\Expr\\PreDec' => true, + 'PhpParser\\Node\\Expr\\PreInc' => true, + 'PhpParser\\Node\\Expr\\PropertyFetch' => true, + 'PhpParser\\Node\\Expr\\ShellExec' => true, + 'PhpParser\\Node\\Expr\\StaticCall' => true, + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\UnaryMinus' => true, + 'PhpParser\\Node\\Expr\\UnaryPlus' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\Cast\\Array_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Double' => true, + 'PhpParser\\Node\\Expr\\Cast\\Int_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Object_' => true, + 'PhpParser\\Node\\Expr\\Cast\\String_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => true, + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], +] + ]; + } +} diff --git a/src/Target/Php70/NestedExpressionFixer.php b/src/Target/Php70/NestedExpressionFixer.php new file mode 100644 index 0000000..d470dd2 --- /dev/null +++ b/src/Target/Php70/NestedExpressionFixer.php @@ -0,0 +1,562 @@ + [ + 'PhpParser\\Node\\Expr\\ArrayDimFetch' => + [ + 'var' => + [ + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BitwiseNot' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\Clone_' => true, + 'PhpParser\\Node\\Expr\\Closure' => true, + 'PhpParser\\Node\\Expr\\ClosureUse' => true, + 'PhpParser\\Node\\Expr\\Empty_' => true, + 'PhpParser\\Node\\Expr\\ErrorSuppress' => true, + 'PhpParser\\Node\\Expr\\Eval_' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Isset_' => true, + 'PhpParser\\Node\\Expr\\PostDec' => true, + 'PhpParser\\Node\\Expr\\PostInc' => true, + 'PhpParser\\Node\\Expr\\PreDec' => true, + 'PhpParser\\Node\\Expr\\PreInc' => true, + 'PhpParser\\Node\\Expr\\Print_' => true, + 'PhpParser\\Node\\Expr\\ShellExec' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\UnaryMinus' => true, + 'PhpParser\\Node\\Expr\\UnaryPlus' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\Cast\\Array_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Double' => true, + 'PhpParser\\Node\\Expr\\Cast\\Int_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Object_' => true, + 'PhpParser\\Node\\Expr\\Cast\\String_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => true, + 'PhpParser\\Node\\Scalar\\DNumber' => true, + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + 'PhpParser\\Node\\Scalar\\LNumber' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\ClassConstFetch' => + [ + 'class' => + [ + 'PhpParser\\Node\\Expr\\ClassConstFetch' => true, + 'PhpParser\\Node\\Expr\\FuncCall' => true, + 'PhpParser\\Node\\Expr\\MethodCall' => true, + 'PhpParser\\Node\\Expr\\PropertyFetch' => true, + 'PhpParser\\Node\\Expr\\StaticCall' => true, + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\FuncCall' => + [ + 'name' => + [ + 'PhpParser\\Node\\Expr\\Array_' => true, + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BitwiseNot' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\ClassConstFetch' => true, + 'PhpParser\\Node\\Expr\\Clone_' => true, + 'PhpParser\\Node\\Expr\\Closure' => true, + 'PhpParser\\Node\\Expr\\ClosureUse' => true, + 'PhpParser\\Node\\Expr\\ConstFetch' => true, + 'PhpParser\\Node\\Expr\\Empty_' => true, + 'PhpParser\\Node\\Expr\\ErrorSuppress' => true, + 'PhpParser\\Node\\Expr\\Eval_' => true, + 'PhpParser\\Node\\Expr\\FuncCall' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Isset_' => true, + 'PhpParser\\Node\\Expr\\MethodCall' => true, + 'PhpParser\\Node\\Expr\\New_' => true, + 'PhpParser\\Node\\Expr\\PostDec' => true, + 'PhpParser\\Node\\Expr\\PostInc' => true, + 'PhpParser\\Node\\Expr\\PreDec' => true, + 'PhpParser\\Node\\Expr\\PreInc' => true, + 'PhpParser\\Node\\Expr\\Print_' => true, + 'PhpParser\\Node\\Expr\\PropertyFetch' => true, + 'PhpParser\\Node\\Expr\\ShellExec' => true, + 'PhpParser\\Node\\Expr\\StaticCall' => true, + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\UnaryMinus' => true, + 'PhpParser\\Node\\Expr\\UnaryPlus' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\Cast\\Array_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Double' => true, + 'PhpParser\\Node\\Expr\\Cast\\Int_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Object_' => true, + 'PhpParser\\Node\\Expr\\Cast\\String_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => true, + 'PhpParser\\Node\\Scalar\\DNumber' => true, + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + 'PhpParser\\Node\\Scalar\\LNumber' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\MethodCall' => + [ + 'var' => + [ + 'PhpParser\\Node\\Expr\\Array_' => true, + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BitwiseNot' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\Clone_' => true, + 'PhpParser\\Node\\Expr\\Closure' => true, + 'PhpParser\\Node\\Expr\\ClosureUse' => true, + 'PhpParser\\Node\\Expr\\Empty_' => true, + 'PhpParser\\Node\\Expr\\ErrorSuppress' => true, + 'PhpParser\\Node\\Expr\\Eval_' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Isset_' => true, + 'PhpParser\\Node\\Expr\\PostDec' => true, + 'PhpParser\\Node\\Expr\\PostInc' => true, + 'PhpParser\\Node\\Expr\\PreDec' => true, + 'PhpParser\\Node\\Expr\\PreInc' => true, + 'PhpParser\\Node\\Expr\\Print_' => true, + 'PhpParser\\Node\\Expr\\ShellExec' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\UnaryMinus' => true, + 'PhpParser\\Node\\Expr\\UnaryPlus' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\Cast\\Array_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Double' => true, + 'PhpParser\\Node\\Expr\\Cast\\Int_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Object_' => true, + 'PhpParser\\Node\\Expr\\Cast\\String_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => true, + 'PhpParser\\Node\\Scalar\\DNumber' => true, + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + 'PhpParser\\Node\\Scalar\\LNumber' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\PropertyFetch' => + [ + 'var' => + [ + 'PhpParser\\Node\\Expr\\Array_' => true, + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BitwiseNot' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\Clone_' => true, + 'PhpParser\\Node\\Expr\\Closure' => true, + 'PhpParser\\Node\\Expr\\ClosureUse' => true, + 'PhpParser\\Node\\Expr\\Empty_' => true, + 'PhpParser\\Node\\Expr\\ErrorSuppress' => true, + 'PhpParser\\Node\\Expr\\Eval_' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Isset_' => true, + 'PhpParser\\Node\\Expr\\PostDec' => true, + 'PhpParser\\Node\\Expr\\PostInc' => true, + 'PhpParser\\Node\\Expr\\PreDec' => true, + 'PhpParser\\Node\\Expr\\PreInc' => true, + 'PhpParser\\Node\\Expr\\Print_' => true, + 'PhpParser\\Node\\Expr\\ShellExec' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\UnaryMinus' => true, + 'PhpParser\\Node\\Expr\\UnaryPlus' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\Cast\\Array_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Double' => true, + 'PhpParser\\Node\\Expr\\Cast\\Int_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Object_' => true, + 'PhpParser\\Node\\Expr\\Cast\\String_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => true, + 'PhpParser\\Node\\Scalar\\DNumber' => true, + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + 'PhpParser\\Node\\Scalar\\LNumber' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\StaticCall' => + [ + 'class' => + [ + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BitwiseNot' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\ClassConstFetch' => true, + 'PhpParser\\Node\\Expr\\Clone_' => true, + 'PhpParser\\Node\\Expr\\Closure' => true, + 'PhpParser\\Node\\Expr\\ClosureUse' => true, + 'PhpParser\\Node\\Expr\\Empty_' => true, + 'PhpParser\\Node\\Expr\\ErrorSuppress' => true, + 'PhpParser\\Node\\Expr\\Eval_' => true, + 'PhpParser\\Node\\Expr\\FuncCall' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Isset_' => true, + 'PhpParser\\Node\\Expr\\MethodCall' => true, + 'PhpParser\\Node\\Expr\\New_' => true, + 'PhpParser\\Node\\Expr\\PostDec' => true, + 'PhpParser\\Node\\Expr\\PostInc' => true, + 'PhpParser\\Node\\Expr\\PreDec' => true, + 'PhpParser\\Node\\Expr\\PreInc' => true, + 'PhpParser\\Node\\Expr\\PropertyFetch' => true, + 'PhpParser\\Node\\Expr\\ShellExec' => true, + 'PhpParser\\Node\\Expr\\StaticCall' => true, + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\UnaryMinus' => true, + 'PhpParser\\Node\\Expr\\UnaryPlus' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\Cast\\Array_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Double' => true, + 'PhpParser\\Node\\Expr\\Cast\\Int_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Object_' => true, + 'PhpParser\\Node\\Expr\\Cast\\String_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => true, + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => + [ + 'class' => + [ + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BitwiseNot' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\ClassConstFetch' => true, + 'PhpParser\\Node\\Expr\\Clone_' => true, + 'PhpParser\\Node\\Expr\\Closure' => true, + 'PhpParser\\Node\\Expr\\ClosureUse' => true, + 'PhpParser\\Node\\Expr\\Empty_' => true, + 'PhpParser\\Node\\Expr\\ErrorSuppress' => true, + 'PhpParser\\Node\\Expr\\Eval_' => true, + 'PhpParser\\Node\\Expr\\FuncCall' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Isset_' => true, + 'PhpParser\\Node\\Expr\\MethodCall' => true, + 'PhpParser\\Node\\Expr\\New_' => true, + 'PhpParser\\Node\\Expr\\PostDec' => true, + 'PhpParser\\Node\\Expr\\PostInc' => true, + 'PhpParser\\Node\\Expr\\PreDec' => true, + 'PhpParser\\Node\\Expr\\PreInc' => true, + 'PhpParser\\Node\\Expr\\PropertyFetch' => true, + 'PhpParser\\Node\\Expr\\ShellExec' => true, + 'PhpParser\\Node\\Expr\\StaticCall' => true, + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\UnaryMinus' => true, + 'PhpParser\\Node\\Expr\\UnaryPlus' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\Cast\\Array_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Double' => true, + 'PhpParser\\Node\\Expr\\Cast\\Int_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Object_' => true, + 'PhpParser\\Node\\Expr\\Cast\\String_' => true, + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => true, + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], +] + ]; + } +} diff --git a/src/Target/Php71.php b/src/Target/Php71.php index 40d5884..dc2345d 100644 --- a/src/Target/Php71.php +++ b/src/Target/Php71.php @@ -5,9 +5,12 @@ namespace Phabel\Target; use Phabel\Plugin; use Phabel\Target\Php71\ArrayList; use Phabel\Target\Php71\ClassConstantVisibilityModifiersRemover; +use Phabel\Target\Php71\IssetExpressionFixer; use Phabel\Target\Php71\ListKey; use Phabel\Target\Php71\MultipleCatchReplacer; -use Spatie\Php7to5\NodeVisitors\NullableTypeRemover; +use Phabel\Target\Php71\NestedExpressionFixer; +use Phabel\Target\Php71\NullableType; +use Phabel\Target\Php71\VoidReturnType; /** * Makes changes necessary to polyfill PHP 7.1 and run on PHP 7.0 and below. @@ -19,16 +22,19 @@ class Php71 extends Plugin { public static function composerRequires(): array { - return ['symfony/polyfill-php70' => '*']; + return ['symfony/polyfill-php71' => '*']; } public static function runWithAfter(): array { return [ + IssetExpressionFixer::class, + NestedExpressionFixer::class, ArrayList::class, ClassConstantVisibilityModifiersRemover::class, ListKey::class, MultipleCatchReplacer::class, - NullableTypeRemover::class + VoidReturnType::class, + NullableType::class ]; } } diff --git a/src/Target/Php71/IssetExpressionFixer.php b/src/Target/Php71/IssetExpressionFixer.php new file mode 100644 index 0000000..eee203a --- /dev/null +++ b/src/Target/Php71/IssetExpressionFixer.php @@ -0,0 +1,9 @@ + '*']; + return ['symfony/polyfill-php73' => '*']; + } + public static function runWithAfter(): array + { + return [ + IssetExpressionFixer::class, + NestedExpressionFixer::class, + ]; } } diff --git a/src/Target/Php73/IssetExpressionFixer.php b/src/Target/Php73/IssetExpressionFixer.php new file mode 100644 index 0000000..9be43a8 --- /dev/null +++ b/src/Target/Php73/IssetExpressionFixer.php @@ -0,0 +1,9 @@ + [ + 'PhpParser\\Node\\Expr\\Instanceof_' => + [ + 'expr' => + [ + 'PhpParser\\Node\\Scalar\\DNumber' => true, + 'PhpParser\\Node\\Scalar\\LNumber' => true, + 'PhpParser\\Node\\Scalar\\String_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => true, + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => true, + ], + ], +] + ]; + } +} diff --git a/src/Target/Php74.php b/src/Target/Php74.php index 683131c..a6e7dc0 100644 --- a/src/Target/Php74.php +++ b/src/Target/Php74.php @@ -3,6 +3,12 @@ namespace Phabel\Target; use Phabel\Plugin; +use Phabel\Target\Php74\ArrayUnpack; +use Phabel\Target\Php74\ArrowClosure; +use Phabel\Target\Php74\IssetExpressionFixer; +use Phabel\Target\Php74\NestedExpressionFixer; +use Phabel\Target\Php74\NullCoalesceAssignment; +use Phabel\Target\Php74\TypedProperty; /** * Makes changes necessary to polyfill PHP 7.4 and run on PHP 7.3 and below. @@ -14,6 +20,17 @@ class Php74 extends Plugin { public static function composerRequires(): array { - return ['symfony/polyfill-php72' => '*']; + return ['symfony/polyfill-php74' => '*']; + } + public static function runWithAfter(): array + { + return [ + IssetExpressionFixer::class, + NestedExpressionFixer::class, + ArrayUnpack::class, + ArrowClosure::class, + NullCoalesceAssignment::class, + TypedProperty::class + ]; } } diff --git a/src/Target/Php74/ArrayUnpack.php b/src/Target/Php74/ArrayUnpack.php index 5eab0da..4f93734 100644 --- a/src/Target/Php74/ArrayUnpack.php +++ b/src/Target/Php74/ArrayUnpack.php @@ -5,7 +5,6 @@ namespace Phabel\Target\Php74; use Phabel\Plugin; use PhpParser\Node\Arg; use PhpParser\Node\Expr\Array_; -use PhpParser\Node\Expr\ArrayItem; use PhpParser\Node\Expr\FuncCall; class ArrayUnpack extends Plugin diff --git a/src/Target/Php74/IssetExpressionFixer.php b/src/Target/Php74/IssetExpressionFixer.php new file mode 100644 index 0000000..318138a --- /dev/null +++ b/src/Target/Php74/IssetExpressionFixer.php @@ -0,0 +1,9 @@ + [ + 'PhpParser\\Node\\Expr\\ClassConstFetch' => + [ + 'class' => + [ + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + ], + ], + 'PhpParser\\Node\\Expr\\PropertyFetch' => + [ + 'var' => + [ + 'PhpParser\\Node\\Expr\\ConstFetch' => true, + ], + ], +] + ]; + } +} diff --git a/src/Target/Php80/NestedExpressionFixer.php b/src/Target/Php80/NestedExpressionFixer.php new file mode 100644 index 0000000..be9885a --- /dev/null +++ b/src/Target/Php80/NestedExpressionFixer.php @@ -0,0 +1,103 @@ + [ + 'PhpParser\\Node\\Expr\\ClassConstFetch' => + [ + 'class' => + [ + 'PhpParser\\Node\\Scalar\\Encapsed' => true, + ], + ], + 'PhpParser\\Node\\Expr\\Instanceof_' => + [ + 'class' => + [ + 'PhpParser\\Node\\Expr\\Assign' => true, + 'PhpParser\\Node\\Expr\\AssignRef' => true, + 'PhpParser\\Node\\Expr\\BooleanNot' => true, + 'PhpParser\\Node\\Expr\\Include_' => true, + 'PhpParser\\Node\\Expr\\Instanceof_' => true, + 'PhpParser\\Node\\Expr\\Ternary' => true, + 'PhpParser\\Node\\Expr\\YieldFrom' => true, + 'PhpParser\\Node\\Expr\\Yield_' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => true, + 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => true, + ], + ], + 'PhpParser\\Node\\Expr\\MethodCall' => + [ + 'var' => + [ + 'PhpParser\\Node\\Expr\\ConstFetch' => true, + ], + ], + 'PhpParser\\Node\\Expr\\New_' => + [ + 'class' => + [ + 'PhpParser\\Node\\Expr\\Yield_' => true, + ], + ], + 'PhpParser\\Node\\Expr\\PropertyFetch' => + [ + 'var' => + [ + 'PhpParser\\Node\\Expr\\ConstFetch' => true, + ], + ], +] + ]; + } +} diff --git a/test/dump.php b/test/dump.php index 7f5357b..2de752b 100644 --- a/test/dump.php +++ b/test/dump.php @@ -14,4 +14,4 @@ $parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7); //$parser = (new ParserFactory)->create(ParserFactory::ONLY_PHP5); \var_dump($a = $parser->parse(\file_get_contents($argv[1]))); -var_dumP((new Standard())->prettyPrint($a)); +\var_dumP((new Standard())->prettyPrint($a)); diff --git a/test/exprGen.php b/test/exprGen.php index 017369e..9ab5743 100644 --- a/test/exprGen.php +++ b/test/exprGen.php @@ -5,6 +5,8 @@ // for each subnode, to test compatibility with various versions of the PHP lexer. use HaydenPierce\ClassFinder\ClassFinder; +use Phabel\Plugin\IssetExpressionFixer; +use Phabel\Plugin\NestedExpressionFixer; use PhpParser\Builder\Class_; use PhpParser\Builder\Method; use PhpParser\Internal\PrintableNewAnonClassNode; @@ -265,20 +267,67 @@ foreach ($instanceArgTypes as $class => $argTypes) { $keys = []; foreach ($result['main'] as $version) { - $keys = array_merge_recursive($keys, $version); + $keys = \array_merge_recursive($keys, $version); } foreach ($keys as &$values) { - $values = array_keys($values); + $values = \array_keys($values); +} +foreach ([56, 70, 71, 72, 73, 74, 80] as $version) { + foreach (['NestedExpressionFixer', 'IssetExpressionFixer'] as $name) { + $code = <<< PHP + $results) { + $name = $type === 'main' ? 'NestedExpressionFixer' : 'IssetExpressionFixer'; + $type = $type === 'main' ? NestedExpressionFixer::class : IssetExpressionFixer::class; + foreach ($results as $version => $config) { + $config = \var_export($config, true); + $code = <<< PHP + $config + ]; + } + } + PHP; + \file_put_contents("src/Target/Php$version/$name.php", $code); + } } -var_dump($keys); \file_put_contents('result.php', ' $a->getname(), $expressions), true); +$ckeys = \array_fill_keys(\array_map(fn ($a) => $a->getname(), $expressions), true); foreach ($result as &$type) { foreach ($type as &$version) { foreach ($version as &$class) { foreach ($class as &$arguments) { - $arguments = array_diff_key($ckeys, $arguments); + $arguments = \array_diff_key($ckeys, $arguments); } } }