From db90f5953245ec4f723d5e1a70e1918adc26f8ac Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Fri, 8 Nov 2024 13:31:02 +1100 Subject: [PATCH] move toggles into filters --- lua/nvim-tree/actions/tree/modifiers/init.lua | 1 - .../actions/tree/modifiers/toggles.lua | 73 ------------------- lua/nvim-tree/api.lua | 30 ++++++-- lua/nvim-tree/explorer/filters.lua | 20 ++++- 4 files changed, 41 insertions(+), 83 deletions(-) delete mode 100644 lua/nvim-tree/actions/tree/modifiers/toggles.lua diff --git a/lua/nvim-tree/actions/tree/modifiers/init.lua b/lua/nvim-tree/actions/tree/modifiers/init.lua index 717b8d7e..f3ce27fc 100644 --- a/lua/nvim-tree/actions/tree/modifiers/init.lua +++ b/lua/nvim-tree/actions/tree/modifiers/init.lua @@ -2,7 +2,6 @@ local M = {} M.collapse_all = require("nvim-tree.actions.tree.modifiers.collapse-all") M.expand_all = require("nvim-tree.actions.tree.modifiers.expand-all") -M.toggles = require("nvim-tree.actions.tree.modifiers.toggles") function M.setup(opts) M.expand_all.setup(opts) diff --git a/lua/nvim-tree/actions/tree/modifiers/toggles.lua b/lua/nvim-tree/actions/tree/modifiers/toggles.lua deleted file mode 100644 index 73f687cd..00000000 --- a/lua/nvim-tree/actions/tree/modifiers/toggles.lua +++ /dev/null @@ -1,73 +0,0 @@ -local utils = require("nvim-tree.utils") -local core = require("nvim-tree.core") -local M = {} - ----@param explorer Explorer -local function reload(explorer) - local node = explorer:get_node_at_cursor() - explorer:reload_explorer() - if node then - utils.focus_node_or_parent(node) - end -end - -local function wrap_explorer(fn) - return function(...) - local explorer = core.get_explorer() - if explorer then - return fn(explorer, ...) - end - end -end - ----@param explorer Explorer -local function custom(explorer) - explorer.filters.states.custom = not explorer.filters.states.custom - reload(explorer) -end - ----@param explorer Explorer -local function git_ignored(explorer) - explorer.filters.states.git_ignored = not explorer.filters.states.git_ignored - reload(explorer) -end - ----@param explorer Explorer -local function git_clean(explorer) - explorer.filters.states.git_clean = not explorer.filters.states.git_clean - reload(explorer) -end - ----@param explorer Explorer -local function no_buffer(explorer) - explorer.filters.states.no_buffer = not explorer.filters.states.no_buffer - reload(explorer) -end - ----@param explorer Explorer -local function no_bookmark(explorer) - explorer.filters.states.no_bookmark = not explorer.filters.states.no_bookmark - reload(explorer) -end - ----@param explorer Explorer -local function dotfiles(explorer) - explorer.filters.states.dotfiles = not explorer.filters.states.dotfiles - reload(explorer) -end - ----@param explorer Explorer -local function enable(explorer) - explorer.filters.enabled = not explorer.filters.enabled - reload(explorer) -end - -M.custom = wrap_explorer(custom) -M.git_ignored = wrap_explorer(git_ignored) -M.git_clean = wrap_explorer(git_clean) -M.no_buffer = wrap_explorer(no_buffer) -M.no_bookmark = wrap_explorer(no_bookmark) -M.dotfiles = wrap_explorer(dotfiles) -M.enable = wrap_explorer(enable) - -return M diff --git a/lua/nvim-tree/api.lua b/lua/nvim-tree/api.lua index 85762656..31fcf219 100644 --- a/lua/nvim-tree/api.lua +++ b/lua/nvim-tree/api.lua @@ -89,6 +89,22 @@ local function wrap_node_or_nil(fn) end end +---Invoke a member's method on the singleton explorer. +---Print error when setup not called. +---@param explorer_member string explorer member name +---@param member_method string method name to invoke on member +---@param ... any passed to method +---@return fun(...): any +local function wrap_explorer_member_args(explorer_member, member_method, ...) + local method_args = ... + return wrap(function(...) + local explorer = core.get_explorer() + if explorer then + return explorer[explorer_member][member_method](explorer[explorer_member], method_args, ...) + end + end) +end + ---Invoke a member's method on the singleton explorer. ---Print error when setup not called. ---@param explorer_member string explorer member name @@ -165,13 +181,13 @@ Api.tree.find_file = wrap(actions.tree.find_file.fn) Api.tree.search_node = wrap(actions.finders.search_node.fn) Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse_all.fn) Api.tree.expand_all = wrap_node(actions.tree.modifiers.expand_all.fn) -Api.tree.toggle_enable_filters = wrap(actions.tree.modifiers.toggles.enable) -Api.tree.toggle_gitignore_filter = wrap(actions.tree.modifiers.toggles.git_ignored) -Api.tree.toggle_git_clean_filter = wrap(actions.tree.modifiers.toggles.git_clean) -Api.tree.toggle_no_buffer_filter = wrap(actions.tree.modifiers.toggles.no_buffer) -Api.tree.toggle_custom_filter = wrap(actions.tree.modifiers.toggles.custom) -Api.tree.toggle_hidden_filter = wrap(actions.tree.modifiers.toggles.dotfiles) -Api.tree.toggle_no_bookmark_filter = wrap(actions.tree.modifiers.toggles.no_bookmark) +Api.tree.toggle_enable_filters = wrap_explorer_member("filters", "toggle") +Api.tree.toggle_gitignore_filter = wrap_explorer_member_args("filters", "toggle", "git_ignored") +Api.tree.toggle_git_clean_filter = wrap_explorer_member_args("filters", "toggle", "git_clean") +Api.tree.toggle_no_buffer_filter = wrap_explorer_member_args("filters", "toggle", "no_buffer") +Api.tree.toggle_custom_filter = wrap_explorer_member_args("filters", "toggle", "custom") +Api.tree.toggle_hidden_filter = wrap_explorer_member_args("filters", "toggle", "dotfiles") +Api.tree.toggle_no_bookmark_filter = wrap_explorer_member_args("filters", "toggle", "no_bookmark") Api.tree.toggle_help = wrap(help.toggle) Api.tree.is_tree_buf = wrap(utils.is_nvim_tree_buf) diff --git a/lua/nvim-tree/explorer/filters.lua b/lua/nvim-tree/explorer/filters.lua index 78c7234a..fc540666 100644 --- a/lua/nvim-tree/explorer/filters.lua +++ b/lua/nvim-tree/explorer/filters.lua @@ -3,11 +3,11 @@ local FILTER_REASON = require("nvim-tree.enum").FILTER_REASON local Class = require("nvim-tree.classic") ----@alias FilterTypes "custom" | "dotfiles" | "git_ignored" | "git_clean" | "no_buffer" | "no_bookmark" +---@alias FilterType "custom" | "dotfiles" | "git_ignored" | "git_clean" | "no_buffer" | "no_bookmark" ---@class (exact) Filters: Class ---@field enabled boolean ----@field states table +---@field states table ---@field private explorer Explorer ---@field private exclude_list string[] filters.exclude ---@field private ignore_list table filters.custom string table @@ -260,4 +260,20 @@ function Filters:should_filter_as_reason(path, fs_stat, status) end end +---Toggle a type and refresh +---@param type FilterType? nil to disable all +function Filters:toggle(type) + if not type or self.states[type] == nil then + self.enabled = not self.enabled + else + self.states[type] = not self.states[type] + end + + local node = self.explorer:get_node_at_cursor() + self.explorer:reload_explorer() + if node then + utils.focus_node_or_parent(node) + end +end + return Filters