Skip to content

'ignore' error format, solid Symfony SplFileInfo and other useful extensions for PHPStan

License

Notifications You must be signed in to change notification settings

symplify/phpstan-extensions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1af4897 · Jan 7, 2025
Jan 7, 2025
Dec 12, 2024
Sep 17, 2023
Jan 7, 2025
Sep 17, 2023
Feb 14, 2023
Aug 16, 2023
Jan 7, 2025
Oct 28, 2020
Jan 7, 2025
Jan 7, 2025
Jan 7, 2025
Jan 7, 2025
Jan 7, 2025
Jan 7, 2025

Repository files navigation

PHPStan Extensions

Downloads total


Install

composer require symplify/phpstan-extensions --dev

Symplify Error Formatter

Update your phpstan.neon config:

parameters:
    errorFormat: symplify
  • Do you want to click the error and get right to the line in the file it's reported at?
  • Do you want to copy-paste regex escaped error to your ignoreErrors?

Works best with anthraxx/intellij-awesome-console

vendor/bin/phpstan analyse src

------------------------------------------------------------------------------------------
src/Command/ReleaseCommand.php:51
------------------------------------------------------------------------------------------
- "Call to an undefined method Symplify\\Command\\ReleaseCommand\:\:nonExistingCall\(\)"
------------------------------------------------------------------------------------------

Improved Symfony Types

ContainerGetTypeExtension

With Symfony container and type as an argument, you always know the same type is returned:

use Symfony\Component\DependencyInjection\Container;

/** @var Container $container */
// PHPStan: object ❌
$container->get(Type::class);
// Reality: Type ✅
$container->get(Type::class);

// same for in-controller/container-aware context
$this->get(Type::class);

KernelGetContainerAfterBootReturnTypeExtension

After Symfony Kernel boot, getContainer() always returns the container:

use Symfony\Component\HttpKernel\Kernel;

final class AppKernel extends Kernel
{
    // ...
}

$kernel = new AppKernel('prod', false);
$kernel->boot();

// PHPStan: null|ContainerInterface ❌
$kernel->getContainer();
// Reality: ContainerInterface ✅
$kernel->getContainer();
// Reality: ContainerInterface ✅

SplFileInfoTolerantReturnTypeExtension

Symfony Finder finds only existing files (obviously), so the getRealPath() always return string:

use Symfony\Component\Finder\Finder;

$finder = new Finder();

foreach ($finder as $fileInfo) {
    // PHPStan: false|string ❌
    $fileInfo->getRealPath();
    // Reality: string ✅
    $fileInfo->getRealPath();
}

Happy coding!