diff --git a/lua/oil/adapters/files.lua b/lua/oil/adapters/files.lua index e89e8ef..9206a5d 100644 --- a/lua/oil/adapters/files.lua +++ b/lua/oil/adapters/files.lua @@ -56,7 +56,7 @@ file_columns.size = { render = function(entry, conf) local meta = entry[FIELD_META] - local stat = meta.stat + local stat = meta and meta.stat if not stat then return columns.EMPTY end @@ -73,7 +73,7 @@ file_columns.size = { get_sort_value = function(entry) local meta = entry[FIELD_META] - local stat = meta.stat + local stat = meta and meta.stat if stat then return stat.size else @@ -93,7 +93,7 @@ if not fs.is_windows then render = function(entry, conf) local meta = entry[FIELD_META] - local stat = meta.stat + local stat = meta and meta.stat if not stat then return columns.EMPTY end @@ -106,7 +106,7 @@ if not fs.is_windows then compare = function(entry, parsed_value) local meta = entry[FIELD_META] - if parsed_value and meta.stat and meta.stat.mode then + if parsed_value and meta and meta.stat and meta.stat.mode then local mask = bit.lshift(1, 12) - 1 local old_mode = bit.band(meta.stat.mode, mask) if parsed_value ~= old_mode then @@ -156,7 +156,7 @@ for _, time_key in ipairs({ "ctime", "mtime", "atime", "birthtime" }) do render = function(entry, conf) local meta = entry[FIELD_META] - local stat = meta.stat + local stat = meta and meta.stat if not stat then return columns.EMPTY end @@ -188,7 +188,7 @@ for _, time_key in ipairs({ "ctime", "mtime", "atime", "birthtime" }) do get_sort_value = function(entry) local meta = entry[FIELD_META] - local stat = meta.stat + local stat = meta and meta.stat if stat then return stat[time_key].sec else diff --git a/lua/oil/adapters/ssh.lua b/lua/oil/adapters/ssh.lua index 0b619ae..02637a8 100644 --- a/lua/oil/adapters/ssh.lua +++ b/lua/oil/adapters/ssh.lua @@ -126,7 +126,7 @@ ssh_columns.permissions = { compare = function(entry, parsed_value) local meta = entry[FIELD_META] - if parsed_value and meta.mode then + if parsed_value and meta and meta.mode then local mask = bit.lshift(1, 12) - 1 local old_mode = bit.band(meta.mode, mask) if parsed_value ~= old_mode then @@ -169,7 +169,7 @@ ssh_columns.size = { get_sort_value = function(entry) local meta = entry[FIELD_META] - if meta.size then + if meta and meta.size then return meta.size else return 0 diff --git a/lua/oil/adapters/trash/freedesktop.lua b/lua/oil/adapters/trash/freedesktop.lua index ac45492..07e8a7f 100644 --- a/lua/oil/adapters/trash/freedesktop.lua +++ b/lua/oil/adapters/trash/freedesktop.lua @@ -131,7 +131,7 @@ end ---@param cb fun(path: string) M.get_entry_path = function(url, entry, cb) local internal_entry = assert(cache.get_entry_by_id(entry.id)) - local meta = internal_entry[FIELD_META] + local meta = assert(internal_entry[FIELD_META]) ---@type oil.TrashInfo local trash_info = meta.trash_info if not trash_info then @@ -381,7 +381,7 @@ file_columns.mtime = { get_sort_value = function(entry) local meta = entry[FIELD_META] ---@type nil|oil.TrashInfo - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info if trash_info then return trash_info.deletion_date else @@ -417,7 +417,7 @@ M.filter_action = function(action) elseif action.type == "delete" then local entry = assert(cache.get_entry_by_url(action.url)) local meta = entry[FIELD_META] - return meta.trash_info ~= nil + return meta ~= nil and meta.trash_info ~= nil elseif action.type == "move" then local src_adapter = assert(config.get_adapter_by_scheme(action.src_url)) local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url)) @@ -447,7 +447,7 @@ M.render_action = function(action) local entry = assert(cache.get_entry_by_url(action.url)) local meta = entry[FIELD_META] ---@type oil.TrashInfo - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info local short_path = fs.shorten_path(trash_info.original_path) return string.format(" PURGE %s", short_path) elseif action.type == "move" then @@ -561,7 +561,7 @@ M.perform_action = function(action, cb) local entry = assert(cache.get_entry_by_url(action.url)) local meta = entry[FIELD_META] ---@type oil.TrashInfo - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info purge(trash_info, cb) elseif action.type == "move" then local src_adapter = assert(config.get_adapter_by_scheme(action.src_url)) @@ -576,7 +576,7 @@ M.perform_action = function(action, cb) local entry = assert(cache.get_entry_by_url(action.src_url)) local meta = entry[FIELD_META] ---@type oil.TrashInfo - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info fs.recursive_move(action.entry_type, trash_info.trash_file, dest_path, function(err) if err then return cb(err) @@ -608,7 +608,7 @@ M.perform_action = function(action, cb) local entry = assert(cache.get_entry_by_url(action.src_url)) local meta = entry[FIELD_META] ---@type oil.TrashInfo - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info fs.recursive_copy(action.entry_type, trash_info.trash_file, dest_path, cb) else error("Must be moving files into or out of trash") diff --git a/lua/oil/adapters/trash/windows.lua b/lua/oil/adapters/trash/windows.lua index ecfca61..4605567 100644 --- a/lua/oil/adapters/trash/windows.lua +++ b/lua/oil/adapters/trash/windows.lua @@ -164,8 +164,8 @@ file_columns.mtime = { get_sort_value = function(entry) local meta = entry[FIELD_META] - ---@type oil.WindowsTrashInfo - local trash_info = meta.trash_info + ---@type nil|oil.WindowsTrashInfo + local trash_info = meta and meta.trash_info if trash_info and trash_info.deletion_date then return trash_info.deletion_date else @@ -199,7 +199,7 @@ M.filter_action = function(action) elseif action.type == "delete" then local entry = assert(cache.get_entry_by_url(action.url)) local meta = entry[FIELD_META] - return meta.trash_info ~= nil + return meta ~= nil and meta.trash_info ~= nil elseif action.type == "move" then local src_adapter = assert(config.get_adapter_by_scheme(action.src_url)) local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url)) @@ -235,7 +235,7 @@ end M.get_entry_path = function(url, entry, cb) local internal_entry = assert(cache.get_entry_by_id(entry.id)) local meta = internal_entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]] - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info if not trash_info then -- This is a subpath in the trash M.normalize_url(url, cb) @@ -265,7 +265,7 @@ M.render_action = function(action) local entry = assert(cache.get_entry_by_url(action.url)) local meta = entry[FIELD_META] ---@type oil.WindowsTrashInfo - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info local short_path = fs.shorten_path(trash_info.original_path) return string.format(" PURGE %s", short_path) elseif action.type == "move" then @@ -348,7 +348,7 @@ M.perform_action = function(action, cb) if action.type == "delete" then local entry = assert(cache.get_entry_by_url(action.url)) local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]] - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info purge(trash_info, cb) elseif action.type == "move" then @@ -364,7 +364,7 @@ M.perform_action = function(action, cb) dest_path = fs.posix_to_os_path(dest_path) local entry = assert(cache.get_entry_by_url(action.src_url)) local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]] - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info fs.recursive_move(action.entry_type, trash_info.trash_file, dest_path, function(err) if err then return cb(err) @@ -388,7 +388,7 @@ M.perform_action = function(action, cb) dest_path = fs.posix_to_os_path(dest_path) local entry = assert(cache.get_entry_by_url(action.src_url)) local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]] - local trash_info = meta.trash_info + local trash_info = meta and meta.trash_info fs.recursive_copy(action.entry_type, trash_info.trash_file, dest_path, cb) else error("Must be moving files into or out of trash")