From c8777040fbda6a656f149877b796d120085cd918 Mon Sep 17 00:00:00 2001 From: Vitor Boschi da Silva Date: Fri, 8 Dec 2023 12:21:09 -0300 Subject: [PATCH] [feat] Make gitsigns init function async (#2538) * [feat] Make gitsigns init function async This function is running git and also initializing a shell, which can be a relatively slow operation. By leveraging the jobs api, we run the command in background, reducing the time it takes for the buffer to be available to the user. It also uses the list format for the job, which allow us to bypass the shell entirely. * performance: use uv.cwd() instead of fn.expand benchmarked luv's cwd and it seems to be 20x faster than the expand function --------- Co-authored-by: Sidhanth Rathod --- lua/plugins/init.lua | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index 25809b8..26e0945 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -96,13 +96,18 @@ local default_plugins = { vim.api.nvim_create_autocmd({ "BufRead" }, { group = vim.api.nvim_create_augroup("GitSignsLazyLoad", { clear = true }), callback = function() - vim.fn.system("git -C " .. '"' .. vim.fn.expand "%:p:h" .. '"' .. " rev-parse") - if vim.v.shell_error == 0 then - vim.api.nvim_del_augroup_by_name "GitSignsLazyLoad" - vim.schedule(function() - require("lazy").load { plugins = { "gitsigns.nvim" } } - end) - end + vim.fn.jobstart({"git", "-C", vim.loop.cwd(), "rev-parse"}, + { + on_exit = function(_, return_code) + if return_code == 0 then + vim.api.nvim_del_augroup_by_name "GitSignsLazyLoad" + vim.schedule(function() + require("lazy").load { plugins = { "gitsigns.nvim" } } + end) + end + end + } + ) end, }) end,