-
Notifications
You must be signed in to change notification settings - Fork 155
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
Add completion for classes and modules #61
Comments
Sorry if this is the wrong place to ask (or a silly question in general), but what is the likelihood of ruby-lsp completions becoming as thorough as the completions in Example of Example of Is this something that ruby-lsp and vscode-ruby-lsp could eventually achieve? Or are completions like this the responsibility of a different sort of tool? |
Not a silly question at all! I'm not sure how these new IRB completions work internally, but they are indeed very useful - and it would be a great experience for the Ruby LSP. I think it could be achieved, but it does require some exploration to understand how it's done. Maybe it could even be shared between IRB and the Ruby LSP? I'll add this idea to the issue description. |
@vinistock is #253 part of this ticket? |
@st0012 no, |
Yes, one is for automatic formatting and the other one is to provide completion options (since we can't know ahead of time which method the user is looking for). |
That is exciting! Thanks for considering it. I was curious how the completions work in the tools I mentioned:
I am new to Ruby, so this may just be fluff 😁 Hopefully it can start some discussion in the future. I am interested in learning more! |
I think a while ago JetBrains had an experimental completion plugin for Rubymine that instantiated the application in the background and offered completions based on what is available in the runtime. This was actually painfully slow. But given Ruby's character of meta programming this is probably the only approach that can offer 100% accurate code completion. |
It would indeed be much more accurate, but I think it would be unbearably slow for large Rails applications. Also, it would require the LSP to know how to boot the application, since it may not necessarily be a Rails app. If we can figure out a way to offer completions based on static analysis only, it should be a lot faster, more maintainable and application agnostic. |
Wouldn't it be possible to cache all models and their methods, and just modify the cache on changes? doesn't sound like a huge list. |
ruby-lsp
Although our LSP won't offer first class completion like Sorbet's LSP (since it would require complete typechecking), we can still offer some simple convenience auto completes.
Some ideas, but not an exhaustive list:
do
, offer to complete with two options|arg| \n end
or justend
proc
,lambda
or->
offer to complete with{ |arg| }
or just{}
if
, offerelse
,elsif
and complete theend
end
on other keywords, such aswhile
,until
,for
require
orrequire_relative
, offer a filtered list of possible filesDocumentation: https://microsoft.github.io/language-server-protocol/specification#textDocument_completion
In addition, we can investigate how IRB completion works and evaluate if we can somehow use it from inside the Ruby LSP.
The text was updated successfully, but these errors were encountered: