nette / phpstan-rules
🐘 PHPStan rules and type extensions for Nette libraries
Installs: 555
Dependents: 10
Suggesters: 0
Security: 0
Stars: 4
Watchers: 1
Forks: 0
Open Issues: 0
Type:phpstan-extension
pkg:composer/nette/phpstan-rules
Requires
- php: 8.1 - 8.5
- phpstan/phpstan: ^2.1
Requires (Dev)
- nette/schema: ^1.3
- nette/tester: ^2.6
This package is auto-updated.
Last update: 2026-02-12 10:13:27 UTC
README
Makes PHPStan smarter about Nette code. Install, and it just works — more precise types, fewer false positives.
Installation
Install via Composer:
composer require --dev nette/phpstan-rules
Requirements: PHP 8.1 or higher and PHPStan 2.1+.
If you use phpstan/extension-installer, the extension is registered automatically. Otherwise add to your phpstan.neon:
includes: - vendor/nette/phpstan-rules/extension.neon
What's Included
Precise return types — narrows return types of Strings::match(), matchAll(), split(), Helpers::falseToNull(), Expect::array(), Arrays::invoke(), and Arrays::invokeMethod() based on the arguments you pass.
Removes |false and |null from PHP functions — many native functions like getcwd, json_encode, preg_split, preg_replace, and many more include false or null in their return type even though these error values are unrealistic on modern systems.
Assert type narrowing — PHPStan understands type guarantees after Tester\Assert calls like notNull(), type(), true(), etc.
False positive suppression — silences known PHPStan false positives in Nette patterns (arrow functions passed as void callbacks, runtime type validation closures).
Type Assertion Testing Helper
For Nette package developers: TypeAssert lets you verify type inference in tests using Nette Tester:
use Nette\PHPStan\Tester\TypeAssert; TypeAssert::assertTypes(__DIR__ . '/data/types.php'); TypeAssert::assertNoErrors(__DIR__ . '/data/clean.php');
The data file uses assertType() from PHPStan:
use function PHPStan\Testing\assertType; assertType('non-empty-string', getcwd()); assertType('string', Normalizer::normalize('foo'));
Support Me
Do you like Nette? Are you looking forward to the new features?
Thank you!