From: Samir Benmendil Date: Sun, 23 Feb 2025 14:19:23 +0000 (+0000) Subject: lazyvim: foldexpr using treesitter if available X-Git-Url: https://git.rmz.io/dotfiles.git/commitdiff_plain/9d8f4bf3dcc34ae97a8e2588f49117e5612dee2c lazyvim: foldexpr using treesitter if available --- diff --git a/nvim/lua/config/options.lua b/nvim/lua/config/options.lua index 5fce922..81ff29e 100644 --- a/nvim/lua/config/options.lua +++ b/nvim/lua/config/options.lua @@ -20,5 +20,8 @@ if vim.fn.has("nvim-0.9.0") == 1 then opt.splitkeep = "screen" opt.shortmess:append({ C = true }) end +opt.foldmethod = "expr" +opt.foldexpr = "v:lua.require'rmz.util'.foldexpr()" + -- do not let markdown plugin change indent vim.g.markdown_recommended_style = 0 diff --git a/nvim/lua/rmz/util/init.lua b/nvim/lua/rmz/util/init.lua index 54d8f6b..abf0c21 100644 --- a/nvim/lua/rmz/util/init.lua +++ b/nvim/lua/rmz/util/init.lua @@ -21,4 +21,21 @@ function M.dedup(list) return ret end +function M.foldexpr() + local buf = vim.api.nvim_get_current_buf() + if vim.b[buf].ts_folds == nil then + -- as long as we don't have a filetype, don't bother + -- checking if treesitter is available (it won't) + if vim.bo[buf].filetype == "" then + return "0" + end + if vim.bo[buf].filetype:find("dashboard") then + vim.b[buf].ts_folds = false + else + vim.b[buf].ts_folds = pcall(vim.treesitter.get_parser, buf) + end + end + return vim.b[buf].ts_folds and vim.treesitter.foldexpr() or "0" +end + return M