From e80e2685273212dd2b54f4878c8bb682a0852a98 Mon Sep 17 00:00:00 2001 From: Martin Potier Date: Wed, 14 Apr 2021 12:17:54 +0300 Subject: [PATCH] Add vim-lsp for Haskell goodness --- pkgs/vim/default.nix | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/pkgs/vim/default.nix b/pkgs/vim/default.nix index 685500a..812d5dc 100755 --- a/pkgs/vim/default.nix +++ b/pkgs/vim/default.nix @@ -107,6 +107,7 @@ let vim-hcl vim-ledger vim-lilypond + vim-lsp vim-nix vim-orgmode vim-selinux @@ -255,6 +256,46 @@ let au BufRead,BufNewFile Vagrantfile set filetype=ruby augroup END + " Haskell Language Server + if executable('dhall-lsp-server') + au User lsp_setup call lsp#register_server({ + \ 'name': 'dhall-lsp', + \ 'cmd': {server_info->['dhall-lsp-server']}, + \ 'allowlist': ['dhall'], + \ }) + endif + if executable('haskell-language-server-wrapper') + au User lsp_setup call lsp#register_server({ + \ 'name': 'haskell-lsp', + \ 'cmd': {server_info->['haskell-language-server-wrapper', '--lsp']}, + \ 'allowlist': ['haskell'], + \ }) + endif + + function! s:on_lsp_buffer_enabled() abort + setlocal omnifunc=lsp#complete + setlocal signcolumn=yes + if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif + nmap gd (lsp-definition) + nmap gr (lsp-references) + nmap gi (lsp-implementation) + nmap gt (lsp-type-definition) + nmap rn (lsp-rename) + nmap [g (lsp-previous-diagnostic) + nmap ]g (lsp-next-diagnostic) + nmap K (lsp-hover) + nmap a (lsp-code-action) + nmap dd (lsp-document-diagnostics) + + " refer to doc to add more commands + endfunction + + 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 + " Extra options ${extraOptions} '';