Compare commits
8 Commits
nvim-tree-
...
nvim-tree-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be5b788f2d | ||
|
|
64bb47f868 | ||
|
|
c24c0470d9 | ||
|
|
3a63717d3d | ||
|
|
5bea2b3752 | ||
|
|
c3c1935942 | ||
|
|
44d9b58f11 | ||
|
|
c09ff35de5 |
@@ -7,6 +7,9 @@ end_of_line = lf
|
||||
[nvim-tree-lua.txt]
|
||||
max_line_length = 78
|
||||
|
||||
# keep these in sync with .luarc.json
|
||||
# .editorconfig is used within nvim, overriding .luarc.json
|
||||
# .luarc.json is used by style check
|
||||
[*.lua]
|
||||
indent_style = space
|
||||
max_line_length = 140
|
||||
|
||||
63
.github/workflows/ci.yml
vendored
63
.github/workflows/ci.yml
vendored
@@ -20,45 +20,25 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
lua_version: [ 5.1 ]
|
||||
luacheck_version: [ 1.2.0 ]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- uses: leafo/gh-actions-lua@v10
|
||||
- name: install lua ${{ matrix.lua_version }}
|
||||
uses: leafo/gh-actions-lua@v11
|
||||
with:
|
||||
luaVersion: ${{ matrix.lua_version }}
|
||||
|
||||
- uses: leafo/gh-actions-luarocks@v4
|
||||
- name: install luarocks
|
||||
uses: leafo/gh-actions-luarocks@v5
|
||||
|
||||
- run: luarocks install luacheck 1.1.1
|
||||
- name: install luacheck ${{ matrix.luacheck_version }}
|
||||
run: luarocks install luacheck ${{ matrix.luacheck_version }}
|
||||
|
||||
- run: make lint
|
||||
|
||||
style:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ matrix.emmy_lua_code_style_version }}-${{ github.head_ref || github.ref_name }}
|
||||
cancel-in-progress: true
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
emmy_lua_code_style_version: [ 1.5.6 ]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: install emmy_lua_code_style
|
||||
run: |
|
||||
mkdir -p CodeFormat
|
||||
curl -L "https://github.com/CppCXY/EmmyLuaCodeStyle/releases/download/${{ matrix.emmy_lua_code_style_version }}/linux-x64.tar.gz" | tar zx --directory CodeFormat
|
||||
|
||||
- run: echo "CodeFormat/linux-x64/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- run: make style
|
||||
|
||||
- run: make style-doc
|
||||
|
||||
check:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -69,26 +49,31 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
nvim_version: [ stable, nightly ]
|
||||
luals_version: [ 3.11.0 ]
|
||||
luals_version: [ 3.13.9 ]
|
||||
|
||||
env:
|
||||
VIMRUNTIME: /home/runner/nvim-${{ matrix.nvim_version }}/share/nvim/runtime
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- uses: rhysd/action-setup-vim@v1
|
||||
- name: install nvim ${{ matrix.nvim_version }}
|
||||
uses: rhysd/action-setup-vim@v1
|
||||
with:
|
||||
neovim: true
|
||||
version: ${{ matrix.nvim_version }}
|
||||
|
||||
- name: install luals
|
||||
- name: install lua-language-server ${{ matrix.luals_version }}
|
||||
run: |
|
||||
mkdir -p luals
|
||||
curl -L "https://github.com/LuaLS/lua-language-server/releases/download/${{ matrix.luals_version }}/lua-language-server-${{ matrix.luals_version }}-linux-x64.tar.gz" | tar zx --directory luals
|
||||
echo "luals/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- run: echo "luals/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- name: make check
|
||||
env:
|
||||
VIMRUNTIME: /home/runner/nvim-${{ matrix.nvim_version }}/share/nvim/runtime
|
||||
run: make check
|
||||
- run: make check
|
||||
|
||||
- run: make help-check
|
||||
|
||||
- run: make style
|
||||
|
||||
- run: make style-doc
|
||||
|
||||
4
.github/workflows/luarocks-release.yml
vendored
4
.github/workflows/luarocks-release.yml
vendored
@@ -1,9 +1,11 @@
|
||||
name: Luarocks Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||
- v*
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
luarocks-upload:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
13
.luarc.json
13
.luarc.json
@@ -1,12 +1,23 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json",
|
||||
"runtime.version.luals-check-only": "Lua 5.1",
|
||||
"workspace": {
|
||||
"library": [
|
||||
"$VIMRUNTIME/lua/vim",
|
||||
"${3rd}/luv/library"
|
||||
]
|
||||
},
|
||||
"format": {
|
||||
"defaultConfig": {
|
||||
"indent_style": "space",
|
||||
"max_line_length": "140",
|
||||
"indent_size": "2",
|
||||
"continuation_indent": "2",
|
||||
"quote_style": "double",
|
||||
"call_arg_parentheses": "always",
|
||||
"space_before_closure_open_parenthesis": "false",
|
||||
"align_continuous_similar_call_args": "true"
|
||||
}
|
||||
},
|
||||
"diagnostics": {
|
||||
"libraryFiles": "Disable",
|
||||
"globals": [],
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
".": "1.11.0"
|
||||
".": "1.12.0"
|
||||
}
|
||||
|
||||
14
CHANGELOG.md
14
CHANGELOG.md
@@ -1,5 +1,19 @@
|
||||
# Changelog
|
||||
|
||||
## [1.12.0](https://github.com/nvim-tree/nvim-tree.lua/compare/nvim-tree-v1.11.0...nvim-tree-v1.12.0) (2025-04-20)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add TreePreOpen event ([#3105](https://github.com/nvim-tree/nvim-tree.lua/issues/3105)) ([c24c047](https://github.com/nvim-tree/nvim-tree.lua/commit/c24c0470d9de277fbebecd718f33561ed7c90298))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **#3101:** when renderer.highlight_opened_files = "none" do not reload on BufUnload and BufReadPost ([#3102](https://github.com/nvim-tree/nvim-tree.lua/issues/3102)) ([5bea2b3](https://github.com/nvim-tree/nvim-tree.lua/commit/5bea2b37523a31288e0fcab42f3be5c1bd4516bb))
|
||||
* explicitly set `border` to `"none"` in full name float ([#3094](https://github.com/nvim-tree/nvim-tree.lua/issues/3094)) ([c3c1935](https://github.com/nvim-tree/nvim-tree.lua/commit/c3c193594213c5e2f89ec5d7729cad805f76b256))
|
||||
* reliably dispatch exactly one TreeOpen and TreeClose events ([#3107](https://github.com/nvim-tree/nvim-tree.lua/issues/3107)) ([3a63717](https://github.com/nvim-tree/nvim-tree.lua/commit/3a63717d3d332d8f39aaf65be7a0e4c2265af021))
|
||||
|
||||
## [1.11.0](https://github.com/nvim-tree/nvim-tree.lua/compare/nvim-tree-v1.10.0...nvim-tree-v1.11.0) (2025-02-22)
|
||||
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@ Language server: [luals](https://luals.github.io)
|
||||
|
||||
Lint: [luacheck](https://github.com/lunarmodules/luacheck/)
|
||||
|
||||
Style: [EmmyLuaCodeStyle](https://github.com/CppCXY/EmmyLuaCodeStyle): `CodeCheck`
|
||||
Style Fixing: [EmmyLuaCodeStyle](https://github.com/CppCXY/EmmyLuaCodeStyle): `CodeCheck`
|
||||
|
||||
nvim-tree.lua migrated from stylua to EmmyLuaCodeStyle ~2024/10. `vim.lsp.buf.format()` may be used as it is the default formatter for luals
|
||||
nvim-tree.lua migrated from stylua to EmmyLuaCodeStyle ~2024/10. `vim.lsp.buf.format()` may be used as it is the default formatter for luals, using an embedded [EmmyLuaCodeStyle](https://github.com/CppCXY/EmmyLuaCodeStyle)
|
||||
|
||||
You can install them via you OS package manager e.g. `pacman`, `brew` or other via other package managers such as `cargo` or `luarocks`
|
||||
|
||||
@@ -36,14 +36,14 @@ make lint
|
||||
|
||||
## style
|
||||
|
||||
1. Runs CodeCheck using `.editorconfig` settings
|
||||
1. Runs lua language server `codestyle-check` only, using `.luarc.json` settings
|
||||
1. Runs `scripts/doc-comments.sh` to validate annotated documentation
|
||||
|
||||
```sh
|
||||
make style
|
||||
```
|
||||
|
||||
You can automatically fix `CodeCheck` issues via:
|
||||
You can automatically fix style issues using `CodeCheck`:
|
||||
|
||||
```sh
|
||||
make style-fix
|
||||
|
||||
2
Makefile
2
Makefile
@@ -17,7 +17,7 @@ luacheck:
|
||||
|
||||
# --diagnosis-as-error does not function for workspace, hence we post-process the output
|
||||
style-check:
|
||||
CodeFormat check --config .editorconfig --diagnosis-as-error --workspace lua
|
||||
@scripts/luals-check.sh codestyle-check
|
||||
|
||||
style-doc:
|
||||
scripts/doc-comments.sh
|
||||
|
||||
@@ -2769,13 +2769,21 @@ e.g. handler for node renamed: >lua
|
||||
|nvim_tree_events_kind|
|
||||
|
||||
- Event.Ready
|
||||
When NvimTree has been initialized
|
||||
When NvimTree has been initialized.
|
||||
• Note: Handler takes no parameter.
|
||||
|
||||
- Event.TreePreOpen
|
||||
Invoked before the window and buffer for NvimTree are created
|
||||
or opened. Before |Event.TreeOpen| event.
|
||||
• Note: Handler takes no parameter.
|
||||
|
||||
- Event.TreeOpen
|
||||
Invoked after the NvimTree is opened.
|
||||
• Note: Handler takes no parameter.
|
||||
|
||||
- Event.TreeClose
|
||||
Invoked after the NvimTree is closed, but before the window is
|
||||
closed. Dispatched on |WinClosed| event for NvimTree window.
|
||||
• Note: Handler takes no parameter.
|
||||
|
||||
- Event.Resize - When NvimTree is resized.
|
||||
|
||||
@@ -236,6 +236,17 @@ local function setup_autocommands(opts)
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
-- Handles event dispatch when tree is closed by `:q`
|
||||
create_nvim_tree_autocmd("WinClosed", {
|
||||
pattern = "*",
|
||||
---@param ev vim.api.keyset.create_autocmd.callback_args
|
||||
callback = function(ev)
|
||||
if vim.api.nvim_get_option_value("filetype", { buf = ev.buf }) == "NvimTree" then
|
||||
require("nvim-tree.events")._dispatch_on_tree_close()
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
|
||||
|
||||
@@ -8,6 +8,7 @@ M.Event = {
|
||||
Ready = "Ready",
|
||||
WillRenameNode = "WillRenameNode",
|
||||
NodeRenamed = "NodeRenamed",
|
||||
TreePreOpen = "TreePreOpen",
|
||||
TreeOpen = "TreeOpen",
|
||||
TreeClose = "TreeClose",
|
||||
WillCreateFile = "WillCreateFile",
|
||||
@@ -91,6 +92,11 @@ function M._dispatch_folder_removed(folder_name)
|
||||
dispatch(M.Event.FolderRemoved, { folder_name = folder_name })
|
||||
end
|
||||
|
||||
--@private
|
||||
function M._dispatch_on_tree_pre_open()
|
||||
dispatch(M.Event.TreePreOpen, nil)
|
||||
end
|
||||
|
||||
--@private
|
||||
function M._dispatch_on_tree_open()
|
||||
dispatch(M.Event.TreeOpen, nil)
|
||||
|
||||
@@ -101,10 +101,19 @@ function Explorer:create_autocmds()
|
||||
vim.api.nvim_create_autocmd("BufReadPost", {
|
||||
group = self.augroup_id,
|
||||
callback = function(data)
|
||||
if (self.filters.state.no_buffer or self.opts.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == "" then
|
||||
-- only handle normal files
|
||||
if vim.bo[data.buf].buftype ~= "" then
|
||||
return
|
||||
end
|
||||
|
||||
if self.filters.state.no_buffer then
|
||||
-- full reload is required to update the filter state
|
||||
utils.debounce("Buf:filter_buffer_" .. self.uid_explorer, self.opts.view.debounce_delay, function()
|
||||
self:reload_explorer()
|
||||
end)
|
||||
elseif self.opts.renderer.highlight_opened_files ~= "none" then
|
||||
-- draw to update opened highlight
|
||||
self.renderer:draw()
|
||||
end
|
||||
end,
|
||||
})
|
||||
@@ -113,10 +122,21 @@ function Explorer:create_autocmds()
|
||||
vim.api.nvim_create_autocmd("BufUnload", {
|
||||
group = self.augroup_id,
|
||||
callback = function(data)
|
||||
if (self.filters.state.no_buffer or self.opts.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == "" then
|
||||
-- only handle normal files
|
||||
if vim.bo[data.buf].buftype ~= "" then
|
||||
return
|
||||
end
|
||||
|
||||
if self.filters.state.no_buffer then
|
||||
-- full reload is required to update the filter state
|
||||
utils.debounce("Buf:filter_buffer_" .. self.uid_explorer, self.opts.view.debounce_delay, function()
|
||||
self:reload_explorer()
|
||||
end)
|
||||
elseif self.opts.renderer.highlight_opened_files ~= "none" then
|
||||
-- draw to update opened highlight; must be delayed as the buffer is still loaded during BufUnload
|
||||
vim.schedule(function()
|
||||
self.renderer:draw()
|
||||
end)
|
||||
end
|
||||
end,
|
||||
})
|
||||
@@ -214,8 +234,9 @@ function Explorer:reload(node, project)
|
||||
end
|
||||
|
||||
local abs = utils.path_join({ cwd, name })
|
||||
---@type uv.fs_stat.result|nil
|
||||
local stat = vim.loop.fs_lstat(abs)
|
||||
|
||||
-- path incorrectly specified as an integer
|
||||
local stat = vim.loop.fs_lstat(abs) ---@diagnostic disable-line param-type-mismatch
|
||||
|
||||
local filter_reason = self.filters:should_filter_as_reason(abs, stat, filter_status)
|
||||
if filter_reason == FILTER_REASON.none then
|
||||
@@ -373,8 +394,9 @@ function Explorer:populate_children(handle, cwd, node, project, parent)
|
||||
if Watcher.is_fs_event_capable(abs) then
|
||||
local profile = log.profile_start("populate_children %s", abs)
|
||||
|
||||
---@type uv.fs_stat.result|nil
|
||||
local stat = vim.loop.fs_lstat(abs)
|
||||
-- path incorrectly specified as an integer
|
||||
local stat = vim.loop.fs_lstat(abs) ---@diagnostic disable-line param-type-mismatch
|
||||
|
||||
local filter_reason = parent.filters:should_filter_as_reason(abs, stat, filter_status)
|
||||
if filter_reason == FILTER_REASON.none and not nodes_by_path[abs] then
|
||||
local child = node_factory.create({
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
local view = require("nvim-tree.view")
|
||||
local core = require("nvim-tree.core")
|
||||
local events = require("nvim-tree.events")
|
||||
local notify = require("nvim-tree.notify")
|
||||
|
||||
---@class LibOpenOpts
|
||||
@@ -130,7 +129,6 @@ function M.open(opts)
|
||||
open_view_and_draw()
|
||||
end
|
||||
view.restore_tab_state()
|
||||
events._dispatch_on_tree_open()
|
||||
end
|
||||
|
||||
function M.setup(opts)
|
||||
|
||||
@@ -64,6 +64,7 @@ local function show()
|
||||
height = 1,
|
||||
noautocmd = true,
|
||||
style = "minimal",
|
||||
border = "none"
|
||||
})
|
||||
|
||||
local ns_id = vim.api.nvim_get_namespaces()["NvimTreeHighlights"]
|
||||
|
||||
@@ -254,7 +254,6 @@ local function close(tabpage)
|
||||
return
|
||||
end
|
||||
end
|
||||
events._dispatch_on_tree_close()
|
||||
return
|
||||
end
|
||||
end
|
||||
@@ -289,6 +288,7 @@ function M.open(options)
|
||||
|
||||
local profile = log.profile_start("view open")
|
||||
|
||||
events._dispatch_on_tree_pre_open()
|
||||
create_buffer()
|
||||
open_window()
|
||||
M.resize()
|
||||
@@ -414,6 +414,7 @@ end
|
||||
---@param opts OpenInWinOpts|nil
|
||||
function M.open_in_win(opts)
|
||||
opts = opts or { hijack_current_buf = true, resize = true }
|
||||
events._dispatch_on_tree_pre_open()
|
||||
if opts.winid and vim.api.nvim_win_is_valid(opts.winid) then
|
||||
vim.api.nvim_set_current_win(opts.winid)
|
||||
end
|
||||
@@ -425,6 +426,7 @@ function M.open_in_win(opts)
|
||||
M.reposition_window()
|
||||
M.resize()
|
||||
end
|
||||
events._dispatch_on_tree_open()
|
||||
end
|
||||
|
||||
function M.abandon_current_window()
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
# luals-out/check.json will be produced on any issues, returning 1.
|
||||
# Outputs only check.json to stdout, all other messages to stderr, to allow jq etc.
|
||||
# $VIMRUNTIME specifies neovim runtime path, defaults to "/usr/share/nvim/runtime" if unset.
|
||||
#
|
||||
# Call with codestyle-check param to enable only codestyle-check
|
||||
|
||||
if [ -z "${VIMRUNTIME}" ]; then
|
||||
export VIMRUNTIME="/usr/share/nvim/runtime"
|
||||
@@ -17,11 +19,24 @@ FILE_LUARC="${DIR_OUT}/luarc.json"
|
||||
rm -rf "${DIR_OUT}"
|
||||
mkdir "${DIR_OUT}"
|
||||
|
||||
# Uncomment runtime.version for strict neovim baseline 5.1
|
||||
# It is not set normally, to prevent luals loading 5.1 and 5.x, resulting in both versions being chosen on vim.lsp.buf.definition()
|
||||
cat "${PWD}/.luarc.json" | sed -E 's/.luals-check-only//g' > "${FILE_LUARC}"
|
||||
case "${1}" in
|
||||
"codestyle-check")
|
||||
jq \
|
||||
'.diagnostics.neededFileStatus[] = "None" | .diagnostics.neededFileStatus."codestyle-check" = "Any"' \
|
||||
"${PWD}/.luarc.json" > "${FILE_LUARC}"
|
||||
|
||||
# execute inside lua to prevent luals itself from being checked
|
||||
;;
|
||||
*)
|
||||
# Add runtime.version for strict neovim baseline 5.1
|
||||
# It is not set normally, to prevent luals loading 5.1 and 5.x, resulting in both versions being chosen on vim.lsp.buf.definition
|
||||
jq \
|
||||
'."runtime.version" = "Lua 5.1"' \
|
||||
"${PWD}/.luarc.json" > "${FILE_LUARC}"
|
||||
|
||||
;;
|
||||
esac
|
||||
|
||||
# execute inside lua directory to prevent luals itself from being checked
|
||||
OUT=$(lua-language-server --check="${DIR_SRC}" --configpath="${FILE_LUARC}" --checklevel=Information --logpath="${DIR_OUT}" --loglevel=error)
|
||||
RC=$?
|
||||
|
||||
|
||||
Reference in New Issue
Block a user