From f4fb8fe907a06ae5cb45509df925872b3d073b07 Mon Sep 17 00:00:00 2001 From: Wesley Irvin Date: Mon, 5 Aug 2024 11:26:38 -0400 Subject: [PATCH] Code Completions Added in all the required plugins to get code completions, snippets, linting, and formatting working. Also configured to auto install a LSP for any language that isn't currently installed. --- .../nvim/lua/plugins/completions.lua | 52 +++++++++++++++++++ .../nvim/lua/plugins/lsp-config.lua | 43 +++++++++------ nvim/dot-config/nvim/lua/plugins/none-ls.lua | 19 +++++++ .../nvim/lua/plugins/treesitter.lua | 1 + 4 files changed, 100 insertions(+), 15 deletions(-) create mode 100644 nvim/dot-config/nvim/lua/plugins/completions.lua create mode 100644 nvim/dot-config/nvim/lua/plugins/none-ls.lua diff --git a/nvim/dot-config/nvim/lua/plugins/completions.lua b/nvim/dot-config/nvim/lua/plugins/completions.lua new file mode 100644 index 0000000..986110f --- /dev/null +++ b/nvim/dot-config/nvim/lua/plugins/completions.lua @@ -0,0 +1,52 @@ +return { + { + "hrsh7th/cmp-nvim-lsp", + }, + { + "L3MON4D3/LuaSnip", + dependencies = { + "saadparwaiz1/cmp_luasnip", + "rafamadriz/friendly-snippets", + }, + }, + { + "hrsh7th/nvim-cmp", + config = function() + local cmp = require("cmp") + require("luasnip.loaders.from_vscode").lazy_load() + + cmp.setup({ + snippet = { + -- REQUIRED - you must specify a snippet engine + expand = function(args) + -- vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. + require("luasnip").lsp_expand(args.body) -- For `luasnip` users. + -- require('snippy').expand_snippet(args.body) -- For `snippy` users. + -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users. + -- vim.snippet.expand(args.body) -- For native neovim snippets (Neovim v0.10+) + end, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + }), + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + -- { name = 'vsnip' }, -- For vsnip users. + { name = "luasnip" }, -- For luasnip users. + -- { name = 'ultisnips' }, -- For ultisnips users. + -- { name = 'snippy' }, -- For snippy users. + }, { + { name = "buffer" }, + }), + }) + end, + }, +} diff --git a/nvim/dot-config/nvim/lua/plugins/lsp-config.lua b/nvim/dot-config/nvim/lua/plugins/lsp-config.lua index 645de15..c7c20a7 100644 --- a/nvim/dot-config/nvim/lua/plugins/lsp-config.lua +++ b/nvim/dot-config/nvim/lua/plugins/lsp-config.lua @@ -1,13 +1,13 @@ return { { "williamboman/mason.nvim", - config = function () + config = function() require("mason").setup() - end + end, }, { "williamboman/mason-lspconfig.nvim", - config = function () + config = function() require("mason-lspconfig").setup({ ensure_installed = { "clangd", @@ -16,24 +16,37 @@ return { "pyright", "rust_analyzer", "taplo", - } + }, }) - end + end, }, { "neovim/nvim-lspconfig", config = function() + local capabilities = require("cmp_nvim_lsp").default_capabilities() local lspconfig = require("lspconfig") - lspconfig.clangd.setup({}) - lspconfig.cmake.setup({}) - lspconfig.lua_ls.setup({}) - lspconfig.pyright.setup({}) - lspconfig.rust_analyzer.setup({}) - lspconfig.taplo.setup({}) + lspconfig.clangd.setup({ + capabilities = capabilities + }) + lspconfig.cmake.setup({ + capabilities = capabilities + }) + lspconfig.lua_ls.setup({ + capabilities = capabilities + }) + lspconfig.pyright.setup({ + capabilities = capabilities + }) + lspconfig.rust_analyzer.setup({ + capabilities = capabilities + }) + lspconfig.taplo.setup({ + capabilities = capabilities + }) - vim.keymap.set('n', 'K', vim.lsp.buf.hover, {}) - vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {}) - vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, {}) - end + vim.keymap.set("n", "K", vim.lsp.buf.hover, {}) + vim.keymap.set("n", "gd", vim.lsp.buf.definition, {}) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, {}) + end, }, } diff --git a/nvim/dot-config/nvim/lua/plugins/none-ls.lua b/nvim/dot-config/nvim/lua/plugins/none-ls.lua new file mode 100644 index 0000000..6ab0d85 --- /dev/null +++ b/nvim/dot-config/nvim/lua/plugins/none-ls.lua @@ -0,0 +1,19 @@ +return { + "nvimtools/none-ls.nvim", + config = function() + local null_ls = require("null-ls") + + null_ls.setup({ + sources = { + null_ls.builtins.formatting.black, + null_ls.builtins.formatting.clang_format, + null_ls.builtins.formatting.gersemi, + null_ls.builtins.formatting.stylua, + null_ls.builtins.diagnostics.cpplint, + null_ls.builtins.diagnostics.pylint, + }, + }) + + vim.keymap.set("n", "gf", vim.lsp.buf.format, {}) + end, +} diff --git a/nvim/dot-config/nvim/lua/plugins/treesitter.lua b/nvim/dot-config/nvim/lua/plugins/treesitter.lua index 1ca5b94..60b809d 100644 --- a/nvim/dot-config/nvim/lua/plugins/treesitter.lua +++ b/nvim/dot-config/nvim/lua/plugins/treesitter.lua @@ -5,6 +5,7 @@ return{ local configs = require("nvim-treesitter.configs") configs.setup({ ensure_installed = { "c", "cmake", "cpp", "lua", "python", "rust", "toml" }, + auto_install = true, highlight = { enable = true }, indent = { enable = true }, }) -- 2.49.1