chore: refacto populate filtering
move `nvim_tree_ignore` and `nvim_tree_hide_dotfiles` to setup
This commit is contained in:
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
|
```lua
|
||||||
-- following options are the default
|
-- following options are the default
|
||||||
|
-- each of these are documented in `:help nvim-tree.OPTION_NAME`
|
||||||
require'nvim-tree'.setup {
|
require'nvim-tree'.setup {
|
||||||
-- disables netrw completely
|
|
||||||
disable_netrw = true,
|
disable_netrw = true,
|
||||||
-- hijack netrw window on startup
|
|
||||||
hijack_netrw = true,
|
hijack_netrw = true,
|
||||||
-- open the tree when running this setup function
|
|
||||||
open_on_setup = false,
|
open_on_setup = false,
|
||||||
-- will not open on setup if the filetype is in this list
|
|
||||||
ignore_ft_on_setup = {},
|
ignore_ft_on_setup = {},
|
||||||
-- closes neovim automatically when the tree is the last **WINDOW** in the view
|
|
||||||
auto_close = false,
|
auto_close = false,
|
||||||
-- opens the tree when changing/opening a new tab if the tree wasn't previously opened
|
|
||||||
open_on_tab = false,
|
open_on_tab = false,
|
||||||
-- hijacks new directory buffers when they are opened.
|
hijack_cursor = false,
|
||||||
|
update_cwd = false,
|
||||||
update_to_buf_dir = {
|
update_to_buf_dir = {
|
||||||
-- enable the feature
|
|
||||||
enable = true,
|
enable = true,
|
||||||
-- allow to open the tree if it was previously closed
|
|
||||||
auto_open = true,
|
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 = {
|
diagnostics = {
|
||||||
enable = false,
|
enable = false,
|
||||||
icons = {
|
icons = {
|
||||||
@@ -70,53 +59,39 @@ require'nvim-tree'.setup {
|
|||||||
error = "",
|
error = "",
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
-- update the focused file on `BufEnter`, un-collapses the folders recursively until it finds the file
|
|
||||||
update_focused_file = {
|
update_focused_file = {
|
||||||
-- enables the feature
|
|
||||||
enable = false,
|
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,
|
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 = {}
|
ignore_list = {}
|
||||||
},
|
},
|
||||||
-- configuration options for the system open command (`s` in the tree by default)
|
|
||||||
system_open = {
|
system_open = {
|
||||||
-- the command to run this, leaving nil should work in most cases
|
|
||||||
cmd = nil,
|
cmd = nil,
|
||||||
-- the command arguments as a list
|
|
||||||
args = {}
|
args = {}
|
||||||
},
|
},
|
||||||
|
filters = {
|
||||||
|
dotfiles = false,
|
||||||
|
custom = {}
|
||||||
|
},
|
||||||
view = {
|
view = {
|
||||||
-- width of the window, can be either a number (columns) or a string in `%`, for left or right side placement
|
|
||||||
width = 30,
|
width = 30,
|
||||||
-- height of the window, can be either a number (columns) or a string in `%`, for top or bottom side placement
|
|
||||||
height = 30,
|
height = 30,
|
||||||
-- Hide the root path of the current folder on top of the tree
|
|
||||||
hide_root_folder = false,
|
hide_root_folder = false,
|
||||||
-- side of the tree, can be one of 'left' | 'right' | 'top' | 'bottom'
|
|
||||||
side = 'left',
|
side = 'left',
|
||||||
-- if true the tree will resize itself after opening a file
|
|
||||||
auto_resize = false,
|
auto_resize = false,
|
||||||
mappings = {
|
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,
|
custom_only = false,
|
||||||
-- list of mappings to set on the tree manually
|
|
||||||
list = {}
|
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
|
```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_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_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_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_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_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
|
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-x>` will open the file in a horizontal split
|
||||||
- `<C-t>` will open the file in a new tab
|
- `<C-t>` will open the file in a new tab
|
||||||
- `<Tab>` will open the file as a preview (keeps the cursor in the tree)
|
- `<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 `.`)
|
- `H` will toggle visibility of dotfiles (files/folders starting with a `.`)
|
||||||
- `R` will refresh the tree
|
- `R` will refresh the tree
|
||||||
- Double left click acts like `<CR>`
|
- Double left click acts like `<CR>`
|
||||||
|
|||||||
@@ -110,6 +110,10 @@ function.
|
|||||||
custom_only = false,
|
custom_only = false,
|
||||||
list = {}
|
list = {}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
filters = {
|
||||||
|
dotfiles = false,
|
||||||
|
custom = {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<
|
<
|
||||||
@@ -261,10 +265,22 @@ Here is a list of the options available in the setup call:
|
|||||||
type: `boolean`
|
type: `boolean`
|
||||||
default: false
|
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 }`
|
type: list of `{ key: table of strings or string, mode: string (vim-mode), cb: callback function as a string }`
|
||||||
default: {}
|
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*
|
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')
|
where the window will open (default to 'left')
|
||||||
- 'left' or 'right'
|
- '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*
|
|g:nvim_tree_gitignore| *g:nvim_tree_gitignore*
|
||||||
|
|
||||||
Determines whether to include in g:nvim_tree_ignore
|
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
|
Can be `0` or `1`. When `1`, will display indent markers when folders are open
|
||||||
Default is 0
|
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*
|
|g:nvim_tree_root_folder_modifier| *g:nvim_tree_root_folder_modifier*
|
||||||
|
|
||||||
In what format to show root folder. See `:help filename-modifiers` for
|
In what format to show root folder. See `:help filename-modifiers` for
|
||||||
|
|||||||
@@ -436,6 +436,10 @@ local DEFAULT_OPTS = {
|
|||||||
error = "",
|
error = "",
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
filters = {
|
||||||
|
dotfiles = false,
|
||||||
|
custom_filter = {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function M.setup(conf)
|
function M.setup(conf)
|
||||||
@@ -464,6 +468,7 @@ function M.setup(conf)
|
|||||||
require'nvim-tree.colors'.setup()
|
require'nvim-tree.colors'.setup()
|
||||||
require'nvim-tree.view'.setup(opts.view or {})
|
require'nvim-tree.view'.setup(opts.view or {})
|
||||||
require'nvim-tree.diagnostics'.setup(opts)
|
require'nvim-tree.diagnostics'.setup(opts)
|
||||||
|
require'nvim-tree.populate'.setup(opts)
|
||||||
|
|
||||||
setup_autocommands(opts)
|
setup_autocommands(opts)
|
||||||
setup_vim_commands()
|
setup_vim_commands()
|
||||||
|
|||||||
@@ -561,12 +561,12 @@ function M.parent_node(node, should_close)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function M.toggle_ignored()
|
function M.toggle_ignored()
|
||||||
pops.show_ignored = not pops.show_ignored
|
pops.config.filter_ignored = not pops.config.filter_ignored
|
||||||
return M.refresh_tree()
|
return M.refresh_tree()
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.toggle_dotfiles()
|
function M.toggle_dotfiles()
|
||||||
pops.show_dotfiles = not pops.show_dotfiles
|
pops.config.filter_dotfiles = not pops.config.filter_dotfiles
|
||||||
return M.refresh_tree()
|
return M.refresh_tree()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
local config = require'nvim-tree.config'
|
local config = require'nvim-tree.config'
|
||||||
local git = require'nvim-tree.git'
|
local git = require'nvim-tree.git'
|
||||||
local icon_config = config.get_icon_state()
|
|
||||||
|
|
||||||
local api = vim.api
|
local api = vim.api
|
||||||
local luv = vim.loop
|
local luv = vim.loop
|
||||||
|
|
||||||
local M = {
|
local M = {
|
||||||
show_ignored = false,
|
ignore_list = {}
|
||||||
show_dotfiles = vim.g.nvim_tree_hide_dotfiles ~= 1,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local utils = require'nvim-tree.utils'
|
local utils = require'nvim-tree.utils'
|
||||||
@@ -116,47 +114,42 @@ local function node_comparator(a, b)
|
|||||||
return a.name:lower() <= b.name:lower()
|
return a.name:lower() <= b.name:lower()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function gen_ignore_check(cwd)
|
|
||||||
if not cwd then cwd = luv.cwd() end
|
|
||||||
local ignore_list = {}
|
|
||||||
|
|
||||||
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
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---Check if the given path should be ignored.
|
---Check if the given path should be ignored.
|
||||||
---@param path string Absolute path
|
---@param path string Absolute path
|
||||||
---@return boolean
|
---@return boolean
|
||||||
return function(path)
|
local function should_ignore(path)
|
||||||
local basename = utils.path_basename(path)
|
local basename = utils.path_basename(path)
|
||||||
|
|
||||||
if not M.show_ignored then
|
if M.config.filter_dotfiles then
|
||||||
if vim.g.nvim_tree_gitignore == 1 then
|
if basename:sub(1, 1) == '.' then
|
||||||
if git.should_gitignore(path) then return true end
|
return true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local relpath = utils.path_relative(path, cwd)
|
if not M.config.filter_ignored then
|
||||||
if ignore_list[relpath] == true or ignore_list[basename] == true then
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
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
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
local idx = path:match(".+()%.[^.]+$")
|
local idx = path:match(".+()%.[^.]+$")
|
||||||
if idx then
|
if idx then
|
||||||
if ignore_list['*'..string.sub(path, idx)] == true then return true end
|
if M.ignore_list['*'..string.sub(path, idx)] == true then
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if not M.show_dotfiles then
|
|
||||||
if basename:sub(1, 1) == '.' then return true end
|
|
||||||
end
|
|
||||||
|
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
local should_ignore = gen_ignore_check()
|
|
||||||
|
|
||||||
function M.refresh_entries(entries, cwd, parent_node)
|
function M.refresh_entries(entries, cwd, parent_node)
|
||||||
local handle = luv.fs_scandir(cwd)
|
local handle = luv.fs_scandir(cwd)
|
||||||
@@ -351,6 +344,7 @@ function M.populate(entries, cwd, parent_node)
|
|||||||
|
|
||||||
utils.merge_sort(entries, node_comparator)
|
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
|
if (not icon_config.show_git_icon) and vim.g.nvim_tree_git_hl ~= 1 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@@ -360,4 +354,18 @@ function M.populate(entries, cwd, parent_node)
|
|||||||
end
|
end
|
||||||
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
|
return M
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ local out_config = {
|
|||||||
"nvim_tree_bindings",
|
"nvim_tree_bindings",
|
||||||
"nvim_tree_disable_keybindings",
|
"nvim_tree_disable_keybindings",
|
||||||
"nvim_tree_disable_default_keybindings",
|
"nvim_tree_disable_default_keybindings",
|
||||||
|
"nvim_tree_hide_dotfiles",
|
||||||
|
"nvim_tree_ignore"
|
||||||
}
|
}
|
||||||
|
|
||||||
local x = vim.tbl_filter(function(v)
|
local x = vim.tbl_filter(function(v)
|
||||||
@@ -30,6 +32,6 @@ local x = vim.tbl_filter(function(v)
|
|||||||
end, out_config)
|
end, out_config)
|
||||||
|
|
||||||
if #x > 0 then
|
if #x > 0 then
|
||||||
local msg = "following options are now set in the setup (:help nvim-tree.setup): "
|
local msg = "Following options were moved to setup (:help nvim-tree.setup): "
|
||||||
require'nvim-tree.utils'.echo_warning(msg..table.concat(x, " | "))
|
require'nvim-tree.utils'.echo_warning(msg..table.concat(x, ", "))
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user