chore: refacto populate filtering
move `nvim_tree_ignore` and `nvim_tree_hide_dotfiles` to setup
This commit is contained in:
parent
f92b7e7627
commit
a6c1d45dd6
45
README.md
45
README.md
@ -36,31 +36,20 @@ Note that options under the `g:` command should be set **BEFORE** running the se
|
||||
|
||||
```lua
|
||||
-- following options are the default
|
||||
-- each of these are documented in `:help nvim-tree.OPTION_NAME`
|
||||
require'nvim-tree'.setup {
|
||||
-- disables netrw completely
|
||||
disable_netrw = true,
|
||||
-- hijack netrw window on startup
|
||||
hijack_netrw = true,
|
||||
-- open the tree when running this setup function
|
||||
open_on_setup = false,
|
||||
-- will not open on setup if the filetype is in this list
|
||||
ignore_ft_on_setup = {},
|
||||
-- closes neovim automatically when the tree is the last **WINDOW** in the view
|
||||
auto_close = false,
|
||||
-- opens the tree when changing/opening a new tab if the tree wasn't previously opened
|
||||
open_on_tab = false,
|
||||
-- hijacks new directory buffers when they are opened.
|
||||
hijack_cursor = false,
|
||||
update_cwd = false,
|
||||
update_to_buf_dir = {
|
||||
-- enable the feature
|
||||
enable = true,
|
||||
-- allow to open the tree if it was previously closed
|
||||
auto_open = true,
|
||||
},
|
||||
-- hijack the cursor in the tree to put it at the start of the filename
|
||||
hijack_cursor = false,
|
||||
-- updates the root directory of the tree on `DirChanged` (when you run `:cd` usually)
|
||||
update_cwd = false,
|
||||
-- show lsp diagnostics in the signcolumn
|
||||
diagnostics = {
|
||||
enable = false,
|
||||
icons = {
|
||||
@ -70,53 +59,39 @@ require'nvim-tree'.setup {
|
||||
error = "",
|
||||
}
|
||||
},
|
||||
-- update the focused file on `BufEnter`, un-collapses the folders recursively until it finds the file
|
||||
update_focused_file = {
|
||||
-- enables the feature
|
||||
enable = false,
|
||||
-- update the root directory of the tree to the one of the folder containing the file if the file is not under the current root directory
|
||||
-- only relevant when `update_focused_file.enable` is true
|
||||
update_cwd = false,
|
||||
-- list of buffer names / filetypes that will not update the cwd if the file isn't found under the current root directory
|
||||
-- only relevant when `update_focused_file.update_cwd` is true and `update_focused_file.enable` is true
|
||||
ignore_list = {}
|
||||
},
|
||||
-- configuration options for the system open command (`s` in the tree by default)
|
||||
system_open = {
|
||||
-- the command to run this, leaving nil should work in most cases
|
||||
cmd = nil,
|
||||
-- the command arguments as a list
|
||||
args = {}
|
||||
},
|
||||
|
||||
filters = {
|
||||
dotfiles = false,
|
||||
custom = {}
|
||||
},
|
||||
view = {
|
||||
-- width of the window, can be either a number (columns) or a string in `%`, for left or right side placement
|
||||
width = 30,
|
||||
-- height of the window, can be either a number (columns) or a string in `%`, for top or bottom side placement
|
||||
height = 30,
|
||||
-- Hide the root path of the current folder on top of the tree
|
||||
hide_root_folder = false,
|
||||
-- side of the tree, can be one of 'left' | 'right' | 'top' | 'bottom'
|
||||
side = 'left',
|
||||
-- if true the tree will resize itself after opening a file
|
||||
auto_resize = false,
|
||||
mappings = {
|
||||
-- custom only false will merge the list with the default mappings
|
||||
-- if true, it will only use your list to set the mappings
|
||||
custom_only = false,
|
||||
-- list of mappings to set on the tree manually
|
||||
list = {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
These additional options must be set **BEFORE** calling `require'nvim-tree'` or calling setup.
|
||||
They are being migrated to the setup function bit by bit, check [this issue](https://github.com/kyazdani42/nvim-tree.lua/issues/674) if you encounter any problems related to configs not working after update.
|
||||
```vim
|
||||
let g:nvim_tree_ignore = [ '.git', 'node_modules', '.cache' ] "empty by default
|
||||
let g:nvim_tree_gitignore = 1 "0 by default
|
||||
let g:nvim_tree_quit_on_open = 1 "0 by default, closes the tree when you open a file
|
||||
let g:nvim_tree_indent_markers = 1 "0 by default, this option shows indent markers when folders are open
|
||||
let g:nvim_tree_hide_dotfiles = 1 "0 by default, this option hides files and folders starting with a dot `.`
|
||||
let g:nvim_tree_git_hl = 1 "0 by default, will enable file highlight for git attributes (can be used without the icons).
|
||||
let g:nvim_tree_highlight_opened_files = 1 "0 by default, will enable folder and file icon highlight for opened files/directories.
|
||||
let g:nvim_tree_root_folder_modifier = ':~' "This is the default. See :help filename-modifiers for more options
|
||||
@ -219,7 +194,7 @@ highlight NvimTreeFolderIcon guibg=blue
|
||||
- `<C-x>` will open the file in a horizontal split
|
||||
- `<C-t>` will open the file in a new tab
|
||||
- `<Tab>` will open the file as a preview (keeps the cursor in the tree)
|
||||
- `I` will toggle visibility of folders hidden via |g:nvim_tree_ignore|
|
||||
- `I` will toggle visibility of hidden folders / files
|
||||
- `H` will toggle visibility of dotfiles (files/folders starting with a `.`)
|
||||
- `R` will refresh the tree
|
||||
- Double left click acts like `<CR>`
|
||||
|
||||
@ -110,6 +110,10 @@ function.
|
||||
custom_only = false,
|
||||
list = {}
|
||||
}
|
||||
},
|
||||
filters = {
|
||||
dotfiles = false,
|
||||
custom = {}
|
||||
}
|
||||
}
|
||||
<
|
||||
@ -261,10 +265,22 @@ Here is a list of the options available in the setup call:
|
||||
type: `boolean`
|
||||
default: false
|
||||
|
||||
- |view,mappings.list|: a list of keymaps that will extend or override the default keymaps
|
||||
- |view.mappings.list|: a list of keymaps that will extend or override the default keymaps
|
||||
type: list of `{ key: table of strings or string, mode: string (vim-mode), cb: callback function as a string }`
|
||||
default: {}
|
||||
|
||||
*nvim-tree.filters*
|
||||
|filters|: filtering options
|
||||
|
||||
- |filters.dotfiles|: do not show `dotfiles` (files starting with a `.`)
|
||||
type: `boolean`
|
||||
default: `false`
|
||||
|
||||
- |filters.custom|: custom list of string that will not be shown.
|
||||
type: `{string}`
|
||||
default: `{}`
|
||||
|
||||
|
||||
==============================================================================
|
||||
OPTIONS *nvim-tree-options*
|
||||
|
||||
@ -280,13 +296,6 @@ width of the window, can be *width_in_columns* or *'width_in_percent%'*
|
||||
where the window will open (default to 'left')
|
||||
- 'left' or 'right'
|
||||
|
||||
|g:nvim_tree_ignore| *g:nvim_tree_ignore*
|
||||
|
||||
An array of strings that the tree won't load and display.
|
||||
useful to hide large data/cache folders.
|
||||
>
|
||||
example: let g:nvim_tree_ignore = [ '.git', 'node_modules' ]
|
||||
|
||||
|g:nvim_tree_gitignore| *g:nvim_tree_gitignore*
|
||||
|
||||
Determines whether to include in g:nvim_tree_ignore
|
||||
@ -384,12 +393,6 @@ Default is 0
|
||||
Can be `0` or `1`. When `1`, will display indent markers when folders are open
|
||||
Default is 0
|
||||
|
||||
|g:nvim_tree_hide_dotfiles| *g:nvim_tree_hide_dotfiles*
|
||||
|
||||
Can be `0` or `1`. When `1`, will hide dotfiles, files or folders which start
|
||||
with the `.` character.
|
||||
Default is 0
|
||||
|
||||
|g:nvim_tree_root_folder_modifier| *g:nvim_tree_root_folder_modifier*
|
||||
|
||||
In what format to show root folder. See `:help filename-modifiers` for
|
||||
|
||||
@ -436,6 +436,10 @@ local DEFAULT_OPTS = {
|
||||
error = "",
|
||||
}
|
||||
},
|
||||
filters = {
|
||||
dotfiles = false,
|
||||
custom_filter = {}
|
||||
}
|
||||
}
|
||||
|
||||
function M.setup(conf)
|
||||
@ -464,6 +468,7 @@ function M.setup(conf)
|
||||
require'nvim-tree.colors'.setup()
|
||||
require'nvim-tree.view'.setup(opts.view or {})
|
||||
require'nvim-tree.diagnostics'.setup(opts)
|
||||
require'nvim-tree.populate'.setup(opts)
|
||||
|
||||
setup_autocommands(opts)
|
||||
setup_vim_commands()
|
||||
|
||||
@ -561,12 +561,12 @@ function M.parent_node(node, should_close)
|
||||
end
|
||||
|
||||
function M.toggle_ignored()
|
||||
pops.show_ignored = not pops.show_ignored
|
||||
pops.config.filter_ignored = not pops.config.filter_ignored
|
||||
return M.refresh_tree()
|
||||
end
|
||||
|
||||
function M.toggle_dotfiles()
|
||||
pops.show_dotfiles = not pops.show_dotfiles
|
||||
pops.config.filter_dotfiles = not pops.config.filter_dotfiles
|
||||
return M.refresh_tree()
|
||||
end
|
||||
|
||||
|
||||
@ -1,13 +1,11 @@
|
||||
local config = require'nvim-tree.config'
|
||||
local git = require'nvim-tree.git'
|
||||
local icon_config = config.get_icon_state()
|
||||
|
||||
local api = vim.api
|
||||
local luv = vim.loop
|
||||
|
||||
local M = {
|
||||
show_ignored = false,
|
||||
show_dotfiles = vim.g.nvim_tree_hide_dotfiles ~= 1,
|
||||
ignore_list = {}
|
||||
}
|
||||
|
||||
local utils = require'nvim-tree.utils'
|
||||
@ -116,47 +114,42 @@ local function node_comparator(a, b)
|
||||
return a.name:lower() <= b.name:lower()
|
||||
end
|
||||
|
||||
local function gen_ignore_check(cwd)
|
||||
if not cwd then cwd = luv.cwd() end
|
||||
local ignore_list = {}
|
||||
---Check if the given path should be ignored.
|
||||
---@param path string Absolute path
|
||||
---@return boolean
|
||||
local function should_ignore(path)
|
||||
local basename = utils.path_basename(path)
|
||||
|
||||
if vim.g.nvim_tree_ignore and #vim.g.nvim_tree_ignore > 0 then
|
||||
for _, entry in pairs(vim.g.nvim_tree_ignore) do
|
||||
ignore_list[entry] = true
|
||||
if M.config.filter_dotfiles then
|
||||
if basename:sub(1, 1) == '.' then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
---Check if the given path should be ignored.
|
||||
---@param path string Absolute path
|
||||
---@return boolean
|
||||
return function(path)
|
||||
local basename = utils.path_basename(path)
|
||||
|
||||
if not M.show_ignored then
|
||||
if vim.g.nvim_tree_gitignore == 1 then
|
||||
if git.should_gitignore(path) then return true end
|
||||
end
|
||||
|
||||
local relpath = utils.path_relative(path, cwd)
|
||||
if ignore_list[relpath] == true or ignore_list[basename] == true then
|
||||
return true
|
||||
end
|
||||
|
||||
local idx = path:match(".+()%.[^.]+$")
|
||||
if idx then
|
||||
if ignore_list['*'..string.sub(path, idx)] == true then return true end
|
||||
end
|
||||
end
|
||||
|
||||
if not M.show_dotfiles then
|
||||
if basename:sub(1, 1) == '.' then return true end
|
||||
end
|
||||
|
||||
if not M.config.filter_ignored then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local should_ignore = gen_ignore_check()
|
||||
if vim.g.nvim_tree_gitignore == 1 then
|
||||
if git.should_gitignore(path) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local relpath = utils.path_relative(path, vim.loop.cwd())
|
||||
if M.ignore_list[relpath] == true or M.ignore_list[basename] == true then
|
||||
return true
|
||||
end
|
||||
|
||||
local idx = path:match(".+()%.[^.]+$")
|
||||
if idx then
|
||||
if M.ignore_list['*'..string.sub(path, idx)] == true then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function M.refresh_entries(entries, cwd, parent_node)
|
||||
local handle = luv.fs_scandir(cwd)
|
||||
@ -351,6 +344,7 @@ function M.populate(entries, cwd, parent_node)
|
||||
|
||||
utils.merge_sort(entries, node_comparator)
|
||||
|
||||
local icon_config = config.get_icon_state()
|
||||
if (not icon_config.show_git_icon) and vim.g.nvim_tree_git_hl ~= 1 then
|
||||
return
|
||||
end
|
||||
@ -360,4 +354,18 @@ function M.populate(entries, cwd, parent_node)
|
||||
end
|
||||
end
|
||||
|
||||
function M.setup(opts)
|
||||
M.config = {
|
||||
filter_ignored = true,
|
||||
filter_dotfiles = opts.filters.dotfiles,
|
||||
}
|
||||
|
||||
local custom_filter = opts.filters.custom
|
||||
if custom_filter and #custom_filter > 0 then
|
||||
for _, entry in pairs(custom_filter) do
|
||||
M.ignore_list[entry] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
|
||||
@ -23,6 +23,8 @@ local out_config = {
|
||||
"nvim_tree_bindings",
|
||||
"nvim_tree_disable_keybindings",
|
||||
"nvim_tree_disable_default_keybindings",
|
||||
"nvim_tree_hide_dotfiles",
|
||||
"nvim_tree_ignore"
|
||||
}
|
||||
|
||||
local x = vim.tbl_filter(function(v)
|
||||
@ -30,6 +32,6 @@ local x = vim.tbl_filter(function(v)
|
||||
end, out_config)
|
||||
|
||||
if #x > 0 then
|
||||
local msg = "following options are now set in the setup (:help nvim-tree.setup): "
|
||||
require'nvim-tree.utils'.echo_warning(msg..table.concat(x, " | "))
|
||||
local msg = "Following options were moved to setup (:help nvim-tree.setup): "
|
||||
require'nvim-tree.utils'.echo_warning(msg..table.concat(x, ", "))
|
||||
end
|
||||
|
||||
Loading…
Reference in New Issue
Block a user