manager.lua 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. local M = {}
  2. local Log = require "core.log"
  3. local lsp_utils = require "lsp.utils"
  4. function M.init_defaults(languages)
  5. for _, entry in ipairs(languages) do
  6. if not lvim.lang[entry] then
  7. lvim.lang[entry] = {
  8. formatters = {},
  9. linters = {},
  10. lsp = {},
  11. }
  12. end
  13. end
  14. end
  15. local function is_overridden(server)
  16. local overrides = lvim.lsp.override
  17. if type(overrides) == "table" then
  18. if vim.tbl_contains(overrides, server) then
  19. return true
  20. end
  21. end
  22. end
  23. function M.setup_server(server_name)
  24. vim.validate {
  25. name = { server_name, "string" },
  26. }
  27. if lsp_utils.is_client_active(server_name) or is_overridden(server_name) then
  28. return
  29. end
  30. local lsp_installer_servers = require "nvim-lsp-installer.servers"
  31. local server_available, requested_server = lsp_installer_servers.get_server(server_name)
  32. if server_available then
  33. if not requested_server:is_installed() then
  34. Log:debug(string.format("[%s] is not installed", server_name))
  35. if lvim.lsp.automatic_servers_installation then
  36. Log:debug(string.format("Installing [%s]", server_name))
  37. requested_server:install()
  38. else
  39. return
  40. end
  41. end
  42. end
  43. local default_config = {
  44. on_attach = require("lsp").common_on_attach,
  45. on_init = require("lsp").common_on_init,
  46. capabilities = require("lsp").common_capabilities(),
  47. }
  48. local status_ok, custom_config = pcall(require, "lsp/providers/" .. requested_server.name)
  49. if status_ok then
  50. local new_config = vim.tbl_deep_extend("force", default_config, custom_config)
  51. Log:debug("Using custom configuration for requested server: " .. requested_server.name)
  52. requested_server:setup(new_config)
  53. else
  54. Log:debug("Using the default configuration for requested server: " .. requested_server.name)
  55. requested_server:setup(default_config)
  56. end
  57. end
  58. function M.setup(servers)
  59. local status_ok, _ = pcall(require, "nvim-lsp-installer")
  60. if not status_ok then
  61. return
  62. end
  63. --- allow using a single value
  64. if type(servers) == "string" then
  65. servers = { servers }
  66. end
  67. for _, server in ipairs(servers) do
  68. M.setup_server(server)
  69. end
  70. end
  71. return M