zbirenbaum / copilot-cmp

Lua plugin to turn github copilot into a cmp source
MIT License
1.13k stars 41 forks source link

module 'copilot.util' not found #64

Closed duelidave closed 1 year ago

duelidave commented 1 year ago

Hi i get the following issue.

Error detected while processing InsertEnter Autocommands for "*":                                                                                                                                                                                                                                                             
Error executing lua callback: ...opt/copilot-cmp/lua/copilot_cmp/completion_functions.lua:2: module 'copilot.util' not found:                                                                                                                                                                                                 
        no field package.preload['copilot.util']                                                                                                                                                                                                                                                                              
        no file './copilot/util.lua'                                                                                                                                                                                                                                                                                          
        no file '/usr/share/luajit-2.1.0-beta3/copilot/util.lua'                                                                                                                                                                                                                                                              
        no file '/usr/local/share/lua/5.1/copilot/util.lua'                                                                                                                                                                                                                                                                   
        no file '/usr/local/share/lua/5.1/copilot/util/init.lua'                                                                                                                                                                                                                                                              
        no file '/usr/share/lua/5.1/copilot/util.lua'                                                                                                                                                                                                                                                                         
        no file '/usr/share/lua/5.1/copilot/util/init.lua'                                                                                                                                                                                                                                                                    
        no file '~/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/copilot/util.lua'                                                                                                                                                                                                                      
        no file '~/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/copilot/util/init.lua'                                                                                                                                                                                                                 
        no file '~/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/copilot/util.lua'                                                                                                                                                                                                             
        no file '~/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/copilot/util/init.lua'                                                                                                                                                                                                        
        no file './copilot/util.so'                                                                                                                                                                                                                                                                                           
        no file '/usr/local/lib/lua/5.1/copilot/util.so'                                                                                                                                                                                                                                                                      
        no file '/usr/lib64/lua/5.1/copilot/util.so'                                                                                                                                                                                                                                                                          
        no file '/usr/local/lib/lua/5.1/loadall.so'                                                                                                                                                                                                                                                                           
        no file '~/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/copilot/util.so'                                                                                                                                                                                                                         
        no file './copilot.so'                                                                                                                                                                                                                                                                                                
        no file '/usr/local/lib/lua/5.1/copilot.so'                                                                                                                                                                                                                                                                           
        no file '/usr/lib64/lua/5.1/copilot.so'                                                                                                                                                                                                                                                                               
        no file '/usr/local/lib/lua/5.1/loadall.so'                                                                                                                                                                                                                                                                           
        no file '~/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/copilot.so'                                                                                                                                                                                                                              
stack traceback:                                                                                                                                                                                                                                                                                                              
        [C]: in function 'require'                                                                                                                                                                                                                                                                                            
        ...opt/copilot-cmp/lua/copilot_cmp/completion_functions.lua:2: in main chunk                                                                                                                                                                                                                                          
        [C]: in function 'require'                                                                                                                                                                                                                                                                                            
        ...e/pack/packer/opt/copilot-cmp/lua/copilot_cmp/source.lua:60: in function 'new'                                                                                                                                                                                                                                     
        ...ite/pack/packer/opt/copilot-cmp/lua/copilot_cmp/init.lua:46: in function <...ite/pack/packer/opt/copilot-cmp/lua/copilot_cmp/init.lua:42>

This is sometimes/mostly happening when i use these two lines in my cmp config file: What am i missing?

sorting = {
  comparators = {
    ..
    require("copilot_cmp.comparators").prioritize,
    require("copilot_cmp.comparators").score,
    ..
  }
}

my plugins.lua

...
use {
    "zbirenbaum/copilot.lua",
    cmd = "Copilot",
    event = "InsertEnter",
    config = function()
        require("copilot").setup({
            suggestion = { enabled = false },
            panel = { enabled = false },
        })
    end,
}
use {
    "zbirenbaum/copilot-cmp",
    module = "copilot_cmp",
    after = { "copilot.lua", "nvim-cmp" },
    config = function()
        require("copilot_cmp").setup()
    end
}

use({
    "hrsh7th/nvim-cmp",
    requires = {
        "hrsh7th/cmp-nvim-lsp",
        "hrsh7th/cmp-nvim-lsp-signature-help",
        "L3MON4D3/LuaSnip",
        "saadparwaiz1/cmp_luasnip",
        "amarakon/nvim-cmp-buffer-lines",
        "tzachar/cmp-fuzzy-buffer",
        "tzachar/fuzzy.nvim",
        "petertriho/cmp-git"
    },
    config = function()
        require("config/nvim-cmp")
    end,
})
...

