aboutsummaryrefslogtreecommitdiffstats
path: root/lua/pi/completition/init.lua
diff options
context:
space:
mode:
authorElvis Claros Castro <elvis@claros.ar>2024-07-12 11:18:14 -0300
committerElvis Claros Castro <elvis@claros.ar>2024-07-12 11:18:14 -0300
commitea0f4bf8ffade657b1d45152dbc183d4679e75c4 (patch)
treecc1fb023bc308e019ddce33a4b0aed39f56805dc /lua/pi/completition/init.lua
parent1fd0af14d592d612c2aaab7717c04c8806ba3daa (diff)
downloadnvim-conf-ea0f4bf8ffade657b1d45152dbc183d4679e75c4.tar.gz
nvim-conf-ea0f4bf8ffade657b1d45152dbc183d4679e75c4.zip
Feat: PI
Diffstat (limited to 'lua/pi/completition/init.lua')
-rw-r--r--lua/pi/completition/init.lua205
1 files changed, 205 insertions, 0 deletions
diff --git a/lua/pi/completition/init.lua b/lua/pi/completition/init.lua
new file mode 100644
index 0000000..667e30b
--- /dev/null
+++ b/lua/pi/completition/init.lua
@@ -0,0 +1,205 @@
+local cmp = require "cmp"
+local lspkind = require "lspkind"
+local luasnip = require "luasnip"
+local cmp_autopairs = require "nvim-autopairs.completion.cmp"
+local compare = require "cmp.config.compare"
+
+cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done { map_char = { tex = "" } })
+
+cmp.setup {
+ window = {
+ completion = {
+ border = "rounded",
+ -- winhighlight = 'Normal:Pmenu,FloatBorder:Pmenu,CursorLine:PmenuSel,Search:None',
+ -- winblend = vim.o.pumblend,
+ -- scrolloff = 0,
+ -- col_offset = 0,
+ -- side_padding = 1,
+ -- scrollbar = true,
+ },
+ documentation = {
+ -- max_height = math.floor(WIDE_HEIGHT * (WIDE_HEIGHT / vim.o.lines)),
+ -- max_width = math.floor((WIDE_HEIGHT * 2) * (vim.o.columns / (WIDE_HEIGHT * 2 * 16 / 9))),
+ border = "rounded",
+ -- winhighlight = 'FloatBorder:NormalFloat',
+ -- winblend = vim.o.pumblend,
+ },
+ },
+ mapping = {
+ ["<C-d>"] = cmp.mapping.scroll_docs(-4),
+ ["<C-f>"] = cmp.mapping.scroll_docs(4),
+ ["<C-e>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.close()
+ elseif luasnip.expand_or_jumpable() then
+ luasnip.expand_or_jump()
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ ["<C-n>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item()
+ elseif luasnip.choice_active() then
+ luasnip.change_choice(1)
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ ["<C-p>"] = cmp.mapping.select_prev_item(),
+ ["<C-l>"] = cmp.mapping.select_next_item(),
+ ["<C-y>"] = cmp.mapping.confirm {
+ behavior = cmp.ConfirmBehavior.Insert,
+ select = true,
+ },
+ ["<c-space>"] = cmp.mapping.complete(),
+ },
+ sources = {
+ { name = "dictionary" },
+ { name = "nvim_lua" },
+ { name = "nvim_lsp" },
+ { name = "path" },
+ { name = "luasnip" },
+ { name = "copilot" },
+ {
+ name = "buffer",
+ keyword_length = 4,
+ option = {
+ get_bufnrs = function()
+ local bufs = {}
+ for _, win in ipairs(vim.api.nvim_list_wins()) do
+ local bufnr = vim.api.nvim_win_get_buf(win)
+ if vim.api.nvim_buf_get_option(bufnr, "buftype") ~= "terminal" then
+ bufs[bufnr] = true
+ end
+ end
+ return vim.tbl_keys(bufs)
+ end,
+ },
+ },
+ },
+
+ snippet = {
+ expand = function(args)
+ require("luasnip").lsp_expand(args.body)
+ end,
+ },
+
+ formatting = {
+ format = function (entry, vim_item)
+ lspkind.cmp_format {
+ with_text = true,
+ menu = {
+ buffer = "[buf]",
+ nvim_lsp = "[ ]",
+ nvim_lua = "[api]",
+ path = "[path]",
+ luasnip = "[snip]",
+ copilot = "[ﮧ ]",
+ ["vim-dadbod-completion"] = "[DB]",
+ },
+ }
+ local KIND_ICONS = {
+ Tailwind = '󰹞󰹞󰹞󰹞󰹞󰹞󰹞󰹞',
+ Color = ' ',
+ -- Class = 7,
+ -- Constant = '󰚞',
+ -- Constructor = 4,
+ -- Enum = 13,
+ -- EnumMember = 20,
+ -- Event = 23,
+ -- Field = 5,
+ -- File = 17,
+ -- Folder = 19,
+ -- Function = 3,
+ -- Interface = 8,
+ -- Keyword = 14,
+ -- Method = 2,
+ -- Module = 9,
+ -- Operator = 24,
+ -- Property = 10,
+ -- Reference = 18,
+ Snippet = " ",
+ -- Struct = 22,
+ -- Text = "",
+ -- TypeParameter = 25,
+ -- Unit = 11,
+ -- Value = 12,
+ -- Variable = 6
+ }
+ if vim_item.kind == 'Color' and entry.completion_item.documentation then
+ local _, _, r, g, b =
+ ---@diagnostic disable-next-line: param-type-mismatch
+ string.find(entry.completion_item.documentation, '^rgb%((%d+), (%d+), (%d+)')
+
+ if r and g and b then
+ local color = string.format('%02x', r) .. string.format('%02x', g) .. string.format('%02x', b)
+ local group = 'Tw_' .. color
+
+ if vim.api.nvim_call_function('hlID', { group }) < 1 then
+ vim.api.nvim_command('highlight' .. ' ' .. group .. ' ' .. 'guifg=#' .. color)
+ end
+
+ vim_item.kind = KIND_ICONS.Tailwind
+ vim_item.kind_hl_group = group
+
+ return vim_item
+ end
+ end
+
+ vim_item.kind = KIND_ICONS[vim_item.kind] or vim_item.kind
+ return vim_item
+ end
+ },
+
+ sorting = {
+ priority_weight = 2,
+ comparators = {
+ compare.kind,
+ compare.sort_text,
+ },
+ },
+
+ experimental = {
+ native_menu = false,
+
+ ghost_text = false,
+ },
+}
+
+vim.api.nvim_set_hl(0, "CmpItemKindCopilot", { fg = "#6CC644" })
+
+-- Set configuration for specific filetype.
+cmp.setup.filetype("gitcommit", {
+ sources = cmp.config.sources({
+ { name = "cmp_git" }, -- You can specify the `cmp_git` source if you were installed it.
+ }, {
+ { name = "buffer" },
+ }),
+})
+
+-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
+cmp.setup.cmdline("/", {
+ mapping = cmp.mapping.preset.cmdline(),
+ sources = {
+ { name = "buffer" },
+ },
+})
+
+-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
+cmp.setup.cmdline(":", {
+ mapping = cmp.mapping.preset.cmdline(),
+ sources = cmp.config.sources({
+ { name = "path" },
+ }, {
+ { name = "cmdline" },
+ }),
+})
+
+cmp.setup.filetype({ "sql", "mysql", "plsql" }, {
+ sources = cmp.config.sources({
+ { name = "vim-dadbod-completion" },
+ }, {
+ { name = "buffer" },
+ }),
+})