Merge remote-tracking branch 'origin/master' into 2826-multi-instance-view-amc
This commit is contained in:
commit
76186fa64b
@ -1,3 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
make
|
make
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
".": "1.12.0"
|
".": "1.13.0"
|
||||||
}
|
}
|
||||||
|
|||||||
23
CHANGELOG.md
23
CHANGELOG.md
@ -1,5 +1,28 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.13.0](https://github.com/nvim-tree/nvim-tree.lua/compare/nvim-tree-v1.12.0...nvim-tree-v1.13.0) (2025-06-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **#3113:** add renderer.icons.folder_arrow_padding ([#3114](https://github.com/nvim-tree/nvim-tree.lua/issues/3114)) ([ea5097a](https://github.com/nvim-tree/nvim-tree.lua/commit/ea5097a1e2702b4827cb7380e7fa0bd6da87699c))
|
||||||
|
* **#3132:** add api.node.expand and api.node.collapse ([#3133](https://github.com/nvim-tree/nvim-tree.lua/issues/3133)) ([ae59561](https://github.com/nvim-tree/nvim-tree.lua/commit/ae595611fb2225f2041996c042aa4e4b8663b41e))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* "Invalid buffer id" on closing nvim-tree window ([#3129](https://github.com/nvim-tree/nvim-tree.lua/issues/3129)) ([25d16aa](https://github.com/nvim-tree/nvim-tree.lua/commit/25d16aab7d29ca940a9feb92e6bb734697417009))
|
||||||
|
* **#2746:** background and right aligned icons in floating windows ([#3128](https://github.com/nvim-tree/nvim-tree.lua/issues/3128)) ([cbc3165](https://github.com/nvim-tree/nvim-tree.lua/commit/cbc3165e08893bb499da035c6f6f9d1512b57664))
|
||||||
|
* **#3117:** allow changing filename's casing ([bd54d1d](https://github.com/nvim-tree/nvim-tree.lua/commit/bd54d1d33c20d8630703b9842480291588dbad07))
|
||||||
|
* **#3117:** windows: change file/dir case ([#3135](https://github.com/nvim-tree/nvim-tree.lua/issues/3135)) ([bd54d1d](https://github.com/nvim-tree/nvim-tree.lua/commit/bd54d1d33c20d8630703b9842480291588dbad07))
|
||||||
|
* **#3122:** remove redundant vim.validate ([#3123](https://github.com/nvim-tree/nvim-tree.lua/issues/3123)) ([e7d1b7d](https://github.com/nvim-tree/nvim-tree.lua/commit/e7d1b7dadc62fe2eccc17d814354b0a5688621ce))
|
||||||
|
* **#3124:** fix icon padding for "right_align" placements, notably for dotfiles ([#3125](https://github.com/nvim-tree/nvim-tree.lua/issues/3125)) ([e4cd856](https://github.com/nvim-tree/nvim-tree.lua/commit/e4cd856ebf4fec51db10c69d63e43224b701cbce))
|
||||||
|
* **#3124:** prevent empty icons_right_align response from breaking padding ([e4cd856](https://github.com/nvim-tree/nvim-tree.lua/commit/e4cd856ebf4fec51db10c69d63e43224b701cbce))
|
||||||
|
* **#3134:** setting one glyph to "" no longer disables others ([#3136](https://github.com/nvim-tree/nvim-tree.lua/issues/3136)) ([ebcaccd](https://github.com/nvim-tree/nvim-tree.lua/commit/ebcaccda1c575fa19a8087445276e6671e2b9b37))
|
||||||
|
* **#3143:** actions.open_file.window_picker.exclude applies when not using window picker ([#3144](https://github.com/nvim-tree/nvim-tree.lua/issues/3144)) ([05d8172](https://github.com/nvim-tree/nvim-tree.lua/commit/05d8172ebf9cdb2d140cf25b75625374fbc3df7f))
|
||||||
|
* fixes [#3134](https://github.com/nvim-tree/nvim-tree.lua/issues/3134) ([ebcaccd](https://github.com/nvim-tree/nvim-tree.lua/commit/ebcaccda1c575fa19a8087445276e6671e2b9b37))
|
||||||
|
* invalid buffer issue ([25d16aa](https://github.com/nvim-tree/nvim-tree.lua/commit/25d16aab7d29ca940a9feb92e6bb734697417009))
|
||||||
|
|
||||||
## [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)
|
## [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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -206,7 +206,7 @@ Show the mappings: `g?`
|
|||||||
`S` Search |nvim-tree-api.tree.search_node()|
|
`S` Search |nvim-tree-api.tree.search_node()|
|
||||||
`u` Rename: Full Path |nvim-tree-api.fs.rename_full()|
|
`u` Rename: Full Path |nvim-tree-api.fs.rename_full()|
|
||||||
`U` Toggle Filter: Hidden |nvim-tree-api.tree.toggle_custom_filter()|
|
`U` Toggle Filter: Hidden |nvim-tree-api.tree.toggle_custom_filter()|
|
||||||
`W` Collapse |nvim-tree-api.tree.collapse_all()|
|
`W` Collapse All |nvim-tree-api.tree.collapse_all()|
|
||||||
`x` Cut |nvim-tree-api.fs.cut()|
|
`x` Cut |nvim-tree-api.fs.cut()|
|
||||||
`y` Copy Name |nvim-tree-api.fs.copy.filename()|
|
`y` Copy Name |nvim-tree-api.fs.copy.filename()|
|
||||||
`Y` Copy Relative Path |nvim-tree-api.fs.copy.relative_path()|
|
`Y` Copy Relative Path |nvim-tree-api.fs.copy.relative_path()|
|
||||||
@ -341,7 +341,7 @@ See |nvim-tree-highlight| for details.
|
|||||||
|
|
||||||
See |nvim-tree-api.tree.collapse_all()|
|
See |nvim-tree-api.tree.collapse_all()|
|
||||||
|
|
||||||
Calls: `api.tree.collapse_all(false)`
|
Calls: `api.tree.collapse_all({ keep_buffers = false })`
|
||||||
|
|
||||||
*:NvimTreeCollapseKeepBuffers*
|
*:NvimTreeCollapseKeepBuffers*
|
||||||
|
|
||||||
@ -350,7 +350,7 @@ See |nvim-tree-highlight| for details.
|
|||||||
|
|
||||||
See |nvim-tree-api.tree.collapse_all()|
|
See |nvim-tree-api.tree.collapse_all()|
|
||||||
|
|
||||||
Calls: `api.tree.collapse_all(true)`
|
Calls: `api.tree.collapse_all({ keep_buffers = true })`
|
||||||
|
|
||||||
*:NvimTreeHiTest*
|
*:NvimTreeHiTest*
|
||||||
|
|
||||||
@ -462,7 +462,10 @@ Following is the default configuration. See |nvim-tree-opts| for details. >lua
|
|||||||
hidden_placement = "after",
|
hidden_placement = "after",
|
||||||
diagnostics_placement = "signcolumn",
|
diagnostics_placement = "signcolumn",
|
||||||
bookmarks_placement = "signcolumn",
|
bookmarks_placement = "signcolumn",
|
||||||
padding = " ",
|
padding = {
|
||||||
|
icon = " ",
|
||||||
|
folder_arrow = " ",
|
||||||
|
},
|
||||||
symlink_arrow = " ➛ ",
|
symlink_arrow = " ➛ ",
|
||||||
show = {
|
show = {
|
||||||
file = true,
|
file = true,
|
||||||
@ -1065,10 +1068,14 @@ Configuration options for icons.
|
|||||||
Bookmark icon placement.
|
Bookmark icon placement.
|
||||||
Type: `string`, Default: `signcolumn`
|
Type: `string`, Default: `signcolumn`
|
||||||
|
|
||||||
*nvim-tree.renderer.icons.padding*
|
*nvim-tree.renderer.icons.padding.icon*
|
||||||
Inserted between icon and filename.
|
Inserted between icon and filename.
|
||||||
Type: `string`, Default: `" "`
|
Type: `string`, Default: `" "`
|
||||||
|
|
||||||
|
*nvim-tree.renderer.icons.padding.folder_arrow*
|
||||||
|
Inserted between folder arrow icon and file/folder icon.
|
||||||
|
Type: `string`, Default: `" "`
|
||||||
|
|
||||||
*nvim-tree.renderer.icons.symlink_arrow*
|
*nvim-tree.renderer.icons.symlink_arrow*
|
||||||
Used as a separator between symlinks' source and target.
|
Used as a separator between symlinks' source and target.
|
||||||
Type: `string`, Default: `" ➛ "`
|
Type: `string`, Default: `" ➛ "`
|
||||||
@ -1463,7 +1470,8 @@ vim |current-directory| behaviour.
|
|||||||
Type: `boolean`, Default: `false`
|
Type: `boolean`, Default: `false`
|
||||||
|
|
||||||
*nvim-tree.actions.expand_all*
|
*nvim-tree.actions.expand_all*
|
||||||
Configuration for expand_all behaviour.
|
Configuration for |nvim-tree-api.tree.expand_all()| and
|
||||||
|
|nvim-tree-api.node.expand()|
|
||||||
|
|
||||||
*nvim-tree.actions.expand_all.max_folder_discovery*
|
*nvim-tree.actions.expand_all.max_folder_discovery*
|
||||||
Limit the number of folders being explored when expanding every folders.
|
Limit the number of folders being explored when expanding every folders.
|
||||||
@ -1516,7 +1524,8 @@ Configuration options for opening a file from nvim-tree.
|
|||||||
|
|
||||||
*nvim-tree.actions.open_file.window_picker.enable*
|
*nvim-tree.actions.open_file.window_picker.enable*
|
||||||
Enable the feature. If the feature is not enabled, files will open in
|
Enable the feature. If the feature is not enabled, files will open in
|
||||||
window from which you last opened the tree.
|
window from which you last opened the tree, obeying
|
||||||
|
|nvim-tree.actions.open_file.window_picker.exclude|
|
||||||
Type: `boolean`, Default: `true`
|
Type: `boolean`, Default: `true`
|
||||||
|
|
||||||
*nvim-tree.actions.open_file.window_picker.picker*
|
*nvim-tree.actions.open_file.window_picker.picker*
|
||||||
@ -1535,9 +1544,10 @@ Configuration options for opening a file from nvim-tree.
|
|||||||
Type: `string`, Default: `"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"`
|
Type: `string`, Default: `"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"`
|
||||||
|
|
||||||
*nvim-tree.actions.open_file.window_picker.exclude*
|
*nvim-tree.actions.open_file.window_picker.exclude*
|
||||||
Table of buffer option names mapped to a list of option values that
|
Table of buffer option names mapped to a list of option values.
|
||||||
indicates to the picker that the buffer's window should not be
|
Windows containing matching buffers will not be:
|
||||||
selectable.
|
- available when using a window picker
|
||||||
|
- selected when not using a window picker
|
||||||
Type: `table`, Default: >lua
|
Type: `table`, Default: >lua
|
||||||
{
|
{
|
||||||
filetype = {
|
filetype = {
|
||||||
@ -1822,10 +1832,13 @@ tree.find_file({opts}) *nvim-tree-api.tree.find_file()*
|
|||||||
tree.search_node() *nvim-tree-api.tree.search_node()*
|
tree.search_node() *nvim-tree-api.tree.search_node()*
|
||||||
Open the search dialogue as per the search_node action.
|
Open the search dialogue as per the search_node action.
|
||||||
|
|
||||||
tree.collapse_all({keep_buffers}) *nvim-tree-api.tree.collapse_all()*
|
tree.collapse_all({opts}) *nvim-tree-api.tree.collapse_all()*
|
||||||
Collapse the tree.
|
Collapse the tree.
|
||||||
|
|
||||||
Parameters: ~
|
Parameters: ~
|
||||||
|
• {opts} (table) optional parameters
|
||||||
|
|
||||||
|
Options: ~
|
||||||
• {keep_buffers} (boolean) do not collapse nodes with open buffers.
|
• {keep_buffers} (boolean) do not collapse nodes with open buffers.
|
||||||
|
|
||||||
tree.expand_all({node}) *nvim-tree-api.tree.expand_all()*
|
tree.expand_all({node}) *nvim-tree-api.tree.expand_all()*
|
||||||
@ -2266,6 +2279,23 @@ node.buffer.wipe({node}, {opts}) *nvim-tree-api.node.buffer.wipe()*
|
|||||||
Options: ~
|
Options: ~
|
||||||
• {force} (boolean) wipe even if buffer is modified, default false
|
• {force} (boolean) wipe even if buffer is modified, default false
|
||||||
|
|
||||||
|
node.expand({node}) *nvim-tree-api.node.expand()*
|
||||||
|
Recursively expand all nodes under a directory or a file's parent
|
||||||
|
directory.
|
||||||
|
|
||||||
|
Parameters: ~
|
||||||
|
• {node} (Node|nil) file or folder
|
||||||
|
|
||||||
|
node.collapse({node}, {opts}) *nvim-tree-api.node.collapse()*
|
||||||
|
Collapse the tree under a directory or a file's parent directory.
|
||||||
|
|
||||||
|
Parameters: ~
|
||||||
|
• {node} (Node|nil) file or folder
|
||||||
|
• {opts} (table) optional parameters
|
||||||
|
|
||||||
|
Options: ~
|
||||||
|
• {keep_buffers} (boolean) do not collapse nodes with open buffers.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
6.4 API GIT *nvim-tree-api.git*
|
6.4 API GIT *nvim-tree-api.git*
|
||||||
|
|
||||||
@ -2520,7 +2550,7 @@ You are encouraged to copy these to your own |nvim-tree.on_attach| function. >lu
|
|||||||
vim.keymap.set("n", "S", api.tree.search_node, opts("Search"))
|
vim.keymap.set("n", "S", api.tree.search_node, opts("Search"))
|
||||||
vim.keymap.set("n", "u", api.fs.rename_full, opts("Rename: Full Path"))
|
vim.keymap.set("n", "u", api.fs.rename_full, opts("Rename: Full Path"))
|
||||||
vim.keymap.set("n", "U", api.tree.toggle_custom_filter, opts("Toggle Filter: Hidden"))
|
vim.keymap.set("n", "U", api.tree.toggle_custom_filter, opts("Toggle Filter: Hidden"))
|
||||||
vim.keymap.set("n", "W", api.tree.collapse_all, opts("Collapse"))
|
vim.keymap.set("n", "W", api.tree.collapse_all, opts("Collapse All"))
|
||||||
vim.keymap.set("n", "x", api.fs.cut, opts("Cut"))
|
vim.keymap.set("n", "x", api.fs.cut, opts("Cut"))
|
||||||
vim.keymap.set("n", "y", api.fs.copy.filename, opts("Copy Name"))
|
vim.keymap.set("n", "y", api.fs.copy.filename, opts("Copy Name"))
|
||||||
vim.keymap.set("n", "Y", api.fs.copy.relative_path, opts("Copy Relative Path"))
|
vim.keymap.set("n", "Y", api.fs.copy.relative_path, opts("Copy Relative Path"))
|
||||||
@ -3027,6 +3057,7 @@ needed.
|
|||||||
`sort_by` |nvim-tree.sort.sorter|
|
`sort_by` |nvim-tree.sort.sorter|
|
||||||
`git.ignore` |nvim-tree.filters.git_ignored|
|
`git.ignore` |nvim-tree.filters.git_ignored|
|
||||||
`renderer.icons.webdev_colors` |nvim-tree.renderer.icons.web_devicons.file.color|
|
`renderer.icons.webdev_colors` |nvim-tree.renderer.icons.web_devicons.file.color|
|
||||||
|
`renderer.icons.padding` |nvim-tree.renderer.icons.padding.icon|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
14.2 LEGACY: HIGHLIGHT *nvim-tree-legacy-highlight*
|
14.2 LEGACY: HIGHLIGHT *nvim-tree-legacy-highlight*
|
||||||
@ -3183,7 +3214,8 @@ highlight group is not, hard linking as follows: >
|
|||||||
|nvim-tree.renderer.icons.glyphs.symlink|
|
|nvim-tree.renderer.icons.glyphs.symlink|
|
||||||
|nvim-tree.renderer.icons.hidden_placement|
|
|nvim-tree.renderer.icons.hidden_placement|
|
||||||
|nvim-tree.renderer.icons.modified_placement|
|
|nvim-tree.renderer.icons.modified_placement|
|
||||||
|nvim-tree.renderer.icons.padding|
|
|nvim-tree.renderer.icons.padding.folder_arrow|
|
||||||
|
|nvim-tree.renderer.icons.padding.icon|
|
||||||
|nvim-tree.renderer.icons.show|
|
|nvim-tree.renderer.icons.show|
|
||||||
|nvim-tree.renderer.icons.show.bookmarks|
|
|nvim-tree.renderer.icons.show.bookmarks|
|
||||||
|nvim-tree.renderer.icons.show.diagnostics|
|
|nvim-tree.renderer.icons.show.diagnostics|
|
||||||
@ -3290,6 +3322,8 @@ highlight group is not, hard linking as follows: >
|
|||||||
|nvim-tree-api.marks.toggle()|
|
|nvim-tree-api.marks.toggle()|
|
||||||
|nvim-tree-api.node.buffer.delete()|
|
|nvim-tree-api.node.buffer.delete()|
|
||||||
|nvim-tree-api.node.buffer.wipe()|
|
|nvim-tree-api.node.buffer.wipe()|
|
||||||
|
|nvim-tree-api.node.collapse()|
|
||||||
|
|nvim-tree-api.node.expand()|
|
||||||
|nvim-tree-api.node.navigate.diagnostics.next()|
|
|nvim-tree-api.node.navigate.diagnostics.next()|
|
||||||
|nvim-tree-api.node.navigate.diagnostics.next_recursive()|
|
|nvim-tree-api.node.navigate.diagnostics.next_recursive()|
|
||||||
|nvim-tree-api.node.navigate.diagnostics.prev()|
|
|nvim-tree-api.node.navigate.diagnostics.prev()|
|
||||||
|
|||||||
@ -214,6 +214,9 @@ local function setup_autocommands(opts)
|
|||||||
pattern = "*",
|
pattern = "*",
|
||||||
---@param ev vim.api.keyset.create_autocmd.callback_args
|
---@param ev vim.api.keyset.create_autocmd.callback_args
|
||||||
callback = function(ev)
|
callback = function(ev)
|
||||||
|
if not vim.api.nvim_buf_is_valid(ev.buf) then
|
||||||
|
return
|
||||||
|
end
|
||||||
if vim.api.nvim_get_option_value("filetype", { buf = ev.buf }) == "NvimTree" then
|
if vim.api.nvim_get_option_value("filetype", { buf = ev.buf }) == "NvimTree" then
|
||||||
require("nvim-tree.events")._dispatch_on_tree_close()
|
require("nvim-tree.events")._dispatch_on_tree_close()
|
||||||
end
|
end
|
||||||
@ -306,7 +309,10 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
|
|||||||
hidden_placement = "after",
|
hidden_placement = "after",
|
||||||
diagnostics_placement = "signcolumn",
|
diagnostics_placement = "signcolumn",
|
||||||
bookmarks_placement = "signcolumn",
|
bookmarks_placement = "signcolumn",
|
||||||
padding = " ",
|
padding = {
|
||||||
|
icon = " ",
|
||||||
|
folder_arrow = " ",
|
||||||
|
},
|
||||||
symlink_arrow = " ➛ ",
|
symlink_arrow = " ➛ ",
|
||||||
show = {
|
show = {
|
||||||
file = true,
|
file = true,
|
||||||
|
|||||||
@ -40,21 +40,10 @@ local function usable_win_ids()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local win_config = vim.api.nvim_win_get_config(id)
|
local win_config = vim.api.nvim_win_get_config(id)
|
||||||
return id ~= tree_winid and win_config.focusable and not win_config.external or false
|
return id ~= tree_winid and win_config.focusable and not win_config.hide and not win_config.external or false
|
||||||
end, win_ids)
|
end, win_ids)
|
||||||
end
|
end
|
||||||
|
|
||||||
---Find the first window in the tab that is not NvimTree.
|
|
||||||
---@return integer -1 if none available
|
|
||||||
local function first_win_id()
|
|
||||||
local selectable = usable_win_ids()
|
|
||||||
if #selectable > 0 then
|
|
||||||
return selectable[1]
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---Get user to pick a window in the tab that is not NvimTree.
|
---Get user to pick a window in the tab that is not NvimTree.
|
||||||
---@return integer|nil -- If a valid window was picked, return its id. If an
|
---@return integer|nil -- If a valid window was picked, return its id. If an
|
||||||
--- invalid window was picked / user canceled, return nil. If there are
|
--- invalid window was picked / user canceled, return nil. If there are
|
||||||
@ -259,9 +248,14 @@ local function get_target_winid(mode)
|
|||||||
local target_winid
|
local target_winid
|
||||||
if not M.window_picker.enable or string.find(mode, "no_picker") then
|
if not M.window_picker.enable or string.find(mode, "no_picker") then
|
||||||
target_winid = lib.target_winid
|
target_winid = lib.target_winid
|
||||||
-- first available window
|
local usable_wins = usable_win_ids()
|
||||||
if not vim.tbl_contains(vim.api.nvim_tabpage_list_wins(0), target_winid) then
|
-- first available usable window
|
||||||
target_winid = first_win_id()
|
if not vim.tbl_contains(usable_wins, target_winid) then
|
||||||
|
if #usable_wins > 0 then
|
||||||
|
target_winid = usable_wins[1]
|
||||||
|
else
|
||||||
|
target_winid = -1
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- pick a window
|
-- pick a window
|
||||||
|
|||||||
@ -2,6 +2,7 @@ local utils = require("nvim-tree.utils")
|
|||||||
local core = require("nvim-tree.core")
|
local core = require("nvim-tree.core")
|
||||||
local Iterator = require("nvim-tree.iterators.node-iterator")
|
local Iterator = require("nvim-tree.iterators.node-iterator")
|
||||||
|
|
||||||
|
local FileNode = require("nvim-tree.node.file")
|
||||||
local DirectoryNode = require("nvim-tree.node.directory")
|
local DirectoryNode = require("nvim-tree.node.directory")
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
@ -23,26 +24,30 @@ local function buf_match()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param keep_buffers boolean
|
---Collapse a node, root if nil
|
||||||
function M.fn(keep_buffers)
|
---@param node Node?
|
||||||
|
---@param opts ApiCollapseOpts
|
||||||
|
local function collapse(node, opts)
|
||||||
local explorer = core.get_explorer()
|
local explorer = core.get_explorer()
|
||||||
if not explorer then
|
if not explorer then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local node = explorer:get_node_at_cursor()
|
node = node or explorer
|
||||||
if not node then
|
|
||||||
|
local node_at_cursor = explorer:get_node_at_cursor()
|
||||||
|
if not node_at_cursor then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local matches = buf_match()
|
local matches = buf_match()
|
||||||
|
|
||||||
Iterator.builder(explorer.nodes)
|
Iterator.builder({ node:is(FileNode) and node.parent or node:as(DirectoryNode) })
|
||||||
:hidden()
|
:hidden()
|
||||||
:applier(function(n)
|
:applier(function(n)
|
||||||
local dir = n:as(DirectoryNode)
|
local dir = n:as(DirectoryNode)
|
||||||
if dir then
|
if dir then
|
||||||
dir.open = keep_buffers and matches(dir.absolute_path)
|
dir.open = opts.keep_buffers == true and matches(dir.absolute_path)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
:recursor(function(n)
|
:recursor(function(n)
|
||||||
@ -51,7 +56,26 @@ function M.fn(keep_buffers)
|
|||||||
:iterate()
|
:iterate()
|
||||||
|
|
||||||
explorer.renderer:draw()
|
explorer.renderer:draw()
|
||||||
utils.focus_node_or_parent(node)
|
utils.focus_node_or_parent(node_at_cursor)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---@param opts ApiCollapseOpts|boolean|nil legacy -> opts.keep_buffers
|
||||||
|
function M.all(opts)
|
||||||
|
-- legacy arguments
|
||||||
|
if type(opts) == "boolean" then
|
||||||
|
opts = {
|
||||||
|
keep_buffers = opts,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
collapse(nil, opts or {})
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param node Node
|
||||||
|
---@param opts ApiCollapseOpts?
|
||||||
|
function M.node(node, opts)
|
||||||
|
collapse(node, opts or {})
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
@ -2,6 +2,7 @@ local core = require("nvim-tree.core")
|
|||||||
local Iterator = require("nvim-tree.iterators.node-iterator")
|
local Iterator = require("nvim-tree.iterators.node-iterator")
|
||||||
local notify = require("nvim-tree.notify")
|
local notify = require("nvim-tree.notify")
|
||||||
|
|
||||||
|
local FileNode = require("nvim-tree.node.file")
|
||||||
local DirectoryNode = require("nvim-tree.node.directory")
|
local DirectoryNode = require("nvim-tree.node.directory")
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
@ -70,23 +71,38 @@ local function gen_iterator()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---Expand the directory node or the root
|
---@param node Node?
|
||||||
---@param node Node
|
local function expand_node(node)
|
||||||
function M.fn(node)
|
if not node then
|
||||||
local explorer = core.get_explorer()
|
|
||||||
local parent = node:as(DirectoryNode) or explorer
|
|
||||||
if not parent then
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if gen_iterator()(parent) then
|
if gen_iterator()(node) then
|
||||||
notify.warn("expansion iteration was halted after " .. M.MAX_FOLDER_DISCOVERY .. " discovered folders")
|
notify.warn("expansion iteration was halted after " .. M.MAX_FOLDER_DISCOVERY .. " discovered folders")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local explorer = core.get_explorer()
|
||||||
if explorer then
|
if explorer then
|
||||||
explorer.renderer:draw()
|
explorer.renderer:draw()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---Expand the directory node or the root
|
||||||
|
---@param node Node
|
||||||
|
function M.all(node)
|
||||||
|
expand_node(node and node:as(DirectoryNode) or core.get_explorer())
|
||||||
|
end
|
||||||
|
|
||||||
|
---Expand the directory node or parent node
|
||||||
|
---@param node Node
|
||||||
|
function M.node(node)
|
||||||
|
if not node then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
expand_node(node:is(FileNode) and node.parent or node:as(DirectoryNode))
|
||||||
|
end
|
||||||
|
|
||||||
function M.setup(opts)
|
function M.setup(opts)
|
||||||
M.MAX_FOLDER_DISCOVERY = opts.actions.expand_all.max_folder_discovery
|
M.MAX_FOLDER_DISCOVERY = opts.actions.expand_all.max_folder_discovery
|
||||||
M.EXCLUDE = to_lookup_table(opts.actions.expand_all.exclude)
|
M.EXCLUDE = to_lookup_table(opts.actions.expand_all.exclude)
|
||||||
@ -1,10 +1,10 @@
|
|||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
M.collapse_all = require("nvim-tree.actions.tree.modifiers.collapse-all")
|
M.collapse = require("nvim-tree.actions.tree.modifiers.collapse")
|
||||||
M.expand_all = require("nvim-tree.actions.tree.modifiers.expand-all")
|
M.expand = require("nvim-tree.actions.tree.modifiers.expand")
|
||||||
|
|
||||||
function M.setup(opts)
|
function M.setup(opts)
|
||||||
M.expand_all.setup(opts)
|
M.expand.setup(opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|||||||
@ -181,8 +181,12 @@ Api.tree.get_nodes = wrap_explorer("get_nodes")
|
|||||||
|
|
||||||
Api.tree.find_file = wrap(actions.tree.find_file.fn)
|
Api.tree.find_file = wrap(actions.tree.find_file.fn)
|
||||||
Api.tree.search_node = wrap(actions.finders.search_node.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)
|
---@class ApiCollapseOpts
|
||||||
|
---@field keep_buffers boolean|nil default false
|
||||||
|
|
||||||
|
Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse.all)
|
||||||
|
Api.tree.expand_all = wrap_node(actions.tree.modifiers.expand.all)
|
||||||
Api.tree.toggle_enable_filters = wrap_explorer_member("filters", "toggle")
|
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_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_git_clean_filter = wrap_explorer_member_args("filters", "toggle", "git_clean")
|
||||||
@ -317,6 +321,9 @@ Api.node.navigate.diagnostics.prev_recursive = wrap_node(actions.moves.item.fn({
|
|||||||
Api.node.navigate.opened.next = wrap_node(actions.moves.item.fn({ where = "next", what = "opened" }))
|
Api.node.navigate.opened.next = wrap_node(actions.moves.item.fn({ where = "next", what = "opened" }))
|
||||||
Api.node.navigate.opened.prev = wrap_node(actions.moves.item.fn({ where = "prev", what = "opened" }))
|
Api.node.navigate.opened.prev = wrap_node(actions.moves.item.fn({ where = "prev", what = "opened" }))
|
||||||
|
|
||||||
|
Api.node.expand = wrap_node(actions.tree.modifiers.expand.node)
|
||||||
|
Api.node.collapse = wrap_node(actions.tree.modifiers.collapse.node)
|
||||||
|
|
||||||
---@class ApiNodeDeleteWipeBufferOpts
|
---@class ApiNodeDeleteWipeBufferOpts
|
||||||
---@field force boolean|nil default false
|
---@field force boolean|nil default false
|
||||||
|
|
||||||
|
|||||||
@ -384,14 +384,7 @@ function View:grow()
|
|||||||
local count = vim.fn.strchars(l)
|
local count = vim.fn.strchars(l)
|
||||||
-- also add space for right-aligned icons
|
-- also add space for right-aligned icons
|
||||||
local extmarks = vim.api.nvim_buf_get_extmarks(self:get_bufnr(), ns_id, { line_nr, 0 }, { line_nr, -1 }, { details = true })
|
local extmarks = vim.api.nvim_buf_get_extmarks(self:get_bufnr(), ns_id, { line_nr, 0 }, { line_nr, -1 }, { details = true })
|
||||||
for _, extmark in ipairs(extmarks) do
|
count = count + utils.extmarks_length(extmarks)
|
||||||
local virt_texts = extmark[4].virt_text
|
|
||||||
if virt_texts then
|
|
||||||
for _, virt_text in ipairs(virt_texts) do
|
|
||||||
count = count + vim.fn.strchars(virt_text[1])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if resizing_width < count then
|
if resizing_width < count then
|
||||||
resizing_width = count
|
resizing_width = count
|
||||||
end
|
end
|
||||||
|
|||||||
@ -96,7 +96,7 @@ function M.default_on_attach(bufnr)
|
|||||||
vim.keymap.set("n", "S", api.tree.search_node, opts("Search"))
|
vim.keymap.set("n", "S", api.tree.search_node, opts("Search"))
|
||||||
vim.keymap.set("n", "u", api.fs.rename_full, opts("Rename: Full Path"))
|
vim.keymap.set("n", "u", api.fs.rename_full, opts("Rename: Full Path"))
|
||||||
vim.keymap.set("n", "U", api.tree.toggle_custom_filter, opts("Toggle Filter: Hidden"))
|
vim.keymap.set("n", "U", api.tree.toggle_custom_filter, opts("Toggle Filter: Hidden"))
|
||||||
vim.keymap.set("n", "W", api.tree.collapse_all, opts("Collapse"))
|
vim.keymap.set("n", "W", api.tree.collapse_all, opts("Collapse All"))
|
||||||
vim.keymap.set("n", "x", api.fs.cut, opts("Cut"))
|
vim.keymap.set("n", "x", api.fs.cut, opts("Cut"))
|
||||||
vim.keymap.set("n", "y", api.fs.copy.filename, opts("Copy Name"))
|
vim.keymap.set("n", "y", api.fs.copy.filename, opts("Copy Name"))
|
||||||
vim.keymap.set("n", "Y", api.fs.copy.relative_path, opts("Copy Relative Path"))
|
vim.keymap.set("n", "Y", api.fs.copy.relative_path, opts("Copy Relative Path"))
|
||||||
|
|||||||
@ -60,6 +60,13 @@ local function refactored(opts)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
utils.move_missing_val(opts, "update_focused_file", "ignore_list", opts, "update_focused_file.update_root", "ignore_list", true)
|
utils.move_missing_val(opts, "update_focused_file", "ignore_list", opts, "update_focused_file.update_root", "ignore_list", true)
|
||||||
|
|
||||||
|
-- 2025/04/30
|
||||||
|
if opts.renderer and opts.renderer.icons and type(opts.renderer.icons.padding) == "string" then
|
||||||
|
local icons_padding = opts.renderer.icons.padding
|
||||||
|
opts.renderer.icons.padding = {}
|
||||||
|
opts.renderer.icons.padding.icon = icons_padding
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function deprecated(opts)
|
local function deprecated(opts)
|
||||||
|
|||||||
@ -134,12 +134,12 @@ end
|
|||||||
function Builder:format_line(indent_markers, arrows, icon, name, node)
|
function Builder:format_line(indent_markers, arrows, icon, name, node)
|
||||||
local added_len = 0
|
local added_len = 0
|
||||||
local function add_to_end(t1, t2)
|
local function add_to_end(t1, t2)
|
||||||
if not t2 then
|
if not t2 or vim.tbl_isempty(t2) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
for _, v in ipairs(t2) do
|
for _, v in ipairs(t2) do
|
||||||
if added_len > 0 then
|
if added_len > 0 then
|
||||||
table.insert(t1, { str = self.explorer.opts.renderer.icons.padding })
|
table.insert(t1, { str = self.explorer.opts.renderer.icons.padding.icon })
|
||||||
end
|
end
|
||||||
table.insert(t1, v)
|
table.insert(t1, v)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
local utils = require("nvim-tree.utils")
|
local utils = require("nvim-tree.utils")
|
||||||
|
local view = require("nvim-tree.view")
|
||||||
|
|
||||||
local function hide(win)
|
local function hide(win)
|
||||||
if win then
|
if win then
|
||||||
@ -32,7 +33,7 @@ local function effective_win_width()
|
|||||||
return win_width - win_info[1].textoff
|
return win_width - win_info[1].textoff
|
||||||
end
|
end
|
||||||
|
|
||||||
local function show()
|
local function show(opts)
|
||||||
local line_nr = vim.api.nvim_win_get_cursor(0)[1]
|
local line_nr = vim.api.nvim_win_get_cursor(0)[1]
|
||||||
if vim.wo.wrap then
|
if vim.wo.wrap then
|
||||||
return
|
return
|
||||||
@ -52,6 +53,11 @@ local function show()
|
|||||||
local text_width = vim.fn.strdisplaywidth(vim.fn.substitute(line, "[^[:print:]]*$", "", "g"))
|
local text_width = vim.fn.strdisplaywidth(vim.fn.substitute(line, "[^[:print:]]*$", "", "g"))
|
||||||
local win_width = effective_win_width()
|
local win_width = effective_win_width()
|
||||||
|
|
||||||
|
-- windows width reduced by right aligned icons
|
||||||
|
local icon_ns_id = vim.api.nvim_get_namespaces()["NvimTreeExtmarks"]
|
||||||
|
local icon_extmarks = vim.api.nvim_buf_get_extmarks(0, icon_ns_id, { line_nr - 1, 0 }, { line_nr - 1, -1 }, { details = true })
|
||||||
|
win_width = win_width - utils.extmarks_length(icon_extmarks)
|
||||||
|
|
||||||
if text_width < win_width then
|
if text_width < win_width then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -66,6 +72,7 @@ local function show()
|
|||||||
style = "minimal",
|
style = "minimal",
|
||||||
border = "none"
|
border = "none"
|
||||||
})
|
})
|
||||||
|
vim.wo[M.popup_win].winhl = view.View.winopts.winhl
|
||||||
|
|
||||||
local ns_id = vim.api.nvim_get_namespaces()["NvimTreeHighlights"]
|
local ns_id = vim.api.nvim_get_namespaces()["NvimTreeHighlights"]
|
||||||
local extmarks = vim.api.nvim_buf_get_extmarks(0, ns_id, { line_nr - 1, 0 }, { line_nr - 1, -1 }, { details = true })
|
local extmarks = vim.api.nvim_buf_get_extmarks(0, ns_id, { line_nr - 1, 0 }, { line_nr - 1, -1 }, { details = true })
|
||||||
@ -88,7 +95,10 @@ local function show()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
vim.cmd([[ setlocal nowrap cursorline noswapfile nobuflisted buftype=nofile bufhidden=wipe ]])
|
vim.cmd([[ setlocal nowrap noswapfile nobuflisted buftype=nofile bufhidden=wipe ]])
|
||||||
|
if opts.view.cursorline then
|
||||||
|
vim.cmd([[ setlocal cursorline cursorlineopt=both ]])
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -114,7 +124,7 @@ M.setup = function(opts)
|
|||||||
pattern = { "NvimTree_*" },
|
pattern = { "NvimTree_*" },
|
||||||
callback = function()
|
callback = function()
|
||||||
if utils.is_nvim_tree_buf(0) then
|
if utils.is_nvim_tree_buf(0) then
|
||||||
show()
|
show(opts)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|||||||
@ -95,15 +95,15 @@ function M.get_arrows(node)
|
|||||||
local dir = node:as(DirectoryNode)
|
local dir = node:as(DirectoryNode)
|
||||||
if dir then
|
if dir then
|
||||||
if dir.open then
|
if dir.open then
|
||||||
str = M.config.icons.glyphs.folder["arrow_open"] .. " "
|
str = M.config.icons.glyphs.folder["arrow_open"] .. M.config.icons.padding.folder_arrow
|
||||||
hl = "NvimTreeFolderArrowOpen"
|
hl = "NvimTreeFolderArrowOpen"
|
||||||
else
|
else
|
||||||
str = M.config.icons.glyphs.folder["arrow_closed"] .. " "
|
str = M.config.icons.glyphs.folder["arrow_closed"] .. M.config.icons.padding.folder_arrow
|
||||||
end
|
end
|
||||||
elseif M.config.indent_markers.enable then
|
elseif M.config.indent_markers.enable then
|
||||||
str = ""
|
str = ""
|
||||||
else
|
else
|
||||||
str = " "
|
str = " " .. string.rep(" ", #M.config.icons.padding.folder_arrow)
|
||||||
end
|
end
|
||||||
|
|
||||||
return { str = str, hl = { hl } }
|
return { str = str, hl = { hl } }
|
||||||
|
|||||||
@ -112,9 +112,8 @@ function Decorator:define_sign(icon)
|
|||||||
vim.fn.sign_undefine(name)
|
vim.fn.sign_undefine(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- don't use sign if not defined
|
-- don't render sign if empty
|
||||||
if #icon.str < 1 then
|
if #icon.str < 1 then
|
||||||
self.icon_placement = "none"
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
local Iterator = require("nvim-tree.iterators.node-iterator")
|
local Iterator = require("nvim-tree.iterators.node-iterator")
|
||||||
local notify = require("nvim-tree.notify")
|
|
||||||
|
|
||||||
local M = {
|
local M = {
|
||||||
debouncers = {},
|
debouncers = {},
|
||||||
@ -179,6 +178,21 @@ function M.find_node_line(node)
|
|||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param extmarks vim.api.keyset.get_extmark_item[] as per vim.api.nvim_buf_get_extmarks
|
||||||
|
---@return number
|
||||||
|
function M.extmarks_length(extmarks)
|
||||||
|
local length = 0
|
||||||
|
for _, extmark in ipairs(extmarks) do
|
||||||
|
local details = extmark[4]
|
||||||
|
if details and details.virt_text then
|
||||||
|
for _, text in ipairs(details.virt_text) do
|
||||||
|
length = length + vim.fn.strchars(text[1])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return length
|
||||||
|
end
|
||||||
|
|
||||||
-- get the node in the tree state depending on the absolute path of the node
|
-- get the node in the tree state depending on the absolute path of the node
|
||||||
-- (grouped or hidden too)
|
-- (grouped or hidden too)
|
||||||
---@param path string
|
---@param path string
|
||||||
@ -295,11 +309,51 @@ function M.rename_loaded_buffers(old_path, new_path)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local is_windows_drive = function(path)
|
||||||
|
return (M.is_windows) and (path:match("^%a:\\$") ~= nil)
|
||||||
|
end
|
||||||
|
|
||||||
---@param path string path to file or directory
|
---@param path string path to file or directory
|
||||||
---@return boolean
|
---@return boolean
|
||||||
function M.file_exists(path)
|
function M.file_exists(path)
|
||||||
local _, error = vim.loop.fs_stat(path)
|
if not (M.is_windows or M.is_wsl) then
|
||||||
return error == nil
|
local _, error = vim.loop.fs_stat(path)
|
||||||
|
return error == nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Windows is case-insensetive, but case-preserving
|
||||||
|
-- If a file's name is being changed into itself
|
||||||
|
-- with different casing, windows will falsely
|
||||||
|
-- report that file is already existing, so a hand-rolled
|
||||||
|
-- implementation of checking for existance is needed.
|
||||||
|
-- Same holds for WSL, since it can sometimes
|
||||||
|
-- access Windows files directly.
|
||||||
|
-- For more details see (#3117).
|
||||||
|
|
||||||
|
if is_windows_drive(path) then
|
||||||
|
return vim.fn.isdirectory(path) == 1
|
||||||
|
end
|
||||||
|
|
||||||
|
local parent = vim.fn.fnamemodify(path, ":h")
|
||||||
|
local filename = vim.fn.fnamemodify(path, ":t")
|
||||||
|
|
||||||
|
local handle = vim.loop.fs_scandir(parent)
|
||||||
|
if not handle then
|
||||||
|
-- File can not exist if its parent directory does not exist
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
while true do
|
||||||
|
local name, _ = vim.loop.fs_scandir_next(handle)
|
||||||
|
if not name then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
if name == filename then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param path string
|
---@param path string
|
||||||
@ -355,20 +409,6 @@ end
|
|||||||
---@param dst_pos string value pos
|
---@param dst_pos string value pos
|
||||||
---@param remove boolean
|
---@param remove boolean
|
||||||
function M.move_missing_val(src, src_path, src_pos, dst, dst_path, dst_pos, remove)
|
function M.move_missing_val(src, src_path, src_pos, dst, dst_path, dst_pos, remove)
|
||||||
local ok, err = pcall(vim.validate, {
|
|
||||||
src = { src, "table" },
|
|
||||||
src_path = { src_path, "string" },
|
|
||||||
src_pos = { src_pos, "string" },
|
|
||||||
dst = { dst, "table" },
|
|
||||||
dst_path = { dst_path, "string" },
|
|
||||||
dst_pos = { dst_pos, "string" },
|
|
||||||
remove = { remove, "boolean" },
|
|
||||||
})
|
|
||||||
if not ok then
|
|
||||||
notify.warn("move_missing_val: " .. (err or "invalid arguments"))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
for pos in string.gmatch(src_path, "([^%.]+)%.*") do
|
for pos in string.gmatch(src_path, "([^%.]+)%.*") do
|
||||||
if src[pos] and type(src[pos]) == "table" then
|
if src[pos] and type(src[pos]) == "table" then
|
||||||
src = src[pos]
|
src = src[pos]
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
out=$(grep -nr "^--- @" lua)
|
out=$(grep -nr "^--- @" lua)
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
# run after changing nvim-tree.lua DEFAULT_OPTS or keymap.lua M.default_on_attach
|
# run after changing nvim-tree.lua DEFAULT_OPTS or keymap.lua M.default_on_attach
|
||||||
# scrapes and updates nvim-tree-lua.txt
|
# scrapes and updates nvim-tree-lua.txt
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
# Performs a lua-language-server check on all files.
|
# Performs a lua-language-server check on all files.
|
||||||
# luals-out/check.json will be produced on any issues, returning 1.
|
# luals-out/check.json will be produced on any issues, returning 1.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user