mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-06-26 18:59:00 +02:00
perf: added support for LazyFile
event that properly loads file based plugins without blocking the ui
This commit is contained in:
parent
f15dd301e5
commit
936d74bb61
8 changed files with 58 additions and 14 deletions
|
@ -124,8 +124,9 @@ function M.setup(opts)
|
||||||
M.load("autocmds")
|
M.load("autocmds")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local group = vim.api.nvim_create_augroup("LazyVim", { clear = true })
|
||||||
vim.api.nvim_create_autocmd("User", {
|
vim.api.nvim_create_autocmd("User", {
|
||||||
group = vim.api.nvim_create_augroup("LazyVim", { clear = true }),
|
group = group,
|
||||||
pattern = "VeryLazy",
|
pattern = "VeryLazy",
|
||||||
callback = function()
|
callback = function()
|
||||||
if lazy_autocmds then
|
if lazy_autocmds then
|
||||||
|
@ -135,6 +136,8 @@ function M.setup(opts)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
M.lazy_file()
|
||||||
|
|
||||||
require("lazy.core.util").try(function()
|
require("lazy.core.util").try(function()
|
||||||
if type(M.colorscheme) == "function" then
|
if type(M.colorscheme) == "function" then
|
||||||
M.colorscheme()
|
M.colorscheme()
|
||||||
|
@ -150,6 +153,40 @@ function M.setup(opts)
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Properly load file based plugins without blocking the UI
|
||||||
|
function M.lazy_file()
|
||||||
|
local events = {} ---@type {event: string, pattern?: string, buf: number, data?: any}[]
|
||||||
|
|
||||||
|
local function load()
|
||||||
|
if #events == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
vim.api.nvim_del_augroup_by_name("lazy_file")
|
||||||
|
vim.api.nvim_exec_autocmds("User", { pattern = "LazyFile", modeline = false })
|
||||||
|
for _, event in ipairs(events) do
|
||||||
|
vim.api.nvim_exec_autocmds(event.event, {
|
||||||
|
pattern = event.pattern,
|
||||||
|
modeline = false,
|
||||||
|
buffer = event.buf,
|
||||||
|
data = event.data,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
events = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- schedule wrap so that nested autocmds are executed
|
||||||
|
-- and the UI can continue rendering without blocking
|
||||||
|
load = vim.schedule_wrap(load)
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ "BufReadPost", "BufWritePost", "BufNewFile" }, {
|
||||||
|
group = vim.api.nvim_create_augroup("lazy_file", { clear = true }),
|
||||||
|
callback = function(event)
|
||||||
|
table.insert(events, event)
|
||||||
|
load()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
---@param range? string
|
---@param range? string
|
||||||
function M.has(range)
|
function M.has(range)
|
||||||
local Semver = require("lazy.manage.semver")
|
local Semver = require("lazy.manage.semver")
|
||||||
|
@ -214,6 +251,14 @@ function M.init()
|
||||||
end
|
end
|
||||||
return add(self, plugin, ...)
|
return add(self, plugin, ...)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Add support for the LazyFile event
|
||||||
|
local Event = require("lazy.core.handler.event")
|
||||||
|
local _event = Event._event
|
||||||
|
---@diagnostic disable-next-line: duplicate-set-field
|
||||||
|
Event._event = function(self, value)
|
||||||
|
return value == "LazyFile" and "User LazyFile" or _event(self, value)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -310,7 +310,7 @@ return {
|
||||||
-- hunks in a commit.
|
-- hunks in a commit.
|
||||||
{
|
{
|
||||||
"lewis6991/gitsigns.nvim",
|
"lewis6991/gitsigns.nvim",
|
||||||
event = { "BufReadPre", "BufNewFile" },
|
event = "LazyFile",
|
||||||
opts = {
|
opts = {
|
||||||
signs = {
|
signs = {
|
||||||
add = { text = "▎" },
|
add = { text = "▎" },
|
||||||
|
@ -349,7 +349,7 @@ return {
|
||||||
-- instances.
|
-- instances.
|
||||||
{
|
{
|
||||||
"RRethy/vim-illuminate",
|
"RRethy/vim-illuminate",
|
||||||
event = { "BufReadPost", "BufNewFile" },
|
event = "LazyFile",
|
||||||
opts = {
|
opts = {
|
||||||
delay = 200,
|
delay = 200,
|
||||||
large_file_cutoff = 2000,
|
large_file_cutoff = 2000,
|
||||||
|
@ -440,7 +440,7 @@ return {
|
||||||
{
|
{
|
||||||
"folke/todo-comments.nvim",
|
"folke/todo-comments.nvim",
|
||||||
cmd = { "TodoTrouble", "TodoTelescope" },
|
cmd = { "TodoTrouble", "TodoTelescope" },
|
||||||
event = { "BufReadPost", "BufNewFile" },
|
event = "LazyFile",
|
||||||
config = true,
|
config = true,
|
||||||
-- stylua: ignore
|
-- stylua: ignore
|
||||||
keys = {
|
keys = {
|
||||||
|
|
|
@ -45,6 +45,6 @@ return {
|
||||||
{
|
{
|
||||||
"Civitasv/cmake-tools.nvim",
|
"Civitasv/cmake-tools.nvim",
|
||||||
opts = {},
|
opts = {},
|
||||||
event = "BufRead",
|
event = "LazyFile",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
return {
|
return {
|
||||||
{
|
{
|
||||||
"mfussenegger/nvim-lint",
|
"mfussenegger/nvim-lint",
|
||||||
event = "BufReadPost",
|
event = "LazyFile",
|
||||||
opts = {
|
opts = {
|
||||||
-- Event to trigger linters
|
-- Event to trigger linters
|
||||||
events = { "BufWritePost", "BufReadPost", "InsertLeave" },
|
events = { "BufWritePost", "BufReadPost", "InsertLeave" },
|
||||||
|
@ -43,7 +43,6 @@ return {
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.lint()
|
function M.lint()
|
||||||
local lint = require("lint")
|
|
||||||
local names = lint.linters_by_ft[vim.bo.filetype] or {}
|
local names = lint.linters_by_ft[vim.bo.filetype] or {}
|
||||||
local ctx = { filename = vim.api.nvim_buf_get_name(0) }
|
local ctx = { filename = vim.api.nvim_buf_get_name(0) }
|
||||||
ctx.dirname = vim.fn.fnamemodify(ctx.filename, ":h")
|
ctx.dirname = vim.fn.fnamemodify(ctx.filename, ":h")
|
||||||
|
|
|
@ -5,7 +5,7 @@ M.hl = {}
|
||||||
|
|
||||||
M.plugin = {
|
M.plugin = {
|
||||||
"echasnovski/mini.hipatterns",
|
"echasnovski/mini.hipatterns",
|
||||||
event = "BufReadPre",
|
event = "LazyFile",
|
||||||
opts = function()
|
opts = function()
|
||||||
local hi = require("mini.hipatterns")
|
local hi = require("mini.hipatterns")
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -2,7 +2,7 @@ return {
|
||||||
-- lspconfig
|
-- lspconfig
|
||||||
{
|
{
|
||||||
"neovim/nvim-lspconfig",
|
"neovim/nvim-lspconfig",
|
||||||
event = { "BufReadPre", "BufNewFile" },
|
event = "LazyFile",
|
||||||
dependencies = {
|
dependencies = {
|
||||||
{ "folke/neoconf.nvim", cmd = "Neoconf", config = false, dependencies = { "nvim-lspconfig" } },
|
{ "folke/neoconf.nvim", cmd = "Neoconf", config = false, dependencies = { "nvim-lspconfig" } },
|
||||||
{ "folke/neodev.nvim", opts = {} },
|
{ "folke/neodev.nvim", opts = {} },
|
||||||
|
@ -203,7 +203,7 @@ return {
|
||||||
-- formatters
|
-- formatters
|
||||||
{
|
{
|
||||||
"nvimtools/none-ls.nvim",
|
"nvimtools/none-ls.nvim",
|
||||||
event = { "BufReadPre", "BufNewFile" },
|
event = "LazyFile",
|
||||||
dependencies = { "mason.nvim" },
|
dependencies = { "mason.nvim" },
|
||||||
opts = function()
|
opts = function()
|
||||||
local nls = require("null-ls")
|
local nls = require("null-ls")
|
||||||
|
|
|
@ -6,7 +6,7 @@ return {
|
||||||
"nvim-treesitter/nvim-treesitter",
|
"nvim-treesitter/nvim-treesitter",
|
||||||
version = false, -- last release is way too old and doesn't work on Windows
|
version = false, -- last release is way too old and doesn't work on Windows
|
||||||
build = ":TSUpdate",
|
build = ":TSUpdate",
|
||||||
event = { "BufReadPost", "BufNewFile" },
|
event = { "LazyFile", "VeryLazy" },
|
||||||
dependencies = {
|
dependencies = {
|
||||||
{
|
{
|
||||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||||
|
|
|
@ -53,7 +53,7 @@ return {
|
||||||
-- tabs, which include filetype icons and close buttons.
|
-- tabs, which include filetype icons and close buttons.
|
||||||
{
|
{
|
||||||
"akinsho/bufferline.nvim",
|
"akinsho/bufferline.nvim",
|
||||||
event = "VeryLazy",
|
event = "LazyFile",
|
||||||
keys = {
|
keys = {
|
||||||
{ "<leader>bp", "<Cmd>BufferLineTogglePin<CR>", desc = "Toggle pin" },
|
{ "<leader>bp", "<Cmd>BufferLineTogglePin<CR>", desc = "Toggle pin" },
|
||||||
{ "<leader>bP", "<Cmd>BufferLineGroupClose ungrouped<CR>", desc = "Delete non-pinned buffers" },
|
{ "<leader>bP", "<Cmd>BufferLineGroupClose ungrouped<CR>", desc = "Delete non-pinned buffers" },
|
||||||
|
@ -166,7 +166,7 @@ return {
|
||||||
-- indent guides for Neovim
|
-- indent guides for Neovim
|
||||||
{
|
{
|
||||||
"lukas-reineke/indent-blankline.nvim",
|
"lukas-reineke/indent-blankline.nvim",
|
||||||
event = { "BufReadPost", "BufNewFile" },
|
event = "LazyFile",
|
||||||
opts = {
|
opts = {
|
||||||
indent = {
|
indent = {
|
||||||
char = "│",
|
char = "│",
|
||||||
|
@ -197,7 +197,7 @@ return {
|
||||||
{
|
{
|
||||||
"echasnovski/mini.indentscope",
|
"echasnovski/mini.indentscope",
|
||||||
version = false, -- wait till new 0.7.0 release to put it back on semver
|
version = false, -- wait till new 0.7.0 release to put it back on semver
|
||||||
event = { "BufReadPre", "BufNewFile" },
|
event = "LazyFile",
|
||||||
opts = {
|
opts = {
|
||||||
-- symbol = "▏",
|
-- symbol = "▏",
|
||||||
symbol = "│",
|
symbol = "│",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue