summaryrefslogtreecommitdiff
path: root/lua/telescope/_extensions/init.lua
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2020-11-23 09:29:10 -0500
committerGitHub <noreply@github.com>2020-11-23 09:29:10 -0500
commit2ac0582c06d8a52a42907dde106983e44ae989ef (patch)
treef2473c9299eb31b79acb24d45ec5c173579d8e09 /lua/telescope/_extensions/init.lua
parent124655608ff727ecee032bb2eb6f44014e8868eb (diff)
feat: v0.1 of extensions (#278)
Diffstat (limited to 'lua/telescope/_extensions/init.lua')
-rw-r--r--lua/telescope/_extensions/init.lua62
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