https://github.com/nette/phpstan-rules
🐘 PHPStan rules and type extensions for Nette libraries
https://github.com/nette/phpstan-rules
nette phpstan-extension
Last synced: 11 days ago
JSON representation
🐘 PHPStan rules and type extensions for Nette libraries
- Host: GitHub
- URL: https://github.com/nette/phpstan-rules
- Owner: nette
- Created: 2026-02-10T12:39:41.000Z (18 days ago)
- Default Branch: master
- Last Pushed: 2026-02-12T10:13:23.000Z (16 days ago)
- Last Synced: 2026-02-14T09:06:41.783Z (14 days ago)
- Topics: nette, phpstan-extension
- Language: PHP
- Homepage: https://nette.org
- Size: 29.3 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# PHPStan extensions for Nette libraries

[](https://packagist.org/packages/nette/phpstan-rules)
[](https://github.com/nette/phpstan-rules/actions)
[](https://github.com/nette/phpstan-rules/releases)
[](https://github.com/nette/phpstan-rules/blob/master/license.md)
Makes [PHPStan](https://phpstan.org) smarter about Nette code. Install, and it just works — more precise types, fewer false positives.
## Installation
Install via Composer:
```shell
composer require --dev nette/phpstan-rules
```
Requirements: PHP 8.1 or higher and PHPStan 2.1+.
If you use [phpstan/extension-installer](https://github.com/phpstan/extension-installer), the extension is registered automatically. Otherwise add to your `phpstan.neon`:
```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](extension-php.neon) 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](https://tester.nette.org):
```php
use Nette\PHPStan\Tester\TypeAssert;
TypeAssert::assertTypes(__DIR__ . '/data/types.php');
TypeAssert::assertNoErrors(__DIR__ . '/data/clean.php');
```
The data file uses `assertType()` from PHPStan:
```php
use function PHPStan\Testing\assertType;
assertType('non-empty-string', getcwd());
assertType('string', Normalizer::normalize('foo'));
```
## [Support Me](https://github.com/sponsors/dg)
Do you like Nette? Are you looking forward to the new features?
[](https://github.com/sponsors/dg)
Thank you!