Skip to content

Reduce false positives about constant conditions in traits#5309

Merged
ondrejmirtes merged 10 commits into2.2.xfrom
in-traits
Mar 27, 2026
Merged

Reduce false positives about constant conditions in traits#5309
ondrejmirtes merged 10 commits into2.2.xfrom
in-traits

Conversation

@ondrejmirtes
Copy link
Copy Markdown
Member

@ondrejmirtes ondrejmirtes commented Mar 27, 2026

  • When a rule detects a constant condition inside a trait, instead of reporting it directly, it emits
    the result via ConstantConditionInTraitCollector. The ConstantConditionInTraitRule then aggregates
    results across all classes using the trait and only reports the error when all usages agree (the
    condition is always-true or always-false in every context).
  • Errors that differ across trait usages (e.g., always-true in one class but not constant in another)
    are suppressed as false positives.
  • Errors where all usages agree are still reported, with deduplication — if the message is identical
    across contexts, it's reported once directly in the trait; if messages differ (different type
    descriptions per class), each is reported in its context.

Fixes phpstan/phpstan#13023

Closes phpstan/phpstan#7599
Closes phpstan/phpstan#13023
Closes phpstan/phpstan#13474
Closes phpstan/phpstan#13687
Closes phpstan/phpstan#12798

Closes phpstan/phpstan#11949
Closes phpstan/phpstan#12267
Closes phpstan/phpstan#9515
Closes phpstan/phpstan#4570
Closes phpstan/phpstan#4121

Closes phpstan/phpstan#8060
Closes phpstan/phpstan#10353

@phpstan-bot
Copy link
Copy Markdown
Collaborator

You've opened the pull request against the latest branch 2.2.x. PHPStan 2.2 is not going to be released for months. If your code is relevant on 2.1.x and you want it to be released sooner, please rebase your pull request and change its target to 2.1.x.

@ondrejmirtes ondrejmirtes merged commit 23c5fc4 into 2.2.x Mar 27, 2026
651 of 655 checks passed
@ondrejmirtes ondrejmirtes deleted the in-traits branch March 27, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment