Closed Einenlum closed 3 months ago
The vim plugin change would be the simplest one:
function! phpactor#UseAdd()
let iskeyword_backup=&iskeyword " Backup the normal iskeyword option
set iskeyword+=\\ " Vim will take in account the \ in the word
let word = expand("<cword>") " This can now take `Lorem` typehint or `Lorem\Ipsum\Foo\Bar`
let &iskeyword=iskeyword_backup " We set back iskeyword to its original value not to mess up vim's behavior
call phpactor#rpc("import_class", {"name": word, "offset": phpactor#_offset(), "source": phpactor#_source(), "path": expand('%:p')})
endfunction
Most of the change would have to be done in Phpactor\Extension\SourceCodeFilesystemExtra\SourceCodeFilestem\Application\ClassSearch
then.
This is the code which gets the suggestions:
It shouldn't really be there, and I want to extract it and subsequently support importing functions/constants. Still not sure about the best option for this, but for now it could even be extracted into a class within the extension (and maybe "moved" somewhere later)
The vim plugin change would be the simplest one:
I would even say that we should not pass the word
at all, and just pass the offset and the source code.
the vim plugin only uses the word under the cursor to use classes.
the VIM plugin sends the offset to Phpactor, Phpactor falls back to the word under the cursor Oops, no it doesn't :flushed:
This should be a relatively easy fix -- I'll investigate
This PR fixes the behavior so that:
name
is not passed from the VIM plugin, only the offset.\
FWIW the LSP (and I guess the VIM plugin) will now autocomplete relative path segments.
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:
If my cursor is on
Place
, I will have the following Results: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 beApp\Domain\Finder
though.On the other hand, if my cursor is on
Finder
(although the full typehint I am on isFinder\Place
), I get the following results: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:
If my cursor is on
Finder\User
, theUseAdd
command should only propose me the following result:App\Domain\Finder
, since it is the only namespace havingFinder\User
in it. If I have a classApp\Foo\Finder\User\Foo
and 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).