manager.lua 2.1 KB

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