Skip to content

Incorrect behavior of RemoveUnusedVariableAssignRector #7747

@Yoann-TYT

Description

@Yoann-TYT

Bug Report

Subject Details
Rector version last dev-main
Installed as composer dependency

Minimal PHP Code Causing Issue

See https://getrector.com/demo/93e1174f-3586-4b65-b3e3-f5d5c78884dc

<?php

namespace App\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Security\Core\Security;

class MyFormType extends AbstractType
{
    public function __construct(
        private readonly Security $security,
    ) {
    }

    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $isGranted = fn ($subject) => $this->security->isGranted(OneVoter::CAN_DO_THAT, $subject);
        $builder->get('oneField')->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($isGranted) {
            if ($isGranted($event->getForm()->getNormData())) {
                $formFactory = $event->getForm()->getConfig()->getFormFactory();
                $builder = $formFactory->createNamedBuilder('formOne');

                $builder->get('formOne')->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
                    if (SourceEnum::ONE === $event->getForm()->getNormData()) {
                        $formFactory = $event->getForm()->getConfig()->getFormFactory();
                        $builder = $formFactory->createNamedBuilder('subFormOne');
                        $builder->add('subFormOne', SubFormOneType::class, [
                            'download' => $event->getForm()->getParent()->get('download'),
                        ]);

                        $event->getForm()->getParent()->add($builder->getForm()->get('subFormOne'));
                    } elseif (SourceEnum::TWO === $event->getForm()->getNormData()) {
                        $formFactory = $event->getForm()->getConfig()->getFormFactory();
                        $builder = $formFactory->createNamedBuilder('subFormTwo');
                        $builder->add('subFormTwo', SubFormTwoType::class, [
                            'one_field' => $event->getForm()->getParent()->get('oneField')->getData(),
                            'download' => $event->getForm()->getParent()->get('download'),
                        ]);

                        $event->getForm()->getParent()->add($builder->getForm()->get('subFormTwo'));
                    }
                });

                $event->getForm()->getParent()->add($builder->getForm()->get('formOne'));
            } elseif (ChoiceEnum::CHOICE_ONE === $event->getForm()->getNormData()) {
                $formFactory = $event->getForm()->getConfig()->getFormFactory();
                $builder = $formFactory->createBuilder();
                $builder->add('otherSubForm', OtherSubFormType::class);
                $event->getForm()->getParent()->add($builder->getForm()->get('otherSubForm')->get('otherSubForm'));
            }
        });
    }
}

Responsible rules

  • RemoveUnusedVariableAssignRector

Expected Behavior

$isGranted should ne be removed.
I'm sorry, I couldn't simplify the code any further. 😬
Thanks a lot

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions