nvimlsp.vim 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. " Apache 2.0 license. Copyright (c) 2019-2021 Copyright Neovim contributors.
  2. " Plugin: https://github.com/neovim/nvim-lsp
  3. " vim: et ts=2 sts=2 sw=2
  4. scriptencoding utf-8
  5. if !(get(g:, 'airline#extensions#nvimlsp#enabled', 1)
  6. \ && has('nvim')
  7. \ && luaeval('vim.lsp ~= nil'))
  8. finish
  9. endif
  10. function! s:airline_nvimlsp_count(cnt, symbol) abort
  11. return a:cnt ? a:symbol. a:cnt : ''
  12. endfunction
  13. function! airline#extensions#nvimlsp#get(type) abort
  14. if has('nvim-0.11') && luaeval('vim.tbl_isempty(vim.lsp.get_clients({ bufnr = 0 }))')
  15. return ''
  16. elseif !has('nvim-0.11') && luaeval('vim.tbl_isempty(vim.lsp.buf_get_clients(0))')
  17. return ''
  18. endif
  19. let error_symbol = get(g:, 'airline#extensions#nvimlsp#error_symbol', 'E:')
  20. let warning_symbol = get(g:, 'airline#extensions#nvimlsp#warning_symbol', 'W:')
  21. let show_line_numbers = get(g:, 'airline#extensions#nvimlsp#show_line_numbers', 1)
  22. let is_err = a:type ==# 'Error'
  23. let symbol = is_err ? error_symbol : warning_symbol
  24. if luaeval("pcall(require, 'vim.diagnostic')")
  25. let severity = a:type == 'Warning' ? 'Warn' : a:type
  26. let num = len(v:lua.vim.diagnostic.get(0, { 'severity': severity }))
  27. elseif luaeval("pcall(require, 'vim.lsp.diagnostic')")
  28. let num = v:lua.vim.lsp.diagnostic.get_count(0, a:type)
  29. else
  30. let num = v:lua.vim.lsp.util.buf_diagnostics_count(a:type)
  31. endif
  32. if show_line_numbers == 1 && luaeval("pcall(require, 'vim.diagnostic')") && num > 0
  33. return s:airline_nvimlsp_count(num, symbol) . <sid>airline_nvimlsp_get_line_number(num, a:type)
  34. else
  35. return s:airline_nvimlsp_count(num, symbol)
  36. endif
  37. endfunction
  38. function! s:airline_nvimlsp_get_line_number(cnt, type) abort
  39. let severity = a:type == 'Warning' ? 'Warn' : a:type
  40. let num = v:lua.vim.diagnostic.get(0, { 'severity': severity })[0].lnum
  41. let l:open_lnum_symbol =
  42. \ get(g:, 'airline#extensions#nvimlsp#open_lnum_symbol', '(L')
  43. let l:close_lnum_symbol =
  44. \ get(g:, 'airline#extensions#nvimlsp#close_lnum_symbol', ')')
  45. return open_lnum_symbol . num . close_lnum_symbol
  46. endfunction
  47. function! airline#extensions#nvimlsp#get_warning() abort
  48. return airline#extensions#nvimlsp#get('Warning')
  49. endfunction
  50. function! airline#extensions#nvimlsp#get_error() abort
  51. return airline#extensions#nvimlsp#get('Error')
  52. endfunction
  53. function! airline#extensions#nvimlsp#init(ext) abort
  54. call airline#parts#define_function('nvimlsp_error_count', 'airline#extensions#nvimlsp#get_error')
  55. call airline#parts#define_function('nvimlsp_warning_count', 'airline#extensions#nvimlsp#get_warning')
  56. endfunction