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