| phpstan-rules | by dg | derive exact array shape from regex in Strings::match/matchAll StringsReturnTypeExtension now uses phpstan's RegexArrayShapeMatcher to infer the precise shape (capture groups, named/optional groups, offsets) for constant patterns, translating Nette's boolean parameters into a PREG flag mask. Non-constant patterns and the lazy matchAll() Generator fall back to the previous generic shape; split() is unchanged. | | | |
| phpstan-rules | by dg | report invalid regex patterns in Nette\Utils\Strings calls New ValidRegularExpressionRule (the first custom rule in the project) checks constant patterns passed to Strings::match/matchAll/split/replace and reports compilation errors via RegexpException under identifier nette.strings.regexpPattern. Enabled by default. Adds TypeAssert::assertErrors() for testing rules (assertNoErrors now delegates to it). | | | |
| phpstan-rules | by dg | add StringsRegexHelper for the Nette\Utils\Strings regex extensions Shared helper that centralizes the translation of Nette's boolean parameters into a PREG flag mask, the RegexArrayShapeMatcher calls (matchShape/matchAllShape, instance) and stateless argument resolution (resolveFlag/findArg, static). The Strings regex extensions added in the following commits build on it. | | | |
| phpstan-rules | by dg | treat #[Inject] attribute properties as initialized New InjectPropertyExtension (ReadWritePropertiesExtension) marks properties annotated with #[Nette\DI\Attributes\Inject] as always-written and initialized, since Nette DI assigns them after instantiation. Only the attribute form is recognized, not the legacy @inject phpDoc. Also teaches TypeAssert::assertNoErrors() to pass the analysed file into analysedPaths (like assertTypes already does), so classes defined in the test file are in reflection scope. | | | |
| phpstan-rules | by dg | guard dynamic return type extensions against first-class callables Extensions called getArgs() unconditionally on the entry node. For a first-class callable such as json_encode(...) or $form[x]->m(...), PHPStan getArgs() asserts !isFirstClassCallable(), so any covered function/method/static method used in first-class-callable syntax crashed the whole analysis with an internal error. Bail out (return null) when the call node is a first-class callable, before touching getArgs(). Mirrors the standard guard in core PHPStan extensions. | | | |
| phpstan-rules | by dg | readonly properties | | | |
| phpstan-rules | by dg | added suppression for Form event-handler callback assignments | | | |
| phpstan-rules | by dg | added Registry::getMapper(), getAsset() and Mapper::getAsset() return type narrowing | | | |
| phpstan-rules | by dg | added Html::getXxx(), setXxx(), addXxx() magic method resolution | | | |
| phpstan-rules | by dg | added Forms\Container::getComponent() and $form['…'] return type narrowing based on addXxx() calls | | | |
| phpstan-rules | by dg | added Container::getComponent() and $container['…'] return type narrowing Also resolves nested access - chained ($container['a']['b']) and Nette's dash notation ($container['a-b']) - via createComponent<Name>() factories. | | | |
| phpstan-rules | by dg | added Arrays::invoke() and invokeMethod() return type narrowing | | | |
| coding-standard | by dg | added CLAUDE.md | | | |
| coding-standard | by dg | updated README.md | | | |
| code-checker | by dg | updated github actions | | | |
| code-checker | by dg | made static analysis mandatory | | | |
| code-checker | by dg | fixed PHPStan errors | | | |
| code-checker | by dg | uses nette/phpstan-rules | | | |
| code-checker | by dg | composer: minimum stability is stable | | | |
| code-checker | by dg | improved phpDoc | | | |
| code-checker | by dg | cs | | | |
| claude-code | by dg | Released version 1.0.7 | | | |
| claude-code | by dg | added tracy-debugging skill | | | |
| claude-code | by dg | improved skills | | | |
| command-line | by dg | removed deprecated stuff | | | |
| command-line | by dg | opened 2.0-dev | | | |
| command-line | by dg | added CLAUDE.md | | | |
| command-line | by dg | Console: added detectTerminal() as reusable TTY check Extracted the TTY detection out of detectColors() so it can be used independently to auto-disable features that only make sense in an interactive terminal (progress indicators, line-rewriting output). detectColors() now builds on top of detectTerminal() and adds the NO_COLOR/FORCE_COLOR environment logic on top. | | | |
| coding-standard | by dg | auto-disable progress indicator when not running in a terminal | | | |
| coding-standard | by dg | rewrite CLI argument parsing using nette/command-line | | | |
| claude-code | by dg | added CLAUDE.md | | | |
| claude-code | by dg | Released version 1.0.6 | | | |