mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 16:28:17 +00:00
refactor(lua): move only runtime lua file in src/ to runtime/lua
reorganize so that initialization is done in lua
This commit is contained in:
@@ -34,8 +34,7 @@
|
|||||||
-- - https://github.com/bakpakin/Fennel (pretty print, repl)
|
-- - https://github.com/bakpakin/Fennel (pretty print, repl)
|
||||||
-- - https://github.com/howl-editor/howl/tree/master/lib/howl/util
|
-- - https://github.com/howl-editor/howl/tree/master/lib/howl/util
|
||||||
|
|
||||||
local vim = vim
|
local vim = assert(vim)
|
||||||
assert(vim)
|
|
||||||
assert(vim.inspect)
|
assert(vim.inspect)
|
||||||
|
|
||||||
-- These are for loading runtime modules lazily since they aren't available in
|
-- These are for loading runtime modules lazily since they aren't available in
|
||||||
@@ -244,12 +243,6 @@ function vim.schedule_wrap(cb)
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- <Docs described in |vim.empty_dict()| >
|
|
||||||
---@private
|
|
||||||
function vim.empty_dict()
|
|
||||||
return setmetatable({}, vim._empty_dict_mt)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- vim.fn.{func}(...)
|
-- vim.fn.{func}(...)
|
||||||
vim.fn = setmetatable({}, {
|
vim.fn = setmetatable({}, {
|
||||||
__index = function(t, key)
|
__index = function(t, key)
|
@@ -48,5 +48,18 @@ end
|
|||||||
-- Insert vim._load_package after the preloader at position 2
|
-- Insert vim._load_package after the preloader at position 2
|
||||||
table.insert(package.loaders, 2, vim._load_package)
|
table.insert(package.loaders, 2, vim._load_package)
|
||||||
|
|
||||||
-- should always be available
|
-- builtin functions which always should be available
|
||||||
|
require'vim.shared'
|
||||||
vim.inspect = require'vim.inspect'
|
vim.inspect = require'vim.inspect'
|
||||||
|
|
||||||
|
--- <Docs described in |vim.empty_dict()| >
|
||||||
|
---@private
|
||||||
|
--- TODO: should be in vim.shared when vim.shared always uses nvim-lua
|
||||||
|
function vim.empty_dict()
|
||||||
|
return setmetatable({}, vim._empty_dict_mt)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- only on main thread: functions for interacting with editor state
|
||||||
|
if not vim.is_thread() then
|
||||||
|
require'vim._editor'
|
||||||
|
end
|
@@ -57,13 +57,13 @@ set(UNICODE_TABLES_GENERATOR ${GENERATOR_DIR}/gen_unicode_tables.lua)
|
|||||||
set(UNICODE_DIR ${PROJECT_SOURCE_DIR}/unicode)
|
set(UNICODE_DIR ${PROJECT_SOURCE_DIR}/unicode)
|
||||||
set(GENERATED_UNICODE_TABLES ${GENERATED_DIR}/unicode_tables.generated.h)
|
set(GENERATED_UNICODE_TABLES ${GENERATED_DIR}/unicode_tables.generated.h)
|
||||||
set(VIM_MODULE_FILE ${GENERATED_DIR}/lua/vim_module.generated.h)
|
set(VIM_MODULE_FILE ${GENERATED_DIR}/lua/vim_module.generated.h)
|
||||||
set(LUA_VIM_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/src/nvim/lua/vim.lua)
|
set(LUA_EDITOR_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/_editor.lua)
|
||||||
set(LUA_SHARED_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/shared.lua)
|
set(LUA_SHARED_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/shared.lua)
|
||||||
set(LUA_INSPECT_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/inspect.lua)
|
set(LUA_INSPECT_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/inspect.lua)
|
||||||
set(LUA_F_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/F.lua)
|
set(LUA_F_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/F.lua)
|
||||||
set(LUA_META_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/_meta.lua)
|
set(LUA_META_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/_meta.lua)
|
||||||
set(LUA_FILETYPE_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/filetype.lua)
|
set(LUA_FILETYPE_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/filetype.lua)
|
||||||
set(LUA_LOAD_PACKAGE_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/_load_package.lua)
|
set(LUA_INIT_PACKAGES_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/_init_packages.lua)
|
||||||
set(LUA_KEYMAP_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/keymap.lua)
|
set(LUA_KEYMAP_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/keymap.lua)
|
||||||
set(CHAR_BLOB_GENERATOR ${GENERATOR_DIR}/gen_char_blob.lua)
|
set(CHAR_BLOB_GENERATOR ${GENERATOR_DIR}/gen_char_blob.lua)
|
||||||
set(LINT_SUPPRESS_FILE ${PROJECT_BINARY_DIR}/errors.json)
|
set(LINT_SUPPRESS_FILE ${PROJECT_BINARY_DIR}/errors.json)
|
||||||
@@ -332,9 +332,9 @@ add_custom_command(
|
|||||||
COMMAND ${CMAKE_COMMAND} -E env
|
COMMAND ${CMAKE_COMMAND} -E env
|
||||||
"LUAC_PRG=${LUAC_PRG}"
|
"LUAC_PRG=${LUAC_PRG}"
|
||||||
${LUA_PRG} ${CHAR_BLOB_GENERATOR} -c ${VIM_MODULE_FILE}
|
${LUA_PRG} ${CHAR_BLOB_GENERATOR} -c ${VIM_MODULE_FILE}
|
||||||
${LUA_LOAD_PACKAGE_MODULE_SOURCE} "vim._load_package"
|
${LUA_INIT_PACKAGES_MODULE_SOURCE} "vim._init_packages"
|
||||||
${LUA_INSPECT_MODULE_SOURCE} "vim.inspect"
|
${LUA_INSPECT_MODULE_SOURCE} "vim.inspect"
|
||||||
${LUA_VIM_MODULE_SOURCE} "vim"
|
${LUA_EDITOR_MODULE_SOURCE} "vim._editor"
|
||||||
${LUA_SHARED_MODULE_SOURCE} "vim.shared"
|
${LUA_SHARED_MODULE_SOURCE} "vim.shared"
|
||||||
${LUA_F_MODULE_SOURCE} "vim.F"
|
${LUA_F_MODULE_SOURCE} "vim.F"
|
||||||
${LUA_META_MODULE_SOURCE} "vim._meta"
|
${LUA_META_MODULE_SOURCE} "vim._meta"
|
||||||
@@ -342,7 +342,7 @@ add_custom_command(
|
|||||||
${LUA_KEYMAP_MODULE_SOURCE} "vim.keymap"
|
${LUA_KEYMAP_MODULE_SOURCE} "vim.keymap"
|
||||||
DEPENDS
|
DEPENDS
|
||||||
${CHAR_BLOB_GENERATOR}
|
${CHAR_BLOB_GENERATOR}
|
||||||
${LUA_VIM_MODULE_SOURCE}
|
${LUA_EDITOR_MODULE_SOURCE}
|
||||||
${LUA_SHARED_MODULE_SOURCE}
|
${LUA_SHARED_MODULE_SOURCE}
|
||||||
${LUA_INSPECT_MODULE_SOURCE}
|
${LUA_INSPECT_MODULE_SOURCE}
|
||||||
${LUA_F_MODULE_SOURCE}
|
${LUA_F_MODULE_SOURCE}
|
||||||
|
@@ -525,24 +525,6 @@ static void nlua_common_vim_init(lua_State *lstate, bool is_thread)
|
|||||||
lua_pop(lstate, 3);
|
lua_pop(lstate, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nlua_preload_modules(lua_State *lstate)
|
|
||||||
{
|
|
||||||
lua_getglobal(lstate, "package"); // [package]
|
|
||||||
lua_getfield(lstate, -1, "preload"); // [package, preload]
|
|
||||||
for (size_t i = 0; i < ARRAY_SIZE(builtin_modules); i++) {
|
|
||||||
ModuleDef def = builtin_modules[i];
|
|
||||||
lua_pushinteger(lstate, (long)i); // [package, preload, i]
|
|
||||||
lua_pushcclosure(lstate, nlua_module_preloader, 1); // [package, preload, cclosure]
|
|
||||||
lua_setfield(lstate, -2, def.name); // [package, preload]
|
|
||||||
|
|
||||||
if (nlua_disable_preload && strequal(def.name, "vim")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lua_pop(lstate, 2); // []
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nlua_module_preloader(lua_State *lstate)
|
static int nlua_module_preloader(lua_State *lstate)
|
||||||
{
|
{
|
||||||
size_t i = (size_t)lua_tointeger(lstate, lua_upvalueindex(1));
|
size_t i = (size_t)lua_tointeger(lstate, lua_upvalueindex(1));
|
||||||
@@ -561,24 +543,29 @@ static int nlua_module_preloader(lua_State *lstate)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool nlua_common_package_init(lua_State *lstate)
|
static bool nlua_init_packages(lua_State *lstate)
|
||||||
FUNC_ATTR_NONNULL_ALL
|
FUNC_ATTR_NONNULL_ALL
|
||||||
{
|
{
|
||||||
nlua_preload_modules(lstate);
|
// put builtin packages in preload
|
||||||
|
lua_getglobal(lstate, "package"); // [package]
|
||||||
|
lua_getfield(lstate, -1, "preload"); // [package, preload]
|
||||||
|
for (size_t i = 0; i < ARRAY_SIZE(builtin_modules); i++) {
|
||||||
|
ModuleDef def = builtin_modules[i];
|
||||||
|
lua_pushinteger(lstate, (long)i); // [package, preload, i]
|
||||||
|
lua_pushcclosure(lstate, nlua_module_preloader, 1); // [package, preload, cclosure]
|
||||||
|
lua_setfield(lstate, -2, def.name); // [package, preload]
|
||||||
|
|
||||||
lua_getglobal(lstate, "require");
|
if (nlua_disable_preload && strequal(def.name, "vim.inspect")) {
|
||||||
lua_pushstring(lstate, "vim._load_package");
|
break;
|
||||||
if (nlua_pcall(lstate, 1, 0)) {
|
}
|
||||||
nlua_error(lstate, _("E5106: Error while creating _load_package module: %.*s\n"));
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(bfredl): ideally all initialization should be done as a single require
|
lua_pop(lstate, 2); // []
|
||||||
// call.
|
|
||||||
lua_getglobal(lstate, "require");
|
lua_getglobal(lstate, "require");
|
||||||
lua_pushstring(lstate, "vim.shared");
|
lua_pushstring(lstate, "vim._init_packages");
|
||||||
if (nlua_pcall(lstate, 1, 0)) {
|
if (nlua_pcall(lstate, 1, 0)) {
|
||||||
nlua_error(lstate, _("E5106: Error while creating shared module: %.*s\n"));
|
nlua_error(lstate, _("E5106: Error while loading packages: %.*s\n"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -654,14 +641,7 @@ static bool nlua_state_init(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL
|
|||||||
|
|
||||||
lua_setglobal(lstate, "vim");
|
lua_setglobal(lstate, "vim");
|
||||||
|
|
||||||
if (!nlua_common_package_init(lstate)) {
|
if (!nlua_init_packages(lstate)) {
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
lua_getglobal(lstate, "require");
|
|
||||||
lua_pushstring(lstate, "vim");
|
|
||||||
if (nlua_pcall(lstate, 1, 0)) {
|
|
||||||
nlua_error(lstate, _("E5106: Error while creating vim module: %.*s\n"));
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -732,7 +712,7 @@ static lua_State *nlua_thread_acquire_vm(void)
|
|||||||
|
|
||||||
lua_setglobal(lstate, "vim");
|
lua_setglobal(lstate, "vim");
|
||||||
|
|
||||||
nlua_common_package_init(lstate);
|
nlua_init_packages(lstate);
|
||||||
|
|
||||||
lua_getglobal(lstate, "package");
|
lua_getglobal(lstate, "package");
|
||||||
lua_getfield(lstate, -1, "loaded");
|
lua_getfield(lstate, -1, "loaded");
|
||||||
|
Reference in New Issue
Block a user