my config/nvim-cmp

local has_words_before = function()
    unpack = unpack or table.unpack
    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

local cmp = require("cmp")
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
local luasnip = require("luasnip")
local compare = require "cmp.config.compare"

local function border(hl_name)
    return {
        { "╭", hl_name },
        { "─", hl_name },
        { "╮", hl_name },
        { "│", hl_name },
        { "╯", hl_name },
        { "─", hl_name },
        { "╰", hl_name },
        { "│", hl_name },
    }
end

vim.api.nvim_set_hl(0, "CmpItemKindCopilot", { fg = "#6CC644" })

cmp.event:on(
    'confirm_done',
    cmp_autopairs.on_confirm_done()
)
cmp.setup({
    window = {
        completion = {
            border = border "CmpBorder",
            -- winhighlight = "CursorLine:PmenuSel,Search:None",
            winhighlight = "NormalFloat:Pmenu,NormalFloat:Pmenu,CursorLine:PmenuSel,Search:None",
        },
        documentation = true,
    },
    snippet = {
        expand = function(args)
            luasnip.lsp_expand(args.body) -- For `luasnip` users.
        end,
    },
    -- experimental = {
    --  ghost_text = true,
    -- },
    view = {
        entries = { name = 'custom', selection_order = 'near_cursor' }
    },
    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({ select = true }),
        ["<C-e>"] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close() }),
        ["<Tab>"] = cmp.mapping(function(fallback)
            if cmp.visible() then
                cmp.select_next_item({ behavior = cmp.SelectBehavior.Select })
                -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
                -- they way you will only jump inside the snippet region
            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 = {
        {
            name = 'nvim_lsp',
            group_index = 2
        },
        {
            name = 'luasnip',
            group_index = 2,
            entry_filter = function(entry, ctx)
                return cmp.lsp.CompletionItemKind.Text ~= entry:get_kind()
            end
        },
        {
            name = 'buffer',
            group_index = 2
        },
        {
            name = 'buffer-lines',
            group_index = 2
        },
        {
            name = 'git',
            group_index = 2
        },
        {
            name = 'nvim_lua',
            group_index = 2
        },
        {
            name = "copilot",
            group_index = 2
        },
    },
    confirm_opts = {
        behavior = cmp.ConfirmBehavior.Replace,
        select = true,
    },
    sorting = {
        priority_weight = 2,
        comparators = {
            compare.exact,
            require("copilot_cmp.comparators").prioritize,
            require("copilot_cmp.comparators").score,
            compare.offset,
            compare.scopes,
            compare.score,
            compare.recently_used,
            compare.locality,
            compare.kind,
            compare.sort_text,
            compare.length,
            compare.order,
        },
    },
    formatting = {
        fields = { "kind", "abbr", "menu" },
        format = function(entry, vim_item)
            if entry.source.name == "copilot" then
                vim_item.kind_hl_group = "CmpItemKindCopilot"
            end

            -- NOTE: order matters
            vim_item.menu = ({
                nvim_lsp = "",
                nvim_lua = "",
                luasnip = "",
                buffer = "",
                path = "",
                emoji = "",
            })[entry.source.name]
            return vim_item
        end,
    },
    -- formatters = {
    --  label = require("copilot_cmp.format").format_label_text,
    --  insert_text = require("copilot_cmp.format").remove_existing,
    --  preview = require("copilot_cmp.format").deindent,
    -- },
})

require "cmp".setup.cmdline({ "/", "?" }, {
    mapping = require "cmp".mapping.preset.cmdline(),
    sources = {
        {
            name = "buffer",
            option = { keyword_pattern = [[\k\+]] }
        },
        { name = "buffer-lines" }
    }
})

require("cmp_git").setup({
    -- As above
    sorting = {
        comparators = {
            cmp.config.compare.offset,
            cmp.config.compare.exact,
            cmp.config.compare.sort_text,
            cmp.config.compare.score,
            cmp.config.compare.recently_used,
            cmp.config.compare.kind,
            cmp.config.compare.length,
            cmp.config.compare.order,
        },
    },
})
MunifTanjim commented 1 year ago

Add module = "copilot" to copilot plugin's loader:

use {
    "zbirenbaum/copilot.lua",
    cmd = "Copilot",
    event = "InsertEnter",
        module = "copilot",
    config = function()
        require("copilot").setup({
            suggestion = { enabled = false },
            panel = { enabled = false },
        })
    end,
}

Lazy loading is tricky with packer.nvim. It's simpler with lazy.nvim.

duelidave commented 1 year ago

thanks man! your awesome!