vim-lsp-settings icon indicating copy to clipboard operation
vim-lsp-settings copied to clipboard

feat: add support for Dagger CUE LSP

Open dolanor opened this issue 3 years ago • 3 comments

Hi, we recently released a CUE LSP, and I followed vim-lsp documentation to configure it, and it works pretty well. But I wanted to make it even simpler to use it and started creating this PR. But somehow, I can't make it work. The configuration that works with bare vim-lsp is:

if executable('dagger')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'dagger_cue_lsp',
        \ 'cmd': {server_info->['dagger', 'cuelsp']},
        \ 'allowlist': ['cue'],
        \ })
endif

function! s:on_lsp_buffer_enabled() abort
    setlocal omnifunc=lsp#complete
    setlocal signcolumn=yes
    if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
    nmap <buffer> gd <plug>(lsp-definition)
    nmap <buffer> gs <plug>(lsp-document-symbol-search)
    nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
    nmap <buffer> gr <plug>(lsp-references)
    nmap <buffer> gi <plug>(lsp-implementation)
    "nmap <buffer> gt <plug>(lsp-type-definition)
    nmap <buffer> ,rn <plug>(lsp-rename)
    nmap <buffer> [g <plug>(lsp-previous-diagnostic)
    nmap <buffer> ]g <plug>(lsp-next-diagnostic)
    nmap <buffer> K <plug>(lsp-hover)

    let g:lsp_format_sync_timeout = 1000
    autocmd! BufWritePre *.cue call execute('LspDocumentFormatSync')

    " refer to doc to add more commands
endfunction

let g:lsp_log_file = expand('/tmp/vim-lsp.log')
let g:lsp_log_verbose = 1

let g:lsp_experimental_workspace_folders = get(g:, 'lsp_experimental_workspace_folders', 1)

augroup lsp_install
    au!
    " call s:on_lsp_buffer_enabled only for languages that has the server registered.
    autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END

On a second improvement, I'd like to be able to use either the cuelsp server embedded in the dagger binary, but I want user who just want to use CUE not to have to download dagger. We have a standalone cuelsp binary as well. I think somehow haskell has 2 binaries as well, but I couldn't get the configuration right, so I reduced to just 1 case.

dolanor avatar Aug 11 '22 05:08 dolanor

Thank you. LGTM. Could you please follow the indentation to other's code?

mattn avatar Aug 11 '22 05:08 mattn

I will check the indentation. My biggest problem right now is that I can't make it work. With my code like that, I can't trigger an install with :LspInstallServer. I get a: Server not found, and the log with debug displays:

mar. 16 août 2022 12:48:34:["s:on_text_document_did_change()",1]
mar. 16 août 2022 12:48:34:["s:send_didchange_queue() will be triggered"]
mar. 16 août 2022 12:48:34:["s:on_text_document_did_change()",1]
mar. 16 août 2022 12:48:34:["s:send_didchange_queue() will be triggered"]
mar. 16 août 2022 12:48:35:["s:send_event_queue()"]
mar. 16 août 2022 12:48:36:["s:on_text_document_did_save()",1]
mar. 16 août 2022 12:48:38:["s:on_text_document_did_close()",1]

I don't know what is wrong in my files for that to work.

dolanor avatar Aug 16 '22 16:08 dolanor

@dolanor

  • settings.json's key is filetype
  • command name, file name(installer and settings) and function name need contain same string.
    • If the command name is dagger, the filename will be installer-dagger.sh, dagger.vim and server name is dagger.
    • if you want dagger_cue_lsp, you need shell script.(See: https://github.com/mattn/vim-lsp-settings/blob/9d050e9e8ca34abf2d8511fb1a38f7970f291c72/installer/install-eclipse-jdt-ls.sh#L18-L23)

try this diff.

diff --git a/installer/install-dagger-cue-lsp.sh b/installer/install-dagger.sh
similarity index 100%
rename from installer/install-dagger-cue-lsp.sh
rename to installer/install-dagger.sh
diff --git a/settings.json b/settings.json
index 98bfa41..1c9e3d3 100644
--- a/settings.json
+++ b/settings.json
@@ -340,7 +340,7 @@
       }
     }
   ],
-  "dagger_cue_lsp": [
+  "cue": [
     {
       "command": "dagger",
       "url": "https://github.com/dagger/dagger/",
diff --git a/settings/dagger-cue-lsp.vim b/settings/dagger.vim
similarity index 93%
rename from settings/dagger-cue-lsp.vim
rename to settings/dagger.vim
index 9443aa4..664097a 100644
--- a/settings/dagger-cue-lsp.vim
+++ b/settings/dagger.vim
@@ -1,10 +1,10 @@
 " NOTE: For compatibility, this looks up not only
 " dagger lsp's user config but also
 " cuelsp's one.
-augroup vim_lsp_settings_dagger_cue_lsp
+augroup vim_lsp_settings_dagger
   au!
   LspRegisterServer {
-      \ 'name': 'dagger_cue_lsp',
+      \ 'name': 'dagger',
       \ 'cmd': {server_info->
       \     lsp_settings#get('dagger_cue_lsp', 'cmd',
       \     [lsp_settings#exec_path('dagger')]+

NOTE: renamed two files.

  • install-dagger-cue-lsp.sh to install-dagger.sh
  • dagger-cue-lsp.vim to dagger.vim

mikoto2000 avatar Oct 17 '22 10:10 mikoto2000