aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorEmilio Ziniades <emilioziniades@protonmail.com>2023-11-18 09:40:13 +0200
committerGitHub <noreply@github.com>2023-11-18 15:40:13 +0800
commit7384e7149e79365c96dc623d9fa3444737776982 (patch)
treef1cf3d3370bac853772bbbbfcd42090cd219a59b /lua
parentdocs: update server_configurations.md (diff)
downloadnvim-lspconfig-7384e7149e79365c96dc623d9fa3444737776982.tar
nvim-lspconfig-7384e7149e79365c96dc623d9fa3444737776982.tar.gz
nvim-lspconfig-7384e7149e79365c96dc623d9fa3444737776982.tar.bz2
nvim-lspconfig-7384e7149e79365c96dc623d9fa3444737776982.tar.lz
nvim-lspconfig-7384e7149e79365c96dc623d9fa3444737776982.tar.xz
nvim-lspconfig-7384e7149e79365c96dc623d9fa3444737776982.tar.zst
nvim-lspconfig-7384e7149e79365c96dc623d9fa3444737776982.zip
fix: util.root_pattern prioritises pattern order (#2885)
* fix: util.root_pattern prioritises pattern order Instead of traversing the filesystem upwards once and returning the first match of all the patterns, it traverses the filesystem upwards once for each pattern. This means that the order of the patterns provided matters, and the highest priority patterns should be put first. Also updated corresponding tests. * docs: update util.root_pattern description
Diffstat (limited to 'lua')
-rw-r--r--lua/lspconfig/util.lua19
1 files changed, 11 insertions, 8 deletions
diff --git a/lua/lspconfig/util.lua b/lua/lspconfig/util.lua
index 364bf9a8..176365d1 100644
--- a/lua/lspconfig/util.lua
+++ b/lua/lspconfig/util.lua
@@ -250,19 +250,22 @@ end
function M.root_pattern(...)
local patterns = vim.tbl_flatten { ... }
- local function matcher(path)
+ return function(startpath)
+ startpath = M.strip_archive_subpath(startpath)
for _, pattern in ipairs(patterns) do
- for _, p in ipairs(vim.fn.glob(M.path.join(M.path.escape_wildcards(path), pattern), true, true)) do
- if M.path.exists(p) then
- return path
+ local match = M.search_ancestors(startpath, function(path)
+ for _, p in ipairs(vim.fn.glob(M.path.join(M.path.escape_wildcards(path), pattern), true, true)) do
+ if M.path.exists(p) then
+ return path
+ end
end
+ end)
+
+ if match ~= nil then
+ return match
end
end
end
- return function(startpath)
- startpath = M.strip_archive_subpath(startpath)
- return M.search_ancestors(startpath, matcher)
- end
end
function M.find_git_ancestor(startpath)