From 3dafcb419b9b15855731f52965143ad6006726d4 Mon Sep 17 00:00:00 2001 From: fdschmidt93 <39233597+fdschmidt93@users.noreply.github.com> Date: Mon, 27 Dec 2021 17:55:43 +0100 Subject: [PATCH] fix: too early setup on initial extension access (#1601) --- doc/telescope.txt | 2 ++ lua/telescope/_extensions/init.lua | 24 +++++++++++++----------- lua/telescope/init.lua | 2 ++ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/doc/telescope.txt b/doc/telescope.txt index cd94fd5..65d6b43 100644 --- a/doc/telescope.txt +++ b/doc/telescope.txt @@ -610,6 +610,8 @@ telescope.register_extension({mod}) *telescope.register_extension()* telescope.load_extension({name}) *telescope.load_extension()* Load an extension. + - Notes: + - Loading triggers ext setup via the config passed in |telescope.setup| Parameters: ~ diff --git a/lua/telescope/_extensions/init.lua b/lua/telescope/_extensions/init.lua index c3349ff..38a9963 100644 --- a/lua/telescope/_extensions/init.lua +++ b/lua/telescope/_extensions/init.lua @@ -4,18 +4,17 @@ extensions._loaded = {} extensions._config = {} extensions._health = {} +local load_extension = function(name) + local ok, ext = pcall(require, "telescope._extensions." .. name) + if not ok then + error("This extension doesn't exist or is not installed: " .. name .. "\n" .. ext) + end + return ext +end + 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 extension 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 - + local ext = load_extension(k) t[k] = ext.exports or {} extensions._health[k] = ext.health @@ -57,7 +56,10 @@ extensions.register = function(mod) end extensions.load = function(name) - return extensions.manager[name] + local ext = load_extension(name) + if ext.setup then + ext.setup(extensions._config[name] or {}, require("telescope.config").values) + end end extensions.set_config = function(extensions_config) diff --git a/lua/telescope/init.lua b/lua/telescope/init.lua index d52d60d..35577a8 100644 --- a/lua/telescope/init.lua +++ b/lua/telescope/init.lua @@ -93,6 +93,8 @@ function telescope.register_extension(mod) end --- Load an extension. +--- - Notes: +--- - Loading triggers ext setup via the config passed in |telescope.setup| ---@param name string: Name of the extension function telescope.load_extension(name) return _extensions.load(name)