I realize this isn't support for vim-lsp, but I'm hoping maybe someone here has attempted this and succeeded and might know what the deal is.
I've been struggling to get solargraph, via stdio, to play nice with vim-lsp, but have had little luck. I believe it is indeed an issue with vim-lsp, maybe it's not properly handling the response from solargraph (based upon the logging shown below)?
The critical line in the log below, either solargraph doesn't send something properly, or vim-lsp doesn't read something properly: Fri Aug 3 15:01:12 2018:["on_stdout", 4, "invalid content-length"]
I'm going to copy and paste the details of everything that I posted to a vim-lsp issue:
let g:lsp_auto_enable = 1
let g:lsp_signs_enabled = 1 " enable diagnostic signs / we use ALE for now
let g:lsp_diagnostics_echo_cursor = 1 " enable echo under cursor when in normal mode
let g:lsp_signs_error = {'text': '✖'}
let g:lsp_signs_warning = {'text': '~'}
let g:lsp_signs_hint = {'text': '?'}
let g:lsp_signs_information = {'text': '!!'}
let g:lsp_log_verbose = 1
let g:lsp_log_file = expand('~/.config/nvim/vim-lsp.log')
if executable('solargraph')
au User lsp_setup call lsp#register_server({
\ 'name': 'solargraph',
\ 'cmd': {server_info->[&shell, &shellcmdflag, 'solargraph stdio']},
\ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'Gemfile'))},
\ 'whitelist': ['ruby', 'eruby'],
\ })
endif
Fri Aug 3 15:01:00 2018:["lsp#register_server", "server registered", "solargraph"]
Fri Aug 3 15:01:00 2018:["vim-lsp signs enabled"]
Fri Aug 3 15:01:00 2018:["s:on_text_document_did_open()", 1, "ruby", "/Users/me/code/first/brainy", "file:///Users/me/code/thing/app/helpers/application_helper.rb"]
Fri Aug 3 15:01:00 2018:[{"response": {"data": {"__data__": "vim-lsp", "lsp_id": 4, "server_name": "solargraph"}, "message": "started lsp server successfully"}}]
Fri Aug 3 15:01:00 2018:["--->", 4, "solargraph", {"method": "initialize", "params": {"rootUri": "file:///Users/me/code/thing", "initializationOptions": {}, "capabilities": {}, "rootPath": "/Users/me/code/thing", "trace": "off"}}]
Fri Aug 3 15:01:02 2018:["<---(stderr)", 4, "solargraph", ["Solargraph is listening on stdio PID=66636"]]
Fri Aug 3 15:01:02 2018:["<---(stderr)", 4, "solargraph", ["", ""]]
Fri Aug 3 15:01:12 2018:["on_stdout", 4, "invalid content-length"]
Fri Aug 3 15:02:02 2018:["s:on_text_document_did_change()", 1]
Fri Aug 3 15:02:02 2018:[{"response": {"data": {"__data__": "vim-lsp", "server_name": "solargraph"}, "message": "server already started"}}]
Fri Aug 3 15:02:02 2018:[{"response": {"data": {"__data__": "vim-lsp", "server_name": "solargraph"}, "message": "waiting for lsp server to initialize"}}]
Fri Aug 3 15:02:10 2018:["s:on_text_document_did_change()", 1]
Fri Aug 3 15:02:10 2018:[{"response": {"data": {"__data__": "vim-lsp", "server_name": "solargraph"}, "message": "server already started"}}]
Fri Aug 3 15:02:10 2018:[{"response": {"data": {"__data__": "vim-lsp", "server_name": "solargraph"}, "message": "waiting for lsp server to initialize"}}]
Thanks so much for any suggestions/thoughts.
I used LanguageClient-neovim + Solargraph, It works well for me
config:
let g:LanguageClient_serverCommands = {
\ 'ruby': ['solargraph', 'stdio'],
\ }
I suspect this line indicates the problem's root cause:
Fri Aug 3 15:01:12 2018:["on_stdout", 4, "invalid content-length"]
The YARD documentation parser occasionally emits warnings to stdout, resulting in malformed server messages.
Gem version 0.24.0 (released today) should fix the issue.
One more update. The first fix for this issue would temporarily redirect STDOUT to a temp file during YARD docstring parsing. Version 0.24.1 eliminates the need for a temp file by redirecting the YARD logger to stderr instead.
Most helpful comment
I used LanguageClient-neovim + Solargraph, It works well for me
config: