summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorBrahmajit Das <brahmajit.xyz@gmail.com>2024-03-17 03:26:53 +0530
committerBrahmajit Das <brahmajit.xyz@gmail.com>2024-03-17 03:26:53 +0530
commit1b0055545ddae2243cf8fd9f1ebc5d96a261eda0 (patch)
tree83d1e8ca06ac75c7f8bb93079007416acb64e7f5 /lua
parent6297907cd6e9a5fc66306d5092a3846f2001359c (diff)
nvim: plugins: completion: for completion settings
Signed-off-by: Brahmajit Das <brahmajit.xyz@gmail.com>
Diffstat (limited to 'lua')
-rw-r--r--lua/plugins/completion.lua142
1 files changed, 142 insertions, 0 deletions
diff --git a/lua/plugins/completion.lua b/lua/plugins/completion.lua
new file mode 100644
index 0000000..85b28b7
--- /dev/null
+++ b/lua/plugins/completion.lua
@@ -0,0 +1,142 @@
+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
+
+-- luasnip setup
+local luasnip = require 'luasnip'
+
+local cmp_kinds = {
+ Text = "",
+ Method = "󰆧",
+ Function = "󰊕",
+ Constructor = "",
+ Field = "󰇽",
+ Variable = "󰂡",
+ Class = "󰠱",
+ Interface = "",
+ Module = "",
+ Property = "󰜢",
+ Unit = "",
+ Value = "󰎠",
+ Enum = "",
+ Keyword = "󰌋",
+ Snippet = "",
+ Color = "󰏘",
+ File = "󰈙",
+ Reference = "",
+ Folder = "󰉋",
+ EnumMember = "",
+ Constant = "󰏿",
+ Struct = "",
+ Event = "",
+ Operator = "󰆕",
+ TypeParameter = "󰅲",
+}
+
+-- nvim-cmp setup
+local cmp = require('cmp')
+cmp.setup {
+ formatting = {
+ fields = { "kind", "abbr" },
+ format = function(_, vim_item)
+ vim_item.kind = cmp_kinds[vim_item.kind] or ""
+ return vim_item
+ end,
+ },
+ snippet = {
+ expand = function(args)
+ require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
+ end,
+ },
+ window = {
+ completion = cmp.config.window.bordered(),
+ documentation = cmp.config.window.bordered(),
+ },
+ mapping = cmp.mapping.preset.insert({
+ ['<C-d>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-f>'] = cmp.mapping.scroll_docs(4),
+ ['<C-Space>'] = cmp.mapping.complete(),
+ ['<CR>'] = cmp.mapping.confirm {
+ behavior = cmp.ConfirmBehavior.Insert,
+ select = true,
+ },
+ ['<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' }),
+ }),
+ sources = cmp.config.sources({
+ { name = 'luasnip', option = { use_show_condition = false } },
+ { name = 'nvim_lsp' },
+ { name = 'nvim_lsp_signature_help' },
+ { name = 'path' },
+ { name = 'buffer' },
+ { name = 'nvim_lua' },
+ }),
+}
+
+-- Set configuration for specific filetype.
+cmp.setup.filetype('gitcommit', {
+ sources = cmp.config.sources({
+ { name = 'git' }, -- You can specify the `cmp_git` source if you were installed it.
+ { name = 'buffer' },
+ }),
+ require("cmp_git").setup(),
+})
+
+-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
+require 'cmp'.setup.cmdline('/', {
+ completion = { autocomplete = false },
+ sources = {
+ -- { name = 'buffer' }
+ { name = 'buffer', opts = { keyword_pattern = [=[[^[:blank:]].*]=] } }
+ }
+})
+
+-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
+cmp.setup.cmdline(':', {
+ completion = { autocomplete = false },
+ sources = cmp.config.sources({
+ { name = 'path' }
+ }, {
+ { name = 'cmdline' }
+ })
+})
+
+-- If you want insert `(` after select function or method item
+local cmp_autopairs = require('nvim-autopairs.completion.cmp')
+cmp.event:on(
+ 'confirm_done',
+ cmp_autopairs.on_confirm_done()
+)
+
+-- lazy loading to get in memory snippets of languages you use
+require("luasnip/loaders/from_vscode").lazy_load()
+
+vim.diagnostic.config({
+ virtual_text = false,
+ signs = true,
+ underline = false,
+ update_in_insert = true,
+ severity_sort = false,
+ float = {
+ source = true,
+ },
+})