mirror of
https://github.com/LazyVim/LazyVim.git
synced 2026-07-25 14:01:06 +00:00
Merge branch 'main' into dev
This commit is contained in:
commit
3974cd425b
11 changed files with 126 additions and 84 deletions
2
.github/.release-please-manifest.json
vendored
2
.github/.release-please-manifest.json
vendored
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
{
|
||||||
".": "15.3.0"
|
".": "15.5.0"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
31
CHANGELOG.md
31
CHANGELOG.md
|
|
@ -1,5 +1,36 @@
|
||||||
# Changelog
|
# 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)
|
## [15.3.0](https://github.com/LazyVim/LazyVim/compare/v15.2.0...v15.3.0) (2025-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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*
|
Table of Contents *LazyVim-table-of-contents*
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ _G.LazyVim = require("lazyvim.util")
|
||||||
---@class LazyVimConfig: LazyVimOptions
|
---@class LazyVimConfig: LazyVimOptions
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
M.version = "15.3.0" -- x-release-please-version
|
M.version = "15.5.0" -- x-release-please-version
|
||||||
LazyVim.config = M
|
LazyVim.config = M
|
||||||
|
|
||||||
---@class LazyVimOptions
|
---@class LazyVimOptions
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@ map("n", "<leader>bD", "<cmd>:bd<cr>", { desc = "Delete Buffer and Window" })
|
||||||
map({ "i", "n", "s" }, "<esc>", function()
|
map({ "i", "n", "s" }, "<esc>", function()
|
||||||
vim.cmd("noh")
|
vim.cmd("noh")
|
||||||
LazyVim.cmp.actions.snippet_stop()
|
LazyVim.cmp.actions.snippet_stop()
|
||||||
LazyVim.cmp.actions.ai_stop()
|
|
||||||
return "<esc>"
|
return "<esc>"
|
||||||
end, { expr = true, desc = "Escape and Clear hlsearch" })
|
end, { expr = true, desc = "Escape and Clear hlsearch" })
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,6 @@
|
||||||
if lazyvim_docs then
|
if lazyvim_docs then
|
||||||
-- Native inline completions don't support being shown as regular completions
|
-- Native inline completions don't support being shown as regular completions
|
||||||
vim.g.ai_cmp = false
|
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
|
end
|
||||||
|
|
||||||
if LazyVim.has_extra("ai.copilot-native") then
|
if LazyVim.has_extra("ai.copilot-native") then
|
||||||
|
|
@ -29,17 +26,6 @@ return {
|
||||||
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,
|
|
||||||
},
|
|
||||||
-- stylua: ignore
|
-- stylua: ignore
|
||||||
keys = {
|
keys = {
|
||||||
{
|
{
|
||||||
|
|
@ -60,41 +46,25 @@ return {
|
||||||
setup = {
|
setup = {
|
||||||
copilot = function()
|
copilot = function()
|
||||||
vim.lsp.inline_completion.enable()
|
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
|
-- Accept inline suggestions or next edits
|
||||||
LazyVim.cmp.actions.ai_accept = function()
|
LazyVim.cmp.actions.ai_accept = function()
|
||||||
if vim.b.nes_state then
|
return vim.lsp.inline_completion.get()
|
||||||
local nes = require("copilot-lsp.nes")
|
end
|
||||||
|
|
||||||
-- Try to jump to the start of the suggestion edit.
|
if not LazyVim.has_extra("ai.sidekick") then
|
||||||
if nes.walk_cursor_start_edit() then
|
vim.lsp.config("copilot", {
|
||||||
return true
|
handlers = {
|
||||||
end
|
didChangeStatus = function(err, res, ctx)
|
||||||
|
if err then
|
||||||
-- apply the pending suggestion and jump to the end of the edit.
|
return
|
||||||
if nes.apply_pending_nes() then
|
end
|
||||||
nes.walk_cursor_end_edit()
|
status[ctx.client_id] = res.kind ~= "Normal" and "error" or res.busy and "pending" or "ok"
|
||||||
nes_update() -- trigger new nes update after accept
|
if res.status == "Error" then
|
||||||
return true
|
LazyVim.error("Please use `:LspCopilotSignIn` to sign in to Copilot")
|
||||||
end
|
end
|
||||||
end
|
end,
|
||||||
if vim.lsp.inline_completion.get() then
|
},
|
||||||
-- nes_update() -- ensure nes update is triggered after inline completion
|
})
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|
@ -107,6 +77,9 @@ return {
|
||||||
optional = true,
|
optional = true,
|
||||||
event = "VeryLazy",
|
event = "VeryLazy",
|
||||||
opts = function(_, opts)
|
opts = function(_, opts)
|
||||||
|
if LazyVim.has_extra("ai.sidekick") then
|
||||||
|
return
|
||||||
|
end
|
||||||
table.insert(
|
table.insert(
|
||||||
opts.sections.lualine_x,
|
opts.sections.lualine_x,
|
||||||
2,
|
2,
|
||||||
|
|
@ -117,34 +90,4 @@ return {
|
||||||
)
|
)
|
||||||
end,
|
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,
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
-- add ai_accept action
|
||||||
{
|
{
|
||||||
"zbirenbaum/copilot.lua",
|
"zbirenbaum/copilot.lua",
|
||||||
|
|
|
||||||
59
lua/lazyvim/plugins/extras/ai/sidekick.lua
Normal file
59
lua/lazyvim/plugins/extras/ai/sidekick.lua
Normal 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 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -122,12 +122,12 @@ return {
|
||||||
if opts.keymap.preset == "super-tab" then -- super-tab
|
if opts.keymap.preset == "super-tab" then -- super-tab
|
||||||
opts.keymap["<Tab>"] = {
|
opts.keymap["<Tab>"] = {
|
||||||
require("blink.cmp.keymap.presets").get("super-tab")["<Tab>"][1],
|
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",
|
"fallback",
|
||||||
}
|
}
|
||||||
else -- other presets
|
else -- other presets
|
||||||
opts.keymap["<Tab>"] = {
|
opts.keymap["<Tab>"] = {
|
||||||
LazyVim.cmp.map({ "snippet_forward", "ai_accept" }),
|
LazyVim.cmp.map({ "snippet_forward", "ai_nes", "ai_accept" }),
|
||||||
"fallback",
|
"fallback",
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ return {
|
||||||
fallback()
|
fallback()
|
||||||
end,
|
end,
|
||||||
["<tab>"] = function(fallback)
|
["<tab>"] = function(fallback)
|
||||||
return LazyVim.cmp.map({ "snippet_forward", "ai_accept" }, fallback)()
|
return LazyVim.cmp.map({ "snippet_forward", "ai_nes", "ai_accept" }, fallback)()
|
||||||
end,
|
end,
|
||||||
}),
|
}),
|
||||||
sources = cmp.config.sources({
|
sources = cmp.config.sources({
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ M.actions = {
|
||||||
vim.snippet.stop()
|
vim.snippet.stop()
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
ai_stop = function() end,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
---@param actions string[]
|
---@param actions string[]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue