1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 06:50:05 +08:00
SpaceVim/bundle/neo-tree.nvim/lua/neo-tree/sources/common/file-nesting.lua

55 lines
1.3 KiB
Lua
Raw Normal View History

2023-05-30 21:09:18 +08:00
local iter = require("plenary.iterators").iter
local utils = require("neo-tree.utils")
local Path = require("plenary.path")
-- File nesting a la JetBrains (#117).
local M = {}
M.config = {}
--- Checks if file-nesting module is enabled by config
---@return boolean
function M.is_enabled()
return next(M.config) ~= nil
end
--- Returns `item` nesting parent path if exists
---@return string?
function M.get_parent(item)
for base_exts, nesting_exts in pairs(M.config) do
for _, exts in ipairs(nesting_exts) do
if item.exts == exts then
local parent_id = utils.path_join(item.parent_path, item.base) .. "." .. base_exts
if Path:new(parent_id):exists() then
return parent_id
end
end
end
end
return nil
end
--- Checks if `item` have a valid nesting lookup
---@return boolean
function M.can_have_nesting(item)
return utils.truthy(M.config[item.exts])
end
--- Checks if `target` should be nested into `base`
---@return boolean
function M.should_nest_file(base, target)
local ext_lookup = M.config[base.exts]
return utils.truthy(
base.base == target.base and ext_lookup and iter(ext_lookup):find(target.exts)
)
end
---Setup the module with the given config
---@param config table
function M.setup(config)
M.config = config or {}
end
return M