Neovim sign gutter, designed to be mostly VCS agnostic
1local M = {}
2
3---@class BufferState
4---@field diff DiffState
5---@field vcs VcsState
6
7---@class DiffState
8---@field hunks Hunk[]
9---@field old_lines string[]
10---@field last_update integer
11---@field hunks_changedtick integer
12
13---@class VcsState
14---@field vcs Vcs|nil
15---@field detecting boolean|nil
16
17---@type table<integer, BufferState>
18local buffers = {}
19
20---@param bufnr integer
21---@return BufferState
22function M.get(bufnr)
23 if bufnr == 0 then
24 bufnr = vim.api.nvim_get_current_buf()
25 end
26 if not buffers[bufnr] then
27 buffers[bufnr] = {
28 diff = {
29 hunks = {},
30 old_lines = {},
31 last_update = 0,
32 hunks_changedtick = 0,
33 },
34 vcs = {
35 vcs = nil,
36 detecting = nil,
37 },
38 }
39 end
40 return buffers[bufnr]
41end
42
43---@param bufnr integer
44function M.clear(bufnr)
45 if bufnr == 0 then
46 bufnr = vim.api.nvim_get_current_buf()
47 end
48 buffers[bufnr] = nil
49end
50
51return M