From 170629ba14aba36e678538dbb384d8424d1c9cf8 Mon Sep 17 00:00:00 2001 From: muro3r <10064571+muro3r@users.noreply.github.com> Date: Sat, 14 May 2022 16:54:37 +0900 Subject: [PATCH] feat: extension sorter (#1181) --- doc/nvim-tree-lua.txt | 2 +- lua/nvim-tree/explorer/sorters.lua | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index bf4927f11ee..04ce7f267f9 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -244,7 +244,7 @@ if the tree was previously open. *nvim-tree.sort_by* Changes how files within the same directory are sorted. -Can be one of 'name', 'case_sensitive' or 'modification_time'. +Can be one of 'name', 'case_sensitive', 'modification_time' or 'extension'. Type: `string`, Default: `"name"` *nvim-tree.hijack_unnamed_buffer_when_opening* diff --git a/lua/nvim-tree/explorer/sorters.lua b/lua/nvim-tree/explorer/sorters.lua index e82cba0061c..4168a931c95 100644 --- a/lua/nvim-tree/explorer/sorters.lua +++ b/lua/nvim-tree/explorer/sorters.lua @@ -124,12 +124,38 @@ function M.node_comparator_modification_time(a, b) return last_modified_b <= last_modified_a end +function M.node_comparator_extension(a, b) + if not (a and b) then + return true + end + + if a.nodes and not b.nodes then + return true + elseif not a.nodes and b.nodes then + return false + end + + if not (a.extension and b.extension) then + return true + end + + if a.extension and not b.extension then + return true + elseif not a.extension and b.extension then + return false + end + + return a.extension:lower() <= b.extension:lower() +end + function M.setup(opts) M.sort_by = opts.sort_by if M.sort_by == "modification_time" then M.node_comparator = M.node_comparator_modification_time elseif M.sort_by == "case_sensitive" then M.node_comparator = M.node_comparator_name_case_sensisive + elseif M.sort_by == "extension" then + M.node_comparator = M.node_comparator_extension else M.node_comparator = M.node_comparator_name_ignorecase end