]> git.rmz.io Git - dotfiles.git/blobdiff - nvim/lua/rmz/util/init.lua
lazyvim: foldexpr using treesitter if available
[dotfiles.git] / nvim / lua / rmz / util / init.lua
index 7afa985d889550be92481780569a2d465d720f85..abf0c2130696a451af9a400b1e93e07d88e61089 100644 (file)
@@ -1,4 +1,41 @@
 ---@class rmz.util
 ---@class rmz.util
-local M = {}
+local M = {
+  ui  = require("rmz.util.ui"),
+  lazy = require("rmz.util.lazy"),
+  lsp = require("rmz.util.lsp"),
+}
+
+--- Deduplicates a list.
+---@generic T
+---@param list T[]
+---@return T[]
+function M.dedup(list)
+  local ret = {}
+  local seen = {}
+  for _, v in ipairs(list) do
+    if not seen[v] then
+      table.insert(ret, v)
+      seen[v] = true
+    end
+  end
+  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
 
 return M