diff options
| author | Elvis Claros Castro <elvis@claros.ar> | 2024-07-12 11:18:14 -0300 |
|---|---|---|
| committer | Elvis Claros Castro <elvis@claros.ar> | 2024-07-12 11:18:14 -0300 |
| commit | ea0f4bf8ffade657b1d45152dbc183d4679e75c4 (patch) | |
| tree | cc1fb023bc308e019ddce33a4b0aed39f56805dc /lua/pi/completition | |
| parent | 1fd0af14d592d612c2aaab7717c04c8806ba3daa (diff) | |
| download | nvim-conf-ea0f4bf8ffade657b1d45152dbc183d4679e75c4.tar.gz nvim-conf-ea0f4bf8ffade657b1d45152dbc183d4679e75c4.zip | |
Feat: PI
Diffstat (limited to 'lua/pi/completition')
| -rw-r--r-- | lua/pi/completition/init.lua | 205 |
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" }, + }), +}) |