mirror of
https://github.com/LazyVim/LazyVim.git
synced 2026-07-21 20:11:06 +00:00
feat(copilot-native): better lualine status
This commit is contained in:
parent
3b02963585
commit
9913e1665d
2 changed files with 23 additions and 39 deletions
|
|
@ -16,6 +16,7 @@ if LazyVim.has_extra("ai.copilot-native") then
|
||||||
end
|
end
|
||||||
|
|
||||||
vim.g.ai_cmp = false
|
vim.g.ai_cmp = false
|
||||||
|
local status = {} ---@type table<number, "ok" | "error" | "pending">
|
||||||
|
|
||||||
return {
|
return {
|
||||||
desc = "Native Copilot LSP integration. Requires Neovim >= 0.12",
|
desc = "Native Copilot LSP integration. Requires Neovim >= 0.12",
|
||||||
|
|
@ -24,10 +25,22 @@ return {
|
||||||
"neovim/nvim-lspconfig",
|
"neovim/nvim-lspconfig",
|
||||||
opts = {
|
opts = {
|
||||||
servers = {
|
servers = {
|
||||||
copilot = {},
|
copilot = {
|
||||||
|
handlers = {
|
||||||
|
didChangeStatus = function(err, res, ctx)
|
||||||
|
if err then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
status[ctx.client_id] = res.kind ~= "Normal" and "error" or res.busy and "pending" or "ok"
|
||||||
|
if res.status == "Error" then
|
||||||
|
LazyVim.error("Please use `:LspCopilotSignIn` to sign in to Copilot")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
setup = {
|
setup = {
|
||||||
copilot = function(_, opts)
|
copilot = function()
|
||||||
vim.lsp.inline_completion.enable()
|
vim.lsp.inline_completion.enable()
|
||||||
LazyVim.cmp.actions.ai_accept = function()
|
LazyVim.cmp.actions.ai_accept = function()
|
||||||
return vim.lsp.inline_completion.get()
|
return vim.lsp.inline_completion.get()
|
||||||
|
|
@ -43,7 +56,14 @@ return {
|
||||||
optional = true,
|
optional = true,
|
||||||
event = "VeryLazy",
|
event = "VeryLazy",
|
||||||
opts = function(_, opts)
|
opts = function(_, opts)
|
||||||
table.insert(opts.sections.lualine_x, 2, LazyVim.lualine.lsp("copilot"))
|
table.insert(
|
||||||
|
opts.sections.lualine_x,
|
||||||
|
2,
|
||||||
|
LazyVim.lualine.status(LazyVim.config.icons.kinds.Copilot, function()
|
||||||
|
local clients = vim.lsp.get_clients({ name = "copilot", bufnr = 0 })
|
||||||
|
return #clients > 0 and status[clients[1].id] or nil
|
||||||
|
end)
|
||||||
|
)
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,42 +22,6 @@ function M.status(icon, status)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Status indicator for LSP server activity
|
|
||||||
---@param server string
|
|
||||||
---@param opts? { methods?: string[], icon?: string }
|
|
||||||
function M.lsp(server, opts)
|
|
||||||
opts = opts or {}
|
|
||||||
local methods = opts.methods or { "textDocument/completion", "textDocument/inlineCompletion" }
|
|
||||||
local pending = {} ---@type table<number,true>
|
|
||||||
vim.api.nvim_create_autocmd("LspRequest", {
|
|
||||||
group = vim.api.nvim_create_augroup("lazyvim.lualine.lsp." .. server, { clear = true }),
|
|
||||||
callback = function(args)
|
|
||||||
---@class LspRequestData
|
|
||||||
---@field client_id number
|
|
||||||
---@field request { bufnr: number, method: string, type: "pending" | "cancel" | "complete" | string }
|
|
||||||
---@field request_id number
|
|
||||||
local data = args.data
|
|
||||||
local client = vim.lsp.get_client_by_id(data.client_id)
|
|
||||||
if client and client.name == server and vim.tbl_contains(methods, data.request.method) then
|
|
||||||
pending[data.request_id] = data.request.type == "pending" or nil
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
return {
|
|
||||||
function()
|
|
||||||
return opts.icon
|
|
||||||
or LazyVim.config.icons.kinds[server:sub(1, 1):upper() .. server:sub(2)]
|
|
||||||
or LazyVim.config.icons.diagnostics.Hint
|
|
||||||
end,
|
|
||||||
cond = function()
|
|
||||||
return #vim.lsp.get_clients({ name = server, bufnr = 0 }) > 0
|
|
||||||
end,
|
|
||||||
color = function()
|
|
||||||
return { fg = Snacks.util.color(vim.tbl_isempty(pending) and "Special" or "DiagnosticWarn") }
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param name string
|
---@param name string
|
||||||
---@param icon? string
|
---@param icon? string
|
||||||
function M.cmp_source(name, icon)
|
function M.cmp_source(name, icon)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue