From c22124b37409bee6d1a0da77f4f3a1526f7a204d Mon Sep 17 00:00:00 2001 From: Jie Liu Date: Sun, 3 Nov 2024 10:52:20 +0800 Subject: [PATCH] fix(#2981): windows: root changed when navigating with LSP (#2982) * fix #2981: nvim-tree root changed when navigating with LSP * add error checks --- lua/nvim-tree/utils.lua | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lua/nvim-tree/utils.lua b/lua/nvim-tree/utils.lua index 936982ec..194845f5 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -70,6 +70,23 @@ local function has_parentheses_and_brackets(path) return false end +--- Path normalizations for windows only +local function win_norm_path(path) + if path == nil then + return path + end + local norm_path = path + -- Normalize for issue #2862 and #2961 + if has_parentheses_and_brackets(norm_path) then + norm_path = norm_path:gsub("/", "\\") + end + -- Normalize the drive letter + norm_path = norm_path:gsub("^%l:", function(drive) + return drive:upper() + end) + return norm_path +end + --- Get a path relative to another path. ---@param path string ---@param relative_to string|nil @@ -80,8 +97,8 @@ function M.path_relative(path, relative_to) end local norm_path = path - if M.is_windows and has_parentheses_and_brackets(path) then - norm_path = path:gsub("/", "\\") + if M.is_windows then + norm_path = win_norm_path(norm_path) end local _, r = norm_path:find(M.path_add_trailing(relative_to), 1, true)