From 9bf093ee2649b964183d0444f1f6f199ca04c35f Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Tue, 15 Jul 2025 22:41:38 +0200 Subject: [PATCH] =?UTF-8?q?feat!(completion):=20replace=20completion=20eng?= =?UTF-8?q?ine:=20cmp-nvim=20=E2=86=92=20blink.cmp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BREAKING CHANGE: Change behaviour concerning the completion engine. BREAKING CHANGE: Re-Enabling auto-show again --- lazy-lock.json | 7 +--- lua/complete.lua | 66 +------------------------------ lua/lsp.lua | 4 +- lua/plugins-configure.lua | 81 ++++++++++++++++++++++++++++++++------- 4 files changed, 72 insertions(+), 86 deletions(-) diff --git a/lazy-lock.json b/lazy-lock.json index 677a870..0cd1fd4 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -1,9 +1,6 @@ { "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, - "LuaSnip": { "branch": "master", "commit": "66b5c2707e624dcd2cd3605676c64a2efe47e9d1" }, - "cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" }, - "cmp-path": { "branch": "main", "commit": "e52e640b7befd8113b3350f46e8cfcfe98fcf730" }, - "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, + "blink.cmp": { "branch": "main", "commit": "3536ce464e82843b00c76718d9bfe1994647d686" }, "fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" }, "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, "gitsigns.nvim": { "branch": "main", "commit": "4666d040b60d1dc0e474ccd9a3fd3c4d67b4767c" }, @@ -19,9 +16,9 @@ "mini.icons": { "branch": "main", "commit": "94848dad1589a199f876539bd79befb0c5e3abf0" }, "mini.nvim": { "branch": "main", "commit": "3f71fd3573981bf18f76b2bfb6518c4ae728638d" }, "neorg": { "branch": "main", "commit": "790b0444c0c654131a722817dc893332e06c72b9" }, + "neorg-interim-ls": { "branch": "main", "commit": "348cd121d8b872248e9b0e48e3611c54dfad83f0" }, "neorg-telescope": { "branch": "main", "commit": "7fb6ca6a632c3c095601d379a664c0c1f802dc6c" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, - "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" }, "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, "nvim-dap": { "branch": "master", "commit": "cc77338e6e34c79f1c638f51ae4160dc9bfb05de" }, "nvim-lspconfig": { "branch": "master", "commit": "d005da998edad401524504d03c7a88a56d125224" }, diff --git a/lua/complete.lua b/lua/complete.lua index 522ea4e..eb6aea4 100644 --- a/lua/complete.lua +++ b/lua/complete.lua @@ -1,5 +1,5 @@ -- See `:help cmp` -local cmp = require 'cmp' +-- local cmp = require 'cmp' local luasnip = require 'luasnip' require('luasnip.loaders.from_vscode').lazy_load() require('luasnip.loaders.from_lua').lazy_load() @@ -9,67 +9,3 @@ luasnip.config.setup { enable_autosnippets = true, } luasnip.filetype_extend("jjdescription", { "gitcommit" }) - -local has_words_before = function() - unpack = unpack or table.unpack - local line, col = unpack(vim.api.nvim_win_get_cursor(0)) - return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil -end - -cmp.setup { - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - completion = { - completeopt = 'menu,menuone,noinsert', - autocomplete = false, - }, - mapping = cmp.mapping.preset.insert { - [''] = cmp.mapping.select_next_item(), - [''] = cmp.mapping.select_prev_item(), - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete {}, - [''] = cmp.mapping.confirm { - behavior = cmp.ConfirmBehavior.Replace, - select = true, - }, - [''] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close() }), - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - if #cmp.get_entries() == 1 then - cmp.confirm({ select = true }) - else - cmp.select_next_item() - end - elseif luasnip.expand_or_locally_jumpable() then - luasnip.expand_or_jump() - elseif has_words_before() then - cmp.complete() - if #cmp.get_entries() == 1 then - cmp.confirm({ select = true }) - end - else - fallback() - end - end, { 'i', 's' }), - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - elseif luasnip.locally_jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, { 'i', 's' }), - }, - sources = { - { name = 'lazydev', - group_index = 0 }, - { name = 'nvim_lsp' }, - { name = 'luasnip' }, - { name = 'path' }, - }, -} diff --git a/lua/lsp.lua b/lua/lsp.lua index 7f14e54..a1f1864 100644 --- a/lua/lsp.lua +++ b/lua/lsp.lua @@ -87,8 +87,8 @@ require('which-key').add { } -- nvim-cmp supports additional completion capabilities, so broadcast that to servers -local capabilities = vim.lsp.protocol.make_client_capabilities() -capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) +-- local capabilities = vim.lsp.protocol.make_client_capabilities() +-- capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) -- [[ System LSPs ]] local setup_godot_dap = function() diff --git a/lua/plugins-configure.lua b/lua/plugins-configure.lua index 23996c0..4980471 100644 --- a/lua/plugins-configure.lua +++ b/lua/plugins-configure.lua @@ -49,22 +49,75 @@ require('lazy').setup({ -- DAP: Debug Adapter Protocol 'mfussenegger/nvim-dap', - { - -- Autocompletion - 'hrsh7th/nvim-cmp', + -- [[ Autocompletion ]] + 'saghen/blink.cmp', + -- optional: provides snippets for the snippet source dependencies = { - -- Snippet Engine & its associated nvim-cmp source - 'L3MON4D3/LuaSnip', - 'saadparwaiz1/cmp_luasnip', - - -- Adds LSP completion capabilities - 'hrsh7th/cmp-nvim-lsp', - 'hrsh7th/cmp-path', - - -- Adds a number of user-friendly snippets 'rafamadriz/friendly-snippets', + 'L3MON4D3/LuaSnip', }, + + -- use a release tag to download pre-built binaries + version = '1.*', + -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust + -- build = 'cargo build --release', + -- If you use nix, you can build from source using latest nightly rust with: + -- build = 'nix run .#build-plugin', + + ---@module 'blink.cmp' + ---@type blink.cmp.Config + opts = { + -- 'default' (recommended) for mappings similar to built-in completions (C-y to accept) + -- 'super-tab' for mappings similar to vscode (tab to accept) + -- 'enter' for enter to accept + -- 'none' for no mappings + -- + -- All presets have the following mappings: + -- C-space: Open menu or open docs if already open + -- C-n/C-p or Up/Down: Select next/previous item + -- C-e: Hide menu + -- C-k: Toggle signature help (if signature.enabled = true) + -- + -- See :h blink-cmp-config-keymap for defining your own keymap + keymap = { preset = 'super-tab' }, + + appearance = { + -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' + -- Adjusts spacing to ensure icons are aligned + nerd_font_variant = 'mono' + }, + + snippets = { preset = 'luasnip' }, + + signature = { enabled = true }, + + -- (Default) Only show the documentation popup when manually triggered + completion = { + documentation = { auto_show = true }, + list = { + selection = { + preselect = true, + auto_insert = false, + }, + }, + -- menu = { auto_show = false }, + }, + + -- Default list of enabled providers defined so that you can extend it + -- elsewhere in your config, without redefining it, due to `opts_extend` + sources = { + default = { 'lsp', 'path', 'snippets', 'buffer', }, + }, + + -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance + -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation, + -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"` + -- + -- See the fuzzy documentation for more information + fuzzy = { implementation = "prefer_rust_with_warning" } + }, + opts_extend = { "sources.default" } }, -- Useful plugin to show you pending keybinds. @@ -259,7 +312,7 @@ require('lazy').setup({ }, { "nvim-neorg/neorg", - dependencies = { "luarocks.nvim", { "nvim-lua/plenary.nvim" }, { "nvim-neorg/neorg-telescope" } }, + dependencies = { "luarocks.nvim", { "nvim-lua/plenary.nvim" }, { "nvim-neorg/neorg-telescope" }, "benlubas/neorg-interim-ls" }, lazy = false, -- Disable lazy loading as some `lazy.nvim` distributions set `lazy = true` by default -- version = "*", -- Pin Neorg to the latest stable release config = function() @@ -269,7 +322,7 @@ require('lazy').setup({ ["core.keybinds"] = {}, ["core.completion"] = { config = { - engine = "nvim-cmp", + engine = { module_name = "external.lsp-completion" } }, }, ["core.concealer"] = {