aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/lua/executor.c
diff options
context:
space:
mode:
authorRaphael <glephunter@gmail.com>2023-12-12 19:06:22 +0800
committerGitHub <noreply@github.com>2023-12-12 19:06:22 +0800
commit1d4a5cd18537d054a564ff19b9361120597d9dd7 (patch)
tree7b094048bf64789ad11e89b141baadec222bcf79 /src/nvim/lua/executor.c
parente69834744ba550100778890d0b4ecfc3c469af15 (diff)
downloadrneovim-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.c18
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;
+}