From 62243355e274cc4920e3c4d6035145747b137cd0 Mon Sep 17 00:00:00 2001 From: Maxime Huran Date: Tue, 18 Jun 2024 14:59:24 +0200 Subject: [PATCH] Fix PHP MD tests --- phpstan.neon | 13 +++---- src/Controller/MenuItemResourceController.php | 3 ++ .../MonsieurBizSyliusMenuExtension.php | 35 ++++++++++++------- src/Entity/Menu.php | 9 ++--- .../Doctrine/MenuItemListener.php | 3 -- src/Fixture/Factory/MenuFixtureFactory.php | 8 ----- src/Form/Type/MenuItemType.php | 4 +++ src/Provider/ProductUrlProvider.php | 1 + src/Provider/TaxonUrlProvider.php | 1 + src/Repository/MenuItemRepository.php | 2 ++ src/Repository/MenuRepository.php | 1 + 11 files changed, 42 insertions(+), 38 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index b551d67..fbba240 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,18 +1,15 @@ -includes: - - vendor/phpstan/phpstan-doctrine/extension.neon - - vendor/phpstan/phpstan-webmozart-assert/extension.neon - parameters: level: max paths: - %rootDir%/src/ - checkMissingIterableValueType: false - - excludes_analyse: + excludePaths: # Makes PHPStan crash - - 'src/DependencyInjection/Configuration.php' - 'src/DependencyInjection/MonsieurBizSyliusMenuExtension.php' # Test dependencies - 'tests/Application/**/*' + + ignoreErrors: + - identifier: missingType.generics + - identifier: missingType.iterableValue diff --git a/src/Controller/MenuItemResourceController.php b/src/Controller/MenuItemResourceController.php index 6bd9526..115b76d 100644 --- a/src/Controller/MenuItemResourceController.php +++ b/src/Controller/MenuItemResourceController.php @@ -79,6 +79,9 @@ private function getNewIndex(int $index, int $max, string $direction): int return $indexToGo; } + /** + * @return MenuItemInterface[] + */ private function getItems(MenuItemInterface $resource): array { $items = []; diff --git a/src/DependencyInjection/MonsieurBizSyliusMenuExtension.php b/src/DependencyInjection/MonsieurBizSyliusMenuExtension.php index 445e33c..947a9c5 100644 --- a/src/DependencyInjection/MonsieurBizSyliusMenuExtension.php +++ b/src/DependencyInjection/MonsieurBizSyliusMenuExtension.php @@ -19,11 +19,14 @@ use Symfony\Component\DependencyInjection\Extension\Extension; use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; +use Sylius\Bundle\CoreBundle\DependencyInjection\PrependDoctrineMigrationsTrait; final class MonsieurBizSyliusMenuExtension extends Extension implements PrependExtensionInterface { + use PrependDoctrineMigrationsTrait; + /** - * @inheritdoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function load(array $config, ContainerBuilder $container): void { @@ -32,24 +35,30 @@ public function load(array $config, ContainerBuilder $container): void $container->registerForAutoconfiguration(UrlProviderInterface::class)->addTag('monsieurbiz_menu.url_provider'); } - /** - * @inheritdoc - */ public function getAlias(): string { return str_replace('monsieur_biz', 'monsieurbiz', parent::getAlias()); } - /** - * @inheritdoc - */ public function prepend(ContainerBuilder $container): void { - $doctrineConfig = $container->getExtensionConfig('doctrine_migrations'); - $container->prependExtensionConfig('doctrine_migrations', [ - 'migrations_paths' => array_merge(array_pop($doctrineConfig)['migrations_paths'] ?? [], [ - 'MonsieurBiz\SyliusMenuPlugin\Migrations' => '@MonsieurBizSyliusMenuPlugin/Migrations', - ]), - ]); + $this->prependDoctrineMigrations($container); + } + + protected function getMigrationsNamespace(): string + { + return 'MonsieurBiz\SyliusMenuPlugin\Migrations'; + } + + protected function getMigrationsDirectory(): string + { + return '@MonsieurBizSyliusMenuPlugin/Migrations'; + } + + protected function getNamespacesOfMigrationsExecutedBefore(): array + { + return [ + 'Sylius\Bundle\CoreBundle\Migrations', + ]; } } diff --git a/src/Entity/Menu.php b/src/Entity/Menu.php index 4c93181..f3f7cf7 100644 --- a/src/Entity/Menu.php +++ b/src/Entity/Menu.php @@ -81,13 +81,10 @@ public function getFirstLevelItems(): array if (null === $items) { return []; } - $filteredItems = $items->filter(function ($item) { - if (!$item->getParent()) { - return $item; - } - - return null; + $filteredItems = $items->filter(function (MenuItemInterface $item) { + return !$item->getParent(); })->toArray(); + uasort($filteredItems, function ($itemA, $itemB) { return $itemA->getPosition() <=> $itemB->getPosition(); }); diff --git a/src/EventListener/Doctrine/MenuItemListener.php b/src/EventListener/Doctrine/MenuItemListener.php index 2223b95..2779e33 100644 --- a/src/EventListener/Doctrine/MenuItemListener.php +++ b/src/EventListener/Doctrine/MenuItemListener.php @@ -20,9 +20,6 @@ final class MenuItemListener { private MenuItemRepositoryInterface $menuItemRepository; - /** - * MenuItemListener constructor. - */ public function __construct(MenuItemRepositoryInterface $menuItemRepository) { $this->menuItemRepository = $menuItemRepository; diff --git a/src/Fixture/Factory/MenuFixtureFactory.php b/src/Fixture/Factory/MenuFixtureFactory.php index 3d4b744..d7308b2 100644 --- a/src/Fixture/Factory/MenuFixtureFactory.php +++ b/src/Fixture/Factory/MenuFixtureFactory.php @@ -17,7 +17,6 @@ use MonsieurBiz\SyliusMenuPlugin\Entity\MenuItemInterface; use MonsieurBiz\SyliusMenuPlugin\Entity\MenuItemTranslationInterface; use Sylius\Bundle\CoreBundle\Fixture\Factory\AbstractExampleFactory; -use Sylius\Component\Product\Generator\SlugGeneratorInterface; use Sylius\Component\Resource\Factory\FactoryInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -31,11 +30,6 @@ final class MenuFixtureFactory extends AbstractExampleFactory implements MenuFix private OptionsResolver $optionsResolver; - /** - * @var SlugGeneratorInterface - */ - private $slugGenerator; - /** * MenuFixtureFactory constructor. */ @@ -43,11 +37,9 @@ public function __construct( FactoryInterface $menuFactory, FactoryInterface $menuItemFactory, FactoryInterface $menuItemTranslationFactory, - SlugGeneratorInterface $slugGenerator ) { $this->menuFactory = $menuFactory; $this->menuItemFactory = $menuItemFactory; - $this->slugGenerator = $slugGenerator; $this->menuItemTranslationFactory = $menuItemTranslationFactory; $this->optionsResolver = new OptionsResolver(); $this->configureOptions($this->getOptionsResolver()); diff --git a/src/Form/Type/MenuItemType.php b/src/Form/Type/MenuItemType.php index e564fff..075f1fb 100644 --- a/src/Form/Type/MenuItemType.php +++ b/src/Form/Type/MenuItemType.php @@ -14,6 +14,7 @@ namespace MonsieurBiz\SyliusMenuPlugin\Form\Type; use Doctrine\ORM\EntityRepository; +use MonsieurBiz\SyliusMenuPlugin\Entity\MenuItemInterface; use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType; use Sylius\Bundle\ResourceBundle\Form\Type\ResourceTranslationsType; use Symfony\Bridge\Doctrine\Form\Type\EntityType; @@ -21,6 +22,7 @@ use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; +use Webmozart\Assert\Assert; final class MenuItemType extends AbstractResourceType { @@ -34,6 +36,8 @@ public function buildForm(FormBuilderInterface $builder, array $options): void $builder ->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event): void { $item = $event->getData(); + /** @var MenuItemInterface $item */ + Assert::isInstanceOf($item, MenuItemInterface::class); $event->getForm() ->add('parent', EntityType::class, [ 'class' => $this->dataClass, diff --git a/src/Provider/ProductUrlProvider.php b/src/Provider/ProductUrlProvider.php index b56777c..9b0bbc1 100644 --- a/src/Provider/ProductUrlProvider.php +++ b/src/Provider/ProductUrlProvider.php @@ -51,6 +51,7 @@ protected function getResults(string $locale, string $search = ''): iterable $queryBuilder->setMaxResults($this->getMaxResults()); + /** @phpstan-ignore-next-line */ return $queryBuilder->getQuery()->getResult(); } diff --git a/src/Provider/TaxonUrlProvider.php b/src/Provider/TaxonUrlProvider.php index 4f91664..c6de8fe 100644 --- a/src/Provider/TaxonUrlProvider.php +++ b/src/Provider/TaxonUrlProvider.php @@ -54,6 +54,7 @@ protected function getResults(string $locale, string $search = ''): iterable $queryBuilder->setMaxResults($this->getMaxResults()); + /** @phpstan-ignore-next-line */ return $queryBuilder->getQuery()->getResult(); } diff --git a/src/Repository/MenuItemRepository.php b/src/Repository/MenuItemRepository.php index bdb9d82..096ada7 100644 --- a/src/Repository/MenuItemRepository.php +++ b/src/Repository/MenuItemRepository.php @@ -34,6 +34,7 @@ public function getLastPositionWithinMenu(MenuInterface $menu): int ->setParameter('menu', $menu) ; + /** @phpstan-ignore-next-line */ return (int) $queryBuilder->getQuery()->getSingleScalarResult(); } @@ -50,6 +51,7 @@ public function getLastPositionWithinMenuItem(MenuItemInterface $menuItem): int ->setParameter('parent', $menuItem) ; + /** @phpstan-ignore-next-line */ return (int) $queryBuilder->getQuery()->getSingleScalarResult(); } } diff --git a/src/Repository/MenuRepository.php b/src/Repository/MenuRepository.php index b9b7d31..1b7bcf3 100644 --- a/src/Repository/MenuRepository.php +++ b/src/Repository/MenuRepository.php @@ -32,6 +32,7 @@ public function findOneByLocaleAndCode(string $localeCode, string $code): ?MenuI ->setParameter('code', $code) ; + /** @phpstan-ignore-next-line */ return (new MenuTreeHydrator())($queryBuilder->getQuery()->getOneOrNullResult()); } }