summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/utils/ft.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/utils/ft.lua')
-rw-r--r--.config/nvim/lua/utils/ft.lua45
1 files changed, 45 insertions, 0 deletions
diff --git a/.config/nvim/lua/utils/ft.lua b/.config/nvim/lua/utils/ft.lua
new file mode 100644
index 0000000..fcebd1e
--- /dev/null
+++ b/.config/nvim/lua/utils/ft.lua
@@ -0,0 +1,45 @@
+local ft = {}
+
+ft.find_lua_ftplugins = function(filetype)
+ local patterns = {
+ string.format("ftplugin/%s.lua", filetype),
+
+ -- Looks like we don't need this, because the first one works
+ -- string.format("after/ftplugin/%s.lua", filetype),
+ }
+
+ local result = {}
+ for _, pat in ipairs(patterns) do
+ vim.list_extend(result, vim.api.nvim_get_runtime_file(pat, true))
+ end
+
+ return result
+end
+
+ft.do_filetype = function(filetype)
+ local ftplugins = ft.find_lua_ftplugins(filetype)
+
+ local f_env = setmetatable({
+ -- Override print, so the prints still go through, otherwise it's confusing for people
+ print = vim.schedule_wrap(print),
+ }, {
+ -- Buf default back read/write to whatever is going on in the global landscape
+ __index = _G,
+ __newindex = _G,
+ })
+
+ for _, file in ipairs(ftplugins) do
+ local f = loadfile(file)
+ if not f then
+ vim.api.nvim_err_writeln("Unable to load file: " .. file)
+ else
+ local ok, msg = pcall(setfenv(f, f_env))
+
+ if not ok then
+ vim.api.nvim_err_writeln("Error while processing file: " .. file .. "\n" .. msg)
+ end
+ end
+ end
+end
+
+return ft