diff --git a/.gitattributes b/.gitattributes
index 1c8e1637..56842108 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -13,5 +13,3 @@ rector.php export-ignore
phpstan.neon.dist export-ignore
phpstan-baseline.neon export-ignore
phpstan-console-application.php export-ignore
-psalm.xml export-ignore
-psalm-baseline.xml export-ignore
diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml
index fea1c189..9614241b 100644
--- a/.github/workflows/lint.yaml
+++ b/.github/workflows/lint.yaml
@@ -29,7 +29,7 @@ jobs:
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
- php-version: '8.4'
+ php-version: '8.5'
coverage: none
tools: composer:v2
extensions: mongodb
@@ -54,7 +54,7 @@ jobs:
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
- php-version: '8.4'
+ php-version: '8.5'
coverage: none
tools: composer:v2, composer-normalize:2
env:
diff --git a/.github/workflows/qa.yaml b/.github/workflows/qa.yaml
index ace3b7be..d2c57fd0 100644
--- a/.github/workflows/qa.yaml
+++ b/.github/workflows/qa.yaml
@@ -29,7 +29,7 @@ jobs:
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
- php-version: '8.4'
+ php-version: '8.5'
coverage: none
tools: composer:v2
extensions: mongodb
@@ -42,31 +42,6 @@ jobs:
- name: PHPStan
run: vendor/bin/phpstan --no-progress --memory-limit=1G analyse --error-format=github
- psalm:
- name: Psalm
-
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Install PHP with extensions
- uses: shivammathur/setup-php@v2
- with:
- php-version: '8.4'
- coverage: none
- tools: composer:v2
- extensions: mongodb
-
- - name: Install Composer dependencies (highest)
- uses: ramsey/composer-install@v3
- with:
- dependency-versions: highest
-
- - name: Psalm
- run: vendor/bin/psalm --no-progress --show-info=false --stats --output-format=github --threads=$(nproc) --shepherd --php-version=8.4
-
rector:
name: Rector
@@ -79,7 +54,7 @@ jobs:
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
- php-version: '8.4'
+ php-version: '8.5'
coverage: none
tools: composer:v2
extensions: mongodb
diff --git a/.github/workflows/symfony-lint.yaml b/.github/workflows/symfony-lint.yaml
index d8df070b..ea791faf 100644
--- a/.github/workflows/symfony-lint.yaml
+++ b/.github/workflows/symfony-lint.yaml
@@ -29,7 +29,7 @@ jobs:
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
- php-version: '8.4'
+ php-version: '8.5'
coverage: none
tools: composer:v2
@@ -53,7 +53,7 @@ jobs:
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
- php-version: '8.4'
+ php-version: '8.5'
coverage: none
tools: composer:v2
@@ -77,7 +77,7 @@ jobs:
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
- php-version: '8.4'
+ php-version: '8.5'
coverage: none
tools: composer:v2
@@ -101,7 +101,7 @@ jobs:
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
- php-version: '8.4'
+ php-version: '8.5'
coverage: none
tools: composer:v2
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 93ef10f7..7f0ab6ac 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -34,36 +34,42 @@ jobs:
- 27017:27017
strategy:
+ fail-fast: false
matrix:
php-version:
- - '8.1'
- '8.2'
- '8.3'
- '8.4'
+ - '8.5'
dependencies: [highest]
allowed-to-fail: [false]
symfony-require: ['']
variant: [normal]
include:
- - php-version: '8.1'
+ - php-version: '8.2'
dependencies: lowest
allowed-to-fail: false
variant: normal
- - php-version: '8.4'
+ - php-version: '8.5'
dependencies: highest
allowed-to-fail: false
symfony-require: 6.4.*
variant: symfony/symfony:"6.4.*"
- - php-version: '8.4'
+ - php-version: '8.5'
dependencies: highest
allowed-to-fail: false
- symfony-require: 7.1.*
- variant: symfony/symfony:"7.1.*"
- - php-version: '8.4'
+ symfony-require: 7.3.*
+ variant: symfony/symfony:"7.3.*"
+ - php-version: '8.5'
dependencies: highest
allowed-to-fail: false
- symfony-require: 7.2.*
- variant: symfony/symfony:"7.2.*"
+ symfony-require: 7.4.*
+ variant: symfony/symfony:"7.4.*"
+ - php-version: '8.5'
+ dependencies: highest
+ allowed-to-fail: false
+ symfony-require: 8.0.*
+ variant: symfony/symfony:"8.0.*"
steps:
- name: Checkout
diff --git a/.gitignore b/.gitignore
index 3fc5b4a9..2fa6c0d3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,5 @@ composer.lock
phpunit.xml
phpstan.neon
/.phpunit.result.cache
+tests/App/config/reference.php
/docs/_build/
diff --git a/Makefile b/Makefile
index 1f772ffc..18b8dc0a 100644
--- a/Makefile
+++ b/Makefile
@@ -116,10 +116,6 @@ phpstan:
vendor/bin/phpstan --memory-limit=1G analyse
.PHONY: phpstan
-psalm:
- vendor/bin/psalm --php-version=8.4
-.PHONY: psalm
-
rector:
vendor/bin/rector
.PHONY: rector
diff --git a/README.md b/README.md
index 9039974f..43481fce 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,6 @@ Symfony SonataClassificationBundle
[](https://packagist.org/packages/sonata-project/classification-bundle)
[](https://packagist.org/packages/sonata-project/classification-bundle)
-[![Psalm Type Coverage][shepherd_stable_badge]][shepherd_stable_link]
[](https://packagist.org/packages/sonata-project/classification-bundle)
[](https://packagist.org/packages/sonata-project/classification-bundle)
diff --git a/composer.json b/composer.json
index 0fceab97..3eca8170 100644
--- a/composer.json
+++ b/composer.json
@@ -21,23 +21,23 @@
],
"homepage": "https://docs.sonata-project.org/projects/SonataClassificationBundle",
"require": {
- "php": "^8.1",
+ "php": "^8.2",
"cocur/slugify": "^4.0",
"doctrine/collections": "^1.6 || ^2.0",
"doctrine/persistence": "^3.0.2 || ^4.0",
- "sonata-project/doctrine-extensions": "^1.13 || ^2.0",
- "sonata-project/form-extensions": "^1.4 || ^2.0",
- "symfony/config": "^6.4 || ^7.1",
- "symfony/console": "^6.4 || ^7.1",
- "symfony/dependency-injection": "^6.4 || ^7.1",
- "symfony/form": "^6.4 || ^7.1",
- "symfony/framework-bundle": "^6.4 || ^7.1",
- "symfony/http-foundation": "^6.4 || ^7.1",
- "symfony/http-kernel": "^6.4 || ^7.1",
- "symfony/options-resolver": "^6.4 || ^7.1",
- "symfony/routing": "^6.4 || ^7.1",
- "symfony/translation": "^6.4 || ^7.1",
- "symfony/validator": "^6.4 || ^7.1",
+ "sonata-project/doctrine-extensions": "^2.0",
+ "sonata-project/form-extensions": "^2.0",
+ "symfony/config": "^6.4 || ^7.3",
+ "symfony/console": "^6.4 || ^7.3",
+ "symfony/dependency-injection": "^6.4 || ^7.3",
+ "symfony/form": "^6.4 || ^7.3",
+ "symfony/framework-bundle": "^6.4 || ^7.3",
+ "symfony/http-foundation": "^6.4 || ^7.3",
+ "symfony/http-kernel": "^6.4 || ^7.3",
+ "symfony/options-resolver": "^6.4 || ^7.3",
+ "symfony/routing": "^6.4 || ^7.3",
+ "symfony/translation": "^6.4 || ^7.3",
+ "symfony/validator": "^6.4 || ^7.3",
"twig/twig": "^3.0"
},
"require-dev": {
@@ -50,34 +50,31 @@
"knplabs/knp-menu-bundle": "^3.0",
"masterminds/html5": "^2.7",
"matthiasnoback/symfony-config-test": "^6.1",
- "matthiasnoback/symfony-dependency-injection-test": "^6.1",
+ "matthiasnoback/symfony-dependency-injection-test": "^6.2",
"phpstan/extension-installer": "^1.0",
"phpstan/phpdoc-parser": "^1.0",
"phpstan/phpstan": "^1.0 || ^2.0",
"phpstan/phpstan-phpunit": "^1.0 || ^2.0",
"phpstan/phpstan-strict-rules": "^1.0 || ^2.0",
"phpstan/phpstan-symfony": "^1.0 || ^2.0",
- "phpunit/phpunit": "^10.5.54 || ^11.5.38 || ^12.3.10",
- "psalm/plugin-phpunit": "^0.18 || ^0.19",
- "psalm/plugin-symfony": "^5.0",
+ "phpunit/phpunit": "^11.5.38 || ^12.3.10",
"rector/rector": "^1.1 || ^2.0",
- "sonata-project/admin-bundle": "^4.35.4",
- "sonata-project/block-bundle": "^4.11 || ^5.0",
+ "sonata-project/admin-bundle": "^4.39",
+ "sonata-project/block-bundle": "^5.0",
"sonata-project/doctrine-orm-admin-bundle": "^4.0",
- "symfony/asset": "^6.4 || ^7.1",
- "symfony/browser-kit": "^6.4 || ^7.1",
- "symfony/filesystem": "^6.4 || ^7.1",
- "symfony/security-bundle": "^6.4 || ^7.1",
- "symfony/security-csrf": "^6.4 || ^7.1",
- "symfony/twig-bundle": "^6.4 || ^7.1",
- "symfony/yaml": "^6.4 || ^7.1",
- "vimeo/psalm": "^5.0 || ^6.10"
+ "symfony/asset": "^6.4 || ^7.3",
+ "symfony/browser-kit": "^6.4 || ^7.3",
+ "symfony/filesystem": "^6.4 || ^7.3",
+ "symfony/security-bundle": "^6.4 || ^7.3",
+ "symfony/security-csrf": "^6.4 || ^7.3",
+ "symfony/twig-bundle": "^6.4 || ^7.3",
+ "symfony/yaml": "^6.4 || ^7.3"
},
"conflict": {
"doctrine/mongodb-odm": "<2.4",
"doctrine/orm": "<2.14",
"sonata-project/admin-bundle": "<4.14",
- "sonata-project/block-bundle": "<4.11",
+ "sonata-project/block-bundle": "<5.0",
"sonata-project/doctrine-orm-admin-bundle": "<4.0"
},
"suggest": {
diff --git a/psalm.xml b/psalm.xml
deleted file mode 100644
index 626e338b..00000000
--- a/psalm.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/rector.php b/rector.php
index 085115f2..3f21a4ed 100644
--- a/rector.php
+++ b/rector.php
@@ -33,7 +33,7 @@
]);
$rectorConfig->sets([
- LevelSetList::UP_TO_PHP_81,
+ LevelSetList::UP_TO_PHP_82,
PHPUnitSetList::PHPUNIT_100,
PHPUnitSetList::PHPUNIT_CODE_QUALITY,
]);
diff --git a/src/Admin/Filter/CategoryFilter.php b/src/Admin/Filter/CategoryFilter.php
index e0e1fd90..c217b9b0 100644
--- a/src/Admin/Filter/CategoryFilter.php
+++ b/src/Admin/Filter/CategoryFilter.php
@@ -65,8 +65,6 @@ public function getFormOptions(): array
}
/**
- * @psalm-suppress DeprecatedClass
- *
* NEXT_MAJOR: Remove this method.
*/
public function getRenderSettings(): array
diff --git a/src/Admin/Filter/CollectionFilter.php b/src/Admin/Filter/CollectionFilter.php
index ea3786e9..41145bc0 100644
--- a/src/Admin/Filter/CollectionFilter.php
+++ b/src/Admin/Filter/CollectionFilter.php
@@ -64,8 +64,6 @@ public function getFormOptions(): array
}
/**
- * @psalm-suppress DeprecatedClass
- *
* NEXT_MAJOR: Remove this method.
*/
public function getRenderSettings(): array
diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php
index 055c23ae..ac5d6d5d 100644
--- a/src/DependencyInjection/Configuration.php
+++ b/src/DependencyInjection/Configuration.php
@@ -42,11 +42,6 @@
*/
final class Configuration implements ConfigurationInterface
{
- /**
- * @psalm-suppress UndefinedInterfaceMethod
- *
- * @see https://github.com/psalm/psalm-plugin-symfony/issues/174
- */
public function getConfigTreeBuilder(): TreeBuilder
{
$treeBuilder = new TreeBuilder('sonata_classification');
diff --git a/src/Form/Type/CategorySelectorType.php b/src/Form/Type/CategorySelectorType.php
index 2dc472c7..fe9edd32 100644
--- a/src/Form/Type/CategorySelectorType.php
+++ b/src/Form/Type/CategorySelectorType.php
@@ -25,8 +25,6 @@
/**
* @author Thomas Rabaix
- *
- * @psalm-suppress MissingTemplateParam https://github.com/phpstan/phpstan-symfony/issues/320
*/
final class CategorySelectorType extends AbstractType
{
diff --git a/tests/Admin/AdminTest.php b/tests/Admin/AdminTest.php
index 52ab5b97..5d71dc97 100644
--- a/tests/Admin/AdminTest.php
+++ b/tests/Admin/AdminTest.php
@@ -27,12 +27,12 @@ final class AdminTest extends TestCase
protected function setUp(): void
{
- $this->contextManager = $this->createMock(ContextManagerInterface::class);
+ $this->contextManager = static::createStub(ContextManagerInterface::class);
}
public function testAbstractAdminChildren(): void
{
- $contextAwareAdmin = $this->createMock(ContextAwareAdmin::class);
+ $contextAwareAdmin = static::createStub(ContextAwareAdmin::class);
static::assertInstanceOf(AbstractAdmin::class, $contextAwareAdmin);
$contextAdmin = new ContextAdmin();
static::assertInstanceOf(AbstractAdmin::class, $contextAdmin);
diff --git a/tests/App/Entity/Category.php b/tests/App/Entity/Category.php
index 4e49d603..b04b2cbc 100644
--- a/tests/App/Entity/Category.php
+++ b/tests/App/Entity/Category.php
@@ -17,9 +17,6 @@
use Doctrine\ORM\Mapping as ORM;
use Sonata\ClassificationBundle\Entity\BaseCategory;
-/**
- * @psalm-suppress ClassMustBeFinal
- */
#[ORM\Entity]
#[ORM\Table(name: 'classification__category')]
class Category extends BaseCategory
diff --git a/tests/App/Entity/Collection.php b/tests/App/Entity/Collection.php
index 07896372..b159c813 100644
--- a/tests/App/Entity/Collection.php
+++ b/tests/App/Entity/Collection.php
@@ -17,9 +17,6 @@
use Doctrine\ORM\Mapping as ORM;
use Sonata\ClassificationBundle\Entity\BaseCollection;
-/**
- * @psalm-suppress ClassMustBeFinal
- */
#[ORM\Entity]
#[ORM\Table(name: 'classification__collection')]
class Collection extends BaseCollection
diff --git a/tests/App/Entity/Context.php b/tests/App/Entity/Context.php
index a800fef9..2b8a4f59 100644
--- a/tests/App/Entity/Context.php
+++ b/tests/App/Entity/Context.php
@@ -17,9 +17,6 @@
use Doctrine\ORM\Mapping as ORM;
use Sonata\ClassificationBundle\Entity\BaseContext;
-/**
- * @psalm-suppress ClassMustBeFinal
- */
#[ORM\Entity]
#[ORM\Table(name: 'classification__context')]
class Context extends BaseContext
diff --git a/tests/App/Entity/Tag.php b/tests/App/Entity/Tag.php
index 6c3633a2..9382917a 100644
--- a/tests/App/Entity/Tag.php
+++ b/tests/App/Entity/Tag.php
@@ -17,9 +17,6 @@
use Doctrine\ORM\Mapping as ORM;
use Sonata\ClassificationBundle\Entity\BaseTag;
-/**
- * @psalm-suppress ClassMustBeFinal
- */
#[ORM\Entity]
#[ORM\Table(name: 'classification__tag')]
class Tag extends BaseTag
diff --git a/tests/App/config/config.yaml b/tests/App/config/config.yaml
index 9633cd52..1d08e030 100644
--- a/tests/App/config/config.yaml
+++ b/tests/App/config/config.yaml
@@ -23,7 +23,6 @@ security:
access_control: null
twig:
- exception_controller: null
strict_variables: true
sonata_classification:
diff --git a/tests/App/config/routes.yaml b/tests/App/config/routes.yaml
index 78d09d82..643d6ac0 100644
--- a/tests/App/config/routes.yaml
+++ b/tests/App/config/routes.yaml
@@ -1,5 +1,5 @@
admin_area:
- resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
+ resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.php'
prefix: /admin
_sonata_admin:
diff --git a/tests/Entity/CategoryManagerTest.php b/tests/Entity/CategoryManagerTest.php
index 9c4289e2..c28e7cf6 100644
--- a/tests/Entity/CategoryManagerTest.php
+++ b/tests/Entity/CategoryManagerTest.php
@@ -64,7 +64,7 @@ public function testGetBySlug(): void
private function prepareData(): CategoryInterface
{
$manager = self::getContainer()->get('doctrine.orm.entity_manager');
- \assert($manager instanceof EntityManagerInterface);
+ static::assertInstanceOf(EntityManagerInterface::class, $manager);
$context = new Context();
$context->setId('1');
@@ -106,7 +106,7 @@ private function prepareData(): CategoryInterface
private function getCategoryManager(): CategoryManagerInterface
{
$categoryManager = self::getContainer()->get('sonata.classification.manager.category');
- \assert($categoryManager instanceof CategoryManagerInterface);
+ static::assertInstanceOf(CategoryManagerInterface::class, $categoryManager);
return $categoryManager;
}
diff --git a/tests/Entity/CollectionManagerTest.php b/tests/Entity/CollectionManagerTest.php
index a6183bb2..c150bfd2 100644
--- a/tests/Entity/CollectionManagerTest.php
+++ b/tests/Entity/CollectionManagerTest.php
@@ -42,7 +42,7 @@ public function testGetByContext(): void
private function prepareData(): void
{
$manager = self::getContainer()->get('doctrine.orm.entity_manager');
- \assert($manager instanceof EntityManagerInterface);
+ static::assertInstanceOf(EntityManagerInterface::class, $manager);
$context = new Context();
$context->setId('1');
@@ -62,7 +62,7 @@ private function prepareData(): void
private function getCollectionManager(): CollectionManagerInterface
{
$collectionManager = self::getContainer()->get('sonata.classification.manager.collection');
- \assert($collectionManager instanceof CollectionManagerInterface);
+ static::assertInstanceOf(CollectionManagerInterface::class, $collectionManager);
return $collectionManager;
}
diff --git a/tests/Entity/TagManagerTest.php b/tests/Entity/TagManagerTest.php
index 782fbb3f..d7e214ad 100644
--- a/tests/Entity/TagManagerTest.php
+++ b/tests/Entity/TagManagerTest.php
@@ -42,7 +42,7 @@ public function testGetByContext(): void
private function prepareData(): void
{
$manager = self::getContainer()->get('doctrine.orm.entity_manager');
- \assert($manager instanceof EntityManagerInterface);
+ static::assertInstanceOf(EntityManagerInterface::class, $manager);
$context = new Context();
$context->setId('1');
@@ -62,7 +62,7 @@ private function prepareData(): void
private function getTagManager(): TagManagerInterface
{
$tagManager = self::getContainer()->get('sonata.classification.manager.tag');
- \assert($tagManager instanceof TagManagerInterface);
+ static::assertInstanceOf(TagManagerInterface::class, $tagManager);
return $tagManager;
}
diff --git a/tests/Functional/Admin/CategoryAdminTest.php b/tests/Functional/Admin/CategoryAdminTest.php
index db50cdd3..4d1d8873 100644
--- a/tests/Functional/Admin/CategoryAdminTest.php
+++ b/tests/Functional/Admin/CategoryAdminTest.php
@@ -117,7 +117,7 @@ public function testCreateFirstCategory(): void
private function prepareData(): void
{
$manager = self::getContainer()->get('doctrine.orm.entity_manager');
- \assert($manager instanceof EntityManagerInterface);
+ static::assertInstanceOf(EntityManagerInterface::class, $manager);
$context = new Context();
$context->setId('default');
@@ -136,7 +136,7 @@ private function prepareData(): void
private function countCategories(): int
{
$manager = static::getContainer()->get('doctrine.orm.entity_manager');
- \assert($manager instanceof EntityManagerInterface);
+ static::assertInstanceOf(EntityManagerInterface::class, $manager);
return $manager->getRepository(Category::class)->count([]);
}
diff --git a/tests/Functional/Admin/CollectionAdminTest.php b/tests/Functional/Admin/CollectionAdminTest.php
index 808240eb..46894825 100644
--- a/tests/Functional/Admin/CollectionAdminTest.php
+++ b/tests/Functional/Admin/CollectionAdminTest.php
@@ -85,7 +85,7 @@ public static function provideFormsUrlsCases(): iterable
private function prepareData(): void
{
$manager = self::getContainer()->get('doctrine.orm.entity_manager');
- \assert($manager instanceof EntityManagerInterface);
+ static::assertInstanceOf(EntityManagerInterface::class, $manager);
$context = new Context();
$context->setId('default');
diff --git a/tests/Functional/Admin/ContextAdminTest.php b/tests/Functional/Admin/ContextAdminTest.php
index 7c38d6ef..64c01c9d 100644
--- a/tests/Functional/Admin/ContextAdminTest.php
+++ b/tests/Functional/Admin/ContextAdminTest.php
@@ -84,7 +84,7 @@ public static function provideFormsUrlsCases(): iterable
private function prepareData(): void
{
$manager = self::getContainer()->get('doctrine.orm.entity_manager');
- \assert($manager instanceof EntityManagerInterface);
+ static::assertInstanceOf(EntityManagerInterface::class, $manager);
$context = new Context();
$context->setId('default');
diff --git a/tests/Functional/Admin/TagAdminTest.php b/tests/Functional/Admin/TagAdminTest.php
index 928e4e24..8b0ea36c 100644
--- a/tests/Functional/Admin/TagAdminTest.php
+++ b/tests/Functional/Admin/TagAdminTest.php
@@ -85,7 +85,7 @@ public static function provideFormsUrlsCases(): iterable
private function prepareData(): void
{
$manager = self::getContainer()->get('doctrine.orm.entity_manager');
- \assert($manager instanceof EntityManagerInterface);
+ static::assertInstanceOf(EntityManagerInterface::class, $manager);
$context = new Context();
$context->setId('default');
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index c9a01342..ee11adb0 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -31,10 +31,5 @@
}
if (file_exists($file = __DIR__.'/custom_bootstrap.php')) {
- /**
- * @psalm-suppress MissingFile,UnusedPsalmSuppress
- *
- * @see https://github.com/vimeo/psalm/issues/3886
- */
require_once $file;
}