diff options
| author | TJ DeVries <devries.timothyj@gmail.com> | 2020-11-23 09:29:10 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-23 09:29:10 -0500 |
| commit | 2ac0582c06d8a52a42907dde106983e44ae989ef (patch) | |
| tree | f2473c9299eb31b79acb24d45ec5c173579d8e09 /lua/telescope/_extensions/init.lua | |
| parent | 124655608ff727ecee032bb2eb6f44014e8868eb (diff) | |
feat: v0.1 of extensions (#278)
Diffstat (limited to 'lua/telescope/_extensions/init.lua')
| -rw-r--r-- | lua/telescope/_extensions/init.lua | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/lua/telescope/_extensions/init.lua b/lua/telescope/_extensions/init.lua new file mode 100644 index 0000000..73d0f8c --- /dev/null +++ b/lua/telescope/_extensions/init.lua @@ -0,0 +1,62 @@ +local extensions = {} + +extensions._loaded = {} +extensions._config = {} + +extensions.manager = setmetatable({}, { + __index = function(t, k) + -- See if this extension exists. + local ok, ext = pcall(require, 'telescope._extensions.' .. k) + if not ok then + error("This extenion doesn't exist or is not installed: " .. k .. "\n" .. ext) + end + + if ext.setup then + ext.setup(extensions._config[k] or {}, require('telescope.config').values) + end + + t[k] = ext.exports or {} + + return t[k] + end, +}) + +--- Register an extension module. +--- +--- Extensions have several important keys. +--- - setup: +--- function(ext_config, config) -> nil +--- +--- Called when first loading the extension. +--- The first parameter is the config passed by the user +--- in telescope setup. The second parameter is the resulting +--- config.values after applying the users setup defaults. +--- +--- It is acceptable for a plugin to override values in config, +--- as some plugins will be installed simply to manage some setup, +--- install some sorter, etc. +--- +--- - exports: +--- table +--- +--- Only the items in `exports` will be exposed on the resulting +--- module that users can access via require('telescope').extensions.foo +--- +--- Other things in the module will not be accessible. This is the public API +--- for your extension. Consider not breaking it a lot :laugh: +--- +--- TODO: +--- - actions +extensions.register = function(mod) + return mod +end + +extensions.load = function(name) + return extensions.manager[name] +end + +extensions.set_config = function(extensions_config) + extensions._config = extensions_config or {} +end + +return extensions |
