Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Add option to prohibit bool to string coercion #4401

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
schlndh wants to merge 2 commits into phpstan:2.1.x
base: 2.1.x
Choose a base branch
Loading
from schlndh:feature-addOptionToProhibitBoolToStringCoercion

Conversation

@schlndh
Copy link
Contributor

@schlndh schlndh commented Oct 3, 2025
edited
Loading

I'd like to know your opinion on this approach before I go too far with it.

It's a follow up to this comment (specifically the part about disabling "{$bool}" etc in phpstan-strict-rules).

The idea is to eventually (separate PRs) add all pairs of types which make sense to prohibit (e.g. it makes sense to prohibit coercing null to string (not necessarily in phpstan-strict-rules), but it probably doesn't make sense to prohibit coercing int to string). Note that the configuration is only meant to prohibit type coercions (i.e. implicit), not explicit type casts. This could then replace things like:

  • booleansInConditions and numericOperandsInArithmeticOperators from phpstan-strict-rules: the rules would be moved to phpstan and they'd be enabled by allowedTypeCoercions.XToY.
  • forbidNullInInterpolatedString and forbidNullInBinaryOperations from shipmonk/phpstan-rules: it would be handled by existing phpstan rules and enabled by allowedTypeCoercions.nullToY.
  • checkStrictPrintfPlaceholderTypes: it would be removed and instead it would be configured by allowedTypeCoercions.XToY. phpstan-strict-rules would set the flags to preserve the current default behavior.

The benefit of this approach is that it would be configured in one place and applied consistently across the rules. The downside is that it would make it harder to enable XToY in one rule, but prohibit it in another. Given the discussion in the strict printf parameter check PR, I guess it's safe to assume that there will be users with strong opinions on how it should behave for them. The DI container could pass a different TypeCoercionRuleHelper to every rule, so it has a possible solution, but there would have to be a sane way to configure it (ultimately the RuleLevelHelper has the same limitation).

@schlndh schlndh force-pushed the feature-addOptionToProhibitBoolToStringCoercion branch from 2b449dc to e454058 Compare October 3, 2025 12:13
Copy link
Member

I'd like this first phpstan/phpstan#13008 then it would be much easier to build rules for that

schlndh reacted with thumbs up emoji

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /