From d7c61c70849ec99f005615c4175118986f200e4f Mon Sep 17 00:00:00 2001 From: Steven Arcangeli Date: Tue, 4 Mar 2025 12:56:54 -0800 Subject: [PATCH] fix: silent handling when buffer has no oil adapter (#573) --- lua/oil/adapters/files.lua | 6 +++--- lua/oil/adapters/ssh.lua | 8 ++++---- lua/oil/config.lua | 5 ----- lua/oil/init.lua | 5 ++--- lua/oil/mutator/init.lua | 4 ++-- lua/oil/mutator/parser.lua | 2 +- lua/oil/util.lua | 12 +++++------- lua/oil/view.lua | 12 ++++++------ 8 files changed, 23 insertions(+), 31 deletions(-) diff --git a/lua/oil/adapters/files.lua b/lua/oil/adapters/files.lua index 40e82f5..8fb1835 100644 --- a/lua/oil/adapters/files.lua +++ b/lua/oil/adapters/files.lua @@ -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) diff --git a/lua/oil/adapters/ssh.lua b/lua/oil/adapters/ssh.lua index 02637a8..ae4291f 100644 --- a/lua/oil/adapters/ssh.lua +++ b/lua/oil/adapters/ssh.lua @@ -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) diff --git a/lua/oil/config.lua b/lua/oil/config.lua index 562562c..6797cc8 100644 --- a/lua/oil/config.lua +++ b/lua/oil/config.lua @@ -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 diff --git a/lua/oil/init.lua b/lua/oil/init.lua index 5f780b8..ca55dc3 100644 --- a/lua/oil/init.lua +++ b/lua/oil/init.lua @@ -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, diff --git a/lua/oil/mutator/init.lua b/lua/oil/mutator/init.lua index cd0043f..f55957d 100644 --- a/lua/oil/mutator/init.lua +++ b/lua/oil/mutator/init.lua @@ -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 diff --git a/lua/oil/mutator/parser.lua b/lua/oil/mutator/parser.lua index d2d3590..f25cbc9 100644 --- a/lua/oil/mutator/parser.lua +++ b/lua/oil/mutator/parser.lua @@ -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, diff --git a/lua/oil/util.lua b/lua/oil/util.lua index 7be1d5e..ed8bce7 100644 --- a/lua/oil/util.lua +++ b/lua/oil/util.lua @@ -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 diff --git a/lua/oil/view.lua b/lua/oil/view.lua index 0e605ac..271705d 100644 --- a/lua/oil/view.lua +++ b/lua/oil/view.lua @@ -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