[TASK] Upgrade PHPStan ecosystem to 2.x and reduce baseline#1185
Merged
linawolf merged 5 commits intoTYPO3-Documentation:mainfrom Mar 1, 2026
Merged
[TASK] Upgrade PHPStan ecosystem to 2.x and reduce baseline#1185linawolf merged 5 commits intoTYPO3-Documentation:mainfrom
linawolf merged 5 commits intoTYPO3-Documentation:mainfrom
Conversation
- phpstan/phpstan: ^1.12 -> ^2.1 - phpstan/phpstan-strict-rules: ^1.6 -> ^2.0 - symplify/phpstan-rules: ^13.0 -> ^14.9 - Removed deprecated symplify regex rules (dropped in 14.x) - Updated strictRules config: strictCalls -> strictFunctionCalls - Regenerated phpstan-baseline.neon for stricter 2.x rules
Reduce PHPStan baseline from 102 to 55 errors (46% reduction) across 31 files by applying targeted fixes: - Fix @param type on Typo3DocsThemeExtension::load() (15 errors) - Add array_values() wrappers where list<> expected (12 errors) - Add @phpstan-ignore return.unusedType on NodeTransformers (9 errors) - Cast $input->getArgument() to (string) in CLI commands (7 errors) - Fix dead code bug: missing $guides in operateOnXmlGuides() (4 errors) - Remove unnecessary @var in TwigExtension (2 errors) - Add @return list<string> to collectUnmigratedLegacySettings() (1 error) - Cast $errno to (string) in XmlValidator (1 error) - Fix nullsafe ?->textContent to -> in SiteSetSettingsDirective (1 error) - Cast $answer to (string) in InitCommand validators (3 errors) - Add type annotations for return.type entries (3 errors) - Type-hint RunDecorator process callback parameters (3 errors) - Cast $_SERVER['argv'] to array in AddThemeSettingsToProjectNode (1 error)
d5a955e to
278e21b
Compare
…ssions Replace inline @phpstan-ignore annotations with genuine code fixes: - Narrow return types from Node|null to Node (valid PHP covariance) - Add is_string()/is_array() guards for mixed Symfony Console inputs - Type-safe extraction of JSON/YAML parsed data with step-by-step validation - Fix array type annotations (array<string, mixed> instead of array<mixed>) - Properly handle DOMNodeList access in SiteSetSettingsDirective Baseline reduced from 41 to 9 entries (vs 13 on main). Remaining 9 are unfixable external library constraints (phpDocumentor interfaces returning mixed, Symfony ExtensionInterface contravariance).
… tests The previous commit incorrectly replaced getValue() with getChildren() in ViewHelperDirective. These access different properties on CompoundNode (value vs children), causing the ViewHelper description/examples/sections to be empty in rendered output. Restore getValue() with proper is_array() type narrowing to satisfy PHPStan without changing runtime behavior.
linawolf
approved these changes
Mar 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Coordinated upgrade of the PHPStan ecosystem to major version 2, with baseline reduction by fixing low-hanging fruit type issues.
Package upgrades
phpstan/phpstanphpstan/phpstan-strict-rulessymplify/phpstan-rulesPHPStan 2.x works on PHP ^7.4|^8.0, no PHP minimum bump needed.
Configuration changes
AnnotateRegexClassConstWithRegexLinkRule,RegexSuffixInRegexConstantRule)strictCalls→strictFunctionCalls(renamed in phpstan-strict-rules 2.x)Baseline reduction (31 source files fixed)
Instead of just baselining all new errors from PHPStan 2.x's stricter analysis, low-hanging fruit were fixed:
@paramonTypo3DocsThemeExtension::load()array_values()wrappers forlist<Node>mismatches@phpstan-ignore return.unusedTypeon interface-mandated return types$input->getArgument()to(string)ConfigureCommand($guidesvariable undefined)Baseline: 102 → 55 errors (46% reduction). Remaining entries are complex type narrowing issues (SiteSetSettingsDirective, ViewHelperDirective) that would require DTO refactoring.
Bug fix discovered
ConfigureCommand::operateOnXmlGuides()had a dead code block — the$guidesvariable was used but never defined. The entire guide attribute modification code was unreachable. Fixed by adding the missing$guides = $xml->xpath('/ns:guides')call.Test plan
vendor/bin/phpstan analyse— 0 errors (with baseline)