Summary: Now the users configuration and the default configuration is separated. This will make it easier to setup ivy with some defaults. Right now we only have the backends configurable however, it looks like we will be making other components of ivy configurable. To use this you can now call `ivy.setup` with no parameters and you will get the default config. You can also call it with a partial config and if the option is not found in the users config it will fallback to the users config value. Test Plan: Manual testing and with unit tests in CI
32 lines
802 B
Lua
32 lines
802 B
Lua
local controller = require "ivy.controller"
|
|
local config = require "ivy.config"
|
|
local register_backend = require "ivy.register_backend"
|
|
|
|
local ivy = {}
|
|
ivy.run = controller.run
|
|
ivy.register_backend = register_backend
|
|
|
|
-- Private variable to check if ivy has been setup, this is to prevent multiple
|
|
-- setups of ivy. This is only exposed for testing purposes.
|
|
---@private
|
|
ivy.has_setup = false
|
|
|
|
---@class IvySetupOptions
|
|
---@field backends (IvyBackend | { ["1"]: string, ["2"]: IvyBackendOptions} | string)[]
|
|
|
|
---@param user_config IvySetupOptions
|
|
function ivy.setup(user_config)
|
|
if ivy.has_setup then
|
|
return
|
|
end
|
|
|
|
config.user_config = user_config or {}
|
|
|
|
for _, backend in ipairs(config:get { "backends" } or {}) do
|
|
register_backend(backend)
|
|
end
|
|
|
|
ivy.has_setup = true
|
|
end
|
|
|
|
return ivy
|