diff options
author | Raphael <glephunter@gmail.com> | 2023-12-12 19:06:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-12 19:06:22 +0800 |
commit | 1d4a5cd18537d054a564ff19b9361120597d9dd7 (patch) | |
tree | 7b094048bf64789ad11e89b141baadec222bcf79 /src/nvim/lua/executor.c | |
parent | e69834744ba550100778890d0b4ecfc3c469af15 (diff) | |
download | rneovim-1d4a5cd18537d054a564ff19b9361120597d9dd7.tar.gz rneovim-1d4a5cd18537d054a564ff19b9361120597d9dd7.tar.bz2 rneovim-1d4a5cd18537d054a564ff19b9361120597d9dd7.zip |
feat(eval): exists() function supports checking v:lua functions (#26485)
Problem: Vimscript function exists() can't check v:lua functions.
Solution: Add support for v:lua functions to exists().
Diffstat (limited to 'src/nvim/lua/executor.c')
-rw-r--r-- | src/nvim/lua/executor.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c index e665732c1a..e0bdbbc1e9 100644 --- a/src/nvim/lua/executor.c +++ b/src/nvim/lua/executor.c @@ -2313,3 +2313,21 @@ void nlua_init_defaults(void) os_errmsg("\n"); } } + +/// check lua function exist +bool nlua_func_exists(const char *lua_funcname) +{ + MAXSIZE_TEMP_ARRAY(args, 1); + size_t length = strlen(lua_funcname) + 8; + char *str = xmalloc(length); + vim_snprintf(str, length, "return %s", lua_funcname); + ADD_C(args, CSTR_AS_OBJ(str)); + Error err = ERROR_INIT; + Object result = NLUA_EXEC_STATIC("return type(loadstring(...)()) =='function'", args, &err); + xfree(str); + + if (result.type != kObjectTypeBoolean) { + return false; + } + return result.data.boolean; +} |