@@ -57,8 +57,14 @@ local function compare_link_target(meta, parsed_entry)
5757 return meta_name == parsed_name
5858end
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