mirror of
https://github.com/neovim/neovim.git
synced 2025-10-15 14:26:07 +00:00
feat: filetype.lua (#16600)
Adds a new vim.filetype module that provides support for filetype detection in Lua.
This commit is contained in:
@@ -62,6 +62,7 @@ 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_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_FILETYPE_MODULE_SOURCE ${PROJECT_SOURCE_DIR}/runtime/lua/vim/filetype.lua)
|
||||
set(CHAR_BLOB_GENERATOR ${GENERATOR_DIR}/gen_char_blob.lua)
|
||||
set(LINT_SUPPRESS_FILE ${PROJECT_BINARY_DIR}/errors.json)
|
||||
set(LINT_SUPPRESS_URL_BASE "https://raw.githubusercontent.com/neovim/doc/gh-pages/reports/clint")
|
||||
@@ -334,6 +335,7 @@ add_custom_command(
|
||||
${LUA_INSPECT_MODULE_SOURCE} inspect_module
|
||||
${LUA_F_MODULE_SOURCE} lua_F_module
|
||||
${LUA_META_MODULE_SOURCE} lua_meta_module
|
||||
${LUA_FILETYPE_MODULE_SOURCE} lua_filetype_module
|
||||
DEPENDS
|
||||
${CHAR_BLOB_GENERATOR}
|
||||
${LUA_VIM_MODULE_SOURCE}
|
||||
@@ -341,6 +343,7 @@ add_custom_command(
|
||||
${LUA_INSPECT_MODULE_SOURCE}
|
||||
${LUA_F_MODULE_SOURCE}
|
||||
${LUA_META_MODULE_SOURCE}
|
||||
${LUA_FILETYPE_MODULE_SOURCE}
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
|
@@ -9551,15 +9551,18 @@ static void ex_filetype(exarg_T *eap)
|
||||
void filetype_maybe_enable(void)
|
||||
{
|
||||
if (filetype_detect == kNone) {
|
||||
source_runtime(FILETYPE_FILE, true);
|
||||
// Normally .vim files are sourced before .lua files when both are
|
||||
// supported, but we reverse the order here because we want the Lua
|
||||
// autocommand to be defined first so that it runs first
|
||||
source_runtime(FILETYPE_FILE, DIP_ALL);
|
||||
filetype_detect = kTrue;
|
||||
}
|
||||
if (filetype_plugin == kNone) {
|
||||
source_runtime(FTPLUGIN_FILE, true);
|
||||
source_runtime(FTPLUGIN_FILE, DIP_ALL);
|
||||
filetype_plugin = kTrue;
|
||||
}
|
||||
if (filetype_indent == kNone) {
|
||||
source_runtime(INDENT_FILE, true);
|
||||
source_runtime(INDENT_FILE, DIP_ALL);
|
||||
filetype_indent = kTrue;
|
||||
}
|
||||
}
|
||||
|
@@ -28,7 +28,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef FILETYPE_FILE
|
||||
# define FILETYPE_FILE "filetype.vim"
|
||||
# define FILETYPE_FILE "filetype.lua filetype.vim"
|
||||
#endif
|
||||
|
||||
#ifndef FTPLUGIN_FILE
|
||||
|
@@ -434,6 +434,15 @@ static int nlua_state_init(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL
|
||||
// [package, loaded, module]
|
||||
lua_setfield(lstate, -2, "vim.F"); // [package, loaded]
|
||||
|
||||
code = (char *)&lua_filetype_module[0];
|
||||
if (luaL_loadbuffer(lstate, code, sizeof(lua_filetype_module) - 1, "@vim/filetype.lua")
|
||||
|| nlua_pcall(lstate, 0, 1)) {
|
||||
nlua_error(lstate, _("E5106: Error while creating vim.filetype module: %.*s"));
|
||||
return 1;
|
||||
}
|
||||
// [package, loaded, module]
|
||||
lua_setfield(lstate, -2, "vim.filetype"); // [package, loaded]
|
||||
|
||||
lua_pop(lstate, 2); // []
|
||||
}
|
||||
|
||||
|
@@ -40,6 +40,9 @@ assert(vim)
|
||||
vim.inspect = package.loaded['vim.inspect']
|
||||
assert(vim.inspect)
|
||||
|
||||
vim.filetype = package.loaded['vim.filetype']
|
||||
assert(vim.filetype)
|
||||
|
||||
local pathtrails = {}
|
||||
vim._so_trails = {}
|
||||
for s in (package.cpath..';'):gmatch('[^;]*;') do
|
||||
|
Reference in New Issue
Block a user