-
-
Notifications
You must be signed in to change notification settings - Fork 154
Should use imports take parts of namespace in account? #742
Description
Here is a suggestion of improvement that would help me in my everyday work (so I guess maybe it could help others).
Current behavior
For now, the vim plugin only uses the word under the cursor to use classes.
This works for most cases but I think sometimes it could have a better behavior.
For people (like me) who sometimes use a part of the namespace in the typehint, here is what happens:
<?php
namespace App\Foo\Bar;
class Baz
{
public __construct(
Finder\User $userFinder,
Finder\Place $placeFinder
) {
$this->userFinder = $userFinder;
$this->placeFinder = $placeFinder;
}
}If my cursor is on Place, I will have the following Results:
Select class:
1) App\Infrastructure\Serializer\Factory\Place
2) App\Domain\Finder\Place
3) App\Infrastructure\Doctrine\Repository\Place
4) App\Domain\Model\Place
5) App\Infrastructure\Serializer\Proxy\Place
6) App\Domain\Repository\Place
Although it is clear that the choice number 2 is the only possible answer, I get all these different results.
Moreover, if I select the choice 2, App\Domain\Finder\Place will be added in my use statements.
The expected use statement would be App\Domain\Finder though.
On the other hand, if my cursor is on Finder (although the full typehint I am on is Finder\Place), I get the following results:
Select class:
1) Symfony\Component\Finder\Finder
2) Nette\Utils\Finder
3) PhpCsFixer\Finder
4) Doctrine\Migrations\Finder\Finder
None of them are correct: it only proposes me real Classes (and not the part of the namespace I am looking for).
Proposition of a new behavior
Considering the following PHP code example:
<?php
namespace App\Foo\Bar;
class Baz
{
public __construct(
Finder\User $userFinder,
User $otherUserArgument
) {
$this->userFinder = $userFinder;
$this->otherUserArgument = $otherUserArgument;
}
}-
If my cursor is on
Finder\User, theUseAddcommand should only propose me the following result:App\Domain\Finder, since it is the only namespace havingFinder\Userin it. If I have a classApp\Foo\Finder\User\Fooand an interfaceApp\Bar\Baz\Something\Finder\User, only the second one should appear in the proposed results. -
If my cursor is on
User(the typehint of$otherUserArgument), it should propose me all the classes/traits/interfaces calledUser, but not classes likeApp\Domain\User\Repository(same behavior as it is right now).