eliashaeussler/phpstan-config

My personal configuration for PHPStan

Package info

github.com/eliashaeussler/phpstan-config

pkg:composer/eliashaeussler/phpstan-config

Statistics

Installs: 759 790

Dependents: 22

Suggesters: 0

Stars: 2

Open Issues: 2

4.0.0 2025-12-09 08:43 UTC

Requires

Suggests

None

Provides

None

Conflicts

None

Replaces

None

GPL-3.0-or-later 1811522ab13e70cb0bce1ac60ecf7e3d0723b23d


README

PHPStan config

πŸ‘ Coverage
πŸ‘ CGL
πŸ‘ Tests
πŸ‘ 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).