Neovim sign gutter, designed to be mostly VCS agnostic
1local M = {}
2
3local fold = require "vclib.fold"
4local interval_lib = require "vclib.intervals"
5local hunkops = require "vcsigns.hunkops"
6local state = require "vcsigns.state"
7
8---@param lnum integer
9function M.fold_expression(lnum)
10 local bufnr = vim.api.nvim_get_current_buf()
11 local hunks = state.get(bufnr).diff.hunks
12 if hunks == nil then
13 return 0
14 end
15 local intervals = interval_lib.from_list(hunks, hunkops.to_interval)
16 fold.maybe_update_levels(intervals, vim.g.vcsigns_fold_context_sizes)
17 return vim.b.levels[lnum] or 0
18end
19
20local foldexpr = 'v:lua.require("vcsigns.fold").fold_expression(v:lnum)'
21
22function M.toggle(bufnr)
23 fold.toggle(bufnr, foldexpr)
24end
25
26return M