From 1b0055545ddae2243cf8fd9f1ebc5d96a261eda0 Mon Sep 17 00:00:00 2001
From: Brahmajit Das <brahmajit.xyz@gmail.com>
Date: Sun, 17 Mar 2024 03:26:53 +0530
Subject: nvim: plugins: completion: for completion settings

Signed-off-by: Brahmajit Das <brahmajit.xyz@gmail.com>
---
 lua/plugins/completion.lua | 142 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 142 insertions(+)
 create mode 100644 lua/plugins/completion.lua

(limited to 'lua/plugins/completion.lua')

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,
+	},
+})
-- 
cgit v1.2.3