summaryrefslogtreecommitdiffstats
path: root/core/overrides/cmp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'core/overrides/cmp.lua')
-rw-r--r--core/overrides/cmp.lua122
1 files changed, 122 insertions, 0 deletions
diff --git a/core/overrides/cmp.lua b/core/overrides/cmp.lua
new file mode 100644
index 0000000..2b6a9cd
--- /dev/null
+++ b/core/overrides/cmp.lua
@@ -0,0 +1,122 @@
+local has_words_before = function()
+ unpack = unpack or table.unpack
+ local line, col = unpack(a.nvim_win_get_cursor(0))
+ return col ~= 0 and a.nvim_buf_get_lines(0, line - 1, line, true)
+ [1]:sub(col, col):match("%s") == nil
+end
+
+local cmp = require('cmp')
+local luasnip = require('luasnip')
+require("luasnip.loaders.from_vscode").lazy_load()
+
+cmp.setup {
+ completion = { autocomplete = false, },
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body)
+ end,
+ },
+ sources = cmp.config.sources({
+ { name = 'nvim_lsp', keyword_length = 3 },
+ { name = 'luasnip', keyword_length = 3 },
+ { name = 'path' },
+ { name = 'buffer', keyword_length = 3, max_item_count = 7 },
+ { name = 'calc' },
+ }),
+ window = {
+ completion = {
+ winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
+ col_offset = -3,
+ side_padding = 0,
+ }
+ },
+ formatting = {
+ fields = { "kind", "abbr", "menu" },
+ format = function(entry, vim_item)
+ local kind_icons = {
+ Text = 'Tx',
+ Snippet = '<>',
+ Method = ' ',
+ Function = '{}',
+ Constructor = ' ',
+ Field = '""',
+ Variable = 'x=',
+ Class = '~{',
+ Interface = '.h',
+ Module = ' ',
+ Property = '@p',
+ Unit = ' ',
+ Value = ' ',
+ Enum = 'E#',
+ Keyword = '$1',
+ Color = ' ',
+ File = ' ',
+ Reference = ' ',
+ Folder = ' ',
+ EnumMember = ' ',
+ Constant = ' ',
+ Struct = ' ',
+ Event = ' ',
+ Operator = ' ',
+ TypeParameter = ' ',
+ }
+ local menu_items = {
+ buffer = "buffer",
+ nvim_lsp = "LSP",
+ luasnip = "luasnip",
+ nvim_lua = "lua",
+ calc = "calc",
+ }
+
+ vim_item.kind = string.format(' %s ', kind_icons[vim_item.kind])
+ vim_item.menu = string.format(' (%s)', menu_items[entry.source.name])
+
+ return vim_item
+ end
+ },
+ mapping = cmp.mapping.preset.insert({
+ ["<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({ select = true }),
+ ['<ESC>'] = cmp.mapping.close(),
+ }),
+ sorting = {
+ comparators = {
+ cmp.config.compare.offset,
+ cmp.config.compare.exact,
+ cmp.config.compare.score,
+ require "cmp-under-comparator".under,
+ cmp.config.compare.kind,
+ cmp.config.compare.sort_text,
+ cmp.config.compare.length,
+ cmp.config.compare.order,
+ },
+ },
+ enabled = function()
+ local context = require 'cmp.config.context'
+ if a.nvim_get_mode().mode == 'c' then
+ return true
+ else
+ return not context.in_treesitter_capture("comment")
+ and not context.in_syntax_group("Comment")
+ end
+ end
+}