Neovim sign gutter, designed to be mostly VCS agnostic
at experimental_diffthis 51 lines 933 B view raw
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