From b7796e9a5e7653d3c509a21504b6ebaed8e08966 Mon Sep 17 00:00:00 2001 From: Martin Larsson Date: Sat, 11 Jan 2025 18:01:15 +0100 Subject: [PATCH] small refactor to lsp.lua (lsp/setup.lua), rename lsp/language_servers -> lsp/servers. utils now has a function for "get_file_names_in_dir" --- .../servers}/clangd.lua | 0 .../servers}/cmake.lua | 0 .../servers}/gopls.lua | 0 .../servers}/lua_ls.lua | 0 .../nvim/lua/{lsp.lua => lsp/setup.lua} | 20 ++++++------------- home/.config/nvim/lua/utils.lua | 16 +++++++++++++++ 6 files changed, 22 insertions(+), 14 deletions(-) rename home/.config/nvim/lua/{language_servers => lsp/servers}/clangd.lua (100%) rename home/.config/nvim/lua/{language_servers => lsp/servers}/cmake.lua (100%) rename home/.config/nvim/lua/{language_servers => lsp/servers}/gopls.lua (100%) rename home/.config/nvim/lua/{language_servers => lsp/servers}/lua_ls.lua (100%) rename home/.config/nvim/lua/{lsp.lua => lsp/setup.lua} (79%) diff --git a/home/.config/nvim/lua/language_servers/clangd.lua b/home/.config/nvim/lua/lsp/servers/clangd.lua similarity index 100% rename from home/.config/nvim/lua/language_servers/clangd.lua rename to home/.config/nvim/lua/lsp/servers/clangd.lua diff --git a/home/.config/nvim/lua/language_servers/cmake.lua b/home/.config/nvim/lua/lsp/servers/cmake.lua similarity index 100% rename from home/.config/nvim/lua/language_servers/cmake.lua rename to home/.config/nvim/lua/lsp/servers/cmake.lua diff --git a/home/.config/nvim/lua/language_servers/gopls.lua b/home/.config/nvim/lua/lsp/servers/gopls.lua similarity index 100% rename from home/.config/nvim/lua/language_servers/gopls.lua rename to home/.config/nvim/lua/lsp/servers/gopls.lua diff --git a/home/.config/nvim/lua/language_servers/lua_ls.lua b/home/.config/nvim/lua/lsp/servers/lua_ls.lua similarity index 100% rename from home/.config/nvim/lua/language_servers/lua_ls.lua rename to home/.config/nvim/lua/lsp/servers/lua_ls.lua diff --git a/home/.config/nvim/lua/lsp.lua b/home/.config/nvim/lua/lsp/setup.lua similarity index 79% rename from home/.config/nvim/lua/lsp.lua rename to home/.config/nvim/lua/lsp/setup.lua index daed9ff..0992c37 100644 --- a/home/.config/nvim/lua/lsp.lua +++ b/home/.config/nvim/lua/lsp/setup.lua @@ -66,23 +66,15 @@ vim.lsp.config("*", { root_markers = { ".git" }, }) --- Find all files in lua/language_servers and require them +-- Find all files in lua/lsp/servers and require them -- We use them to ensure that the servers are installed and configured -local lua_files_str = vim.fn.globpath(vim.fn.stdpath("config") .. "/lua/language_servers", "*.lua", true) -local has_line_breaks = vim.fn.match(lua_files_str, [[\n]]) > -1 --- Get an array of all the files in the directory, make sure to account for single file -local lua_files = has_line_breaks and vim.fn.split(lua_files_str, "\n") or { lua_files_str } --- Remove path and extension and only keep the filename -local server_names = vim.tbl_map(function(file) - return vim.fn.fnamemodify(file, ":t:r") -end, lua_files) - local errors = {} -utils.foreach(server_names, function(server_name) - local path = "language_servers/" .. server_name +local dir_path = "lsp/servers" +utils.foreach(utils.get_file_names_in_dir(dir_path, "*.lua", true), function(server_name) + local server_path = dir_path .. "/" .. server_name local result, conf = utils.xpcallmsg( - function() return require(path) end, - "Failed to require " .. path, + function() return require(server_path) end, + "Failed to require " .. server_path, errors ) diff --git a/home/.config/nvim/lua/utils.lua b/home/.config/nvim/lua/utils.lua index 000ee80..17c5e32 100644 --- a/home/.config/nvim/lua/utils.lua +++ b/home/.config/nvim/lua/utils.lua @@ -5,6 +5,22 @@ local function is_single_keymap_table(map_table) return map_table.n or map_table.t or map_table.i or map_table.v or map_table.x or map_table.o end +function M.get_file_names_in_dir(dir, expr, strip_extension) + local path = vim.fn.stdpath("config") .. "/lua/" .. dir + local files_str = vim.fn.globpath(path, expr, true) + local has_line_breaks = vim.fn.match(files_str, [[\n]]) > -1 + local files = has_line_breaks and vim.fn.split(files_str, "\n") or { files_str } + + local should_strip_extension = strip_extension or false + if should_strip_extension then + return vim.tbl_map(function(file) + return vim.fn.fnamemodify(file, ":t:r") + end, files) + else + return files + end +end + function M.validate_bufnr(bufnr) vim.validate('bufnr', bufnr, 'number') return bufnr == 0 and vim.api.nvim_get_current_buf() or bufnr