From 772d46c90ad7efd3affce2816fba1d486b1c9033 Mon Sep 17 00:00:00 2001 From: phpstan-bot Date: Thu, 19 Feb 2026 11:54:54 +0000 Subject: [PATCH] Update README with missing feature descriptions Add undocumented features found by inspecting src/: - Array access component type resolution via createComponent* - Forms\Container::getUntrustedValues return type - BaseControl fluent method static return type - Presenter::getSession return type based on arguments - Presenter @inject properties treated as initialized - Strings::replace() callback closure type from regex pattern - RegularExpressionPatternRule for Nette\Utils\Strings methods Co-Authored-By: Claude Opus 4.6 --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 548b3af..0a67e2a 100644 --- a/README.md +++ b/README.md @@ -10,20 +10,27 @@ This extension provides following features: * `Nette\ComponentModel\Container::getComponent()` knows type of the component because it reads the return type on `createComponent*` (this works best in presenters and controls) +* Array access on components (`$component['name']`) resolves types via `createComponent*` methods * `Nette\DI\Container::getByType` and `createInstance` return type based on first parameter (`Foo::class`). * `Nette\Forms\Container::getValues` return type based on `$asArray` parameter. +* `Nette\Forms\Container::getUntrustedValues` return type based on mapping class parameter. +* `Nette\Forms\Controls\BaseControl` fluent methods return `static` instead of `BaseControl`. * `Nette\ComponentModel\Component::lookup` return type based on `$throw` parameter. * `Nette\Application\UI\Component::getPresenter` return type based on `$throw` parameter. +* `Nette\Application\UI\Presenter::getSession` returns `Session` or `SessionSection` based on arguments. * Dynamic methods of [Nette\Utils\Html](https://doc.nette.org/en/2.4/html-elements) * Magic [Nette\Object and Nette\SmartObject](https://doc.nette.org/en/2.4/php-language-enhancements) properties * Event listeners through the `on*` properties +* Presenter `@inject` properties are treated as initialized. * Defines early terminating method calls for Presenter methods to prevent `Undefined variable` errors * Understand the exact array shape coming from `Nette\Utils\Strings::match()` and `Nette\Utils\Strings::matchAll()` based on pattern +* `Nette\Utils\Strings::replace()` callback closure parameter type inferred from regex pattern It also contains these framework-specific rules (can be enabled separately): * Do not extend Nette\Object, use Nette\SmartObject trait instead * Rethrow exceptions that are always meant to be rethrown (like `AbortException`) +* Validate regex patterns passed to `Nette\Utils\Strings` methods ## Installation