fix: silent handling when buffer has no oil adapter (#573)

This commit is contained in:
Steven Arcangeli 2025-03-04 12:56:54 -08:00
parent 975a77cce3
commit d7c61c7084
8 changed files with 23 additions and 31 deletions

View file

@ -530,7 +530,7 @@ M.render_action = function(action)
return string.format("DELETE %s", short_path)
end
elseif action.type == "move" or action.type == "copy" then
local dest_adapter = config.get_adapter_by_scheme(action.dest_url)
local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
if dest_adapter == M then
local _, src_path = util.parse_url(action.src_url)
assert(src_path)
@ -623,7 +623,7 @@ M.perform_action = function(action, cb)
fs.recursive_delete(action.entry_type, path, cb)
end
elseif action.type == "move" then
local dest_adapter = config.get_adapter_by_scheme(action.dest_url)
local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
if dest_adapter == M then
local _, src_path = util.parse_url(action.src_url)
assert(src_path)
@ -641,7 +641,7 @@ M.perform_action = function(action, cb)
cb("files adapter doesn't support cross-adapter move")
end
elseif action.type == "copy" then
local dest_adapter = config.get_adapter_by_scheme(action.dest_url)
local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
if dest_adapter == M then
local _, src_path = util.parse_url(action.src_url)
assert(src_path)

View file

@ -303,8 +303,8 @@ M.perform_action = function(action, cb)
local conn = get_connection(action.url)
conn:rm(res.path, cb)
elseif action.type == "move" then
local src_adapter = config.get_adapter_by_scheme(action.src_url)
local dest_adapter = config.get_adapter_by_scheme(action.dest_url)
local src_adapter = assert(config.get_adapter_by_scheme(action.src_url))
local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
if src_adapter == M and dest_adapter == M then
local src_res = M.parse_url(action.src_url)
local dest_res = M.parse_url(action.dest_url)
@ -324,8 +324,8 @@ M.perform_action = function(action, cb)
cb("We should never attempt to move across adapters")
end
elseif action.type == "copy" then
local src_adapter = config.get_adapter_by_scheme(action.src_url)
local dest_adapter = config.get_adapter_by_scheme(action.dest_url)
local src_adapter = assert(config.get_adapter_by_scheme(action.src_url))
local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
if src_adapter == M and dest_adapter == M then
local src_res = M.parse_url(action.src_url)
local dest_res = M.parse_url(action.dest_url)

View file

@ -464,10 +464,6 @@ M.get_adapter_by_scheme = function(scheme)
if adapter == nil then
local name = M.adapters[scheme]
if not name then
vim.notify(
string.format("Could not find oil adapter for scheme '%s'", scheme),
vim.log.levels.ERROR
)
return nil
end
local ok
@ -478,7 +474,6 @@ M.get_adapter_by_scheme = function(scheme)
else
M._adapter_by_scheme[scheme] = false
adapter = false
vim.notify(string.format("Could not find oil adapter '%s'", name), vim.log.levels.ERROR)
end
end
if adapter then

View file

@ -224,7 +224,7 @@ M.get_buffer_parent_url = function(bufname, use_oil_parent)
if not use_oil_parent then
return bufname
end
local adapter = config.get_adapter_by_scheme(scheme)
local adapter = assert(config.get_adapter_by_scheme(scheme))
local parent_url
if adapter and adapter.get_parent then
local adapter_scheme = config.adapter_to_scheme[adapter.name]
@ -1253,8 +1253,7 @@ M.setup = function(opts)
end)
vim.cmd.doautocmd({ args = { "BufWritePost", params.file }, mods = { silent = true } })
else
local adapter = config.get_adapter_by_scheme(bufname)
assert(adapter)
local adapter = assert(config.get_adapter_by_scheme(bufname))
adapter.write_file(params.buf)
end
end,

View file

