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

View file

@ -303,8 +303,8 @@ M.perform_action = function(action, cb)
local conn = get_connection(action.url) local conn = get_connection(action.url)
conn:rm(res.path, cb) conn:rm(res.path, cb)
elseif action.type == "move" then elseif action.type == "move" then
local src_adapter = config.get_adapter_by_scheme(action.src_url) local src_adapter = assert(config.get_adapter_by_scheme(action.src_url))
local dest_adapter = config.get_adapter_by_scheme(action.dest_url) local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
if src_adapter == M and dest_adapter == M then if src_adapter == M and dest_adapter == M then
local src_res = M.parse_url(action.src_url) local src_res = M.parse_url(action.src_url)
local dest_res = M.parse_url(action.dest_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") cb("We should never attempt to move across adapters")
end end
elseif action.type == "copy" then elseif action.type == "copy" then
local src_adapter = config.get_adapter_by_scheme(action.src_url) local src_adapter = assert(config.get_adapter_by_scheme(action.src_url))
local dest_adapter = config.get_adapter_by_scheme(action.dest_url) local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
if src_adapter == M and dest_adapter == M then if src_adapter == M and dest_adapter == M then
local src_res = M.parse_url(action.src_url) local src_res = M.parse_url(action.src_url)
local dest_res = M.parse_url(action.dest_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 if adapter == nil then
local name = M.adapters[scheme] local name = M.adapters[scheme]
if not name then if not name then
vim.notify(
string.format("Could not find oil adapter for scheme '%s'", scheme),
vim.log.levels.ERROR
)
return nil return nil
end end
local ok local ok
@ -478,7 +474,6 @@ M.get_adapter_by_scheme = function(scheme)
else else
M._adapter_by_scheme[scheme] = false M._adapter_by_scheme[scheme] = false
adapter = false adapter = false
vim.notify(string.format("Could not find oil adapter '%s'", name), vim.log.levels.ERROR)
end end
end end
if adapter then 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 if not use_oil_parent then
return bufname return bufname
end end
local adapter = config.get_adapter_by_scheme(scheme) local adapter = assert(config.get_adapter_by_scheme(scheme))
local parent_url local parent_url
if adapter and adapter.get_parent then if adapter and adapter.get_parent then
local adapter_scheme = config.adapter_to_scheme[adapter.name] local adapter_scheme = config.adapter_to_scheme[adapter.name]
@ -1253,8 +1253,7 @@ M.setup = function(opts)
end) end)
vim.cmd.doautocmd({ args = { "BufWritePost", params.file }, mods = { silent = true } }) vim.cmd.doautocmd({ args = { "BufWritePost", params.file }, mods = { silent = true } })
else else
local adapter = config.get_adapter_by_scheme(bufname) local adapter = assert(config.get_adapter_by_scheme(bufname))
assert(adapter)
adapter.write_file(params.buf) adapter.write_file(params.buf)
end end
end, end,

View file

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

View file

@ -156,7 +156,7 @@ M.parse = function(bufnr)
---@type oil.ParseError[] ---@type oil.ParseError[]
local errors = {} local errors = {}
local bufname = vim.api.nvim_buf_get_name(bufnr) 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 if not adapter then
table.insert(errors, { table.insert(errors, {
lnum = 0, lnum = 0,

View file

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

View file

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