From d88094fbfd84b297178252230f6faf0e7d2f7650 Mon Sep 17 00:00:00 2001 From: fdschmidt93 <39233597+fdschmidt93@users.noreply.github.com> Date: Fri, 22 Apr 2022 15:52:22 +0200 Subject: feat: show assigned function in actions.which_key (#1871) --- lua/telescope/actions/utils.lua | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'lua/telescope/actions/utils.lua') diff --git a/lua/telescope/actions/utils.lua b/lua/telescope/actions/utils.lua index f69112d..202ee73 100644 --- a/lua/telescope/actions/utils.lua +++ b/lua/telescope/actions/utils.lua @@ -103,4 +103,36 @@ function utils.get_registered_mappings(prompt_bufnr) return ret end +-- Best effort to infer function names for actions.which_key +function utils._get_anon_function_name(func_ref) + local Path = require "plenary.path" + local info = debug.getinfo(func_ref) + local fname + for i, line in ipairs(Path:new(info.short_src):readlines()) do + if i == info.linedefined then + fname = line + break + end + end + + -- test if assignment or named function, otherwise anon + if (fname:match "=" == nil) and (fname:match "function %S+%(" == nil) then + return "" + else + -- (1) remove function + -- (2) whitespace and equal + -- (3) anything in parenthesis incl. parentheses themselves + -- (4) remove TABLE. prefix if available + local patterns = { { "function", "" }, { "local", "" }, { "[%s=]", "" }, { "%((.+)%)", "" }, { "(.+)%.", "" } } + for _, tbl in ipairs(patterns) do + fname = (fname:gsub(tbl[1], tbl[2])) -- make sure only string is returned + end + -- not sure if this can happen, catch all just in case + if fname == nil or fname == "" then + return "" + end + return fname + end +end + return utils -- cgit v1.2.3