Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php declare (strict_types=1); namespace Rector\Symfony\Symfony30\Rector\MethodCall; us..
Decoded Output download
<?php
declare (strict_types=1);
namespace Rector\Symfony\Symfony30\Rector\MethodCall;
use PhpParser\Node;
use PhpParser\Node\Expr\Array_;
use PhpParser\Node\Expr\ArrayItem;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Scalar\String_;
use Rector\Rector\AbstractRector;
use Rector\Symfony\NodeAnalyzer\FormAddMethodCallAnalyzer;
use Rector\Symfony\NodeAnalyzer\FormOptionsArrayMatcher;
use Rector\Symfony\NodeManipulator\ArrayManipulator;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\Symfony\Tests\Symfony30\Rector\MethodCall\ReadOnlyOptionToAttributeRector\ReadOnlyOptionToAttributeRectorTest
*/
final class ReadOnlyOptionToAttributeRector extends AbstractRector
{
/**
* @readonly
* @var \Rector\Symfony\NodeManipulator\ArrayManipulator
*/
private $arrayManipulator;
/**
* @readonly
* @var \Rector\Symfony\NodeAnalyzer\FormAddMethodCallAnalyzer
*/
private $formAddMethodCallAnalyzer;
/**
* @readonly
* @var \Rector\Symfony\NodeAnalyzer\FormOptionsArrayMatcher
*/
private $formOptionsArrayMatcher;
public function __construct(ArrayManipulator $arrayManipulator, FormAddMethodCallAnalyzer $formAddMethodCallAnalyzer, FormOptionsArrayMatcher $formOptionsArrayMatcher)
{
$this->arrayManipulator = $arrayManipulator;
$this->formAddMethodCallAnalyzer = $formAddMethodCallAnalyzer;
$this->formOptionsArrayMatcher = $formOptionsArrayMatcher;
}
public function getRuleDefinition() : RuleDefinition
{
return new RuleDefinition('Change "read_only" option in form to attribute', [new CodeSample(<<<'CODE_SAMPLE'
use Symfony\Component\Form\FormBuilderInterface;
function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('cuid', TextType::class, ['read_only' => true]);
}
CODE_SAMPLE
, <<<'CODE_SAMPLE'
use Symfony\Component\Form\FormBuilderInterface;
function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('cuid', TextType::class, ['attr' => ['read_only' => true]]);
}
CODE_SAMPLE
)]);
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes() : array
{
return [MethodCall::class];
}
/**
* @param MethodCall $node
*/
public function refactor(Node $node) : ?Node
{
if (!$this->formAddMethodCallAnalyzer->isMatching($node)) {
return null;
}
$optionsArray = $this->formOptionsArrayMatcher->match($node);
if (!$optionsArray instanceof Array_) {
return null;
}
$readOnlyArrayItem = $this->arrayManipulator->findItemInInArrayByKeyAndUnset($optionsArray, 'read_only');
if (!$readOnlyArrayItem instanceof ArrayItem) {
return null;
}
// rename string
$readOnlyArrayItem->key = new String_('readonly');
$this->arrayManipulator->addItemToArrayUnderKey($optionsArray, $readOnlyArrayItem, 'attr');
return $node;
}
}
?>
Did this file decode correctly?
Original Code
<?php
declare (strict_types=1);
namespace Rector\Symfony\Symfony30\Rector\MethodCall;
use PhpParser\Node;
use PhpParser\Node\Expr\Array_;
use PhpParser\Node\Expr\ArrayItem;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Scalar\String_;
use Rector\Rector\AbstractRector;
use Rector\Symfony\NodeAnalyzer\FormAddMethodCallAnalyzer;
use Rector\Symfony\NodeAnalyzer\FormOptionsArrayMatcher;
use Rector\Symfony\NodeManipulator\ArrayManipulator;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\Symfony\Tests\Symfony30\Rector\MethodCall\ReadOnlyOptionToAttributeRector\ReadOnlyOptionToAttributeRectorTest
*/
final class ReadOnlyOptionToAttributeRector extends AbstractRector
{
/**
* @readonly
* @var \Rector\Symfony\NodeManipulator\ArrayManipulator
*/
private $arrayManipulator;
/**
* @readonly
* @var \Rector\Symfony\NodeAnalyzer\FormAddMethodCallAnalyzer
*/
private $formAddMethodCallAnalyzer;
/**
* @readonly
* @var \Rector\Symfony\NodeAnalyzer\FormOptionsArrayMatcher
*/
private $formOptionsArrayMatcher;
public function __construct(ArrayManipulator $arrayManipulator, FormAddMethodCallAnalyzer $formAddMethodCallAnalyzer, FormOptionsArrayMatcher $formOptionsArrayMatcher)
{
$this->arrayManipulator = $arrayManipulator;
$this->formAddMethodCallAnalyzer = $formAddMethodCallAnalyzer;
$this->formOptionsArrayMatcher = $formOptionsArrayMatcher;
}
public function getRuleDefinition() : RuleDefinition
{
return new RuleDefinition('Change "read_only" option in form to attribute', [new CodeSample(<<<'CODE_SAMPLE'
use Symfony\Component\Form\FormBuilderInterface;
function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('cuid', TextType::class, ['read_only' => true]);
}
CODE_SAMPLE
, <<<'CODE_SAMPLE'
use Symfony\Component\Form\FormBuilderInterface;
function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('cuid', TextType::class, ['attr' => ['read_only' => true]]);
}
CODE_SAMPLE
)]);
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes() : array
{
return [MethodCall::class];
}
/**
* @param MethodCall $node
*/
public function refactor(Node $node) : ?Node
{
if (!$this->formAddMethodCallAnalyzer->isMatching($node)) {
return null;
}
$optionsArray = $this->formOptionsArrayMatcher->match($node);
if (!$optionsArray instanceof Array_) {
return null;
}
$readOnlyArrayItem = $this->arrayManipulator->findItemInInArrayByKeyAndUnset($optionsArray, 'read_only');
if (!$readOnlyArrayItem instanceof ArrayItem) {
return null;
}
// rename string
$readOnlyArrayItem->key = new String_('readonly');
$this->arrayManipulator->addItemToArrayUnderKey($optionsArray, $readOnlyArrayItem, 'attr');
return $node;
}
}
Function Calls
None |
Stats
MD5 | 4f57d5a067ac1612a0284772e9c90b58 |
Eval Count | 0 |
Decode Time | 92 ms |