Summary:
Split out the register backend function from being a private function. A
backend is a table that will define all of the attributes for a run function.
The attributes are as follows:
- **command** The name of the command that will be registered as a vim user command.
- **items** The callback function that will be passed to the run function that will gather the items for selection
- **callback** The callback function run when an item is selected
The following are optional:
- **keymap** The string passed to `nvim_set_keymap`, this will always be registered in normal mode
- **description** The text description that will be used in the user command
- **name** The name of the backend, this will fallback to the command if its not set
It will also allow to register a backend in a couple of different ways:
- With a backend module table
- With a backend module name
- With a backend module name and override options
This will look for for a lua module `ivy.backends.files`. The module will be
required and registered as a backend.
```lua
register_backend "ivy.backends.files"
```
This will do the same with the module string however, before the backend is
registered the keymap will be overridden
```lua
register_backend({ "ivy.backends.file", { keymap = "<C-p>" } })
```
Test Plan:
CI / Manual testing locally
71 lines
1.7 KiB
Lua
71 lines
1.7 KiB
Lua
local register_backend = require "ivy.register_backend"
|
|
|
|
local function get_command(name)
|
|
local command_iter = vim.api.nvim_get_commands {}
|
|
|
|
for _, cmd in pairs(command_iter) do
|
|
if cmd.name == name then
|
|
return cmd
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
local function get_keymap(mode, rhs)
|
|
local keymap_iter = vim.api.nvim_get_keymap(mode)
|
|
for _, keymap in pairs(keymap_iter) do
|
|
if keymap.rhs == rhs then
|
|
return keymap
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
describe("register_backend", function()
|
|
after_each(function()
|
|
vim.api.nvim_del_user_command "IvyFd"
|
|
|
|
local keymap = get_keymap("n", "<Cmd>IvyFd<CR>")
|
|
if keymap then
|
|
vim.api.nvim_del_keymap("n", keymap.lhs)
|
|
end
|
|
end)
|
|
|
|
it("registers a backend from a string with the default options", function()
|
|
register_backend "ivy.backends.files"
|
|
|
|
local command = get_command "IvyFd"
|
|
assert.is_not_nil(command)
|
|
|
|
local keymap = get_keymap("n", "<Cmd>IvyFd<CR>")
|
|
assert.is_not_nil(keymap)
|
|
end)
|
|
|
|
it("allows you to override the keymap", function()
|
|
register_backend("ivy.backends.files", { keymap = "<C-p>" })
|
|
|
|
local keymap = get_keymap("n", "<Cmd>IvyFd<CR>")
|
|
assert(keymap ~= nil)
|
|
assert.are.equal("<C-P>", keymap.lhs)
|
|
end)
|
|
|
|
it("allows you to pass in a hole backend module", function()
|
|
register_backend(require "ivy.backends.files")
|
|
|
|
local command = get_command "IvyFd"
|
|
assert.is_not_nil(command)
|
|
|
|
local keymap = get_keymap("n", "<Cmd>IvyFd<CR>")
|
|
assert.is_not_nil(keymap)
|
|
end)
|
|
|
|
it("allows you to pass in a hole backend module", function()
|
|
register_backend { "ivy.backends.files", { keymap = "<C-p>" } }
|
|
|
|
local keymap = get_keymap("n", "<Cmd>IvyFd<CR>")
|
|
assert(keymap ~= nil)
|
|
assert.are.equal("<C-P>", keymap.lhs)
|
|
end)
|
|
end)
|