diff options
| author | Emilio Ziniades <emilioziniades@protonmail.com> | 2023-11-18 09:40:13 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-18 15:40:13 +0800 |
| commit | 7384e7149e79365c96dc623d9fa3444737776982 (patch) | |
| tree | f1cf3d3370bac853772bbbbfcd42090cd219a59b /lua/lspconfig/util.lua | |
| parent | docs: update server_configurations.md (diff) | |
| download | nvim-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/lspconfig/util.lua')
| -rw-r--r-- | lua/lspconfig/util.lua | 19 |
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) |
