templates.lua 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. local M = {}
  2. local Log = require "lvim.core.log"
  3. local utils = require "lvim.utils"
  4. local lvim_lsp_utils = require "lvim.lsp.utils"
  5. local ftplugin_dir = lvim.lsp.templates_dir
  6. local join_paths = _G.join_paths
  7. function M.remove_template_files()
  8. -- remove any outdated files
  9. for _, file in ipairs(vim.fn.glob(ftplugin_dir .. "/*.lua", 1, 1)) do
  10. vim.fn.delete(file)
  11. end
  12. end
  13. ---Generates an ftplugin file based on the server_name in the selected directory
  14. ---@param server_name string name of a valid language server, e.g. pyright, gopls, tsserver, etc.
  15. ---@param dir string the full path to the desired directory
  16. function M.generate_ftplugin(server_name, dir)
  17. if vim.tbl_contains(lvim.lsp.override, server_name) then
  18. return
  19. end
  20. -- we need to go through lspconfig to get the corresponding filetypes currently
  21. local filetypes = lvim_lsp_utils.get_supported_filetypes(server_name) or {}
  22. if not filetypes then
  23. return
  24. end
  25. for _, filetype in ipairs(filetypes) do
  26. local filename = join_paths(dir, filetype .. ".lua")
  27. local setup_cmd = string.format([[require("lvim.lsp.manager").setup(%q)]], server_name)
  28. -- print("using setup_cmd: " .. setup_cmd)
  29. -- overwrite the file completely
  30. utils.write_file(filename, setup_cmd .. "\n", "a")
  31. end
  32. end
  33. ---Generates ftplugin files based on a list of server_names
  34. ---The files are generated to a runtimepath: "$LUNARVIM_RUNTIME_DIR/site/after/ftplugin/template.lua"
  35. ---@param servers_names table list of servers to be enabled. Will add all by default
  36. function M.generate_templates(servers_names)
  37. servers_names = servers_names or {}
  38. Log:debug "Templates installation in progress"
  39. M.remove_template_files()
  40. if vim.tbl_isempty(servers_names) then
  41. local available_servers = require("nvim-lsp-installer.servers").get_available_servers()
  42. for _, server in pairs(available_servers) do
  43. table.insert(servers_names, server.name)
  44. end
  45. end
  46. -- create the directory if it didn't exist
  47. if not utils.is_directory(lvim.lsp.templates_dir) then
  48. vim.fn.mkdir(ftplugin_dir, "p")
  49. end
  50. for _, server in ipairs(servers_names) do
  51. M.generate_ftplugin(server, ftplugin_dir)
  52. end
  53. Log:debug "Templates installation is complete"
  54. end
  55. return M