feat(nvim): switch to cmp and add package-info
All checks were successful
Discord / discord commits (push) Has been skipped
All checks were successful
Discord / discord commits (push) Has been skipped
This commit is contained in:
parent
b09cceb259
commit
d4d98bba73
12 changed files with 165 additions and 73 deletions
|
@ -32,13 +32,15 @@ in {
|
||||||
command = 'setlocal ts=4 sw=4 sts=0 expandtab',
|
command = 'setlocal ts=4 sw=4 sts=0 expandtab',
|
||||||
});
|
});
|
||||||
|
|
||||||
require('lspconfig').bashls.setup(require('coq').lsp_ensure_capabilities({
|
require('lspconfig').bashls.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
bashIde = {
|
bashIde = {
|
||||||
shellcheckPath = '${lib.getExe pkgs.shellcheck}',
|
shellcheckPath = '${lib.getExe pkgs.shellcheck}',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}));
|
});
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,17 +25,20 @@ in
|
||||||
});
|
});
|
||||||
|
|
||||||
local lsp = require('lspconfig');
|
local lsp = require('lspconfig');
|
||||||
local coq = require('coq');
|
|
||||||
|
|
||||||
lsp.cmake.setup(coq.lsp_ensure_capabilities({}));
|
lsp.cmake.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
});
|
||||||
|
|
||||||
|
lsp.clangd.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
|
||||||
lsp.clangd.setup(coq.lsp_ensure_capabilities({
|
|
||||||
handlers = require('lsp-status').extensions.clangd.setup(),
|
handlers = require('lsp-status').extensions.clangd.setup(),
|
||||||
on_attach = function(_, bufnr)
|
on_attach = function(_, bufnr)
|
||||||
require("clangd_extensions.inlay_hints").setup_autocmd()
|
require("clangd_extensions.inlay_hints").setup_autocmd()
|
||||||
require("clangd_extensions.inlay_hints").set_inlay_hints()
|
require("clangd_extensions.inlay_hints").set_inlay_hints()
|
||||||
end,
|
end,
|
||||||
}));
|
});
|
||||||
'';
|
'';
|
||||||
|
|
||||||
plugins = [
|
plugins = [
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
}: let
|
}: let
|
||||||
inherit (config.vars) neovimIde;
|
inherit (config.vars) neovimIde;
|
||||||
inherit (pkgs) vimPlugins;
|
inherit (pkgs) vimPlugins;
|
||||||
|
inherit (lib) fileContents;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./bash.nix
|
./bash.nix
|
||||||
|
@ -51,7 +52,7 @@ in {
|
||||||
lsp_status.register_progress();
|
lsp_status.register_progress();
|
||||||
|
|
||||||
-- Remove LSP highlighting to use Treesitter
|
-- Remove LSP highlighting to use Treesitter
|
||||||
vim.api.nvim_create_autocmd("LspAttach", {
|
vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
callback = function(args)
|
callback = function(args)
|
||||||
local client = vim.lsp.get_client_by_id(args.data.client_id);
|
local client = vim.lsp.get_client_by_id(args.data.client_id);
|
||||||
client.server_capabilities.semanticTokensProvider = nil;
|
client.server_capabilities.semanticTokensProvider = nil;
|
||||||
|
@ -65,49 +66,37 @@ in {
|
||||||
});
|
});
|
||||||
|
|
||||||
require('lsp_lines').setup();
|
require('lsp_lines').setup();
|
||||||
|
|
||||||
-- Autopairs with coq
|
|
||||||
local remap = vim.api.nvim_set_keymap
|
|
||||||
local npairs = require('nvim-autopairs')
|
|
||||||
|
|
||||||
npairs.setup({ map_bs = false, map_cr = false })
|
|
||||||
|
|
||||||
_G.MUtils= {}
|
|
||||||
|
|
||||||
MUtils.CR = function()
|
|
||||||
if vim.fn.pumvisible() ~= 0 then
|
|
||||||
if vim.fn.complete_info({ 'selected' }).selected ~= -1 then
|
|
||||||
return npairs.esc('<c-y>');
|
|
||||||
else
|
|
||||||
return npairs.esc('<c-e>') .. npairs.autopairs_cr();
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return npairs.autopairs_cr();
|
|
||||||
end
|
|
||||||
end
|
|
||||||
remap('i', '<cr>', 'v:lua.MUtils.CR()', { expr = true, noremap = true });
|
|
||||||
|
|
||||||
MUtils.BS = function()
|
|
||||||
if vim.fn.pumvisible() ~= 0 and vim.fn.complete_info({ 'mode' }).mode == 'eval' then
|
|
||||||
return npairs.esc('<c-e>') .. npairs.autopairs_bs();
|
|
||||||
else
|
|
||||||
return npairs.autopairs_bs();
|
|
||||||
end
|
|
||||||
end
|
|
||||||
remap('i', '<bs>', 'v:lua.MUtils.BS()', { expr = true, noremap = true });
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
plugins = [
|
plugins =
|
||||||
vimPlugins.nvim-lspconfig
|
(with vimPlugins; [
|
||||||
|
nvim-lspconfig
|
||||||
|
lsp-status-nvim
|
||||||
|
lsp_lines-nvim
|
||||||
|
|
||||||
vimPlugins.coq_nvim
|
cmp-buffer
|
||||||
vimPlugins.coq-artifacts
|
cmp-nvim-lsp
|
||||||
vimPlugins.coq-thirdparty
|
cmp-path
|
||||||
|
cmp-spell
|
||||||
|
cmp-treesitter
|
||||||
|
cmp-vsnip
|
||||||
|
vim-vsnip
|
||||||
|
friendly-snippets
|
||||||
|
])
|
||||||
|
++ [
|
||||||
|
{
|
||||||
|
plugin = vimPlugins.nvim-cmp;
|
||||||
|
type = "lua";
|
||||||
|
config = fileContents ../plugins/cmp.lua;
|
||||||
|
}
|
||||||
|
|
||||||
vimPlugins.nvim-autopairs
|
{
|
||||||
|
plugin = vimPlugins.nvim-autopairs;
|
||||||
vimPlugins.lsp-status-nvim
|
type = "lua";
|
||||||
vimPlugins.lsp_lines-nvim
|
config =
|
||||||
|
# lua
|
||||||
|
"require('nvim-autopairs').setup({})";
|
||||||
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -45,7 +45,9 @@ in
|
||||||
''
|
''
|
||||||
--
|
--
|
||||||
local startJdtls = function()
|
local startJdtls = function()
|
||||||
local config = require('coq').lsp_ensure_capabilities({
|
local config = {
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
|
||||||
cmd = { '${lib.getExe pkgs.jdt-language-server}' },
|
cmd = { '${lib.getExe pkgs.jdt-language-server}' },
|
||||||
root_dir = vim.fs.dirname(vim.fs.find(
|
root_dir = vim.fs.dirname(vim.fs.find(
|
||||||
{ 'gradlew', '.git', 'mvnw', 'pom.xml' },
|
{ 'gradlew', '.git', 'mvnw', 'pom.xml' },
|
||||||
|
@ -64,7 +66,7 @@ in
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
};
|
||||||
|
|
||||||
require('jdtls').start_or_attach(config);
|
require('jdtls').start_or_attach(config);
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,11 +27,14 @@ in
|
||||||
});
|
});
|
||||||
|
|
||||||
local lsp = require('lspconfig');
|
local lsp = require('lspconfig');
|
||||||
local coq = require('coq');
|
|
||||||
|
|
||||||
lsp.jsonls.setup(coq.lsp_ensure_capabilities({}));
|
lsp.jsonls.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
});
|
||||||
|
|
||||||
|
lsp.yamlls.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
|
||||||
lsp.yamlls.setup(coq.lsp_ensure_capabilities({
|
|
||||||
settings = {
|
settings = {
|
||||||
yaml = {
|
yaml = {
|
||||||
schemas = {
|
schemas = {
|
||||||
|
@ -41,7 +44,7 @@ in
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}));
|
});
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -38,8 +38,9 @@ in
|
||||||
end,
|
end,
|
||||||
});
|
});
|
||||||
|
|
||||||
require('lspconfig').lua_ls.setup(
|
require('lspconfig').lua_ls.setup({
|
||||||
require('coq').lsp_ensure_capabilities({}));
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
});
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
|
@ -26,9 +26,10 @@ in
|
||||||
# lua
|
# lua
|
||||||
''
|
''
|
||||||
local lsp = require('lspconfig');
|
local lsp = require('lspconfig');
|
||||||
local coq = require('coq');
|
|
||||||
|
|
||||||
lsp.texlab.setup(coq.lsp_ensure_capabilities({
|
lsp.texlab.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
texlab = {
|
texlab = {
|
||||||
formatterLineLength = 100,
|
formatterLineLength = 100,
|
||||||
|
@ -39,7 +40,7 @@ in
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}));
|
});
|
||||||
'';
|
'';
|
||||||
|
|
||||||
plugins = [
|
plugins = [
|
||||||
|
|
|
@ -52,7 +52,9 @@ in
|
||||||
extraLuaConfig =
|
extraLuaConfig =
|
||||||
# lua
|
# lua
|
||||||
''
|
''
|
||||||
require('lspconfig').nixd.setup(require('coq').lsp_ensure_capabilities({
|
require('lspconfig').nixd.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
|
||||||
filetypes = { 'nix', 'in.nix' },
|
filetypes = { 'nix', 'in.nix' },
|
||||||
settings = {
|
settings = {
|
||||||
nixd = {
|
nixd = {
|
||||||
|
@ -62,7 +64,7 @@ in
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}));
|
});
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,8 +18,9 @@ in
|
||||||
extraLuaConfig =
|
extraLuaConfig =
|
||||||
# lua
|
# lua
|
||||||
''
|
''
|
||||||
require('lspconfig').basedpyright.setup(
|
require('lspconfig').basedpyright.setup({
|
||||||
require('coq').lsp_ensure_capabilities({}));
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
});
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -24,10 +24,9 @@ in
|
||||||
command = 'setlocal ts=4 sw=4 sts=0 expandtab',
|
command = 'setlocal ts=4 sw=4 sts=0 expandtab',
|
||||||
});
|
});
|
||||||
|
|
||||||
local lsp = require('lspconfig');
|
require('lspconfig').rust_analyzer.setup({
|
||||||
local coq = require('coq');
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
});
|
||||||
lsp.rust_analyzer.setup(coq.lsp_ensure_capabilities({}));
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -42,10 +42,11 @@ in
|
||||||
});
|
});
|
||||||
|
|
||||||
local lsp = require('lspconfig');
|
local lsp = require('lspconfig');
|
||||||
local coq = require('coq');
|
|
||||||
local tsserver = require('typescript-tools');
|
local tsserver = require('typescript-tools');
|
||||||
|
|
||||||
tsserver.setup(coq.lsp_ensure_capabilities({
|
tsserver.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
|
||||||
handlers = {
|
handlers = {
|
||||||
-- format error code with better error message
|
-- format error code with better error message
|
||||||
['textDocument/publishDiagnostics'] = function(err, result, ctx, config)
|
['textDocument/publishDiagnostics'] = function(err, result, ctx, config)
|
||||||
|
@ -53,9 +54,11 @@ in
|
||||||
vim.lsp.diagnostic.on_publish_diagnostics(err, result, ctx, config)
|
vim.lsp.diagnostic.on_publish_diagnostics(err, result, ctx, config)
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}));
|
});
|
||||||
|
|
||||||
|
lsp.eslint.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
|
||||||
lsp.eslint.setup(coq.lsp_ensure_capabilities({
|
|
||||||
-- auto-save
|
-- auto-save
|
||||||
on_attach = function(client, bufnr)
|
on_attach = function(client, bufnr)
|
||||||
vim.api.nvim_create_autocmd('BufWritePre', {
|
vim.api.nvim_create_autocmd('BufWritePre', {
|
||||||
|
@ -63,9 +66,11 @@ in
|
||||||
command = 'EslintFixAll',
|
command = 'EslintFixAll',
|
||||||
});
|
});
|
||||||
end,
|
end,
|
||||||
}));
|
});
|
||||||
|
|
||||||
|
lsp.cssls.setup({
|
||||||
|
capabilities = require('cmp_nvim_lsp').default_capabilities(),
|
||||||
|
|
||||||
lsp.cssls.setup(coq.lsp_ensure_capabilities({
|
|
||||||
settings = {
|
settings = {
|
||||||
css = {
|
css = {
|
||||||
validate = false,
|
validate = false,
|
||||||
|
@ -77,12 +82,33 @@ in
|
||||||
validate = false,
|
validate = false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}));
|
});
|
||||||
'';
|
'';
|
||||||
|
|
||||||
plugins = [
|
plugins = [
|
||||||
vimPlugins.typescript-tools-nvim
|
vimPlugins.typescript-tools-nvim
|
||||||
(buildPlugin "ts-error-translator" vimplugin-ts-error-translator-src)
|
(buildPlugin "ts-error-translator" vimplugin-ts-error-translator-src)
|
||||||
|
|
||||||
|
{
|
||||||
|
plugin = vimPlugins.package-info-nvim;
|
||||||
|
type = "lua";
|
||||||
|
config =
|
||||||
|
# lua
|
||||||
|
''
|
||||||
|
local packageInfo = require('package-info');
|
||||||
|
packageInfo.setup({
|
||||||
|
hide_up_to_date = true,
|
||||||
|
package_manager = 'npm',
|
||||||
|
});
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
|
||||||
|
pattern = { 'package.json' },
|
||||||
|
callback = function()
|
||||||
|
packageInfo.show({ force = true });
|
||||||
|
end,
|
||||||
|
});
|
||||||
|
'';
|
||||||
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
63
common/home/neovim/plugins/cmp.lua
Normal file
63
common/home/neovim/plugins/cmp.lua
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
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;
|
||||||
|
|
||||||
|
local feedkey = function(key, mode)
|
||||||
|
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true);
|
||||||
|
end;
|
||||||
|
|
||||||
|
local cmp = require('cmp');
|
||||||
|
|
||||||
|
-- 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()
|
||||||
|
)
|
||||||
|
|
||||||
|
cmp.setup({
|
||||||
|
sources = {
|
||||||
|
{ name = 'nvim_lsp' },
|
||||||
|
{ name = 'cmp_tabnine' },
|
||||||
|
{ name = 'treesitter' },
|
||||||
|
{ name = 'buffer' },
|
||||||
|
{ name = 'path' },
|
||||||
|
{ name = 'vsnip' },
|
||||||
|
},
|
||||||
|
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
vim.fn['vsnip#anonymous'](args.body);
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
mapping = {
|
||||||
|
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
||||||
|
['<Tab>'] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_next_item();
|
||||||
|
elseif vim.fn['vsnip#available'](1) == 1 then
|
||||||
|
feedkey('<Plug>(vsnip-expand-or-jump)', '');
|
||||||
|
elseif has_words_before() then
|
||||||
|
cmp.complete();
|
||||||
|
else
|
||||||
|
fallback();
|
||||||
|
end;
|
||||||
|
end, {
|
||||||
|
'i',
|
||||||
|
's',
|
||||||
|
}),
|
||||||
|
|
||||||
|
['<S-Tab>'] = cmp.mapping(function()
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item();
|
||||||
|
elseif vim.fn['vsnip#jumpable'](-1) == 1 then
|
||||||
|
feedkey('<Plug>(vsnip-jump-prev)', '');
|
||||||
|
end;
|
||||||
|
end, {
|
||||||
|
'i',
|
||||||
|
's',
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
});
|
Loading…
Reference in a new issue