From 9ca00df1c84fc0a1ed18c79156c06b081dc1da1f Mon Sep 17 00:00:00 2001 From: Lewis Russell Date: Thu, 20 Jun 2024 15:00:10 +0100 Subject: [PATCH] feat(blame): run formatter with pcall If it fails, use the default format. --- lua/gitsigns/config.lua | 2 +- lua/gitsigns/current_line_blame.lua | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lua/gitsigns/config.lua b/lua/gitsigns/config.lua index 8eac8ef..b6351c8 100644 --- a/lua/gitsigns/config.lua +++ b/lua/gitsigns/config.lua @@ -34,7 +34,7 @@ --- | 'changedelete' --- | 'untracked' ---- @alias Gitsigns.CurrentLineBlameFmtFun fun(user: string, info: table): {[1]:string,[2]:string}[] +--- @alias Gitsigns.CurrentLineBlameFmtFun fun(user: string, info: table): [string,string][] --- @class (exact) Gitsigns.CurrentLineBlameOpts : Gitsigns.BlameOpts --- @field virt_text? boolean diff --git a/lua/gitsigns/current_line_blame.lua b/lua/gitsigns/current_line_blame.lua index fb2b186..87bf4e3 100644 --- a/lua/gitsigns/current_line_blame.lua +++ b/lua/gitsigns/current_line_blame.lua @@ -1,8 +1,11 @@ local async = require('gitsigns.async') local cache = require('gitsigns.cache').cache local config = require('gitsigns.config').config +local schema = require('gitsigns.config').schema local util = require('gitsigns.util') +local error_once = require('gitsigns.message').error_once + local api = vim.api local debounce = require('gitsigns.debounce') @@ -72,19 +75,27 @@ end ---@param bufnr integer ---@param blame_info Gitsigns.BlameInfoPublic ----@return {[1]: string, [2]:string}[] +---@return [string, string][] local function get_blame_virt_text(bufnr, blame_info) local git_obj = assert(cache[bufnr]).git_obj + local use_nc = blame_info.author == 'Not Committed Yet' - local clb_formatter = blame_info.author == 'Not Committed Yet' - and config.current_line_blame_formatter_nc + local clb_formatter = use_nc and config.current_line_blame_formatter_nc or config.current_line_blame_formatter - if type(clb_formatter) == 'string' then - clb_formatter = default_formatter(clb_formatter) + if type(clb_formatter) == 'function' then + local ok, res = pcall(clb_formatter, git_obj.repo.username, blame_info) + if ok then + return res + end + + local nc_sfx = use_nc and '_nc' or '' + error_once('Failed running config.current_line_blame_formatter%s, using default', nc_sfx) + --- @type string + clb_formatter = schema.current_line_blame_formatter.default end - return clb_formatter(git_obj.repo.username, blame_info) + return default_formatter(clb_formatter)(git_obj.repo.username, blame_info) end --- @param bufnr integer