175 lines
6.1 KiB
Lua
175 lines
6.1 KiB
Lua
|
|
return {
|
|||
|
|
{
|
|||
|
|
"williamboman/mason.nvim",
|
|||
|
|
build = ":MasonUpdate",
|
|||
|
|
config = function()
|
|||
|
|
require("mason").setup()
|
|||
|
|
end,
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
-- Mason-LSPconfig : Intégration avec les serveurs LSP
|
|||
|
|
{
|
|||
|
|
"williamboman/mason-lspconfig.nvim",
|
|||
|
|
config = function()
|
|||
|
|
require("mason-lspconfig").setup({
|
|||
|
|
ensure_installed = { "clangd","pyright", "lua_ls", "marksman", "ruff" },
|
|||
|
|
})
|
|||
|
|
end,
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
-- LSP Config : Configuration des serveurs LSP
|
|||
|
|
{
|
|||
|
|
"neovim/nvim-lspconfig",
|
|||
|
|
config = function()
|
|||
|
|
local lspconfig = require("lspconfig")
|
|||
|
|
local capabilities = require('cmp_nvim_lsp').default_capabilities()
|
|||
|
|
|
|||
|
|
local navic = require("nvim-navic")
|
|||
|
|
|
|||
|
|
local on_attach = function(client, bufnr)
|
|||
|
|
if client.server_capabilities.documentSymbolProvider then
|
|||
|
|
navic.attach(client, bufnr) -- Attache Navic au LSP
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- Cpp
|
|||
|
|
lspconfig.clangd.setup({
|
|||
|
|
capabilities = capabilities,
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
|
|||
|
|
-- Python
|
|||
|
|
lspconfig.pyright.setup({
|
|||
|
|
on_attach = on_attach,
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
-- Lua
|
|||
|
|
lspconfig.lua_ls.setup({
|
|||
|
|
on_attach = on_attach,
|
|||
|
|
settings = {
|
|||
|
|
Lua = {
|
|||
|
|
diagnostics = { globals = { "vim" } },
|
|||
|
|
workspace = { library = vim.api.nvim_get_runtime_file("", true) },
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
-- Markdown & reStructuredText
|
|||
|
|
lspconfig.marksman.setup({})
|
|||
|
|
|
|||
|
|
local navic = require("nvim-navic")
|
|||
|
|
|
|||
|
|
-- Exemple avec Pyright
|
|||
|
|
require("lspconfig").pyright.setup({
|
|||
|
|
on_attach = function(client, bufnr)
|
|||
|
|
if client.server_capabilities.documentSymbolProvider then
|
|||
|
|
navic.attach(client, bufnr) -- Attache Navic au LSP
|
|||
|
|
end
|
|||
|
|
end,
|
|||
|
|
})
|
|||
|
|
end,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"L3MON4D3/LuaSnip",
|
|||
|
|
build = "make install_jsregexp",
|
|||
|
|
config = function()
|
|||
|
|
require("luasnip.loaders.from_vscode").lazy_load()
|
|||
|
|
end,
|
|||
|
|
},
|
|||
|
|
-- nvim-cmp : Moteur d’autocomplétion
|
|||
|
|
{
|
|||
|
|
"hrsh7th/nvim-cmp",
|
|||
|
|
dependencies = {
|
|||
|
|
"hrsh7th/cmp-nvim-lsp",
|
|||
|
|
"hrsh7th/cmp-buffer",
|
|||
|
|
"hrsh7th/cmp-path",
|
|||
|
|
"hrsh7th/cmp-cmdline",
|
|||
|
|
"L3MON4D3/LuaSnip",
|
|||
|
|
"saadparwaiz1/cmp_luasnip",
|
|||
|
|
},
|
|||
|
|
config = function()
|
|||
|
|
local cmp = require("cmp")
|
|||
|
|
local luasnip = require("luasnip")
|
|||
|
|
|
|||
|
|
cmp.setup({
|
|||
|
|
snippet = {
|
|||
|
|
expand = function(args)
|
|||
|
|
luasnip.lsp_expand(args.body)
|
|||
|
|
end,
|
|||
|
|
},
|
|||
|
|
mapping = {
|
|||
|
|
-- Comportement intelligent pour Tab
|
|||
|
|
["<Tab>"] = cmp.mapping(function(fallback)
|
|||
|
|
if cmp.visible() then
|
|||
|
|
cmp.select_next_item() -- Sélectionne l'élément suivant si le menu est ouvert
|
|||
|
|
elseif luasnip.expand_or_jumpable() then
|
|||
|
|
luasnip.expand_or_jump() -- Passe au placeholder suivant si dans un snippet
|
|||
|
|
else
|
|||
|
|
fallback() -- Sinon, insère une tabulation normale
|
|||
|
|
end
|
|||
|
|
end, { "i", "s" }),
|
|||
|
|
["<S-Tab>"] = cmp.mapping(function(fallback)
|
|||
|
|
if cmp.visible() then
|
|||
|
|
cmp.select_prev_item() -- Sélectionne l'élément précédent si le menu est ouvert
|
|||
|
|
elseif luasnip.jumpable(-1) then
|
|||
|
|
luasnip.jump(-1) -- Passe au placeholder précédent si dans un snippet
|
|||
|
|
else
|
|||
|
|
fallback() -- Sinon, insère une tabulation normale
|
|||
|
|
end
|
|||
|
|
end, { "i", "s" }),
|
|||
|
|
-- Comportement pour Entrée
|
|||
|
|
["<CR>"] = cmp.mapping(function(fallback)
|
|||
|
|
if cmp.visible() then
|
|||
|
|
cmp.confirm({ select = true }) -- Confirme la sélection
|
|||
|
|
elseif luasnip.jumpable(1) then
|
|||
|
|
luasnip.jump(1) -- Passe au placeholder suivant dans un snippet
|
|||
|
|
else
|
|||
|
|
fallback() -- Sinon, insère une nouvelle ligne
|
|||
|
|
end
|
|||
|
|
end, { "i", "s" }),
|
|||
|
|
},
|
|||
|
|
sources = cmp.config.sources({
|
|||
|
|
{ name = "nvim_lsp" },
|
|||
|
|
{ name = "luasnip" },
|
|||
|
|
{ name = "buffer" },
|
|||
|
|
{ name = "path" },
|
|||
|
|
}),
|
|||
|
|
})
|
|||
|
|
end,
|
|||
|
|
},
|
|||
|
|
-- black : Formatage de python
|
|||
|
|
{
|
|||
|
|
"psf/black",
|
|||
|
|
ft = { "python" },
|
|||
|
|
build = ":BlackUpgrade",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"jose-elias-alvarez/null-ls.nvim",
|
|||
|
|
dependencies = { "nvim-lua/plenary.nvim" },
|
|||
|
|
config = function()
|
|||
|
|
local null_ls = require("null-ls")
|
|||
|
|
|
|||
|
|
null_ls.setup({
|
|||
|
|
sources = {
|
|||
|
|
null_ls.builtins.formatting.clang_format.with({
|
|||
|
|
filetypes = { "cpp", "c", "objc", "objcpp" }, -- Limiter aux langages supportés
|
|||
|
|
}),
|
|||
|
|
},
|
|||
|
|
-- Optionnel : configurer un mapping ou autoformat
|
|||
|
|
on_attach = function(client, bufnr)
|
|||
|
|
if client.supports_method("textDocument/formatting") then
|
|||
|
|
local group = vim.api.nvim_create_augroup("LspFormatting", { clear = true })
|
|||
|
|
vim.api.nvim_create_autocmd("BufWritePre", {
|
|||
|
|
group = group,
|
|||
|
|
buffer = bufnr,
|
|||
|
|
callback = function()
|
|||
|
|
vim.lsp.buf.format({ bufnr = bufnr })
|
|||
|
|
end,
|
|||
|
|
})
|
|||
|
|
end
|
|||
|
|
end,
|
|||
|
|
})
|
|||
|
|
end,
|
|||
|
|
},
|
|||
|
|
}
|