init.lua 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. local M = {}
  2. local Log = require "lvim.core.log"
  3. local utils = require "lvim.utils"
  4. local autocmds = require "lvim.core.autocmds"
  5. local function add_lsp_buffer_keybindings(bufnr)
  6. local mappings = {
  7. normal_mode = "n",
  8. insert_mode = "i",
  9. visual_mode = "v",
  10. }
  11. for mode_name, mode_char in pairs(mappings) do
  12. for key, remap in pairs(lvim.lsp.buffer_mappings[mode_name]) do
  13. local opts = { buffer = bufnr, desc = remap[2], noremap = true, silent = true }
  14. vim.keymap.set(mode_char, key, remap[1], opts)
  15. end
  16. end
  17. end
  18. function M.common_capabilities()
  19. local capabilities = vim.lsp.protocol.make_client_capabilities()
  20. capabilities.textDocument.completion.completionItem.snippetSupport = true
  21. capabilities.textDocument.completion.completionItem.resolveSupport = {
  22. properties = {
  23. "documentation",
  24. "detail",
  25. "additionalTextEdits",
  26. },
  27. }
  28. local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
  29. if status_ok then
  30. capabilities = cmp_nvim_lsp.update_capabilities(capabilities)
  31. end
  32. return capabilities
  33. end
  34. function M.common_on_exit(_, _)
  35. if lvim.lsp.document_highlight then
  36. autocmds.clear_augroup "lsp_document_highlight"
  37. end
  38. if lvim.lsp.code_lens_refresh then
  39. autocmds.clear_augroup "lsp_code_lens_refresh"
  40. end
  41. end
  42. function M.common_on_init(client, bufnr)
  43. if lvim.lsp.on_init_callback then
  44. lvim.lsp.on_init_callback(client, bufnr)
  45. Log:debug "Called lsp.on_init_callback"
  46. return
  47. end
  48. end
  49. function M.common_on_attach(client, bufnr)
  50. if lvim.lsp.on_attach_callback then
  51. lvim.lsp.on_attach_callback(client, bufnr)
  52. Log:debug "Called lsp.on_attach_callback"
  53. end
  54. local lu = require "lvim.lsp.utils"
  55. if lvim.lsp.document_highlight then
  56. lu.setup_document_highlight(client, bufnr)
  57. end
  58. if lvim.lsp.code_lens_refresh then
  59. lu.setup_codelens_refresh(client, bufnr)
  60. end
  61. add_lsp_buffer_keybindings(bufnr)
  62. end
  63. function M.get_common_opts()
  64. return {
  65. on_attach = M.common_on_attach,
  66. on_init = M.common_on_init,
  67. on_exit = M.common_on_exit,
  68. capabilities = M.common_capabilities(),
  69. }
  70. end
  71. function M.setup()
  72. Log:debug "Setting up LSP support"
  73. local lsp_status_ok, _ = pcall(require, "lspconfig")
  74. if not lsp_status_ok then
  75. return
  76. end
  77. if lvim.use_icons then
  78. for _, sign in ipairs(lvim.lsp.diagnostics.signs.values) do
  79. vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = sign.name })
  80. end
  81. end
  82. require("lvim.lsp.handlers").setup()
  83. if not utils.is_directory(lvim.lsp.templates_dir) then
  84. require("lvim.lsp.templates").generate_templates()
  85. end
  86. pcall(function()
  87. require("nlspsettings").setup(lvim.lsp.nlsp_settings.setup)
  88. end)
  89. pcall(function()
  90. require("nvim-lsp-installer").setup(lvim.lsp.installer.setup)
  91. end)
  92. require("lvim.lsp.null-ls").setup()
  93. autocmds.configure_format_on_save()
  94. end
  95. return M