diff options
Diffstat (limited to 'home/.config/nvim/lua/custom/plugins/completion.lua')
| -rw-r--r-- | home/.config/nvim/lua/custom/plugins/completion.lua | 112 | 
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", +            }, +          } +        }, +      }, +    }, +  }, +}  | 
