init.lua 3.4 KB

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