init.lua 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 buffer_filetype = vim.bo.filetype
  31. local ext_provider = lvim.lang[buffer_filetype].formatter.exe
  32. if ext_provider then
  33. client.resolved_capabilities.document_formatting = false
  34. u.lvim_log(
  35. string.format("Overriding [%s] formatting if exists, Using provider [%s] instead", client.name, ext_provider)
  36. )
  37. end
  38. end
  39. function M.common_capabilities()
  40. local capabilities = vim.lsp.protocol.make_client_capabilities()
  41. capabilities.textDocument.completion.completionItem.snippetSupport = true
  42. capabilities.textDocument.completion.completionItem.resolveSupport = {
  43. properties = {
  44. "documentation",
  45. "detail",
  46. "additionalTextEdits",
  47. },
  48. }
  49. return capabilities
  50. end
  51. function M.common_on_init(client, bufnr)
  52. if lvim.lsp.on_init_callback then
  53. lvim.lsp.on_init_callback(client, bufnr)
  54. return
  55. end
  56. formatter_handler(client)
  57. end
  58. function M.common_on_attach(client, bufnr)
  59. if lvim.lsp.on_attach_callback then
  60. lvim.lsp.on_attach_callback(client, bufnr)
  61. end
  62. lsp_highlight_document(client)
  63. require("lsp.keybinds").setup()
  64. require("lsp.null-ls").setup(vim.bo.filetype)
  65. end
  66. function M.setup(lang)
  67. local lang_server = lvim.lang[lang].lsp
  68. local provider = lang_server.provider
  69. if require("utils").check_lsp_client_active(provider) then
  70. return
  71. end
  72. require("lspconfig")[provider].setup(lang_server.setup)
  73. end
  74. return M