85 lines
1.9 KiB
Lua
85 lines
1.9 KiB
Lua
local autocmd = vim.api.nvim_create_autocmd
|
|
|
|
autocmd("LspAttach", {
|
|
callback = function(args)
|
|
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
|
if client then
|
|
vim.lsp.document_color.enable(false, args.buf, { "background" })
|
|
end
|
|
end,
|
|
})
|
|
|
|
autocmd("VimLeave", {
|
|
command = "set guicursor=a:ver25-Cursor",
|
|
})
|
|
|
|
autocmd("BufWritePre", {
|
|
callback = function()
|
|
local ok = pcall(function()
|
|
vim.cmd "undojoin"
|
|
end)
|
|
vim.cmd "Neoformat"
|
|
end,
|
|
})
|
|
|
|
autocmd({ "InsertLeave" }, {
|
|
callback = function()
|
|
require("lint").try_lint()
|
|
end,
|
|
})
|
|
|
|
local progress = vim.defaulttable()
|
|
vim.api.nvim_create_autocmd("LspProgress", {
|
|
---@param ev {data: {client_id: integer, params: lsp.ProgressParams}}
|
|
callback = function(ev)
|
|
local client = vim.lsp.get_client_by_id(ev.data.client_id)
|
|
local value = ev.data.params.value --[[@as {percentage?: number, title?: string, message?: string, kind: "begin" | "report" | "end"}]]
|
|
if not client or type(value) ~= "table" then
|
|
return
|
|
end
|
|
local p = progress[client.id]
|
|
|
|
for i = 1, #p + 1 do
|
|
if i == #p + 1 or p[i].token == ev.data.params.token then
|
|
p[i] = {
|
|
token = ev.data.params.token,
|
|
msg = ("[%3d%%] %s%s"):format(
|
|
value.kind == "end" and 100 or value.percentage or 100,
|
|
value.title or "",
|
|
value.message and (" **%s**"):format(value.message)
|
|
or ""
|
|
),
|
|
done = value.kind == "end",
|
|
}
|
|
break
|
|
end
|
|
end
|
|
|
|
local msg = {} ---@type string[]
|
|
progress[client.id] = vim.tbl_filter(function(v)
|
|
return table.insert(msg, v.msg) or not v.done
|
|
end, p)
|
|
|
|
local spinner = {
|
|
"⠋",
|
|
"⠙",
|
|
"⠹",
|
|
"⠸",
|
|
"⠼",
|
|
"⠴",
|
|
"⠦",
|
|
"⠧",
|
|
"⠇",
|
|
"⠏",
|
|
}
|
|
vim.notify(table.concat(msg, "\n"), "info", {
|
|
id = "lsp_progress",
|
|
title = client.name,
|
|
opts = function(notif)
|
|
notif.icon = #progress[client.id] == 0 and " "
|
|
or spinner[math.floor(vim.uv.hrtime() / (1e6 * 80)) % #spinner + 1]
|
|
end,
|
|
})
|
|
end,
|
|
})
|