-
Notifications
You must be signed in to change notification settings - Fork 96
Support Symfony #[AutowireLocator] attribute #420
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
Conversation
83ef507
to
5984d62
Compare
(削除) I tried to fix all errors but I'm not sure how to fix those 2 errors left. (削除ここまで)
Edit: Got it.
9334602
to
13edbbc
Compare
13edbbc
to
b49fdc7
Compare
...PrivateServiceRule We now create an AutowireLocator instance and check if the service exists there. This also removes a lot of nested foreach loops and thus decreases the complexity of the isAutowireLocatorService method a lot. https://symfony.com/blog/new-in-symfony-6-4-autowirelocator-and-autowireiterator-attributes
fe2a56d
to
4ef06e1
Compare
I'll add some tests later, besides from that it's ready for review.
Btw: I tried to rename the branch of my Repo to feat/autowirelocator, but it wasn't possible without losing the connection to this PR, the PR showed the branch was deleted in that case.
This allows us to share the logic for other rules
4ef06e1
to
2b587f4
Compare
ec48673
to
b2c2416
Compare
b2c2416
to
469d7a0
Compare
I also added tests now, but I have no idea how to resolve the failing lint and test checks. If someone can resolve those we're ready to merge from my side 🚀
I also noticed it only works when we're using Constructor property promotion, so when specifying private ContainerInterface $locator
in the constructor.
It won't work when $locator
is specified as a class member and then assigned in the constructor method (as here e.g. https://github.com/phpstan/phpstan-symfony/blob/c7b7e7f520893621558bfbfdb2694d4364565c1d/tests/Rules/Symfony/ExampleServiceSubscriber.php).
Is this a problem in practice?
Hi, I can't review this when the build isn't green.
Uh oh!
There was an error while loading. Please reload this page.
I implemented initial support for the
#[AutowireLocator]
attribute. See https://symfony.com/blog/new-in-symfony-6-4-autowirelocator-and-autowireiterator-attributesThe simple syntax is supported now:
It also supports when classes are specified via string:
#[AutowireLocator(['App\FooHandler'])]
The advanced syntax described in the blog post is
(削除) not (削除ここまで)also supported(削除) yet (削除ここまで)now:(削除) Maybe someone else wants to figure this out. Unfortunately I have no more time left to do it in the coming days. (削除ここまで)Edit 2: I just found out how I can both simplify this a lot and implement the advanced syntax by just creating an instance of the AutowireLocator attribute. And I'll move this to
AutowireLoaderServiceMapFactory
so it will be also available forPHPStan\Rules\Symfony\ContainerInterfaceUnknownServiceRule
.closes #411