Skip to content
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

PHP 8.3 | PSR12/ClassInstantiation: allow for readonly anonymous classes #324

Conversation

jrfnl
Copy link
Member

@jrfnl jrfnl commented Feb 2, 2024

Description

The sniff is supposed to ignore anonymous class instantiations completely as otherwise it could create a conflict between this sniff and the PSR12 sniff checking anonymous class declarations.

As things were, however, the sniff would add parentheses after the new keyword or after an attribute if an anonymous class was declared as readonly, as allowed since PHP 8.3.

Fixed now.

Includes minor simplification - the sniff would previously jump over attributes attached to anonymous classes to get to the class keyword only to bow out later for anonymous classes anyway. Now, the sniff will bow out straight away when either an attribute, the readonly keyword or the class keyword for an anonymous class declaration is encountered.

As readonly cannot be used as class name and attributes cannot be attached to (non-anonymous) class instantiations, this should maintain the previous behaviour, while also allowing for PHP 8.3 readonly anonymous classes and it should yield a very small performance benefit as well.

Includes unit tests.

Suggested changelog entry

  • Support for readonly anonymous classes has been added to the PSR12.Classes.ClassInstantiation sniff.

Related issues/external references

Related to #106

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)

@jrfnl
Copy link
Member Author

jrfnl commented Feb 7, 2024

Unless there are objections/someone leaves a comments on this PR, I will merge this tomorrow.

The sniff is supposed to ignore anonymous class instantiations completely as otherwise it could create a conflict between this sniff and the PSR12 sniff checking anonymous class declarations.

As things were, however, the sniff would add parentheses after the `new` keyword or after an attribute if an anonymous class was declared as `readonly`, as allowed since PHP 8.3.

Fixed now.

Includes minor simplification - the sniff would previously _jump over_ attributes attached to anonymous classes to get to the `class` keyword only to bow out later for anonymous classes anyway.
Now, the sniff will bow out straight away when either an attribute, the `readonly` keyword or the `class` keyword for an anonymous class declaration is encountered.

As `readonly` cannot be used as class name and attributes cannot be attached to (non-anonymous) class instantiations, this should maintain the previous behaviour, while also allowing for PHP 8.3 readonly anonymous classes and it should yield a very small performance benefit as well.

Includes unit tests.
@jrfnl jrfnl force-pushed the php-8.3/psr12-classinstantiation-allow-for-readonly-anon-classes branch from 8c38d91 to 5fd4059 Compare February 8, 2024 10:27
@jrfnl
Copy link
Member Author

jrfnl commented Feb 8, 2024

Rebased without changes. Merging once the build passes.

@jrfnl jrfnl merged commit 10249a2 into master Feb 8, 2024
45 checks passed
@jrfnl jrfnl deleted the php-8.3/psr12-classinstantiation-allow-for-readonly-anon-classes branch February 8, 2024 10:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant