aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/home/.config/nvim/lua/custom/plugins/completion.lua
diff options
context:
space:
mode:
Diffstat (limited to 'home/.config/nvim/lua/custom/plugins/completion.lua')
-rw-r--r--home/.config/nvim/lua/custom/plugins/completion.lua112
1 files changed, 112 insertions, 0 deletions
diff --git a/home/.config/nvim/lua/custom/plugins/completion.lua b/home/.config/nvim/lua/custom/plugins/completion.lua
new file mode 100644
index 0000000..e122857
--- /dev/null
+++ b/home/.config/nvim/lua/custom/plugins/completion.lua
@@ -0,0 +1,112 @@
+return {
+ {
+ "hrsh7th/nvim-cmp",
+ event = "InsertEnter",
+ config = function()
+ local cmp = require("cmp")
+
+ local has_words_before = function()
+ 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
+
+ local luasnip = require("luasnip")
+
+ cmp.setup({
+ snippet = {
+ expand = function(args)
+ require("luasnip").lsp_expand(args.body)
+ end,
+ },
+ mapping = {
+ ["<Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item()
+ elseif luasnip.expand_or_jumpable() then
+ luasnip.expand_or_jump()
+ elseif has_words_before() then
+ cmp.complete()
+ else
+ fallback()
+ end
+ end, {
+ "i",
+ "s",
+ }),
+ ["<S-Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_prev_item()
+ elseif luasnip.jumpable(-1) then
+ luasnip.jump(-1)
+ else
+ fallback()
+ end
+ end, {
+ "i",
+ "s",
+ }),
+ ["<CR>"] = cmp.mapping.confirm({
+ behavior = cmp.ConfirmBehavior.Replace,
+ select = true,
+ }),
+ },
+ formatting = {
+ format = function(entry, vim_item)
+ -- set a name for each source
+ vim_item.menu = ({
+ path = "[Path]",
+ nvim_lsp = "[LSP]",
+ luasnip = "[LuaSnip]",
+ dap = "[dap]",
+ })[entry.source.name]
+ return vim_item
+ end,
+ },
+ sources = {
+ { name = "nvim_lsp" },
+ { name = "luasnip" },
+ { name = "path" },
+ { name = "nvim_lsp_signature_help" },
+ },
+ })
+
+ require "cmp".setup.filetype(
+ { "dap-repl", "dapui_watches", "dapui_hover" }, {
+ sources = {
+ { name = "dap" },
+ },
+ })
+ end,
+ dependencies = {
+ "hrsh7th/cmp-nvim-lsp",
+ "hrsh7th/cmp-path",
+ "hrsh7th/cmp-nvim-lsp-signature-help",
+ "rcarriga/cmp-dap",
+ {
+ "saadparwaiz1/cmp_luasnip",
+ dependencies = {
+ {
+ "L3MON4D3/LuaSnip",
+ event = "InsertCharPre",
+ keys = {
+ { "<c-j>", function() require "luasnip".jump(1) end, mode = "i" },
+ { "<c-k>", function() require "luasnip".jump(-1) end, mode = "i" },
+ },
+ config = function()
+ require("luasnip/loaders/from_vscode").lazy_load()
+ end,
+ dependencies = {
+ "kitagry/vs-snippets",
+ "rafamadriz/friendly-snippets",
+ "kkonghao/snippet-dog",
+ },
+ }
+ },
+ },
+ },
+ },
+}