@ -85,7 +85,7 @@ M.create_actions_from_diffs = function(all_diffs)
end
end
for bufnr, diffs in pairs(all_diffs) do
local adapter = util.get_adapter(bufnr)
local adapter = util.get_adapter(bufnr, true)
if not adapter then
error("Missing adapter")
end
@ -519,7 +519,7 @@ M.try_write_changes = function(confirm, cb)
if vim.bo[bufnr].modified then
local diffs, errors = parser.parse(bufnr)
all_diffs[bufnr] = diffs
local adapter = assert(util.get_adapter(bufnr))
local adapter = assert(util.get_adapter(bufnr, true))
if adapter.filter_error then
errors = vim.tbl_filter(adapter.filter_error, errors)
end

View file

@ -156,7 +156,7 @@ M.parse = function(bufnr)
---@type oil.ParseError[]
local errors = {}
local bufname = vim.api.nvim_buf_get_name(bufnr)
local adapter = util.get_adapter(bufnr)
local adapter = util.get_adapter(bufnr, true)
if not adapter then
table.insert(errors, {
lnum = 0,

View file

@ -60,11 +60,12 @@ M.url_escape = function(string)
end
---@param bufnr integer
---@param silent? boolean
---@return nil|oil.Adapter
M.get_adapter = function(bufnr)
M.get_adapter = function(bufnr, silent)
local bufname = vim.api.nvim_buf_get_name(bufnr)
local adapter = config.get_adapter_by_scheme(bufname)
if not adapter then
if not adapter and not silent then
vim.notify_once(
string.format("[oil] could not find adapter for buffer '%s://'", bufname),
vim.log.levels.ERROR
@ -500,10 +501,7 @@ end
---@return oil.Adapter
---@return nil|oil.CrossAdapterAction
M.get_adapter_for_action = function(action)
local adapter = config.get_adapter_by_scheme(action.url or action.src_url)
if not adapter then
error("no adapter found")
end
local adapter = assert(config.get_adapter_by_scheme(action.url or action.src_url))
if action.dest_url then
local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
if adapter ~= dest_adapter then
@ -887,7 +885,7 @@ M.get_edit_path = function(bufnr, entry, callback)
local bufname = vim.api.nvim_buf_get_name(bufnr)
local scheme, dir = M.parse_url(bufname)
local adapter = M.get_adapter(bufnr)
local adapter = M.get_adapter(bufnr, true)
assert(scheme and dir and adapter)
local url = scheme .. dir .. entry.name

View file

@ -146,7 +146,7 @@ M.unlock_buffers = function()
buffers_locked = false
for bufnr in pairs(session) do
if vim.api.nvim_buf_is_loaded(bufnr) then
local adapter = util.get_adapter(bufnr)
local adapter = util.get_adapter(bufnr, true)
if adapter then
vim.bo[bufnr].modifiable = adapter.is_modifiable(bufnr)
end
@ -265,7 +265,7 @@ local function constrain_cursor(mode)
end
local parser = require("oil.mutator.parser")
local adapter = util.get_adapter(0)
local adapter = util.get_adapter(0, true)
if not adapter then
return
end
@ -296,7 +296,7 @@ local function redraw_trash_virtual_text(bufnr)
return
end
local parser = require("oil.mutator.parser")
local adapter = util.get_adapter(bufnr)
local adapter = util.get_adapter(bufnr, true)
if not adapter or adapter.name ~= "trash" then
return
end
@ -456,7 +456,7 @@ M.initialize = function(bufnr)
end,
})
local adapter = util.get_adapter(bufnr)
local adapter = util.get_adapter(bufnr, true)
-- Set up a watcher that will refresh the directory
if
@ -616,7 +616,7 @@ local function render_buffer(bufnr, opts)
jump_first = false,
})
local scheme = util.parse_url(bufname)
local adapter = util.get_adapter(bufnr)
local adapter = util.get_adapter(bufnr, true)
if not scheme or not adapter then
return false
end
@ -877,7 +877,7 @@ M.render_buffer_async = function(bufnr, opts, callback)
handle_error(string.format("Could not parse oil url '%s'", bufname))
return
end
local adapter = util.get_adapter(bufnr)
local adapter = util.get_adapter(bufnr, true)
if not adapter then
handle_error(string.format("[oil] no adapter for buffer '%s'", bufname))
return