diff --git a/lua/config/lazy.lua b/lua/config/lazy.lua index 6db5f8a..b163792 100644 --- a/lua/config/lazy.lua +++ b/lua/config/lazy.lua @@ -21,5 +21,6 @@ require("lazy").setup({ spec = { { import = "plugins" }, + { import = "plugins.lsp" }, }, }) diff --git a/lua/config/mason-tools-list.lua b/lua/config/mason-tools-list.lua deleted file mode 100644 index d981c69..0000000 --- a/lua/config/mason-tools-list.lua +++ /dev/null @@ -1,9 +0,0 @@ -local to_install = { - "stylua", - "ruff", - "isort", - "mypy", - "basedpyright", -} - -return to_install diff --git a/lua/plugins/nvim-conform.lua b/lua/plugins/formatters.lua similarity index 100% rename from lua/plugins/nvim-conform.lua rename to lua/plugins/formatters.lua diff --git a/lua/plugins/nvim-lint.lua b/lua/plugins/linters.lua similarity index 100% rename from lua/plugins/nvim-lint.lua rename to lua/plugins/linters.lua diff --git a/lua/plugins/lsp/lspconfig.lua b/lua/plugins/lsp/lspconfig.lua new file mode 100644 index 0000000..89278fc --- /dev/null +++ b/lua/plugins/lsp/lspconfig.lua @@ -0,0 +1,99 @@ +return { + "neovim/nvim-lspconfig", + event = { "BufReadPre", "BufNewFile" }, + dependencies = { + "hrsh7th/cmp-nvim-lsp", + { "antosha417/nvim-lsp-file-operations", config = true }, + { "folke/neodev.nvim", opts = {} }, + }, + config = function() + local lspconfig = require("lspconfig") + local mason_lspconfig = require("mason-lspconfig") + local cmp_nvim_lsp = require("cmp_nvim_lsp") + + local keymap = vim.keymap + + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("UserLspConfig", {}), + callback = function(ev) + local opts = { buffer = ev.buf, silent = true } + + opts.desc = "Show LSP references" + keymap.set("n", "gR", "Telescope lsp_references", opts) + + opts.desc = "Go to declaration" + keymap.set("n", "gD", vim.lsp.buf.declaration, opts) + + opts.desc = "Show LSP definitions" + keymap.set("n", "gd", "Telescope lsp_definitions", opts) + + opts.desc = "Show LSP implementations" + keymap.set("n", "gi", "Telescope lsp_implementations", opts) + + opts.desc = "Show LSP type definitions" + keymap.set("n", "gt", "Telescope lsp_type_definitions", opts) + + opts.desc = "See available code actions" + keymap.set({ "n", "v" }, "ca", vim.lsp.buf.code_action, opts) + + opts.desc = "Smart rename" + keymap.set("n", "rn", vim.lsp.buf.rename, opts) + + opts.desc = "Show buffer diagnostics" + keymap.set("n", "D", "Telescope diagnostics bufnr=0", opts) + + opts.desc = "Show line diagnostics" + keymap.set("n", "d", vim.diagnostic.open_float, opts) + + opts.desc = "Go to previous diagnostic" + keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) + + opts.desc = "Go to next diagnostic" + keymap.set("n", "]d", vim.diagnostic.goto_next, opts) + + opts.desc = "Show documentation for what is under cursor" + keymap.set("n", "K", vim.lsp.buf.hover, opts) + + opts.desc = "Restart LSP" + keymap.set("n", "rs", ":LspRestart", opts) + end, + }) + + local capabilities = cmp_nvim_lsp.default_capabilities() + + local signs = { Error = " ", Warn = " ", Hint = "󰠠 ", Info = " " } + for type, icon in pairs(signs) do + local hl = "DiagnosticSign" .. type + vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) + end + + mason_lspconfig.setup_handlers({ + function(server_name) + lspconfig[server_name].setup({ + capabilities = capabilities, + }) + end, + ["basedpyright"] = function() + lspconfig["basedpyright"].setup({ + capabilities = capabilities, + }) + end, + ["lua_ls"] = function() + lspconfig["lua_ls"].setup({ + capabilities = capabilities, + settings = { + Lua = { + + diagnostics = { + globals = { "vim" }, + }, + completion = { + callSnippet = "Replace", + }, + }, + }, + }) + end, + }) + end, +} diff --git a/lua/plugins/lsp/mason.lua b/lua/plugins/lsp/mason.lua new file mode 100644 index 0000000..80b44c1 --- /dev/null +++ b/lua/plugins/lsp/mason.lua @@ -0,0 +1,29 @@ +return { + "williamboman/mason.nvim", + dependencies = { + "williamboman/mason-lspconfig.nvim", + "WhoIsSethDaniel/mason-tool-installer.nvim", + }, + config = function() + local mason = require("mason") + mason.setup({}) + + local mason_lspconfig = require("mason-lspconfig") + mason_lspconfig.setup({ + ensure_installed = { + "basedpyright", + "lua_ls", + }, + }) + + local mason_tool_installer = require("mason-tool-installer") + mason_tool_installer.setup({ + ensure_installed = { + "stylua", + "ruff", + "isort", + "mypy", + }, + }) + end, +} diff --git a/lua/plugins/mason-tool-installer.lua b/lua/plugins/mason-tool-installer.lua deleted file mode 100644 index 12c5556..0000000 --- a/lua/plugins/mason-tool-installer.lua +++ /dev/null @@ -1,6 +0,0 @@ -return { - "WhoIsSethDaniel/mason-tool-installer.nvim", - opts = { - ensure_installed = require("config.mason-tools-list"), - }, -} diff --git a/lua/plugins/mason.lua b/lua/plugins/mason.lua deleted file mode 100644 index 2f3a14f..0000000 --- a/lua/plugins/mason.lua +++ /dev/null @@ -1,6 +0,0 @@ -return { - "williamboman/mason.nvim", - opts = { - ensure_installed = require("config.mason-tools-list"), - }, -} diff --git a/lua/plugins/nvim-cmp.lua b/lua/plugins/nvim-cmp.lua new file mode 100644 index 0000000..9d5acb3 --- /dev/null +++ b/lua/plugins/nvim-cmp.lua @@ -0,0 +1,55 @@ +return { + "hrsh7th/nvim-cmp", + event = "InsertEnter", + dependencies = { + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + { + "L3MON4D3/LuaSnip", + version = "v2.*", + build = "make install_jsregexp", + }, + "saadparwaiz1/cmp_luasnip", + "rafamadriz/friendly-snippets", + "onsails/lspkind.nvim", + }, + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + local lspkind = require("lspkind") + + cmp.setup({ + completion = { + completeopt = "menu,menuone,preview,noselect", + }, + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ select = false }), + }), + + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "buffer" }, + { name = "path" }, + }), + + formatting = { + format = lspkind.cmp_format({ + maxwidth = 50, + ellipsis_char = "...", + }), + }, + }) + end, +} diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua index 7f459e6..f449718 100644 --- a/lua/plugins/telescope.lua +++ b/lua/plugins/telescope.lua @@ -2,6 +2,7 @@ return { "nvim-telescope/telescope.nvim", tag = "0.1.8", dependencies = { "nvim-lua/plenary.nvim" }, + lazy = false, config = function() require("telescope").setup({}) -- Define key mappings here to ensure they are set after the plugin is loaded vim.api.nvim_set_keymap("n", "", "Telescope live_grep", { noremap = true, silent = true }) diff --git a/lua/plugins/treesitter-text-objects.lua b/lua/plugins/treesitter-text-objects.lua deleted file mode 100644 index 6070234..0000000 --- a/lua/plugins/treesitter-text-objects.lua +++ /dev/null @@ -1,4 +0,0 @@ -return { - "nvim-treesitter/nvim-treesitter-textobjects", - dependencies = { "nvim-treesitter/nvim-treesitter" }, -} diff --git a/lua/plugins/venv-selector.lua b/lua/plugins/venv-selector.lua new file mode 100644 index 0000000..31ea13a --- /dev/null +++ b/lua/plugins/venv-selector.lua @@ -0,0 +1,13 @@ +return { + "linux-cultist/venv-selector.nvim", + dependencies = { "neovim/nvim-lspconfig", "nvim-telescope/telescope.nvim" }, + opts = { + name = "venv", + }, + branch = "regexp", -- This is the regexp branch, use this for the new version + event = "VeryLazy", + keys = { + { "vs", "VenvSelect" }, + { "vc", "VenvSelectCached" }, + }, +}