Skip to content

Commit 075cc22

Browse files
committed
feat: move file/directory into new directory by renaming POC
1 parent f55b25e commit 075cc22

1 file changed

Lines changed: 17 additions & 3 deletions

File tree

lua/oil/mutator/parser.lua

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,14 @@ local function compare_link_target(meta, parsed_entry)
5757
return meta_name == parsed_name
5858
end
5959

60+
---@class oil.ParseResultData
61+
---@field _type 'directory'|'file'|'link'
62+
---@field id number
63+
---@field name string
64+
---@field link_target string
65+
6066
---@class (exact) oil.ParseResult
61-
---@field data table Parsed entry data
67+
---@field data oil.ParseResultData | table Parsed entry data
6268
---@field ranges table<string, integer[]> Locations of the various columns
6369
---@field entry nil|oil.InternalEntry If the entry already exists
6470

@@ -220,8 +226,6 @@ M.parse = function(bufnr)
220226
err_message = "No filename found"
221227
elseif not entry then
222228
err_message = "Could not find existing entry (was the ID changed?)"
223-
elseif parsed_entry.name:match("/") or parsed_entry.name:match(fs.sep) then
224-
err_message = "Filename cannot contain path separator"
225229
end
226230
if err_message then
227231
table.insert(errors, {
@@ -235,6 +239,16 @@ M.parse = function(bufnr)
235239
assert(entry)
236240

237241
check_dupe(parsed_entry.name, i)
242+
243+
local maybe_new_dir = parsed_entry.name:gsub("/[^/]+$", "")
244+
if #maybe_new_dir ~= 0 and maybe_new_dir ~= parsed_entry.name then
245+
table.insert(diffs, {
246+
type = "new",
247+
name = maybe_new_dir,
248+
entry_type = "directory",
249+
})
250+
end
251+
238252
local meta = entry[FIELD_META]
239253
if original_entries[parsed_entry.name] == parsed_entry.id then
240254
if entry[FIELD_TYPE] == "link" and not compare_link_target(meta, parsed_entry) then

0 commit comments

Comments
 (0)