Merge branch 'main' into dev

This commit is contained in:
chuyanlong 2025-09-28 17:37:21 +08:00
commit 3974cd425b
11 changed files with 126 additions and 84 deletions

View file

@ -1,3 +1,3 @@
{
".": "15.3.0"
".": "15.5.0"
}

View file

@ -1,5 +1,36 @@
# Changelog
## [15.5.0](https://github.com/LazyVim/LazyVim/compare/v15.4.0...v15.5.0) (2025-09-27)
### Features
* **ai.copilot-native:** let sidekick.nvim handle some things if available ([b25ea9c](https://github.com/LazyVim/LazyVim/commit/b25ea9c153e76d11579731e1d5529f275a36f91d))
* **ai:** added completion hooks for next edit suggestions ([30a325d](https://github.com/LazyVim/LazyVim/commit/30a325d67184a80006dc55352d9663cdf01082d5))
* **extras:** added extra for `sidekick.nvim` (Copilot LSP integration) ([dbfe209](https://github.com/LazyVim/LazyVim/commit/dbfe20996ce62d6b0048245ab4e304610548da04))
### Bug Fixes
* **ai.copilot:** disable copilot lsp if installed. copilot.lua needs its own version of the LSP ([e9bc607](https://github.com/LazyVim/LazyVim/commit/e9bc6074d1ea69e921a6195d1dc34333eaa310f8))
## [15.4.0](https://github.com/LazyVim/LazyVim/compare/v15.3.0...v15.4.0) (2025-09-26)
### Features
* **copilot-native:** added experimental support for next edit suggestions. check the docs to enable ([c83df9e](https://github.com/LazyVim/LazyVim/commit/c83df9e68dd41f5a3f7df5a7048169ee286a7da8))
* **copilot-native:** added keymaps to cycle suggestions ([6bd630c](https://github.com/LazyVim/LazyVim/commit/6bd630cec6f905665691d593dc5d0fb3d54f560c))
* **copilot-native:** better lualine status ([9913e16](https://github.com/LazyVim/LazyVim/commit/9913e1665d783d9c4407633bc33475d403aff433))
* **copilot-native:** removed experimental **nes** support with `copilot_lsp` for now, since it's not the best experience right now ([ed637bb](https://github.com/LazyVim/LazyVim/commit/ed637bb0f7f418de069a4d5a7ed8a7b3b93eb425))
* **copilot:** added `copilot-native` extra to setup native inline completions in Neovim ([3b02963](https://github.com/LazyVim/LazyVim/commit/3b0296358508da1eb258c8716df163dd04fa6449))
### Bug Fixes
* **catppuccin:** follow-up on api change ([#6505](https://github.com/LazyVim/LazyVim/issues/6505)) ([af6e250](https://github.com/LazyVim/LazyVim/commit/af6e2505b54270c30145e8f4191b865870537287))
* **treesitter:** create buffer-local textobjects keymaps only when available. Closes [#6508](https://github.com/LazyVim/LazyVim/issues/6508) ([5985ca0](https://github.com/LazyVim/LazyVim/commit/5985ca0cf1a0c1ddee8b2b718c730f988cec7001))
## [15.3.0](https://github.com/LazyVim/LazyVim/compare/v15.2.0...v15.3.0) (2025-09-23)

View file

@ -1,4 +1,4 @@
*LazyVim.txt* For Neovim Last change: 2025 September 26
*LazyVim.txt* For Neovim Last change: 2025 September 27
==============================================================================
Table of Contents *LazyVim-table-of-contents*

View file

@ -3,7 +3,7 @@ _G.LazyVim = require("lazyvim.util")
---@class LazyVimConfig: LazyVimOptions
local M = {}
M.version = "15.3.0" -- x-release-please-version
M.version = "15.5.0" -- x-release-please-version
LazyVim.config = M
---@class LazyVimOptions

View file

@ -49,7 +49,6 @@ map("n", "<leader>bD", "<cmd>:bd<cr>", { desc = "Delete Buffer and Window" })
map({ "i", "n", "s" }, "<esc>", function()
vim.cmd("noh")
LazyVim.cmp.actions.snippet_stop()
LazyVim.cmp.actions.ai_stop()
return "<esc>"
end, { expr = true, desc = "Escape and Clear hlsearch" })

View file

@ -2,9 +2,6 @@
if lazyvim_docs then
-- Native inline completions don't support being shown as regular completions
vim.g.ai_cmp = false
-- Set to `true` in your `options.lua` to enable experimental support for Next Edit Suggestions
vim.g.copilot_nes = false
end
if LazyVim.has_extra("ai.copilot-native") then
@ -29,17 +26,6 @@ return {
opts = {
servers = {
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,
},
-- stylua: ignore
keys = {
{
@ -60,41 +46,25 @@ return {
setup = {
copilot = function()
vim.lsp.inline_completion.enable()
-- Only trigger NES updates:
-- * when leaving insert mode
-- * when text is changed (in normal mode)
-- * when accepting a next edit suggestion
local nes_update = Snacks.util.debounce(function()
return vim.g.copilot_nes and require("copilot-lsp.nes").request_nes("copilot")
end, { ms = 100 })
vim.api.nvim_create_autocmd({ "InsertLeave", "TextChanged" }, {
group = vim.api.nvim_create_augroup("lazyvim.copilot-native.complete", { clear = true }),
callback = nes_update,
})
-- Accept inline suggestions or next edits
LazyVim.cmp.actions.ai_accept = function()
if vim.b.nes_state then
local nes = require("copilot-lsp.nes")
return vim.lsp.inline_completion.get()
end
-- Try to jump to the start of the suggestion edit.
if nes.walk_cursor_start_edit() then
return true
end
-- apply the pending suggestion and jump to the end of the edit.
if nes.apply_pending_nes() then
nes.walk_cursor_end_edit()
nes_update() -- trigger new nes update after accept
return true
end
end
if vim.lsp.inline_completion.get() then
-- nes_update() -- ensure nes update is triggered after inline completion
return true
end
if not LazyVim.has_extra("ai.sidekick") then
vim.lsp.config("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,
},
})
end
end,
},
@ -107,6 +77,9 @@ return {
optional = true,
event = "VeryLazy",
opts = function(_, opts)
if LazyVim.has_extra("ai.sidekick") then
return
end
table.insert(
opts.sections.lualine_x,
2,
@ -117,34 +90,4 @@ return {
)
end,
},
vim.g.copilot_nes
and {
"copilotlsp-nvim/copilot-lsp",
init = function()
vim.api.nvim_create_autocmd("BufEnter", {
callback = function(ev)
local buf = ev.buf
local client = vim.lsp.get_clients({ name = "copilot", bufnr = buf })[1]
if not client then
return
end
client:notify("textDocument/didFocus", {
textDocument = {
uri = vim.uri_from_bufnr(buf),
},
})
end,
})
LazyVim.cmp.actions.ai_stop = function()
require("copilot-lsp.nes").clear()
end
end,
keys = {
-- nes is also useful in normal mode
{ "<tab>", LazyVim.cmp.map({ "ai_accept" }, "<tab>"), mode = { "n" }, expr = true },
},
}
or nil,
}

View file

@ -25,6 +25,17 @@ return {
},
},
-- copilot-language-server
{
"neovim/nvim-lspconfig",
opts = {
servers = {
-- copilot.lua only works with its own copilot lsp server
copilot = { enabled = false },
},
},
},
-- add ai_accept action
{
"zbirenbaum/copilot.lua",

View file

@ -0,0 +1,59 @@
return {
desc = "Next edit suggestions with the Copilot LSP server",
-- copilot-language-server
{
"neovim/nvim-lspconfig",
opts = {
servers = {
copilot = {},
},
},
},
-- lualine
{
"nvim-lualine/lualine.nvim",
optional = true,
event = "VeryLazy",
opts = function(_, opts)
local icons = {
Error = { "", "DiagnosticError" },
Inactive = { "", "MsgArea" },
Warning = { "", "DiagnosticWarn" },
Normal = { LazyVim.config.icons.kinds.Copilot, "Special" },
}
table.insert(opts.sections.lualine_x, 2, {
function()
local status = require("sidekick.status").get()
return status and vim.tbl_get(icons, status.kind, 1)
end,
cond = function()
return require("sidekick.status").get() ~= nil
end,
color = function()
local status = require("sidekick.status").get()
local hl = status and (status.busy and "DiagnosticWarn" or vim.tbl_get(icons, status.kind, 2))
return { fg = Snacks.util.color(hl) }
end,
})
end,
},
{
"folke/sidekick.nvim",
opts = function()
-- Accept inline suggestions or next edits
LazyVim.cmp.actions.ai_nes = function()
local Nes = require("sidekick.nes")
if Nes.have() and (Nes.jump() or Nes.apply()) then
return true
end
end
end,
keys = {
-- nes is also useful in normal mode
{ "<tab>", LazyVim.cmp.map({ "ai_nes" }, "<tab>"), mode = { "n" }, expr = true },
},
},
}

View file

@ -122,12 +122,12 @@ return {
if opts.keymap.preset == "super-tab" then -- super-tab
opts.keymap["<Tab>"] = {
require("blink.cmp.keymap.presets").get("super-tab")["<Tab>"][1],
LazyVim.cmp.map({ "snippet_forward", "ai_accept" }),
LazyVim.cmp.map({ "snippet_forward", "ai_nes", "ai_accept" }),
"fallback",
}
else -- other presets
opts.keymap["<Tab>"] = {
LazyVim.cmp.map({ "snippet_forward", "ai_accept" }),
LazyVim.cmp.map({ "snippet_forward", "ai_nes", "ai_accept" }),
"fallback",
}
end

View file

@ -52,7 +52,7 @@ return {
fallback()
end,
["<tab>"] = function(fallback)
return LazyVim.cmp.map({ "snippet_forward", "ai_accept" }, fallback)()
return LazyVim.cmp.map({ "snippet_forward", "ai_nes", "ai_accept" }, fallback)()
end,
}),
sources = cmp.config.sources({

View file

@ -18,7 +18,6 @@ M.actions = {
vim.snippet.stop()
end
end,
ai_stop = function() end,
}
---@param actions string[]