[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 <siduck@tutanota.com>
This commit is contained in:
Vitor Boschi da Silva 2023-12-08 12:21:09 -03:00 committed by GitHub
parent 9d37797e6f
commit c8777040fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 7 deletions

View File

@ -96,13 +96,18 @@ local default_plugins = {
vim.api.nvim_create_autocmd({ "BufRead" }, { vim.api.nvim_create_autocmd({ "BufRead" }, {
group = vim.api.nvim_create_augroup("GitSignsLazyLoad", { clear = true }), group = vim.api.nvim_create_augroup("GitSignsLazyLoad", { clear = true }),
callback = function() callback = function()
vim.fn.system("git -C " .. '"' .. vim.fn.expand "%:p:h" .. '"' .. " rev-parse") vim.fn.jobstart({"git", "-C", vim.loop.cwd(), "rev-parse"},
if vim.v.shell_error == 0 then {
vim.api.nvim_del_augroup_by_name "GitSignsLazyLoad" on_exit = function(_, return_code)
vim.schedule(function() if return_code == 0 then
require("lazy").load { plugins = { "gitsigns.nvim" } } vim.api.nvim_del_augroup_by_name "GitSignsLazyLoad"
end) vim.schedule(function()
end require("lazy").load { plugins = { "gitsigns.nvim" } }
end)
end
end
}
)
end, end,
}) })
end, end,