eliashaeussler/phpstan-config

My personal configuration for PHPStan

Maintainers

Package info

github.com/eliashaeussler/phpstan-config

pkg:composer/eliashaeussler/phpstan-config

Transparency log

Statistics

Installs: 793 776

Dependents: 23

Suggesters: 0

Stars: 2

Open Issues: 2

4.0.0 2025-12-09 08:43 UTC

README

PHPStan config

Coverage CI Supported PHP Versions

This package contains basic PHPStan config for use in my personal projects. It is not meant to be used anywhere else. I won't provide support and don't accept pull requests for this repo.

🔥 Installation

Packagist Packagist Downloads

composer require eliashaeussler/phpstan-config

⚡ Usage

With extension installer

If you have the phpstan/extension-installer package installed, there's nothing more to do. The base configuration is automatically included.

Manual include

Create a phpstan.neon file and include the phpstan.neon.dist file:

# phpstan.neon

includes:
  - %rootDir%/../../eliashaeussler/phpstan-config/phpstan.neon.dist

PHP API

The package provides a PHP configuration API for PHPStan. Add this to your phpstan.php file:

// phpstan.php

use EliasHaeussler\PHPStanConfig;

$config = PHPStanConfig\Config\Config::create(__DIR__)->in(
    'src',
    'tests',
);

// Exclude specific paths
$config->not(
    'src/lib/*',
    'tests/test-application/vendor/*',
);

// Configure rule level
$config->level(9);
$config->maxLevel();

// Enable bleeding edge
$config->withBleedingEdge();

// Include baseline file
$config->withBaseline();

// Include additional config files
$config->with(
    'phpstan-custom-rules.neon',
    'vendor/foo/baz/optional-phpstan-rules.neon',
);

// Define bootstrap files
$config->bootstrapFiles(
    'tests/build/phpstan-bootstrap.php',
);

// Define stub files
$config->stubFiles(
    'tests/stubs/ThirdPartyClass.stub',
    'tests/stubs/AnotherStubFile.stub',
);

// Override cache path
$config->useCacheDir('var/cache/phpstan');

// Ignore errors
$config->ignoreError('Access to constant EXTENSIONS on an unknown class PHPStan\ExtensionInstaller\GeneratedConfig.');
$config->ignoreError('#^Access to constant EXTENSIONS on an unknown class .+\\.$#');

// Configure unmatched error reporting
$config->reportUnmatchedIgnoredErrors(false);

// Define error formatter
$config->formatAs(PHPStanConfig\Enums\ErrorFormat::Json);

// Treat phpdoc types as certain
$config->treatPhpDocTypesAsCertain();

// Enable or disable custom rules (see rules below)
$config->useCustomRule('ignoreAnnotationWithoutErrorIdentifier', false);

// Include Doctrine set
$config->withSet(
    static function (PHPStanConfig\Set\DoctrineSet $set): void {
        $set->withObjectManagerLoader('tests/object-manager.php');
        $set->withOrmRepositoryClass(\MyApp\Doctrine\BetterEntityRepository::class);
        $set->withOdmRepositoryClass(\MyApp\Doctrine\BetterDocumentRepository::class);
    },
);

// Include Symfony set
$config->withSet(
    static function (PHPStanConfig\Set\SymfonySet $set): void {
        $set->withConsoleApplicationLoader('tests/build/console-application.php');
        $set->withContainerXmlPath('var/cache/test-container.xml');
        $set->disableConstantHassers();
    },
);

// Include TYPO3 set
$typo3Set = PHPStanConfig\Set\TYPO3Set::create()
    ->withCustomAspect('myCustomAspect', \FlowdGmbh\MyProject\Context\MyCustomAspect::class)
    ->withCustomRequestAttribute('myAttribute', \FlowdGmbh\MyProject\Http\MyAttribute::class)
    ->withCustomSiteAttribute('myArrayAttribute', 'array');
$config->withSets($typo3Set);

// Set custom parameters
$config->parameters->set('tipsOfTheDay', false);

return $config->toArray();

🔎 Rules

The packages also provides some additional PHPStan rules. All rules are enabled by default.

IgnoreAnnotationWithoutErrorIdentifierRule

A custom rule to report too loose ignore annotations that don't specify an error identifier. By default, both @phpstan-ignore-line and @phpstan-ignore-next-line annotations are monitored.

parameters:
    ignoreAnnotationWithoutErrorIdentifier:
        # Enable or disable this rule
        enabled: true
        # Define monitored annotations (without "@" prefix)
        monitoredAnnotations:
            - phpstan-ignore-line
            - phpstan-ignore-next-line

This rule can also be customized using the PHP API:

# phpstan.php

use EliasHaeussler\PHPStanConfig;

$config = PHPStanConfig\Config\Config::create(__DIR__);
$config->parameters->set('ignoreAnnotationWithoutErrorIdentifier/enabled', false);
$config->parameters->set('ignoreAnnotationWithoutErrorIdentifier/monitoredAnnotations', [
    // These annotations don't actually exist, this is just for demonstration purposes
    'phpstan-ignore-start',
    'phpstan-ignore-end',
]);

return $config->toArray();

⭐ License

This project is licensed under GNU General Public License 3.0 (or later).