init.lua 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. local M = {}
  2. local u = require "utils"
  3. function M.config()
  4. require("lsp.kind").setup()
  5. require("lsp.handlers").setup()
  6. require("lsp.signs").setup()
  7. end
  8. local function lsp_highlight_document(client)
  9. if lvim.lsp.document_highlight == false then
  10. return -- we don't need further
  11. end
  12. -- Set autocommands conditional on server_capabilities
  13. if client.resolved_capabilities.document_highlight then
  14. vim.api.nvim_exec(
  15. [[
  16. hi LspReferenceRead cterm=bold ctermbg=red guibg=#464646
  17. hi LspReferenceText cterm=bold ctermbg=red guibg=#464646
  18. hi LspReferenceWrite cterm=bold ctermbg=red guibg=#464646
  19. augroup lsp_document_highlight
  20. autocmd! * <buffer>
  21. autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
  22. autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
  23. augroup END
  24. ]],
  25. false
  26. )
  27. end
  28. end
  29. local function formatter_handler(client)
  30. local formatters = lvim.lang[vim.bo.filetype].formatters
  31. if not vim.tbl_isempty(formatters) then
  32. client.resolved_capabilities.document_formatting = false
  33. u.lvim_log(
  34. string.format("Overriding [%s] formatting if exists, Using provider [%s] instead", client.name, formatters[1].exe)
  35. )
  36. end
  37. end
  38. function M.common_capabilities()
  39. local capabilities = vim.lsp.protocol.make_client_capabilities()
  40. capabilities.textDocument.completion.completionItem.snippetSupport = true
  41. capabilities.textDocument.completion.completionItem.resolveSupport = {
  42. properties = {
  43. "documentation",
  44. "detail",
  45. "additionalTextEdits",
  46. },
  47. }
  48. return capabilities
  49. end
  50. function M.common_on_init(client, bufnr)
  51. if lvim.lsp.on_init_callback then
  52. lvim.lsp.on_init_callback(client, bufnr)
  53. return
  54. end
  55. formatter_handler(client)
  56. end
  57. function M.common_on_attach(client, bufnr)
  58. if lvim.lsp.on_attach_callback then
  59. lvim.lsp.on_attach_callback(client, bufnr)
  60. end
  61. lsp_highlight_document(client)
  62. require("lsp.keybinds").setup()
  63. require("lsp.null-ls").setup(vim.bo.filetype)
  64. end
  65. function M.setup(lang)
  66. local lang_server = lvim.lang[lang].lsp
  67. local provider = lang_server.provider
  68. if require("utils").check_lsp_client_active(provider) then
  69. return
  70. end
  71. require("lspconfig")[provider].setup(lang_server.setup)
  72. end
  73. return M