Closed rickyninja closed 4 years ago
Thanks for the report @rickyninja!
It's possible vim-lsp really is sending an invalid method, but I'm unable to make that judgement.
So it's actually the other way around, Metals is sending something to vim-lsp that vim-lsp doesn't have implemented yet. Since the spark repo you have linked is a Maven project, but it also has sbt-specific files in project/
, Metals recognizes that there can be 2 possible build definitions. It then sends you a window/showMessageRequest
for you to choose which you'd like. You can see this in the logs you posted here:
"method":"window/showMessageRequest","params":{"actions":[{"title":"sbt"},{"title":"mvn"}]
However, that method isn't implemented yet in vim-lsp. Ironically, there looks to be a longstanding pr that is still open to add support for this here that mentions Metals. It used to be that you could just not worry about the message request and instead manually trigger a build import, but in this case, you can't since even if you manually trigger it, it will still send the message request for you to choose the build tool. It's good you brought this up, because I honestly didn't think about this scenario before. Part of me wants to say that there isn't a lot we can do, since window/showMessageRequest
is part of the spec, and it needs to be implemented by the client, but it's also not great for vim-lsp users. I'll leave this open for a bit because I'll have to think a bit about this scenario, and whether or not it makes sense for Metals to try to offer something to get around this situation.
As an aside, it also looks like the settings here are pretty out of date. I haven't played around with vim-lsp in quite some time, so I'll see if I can update these. In the mean time, coc-metals does implement the full spec if you do want to use vim for this project and are considering another lsp client. If not, let's see what we can do to solve this.
@ckipp01 I appreciate the details and context you have provided. I'd prefer to keep using vim-lsp for now, since I already have it working with pyls and clangd, and it has lighter dependencies. I'll keep an eye on things to see where it ends up in the future, but feel free to close this issue at your discretion.
So I added a couple comments in various places in vim-lsp to mention things that would really help Metals vim-lsp users, and I've also sent in a pr to update the settings in the vim-lsp-settings repo. I think I'm going to go ahead and close this since it doesn't make a ton of sense for us to add something to go around this issue as it's part of the spec, and really needs to be implemented client side. Just as importantly, I see that vim-lsp doesn't support window/showMessage
nor window/logMessage
, so it's even more difficult to show any information to Metals users of vim-lsp. Hopefully some of these missing features can be added, and I think it would greatly improve your experience. If you get stuck with anything else, don't hesitate to create another issue.
Describe the bug
I'm getting a method not found error upon vim startup during metals initialization. It's possible vim-lsp really is sending an invalid method, but I'm unable to make that judgement.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
I expected no initialization errors, and for goto definition etc. to be functional.
Screenshots
Installation:
Additional context
The error returned via jsonrpc doesn't specifiy which method metals is unable to find. I wrote a wrapper program to capture stdin & stdout to help determine which method call is triggering this error.
metals.log
jsonrpc capture
Search terms
vim metals vim-lsp method not found initializing server