if lazyvim_docs then -- LSP Server to use for Python. -- Set to "basedpyright" to use basedpyright instead of pyright. vim.g.lazyvim_python_lsp = "pyright" -- Set to "ruff_lsp" to use the old LSP implementation version. vim.g.lazyvim_python_ruff = "ruff" end local lsp = vim.g.lazyvim_python_lsp or "pyright" local ruff = vim.g.lazyvim_python_ruff or "ruff" return { recommended = function() return LazyVim.extras.wants({ ft = "python", root = { "pyproject.toml", "setup.py", "setup.cfg", "requirements.txt", "Pipfile", "pyrightconfig.json", }, }) end, { "nvim-treesitter/nvim-treesitter", opts = { ensure_installed = { "ninja", "rst" } }, }, { "neovim/nvim-lspconfig", opts = { servers = { ruff = { cmd_env = { RUFF_TRACE = "messages" }, init_options = { settings = { logLevel = "error", }, }, keys = { { "co", LazyVim.lsp.action["source.organizeImports"], desc = "Organize Imports", }, }, }, ruff_lsp = { keys = { { "co", LazyVim.lsp.action["source.organizeImports"], desc = "Organize Imports", }, }, }, }, setup = { [ruff] = function() LazyVim.lsp.on_attach(function(client, _) -- Disable hover in favor of Pyright client.server_capabilities.hoverProvider = false end, ruff) end, }, }, }, { "neovim/nvim-lspconfig", opts = function(_, opts) local servers = { "pyright", "basedpyright", "ruff", "ruff_lsp", ruff, lsp } for _, server in ipairs(servers) do opts.servers[server] = opts.servers[server] or {} opts.servers[server].enabled = server == lsp or server == ruff end end, }, { "nvim-neotest/neotest", optional = true, dependencies = { "nvim-neotest/neotest-python", }, opts = { adapters = { ["neotest-python"] = { -- Here you can specify the settings for the adapter, i.e. -- runner = "pytest", -- python = ".venv/bin/python", }, }, }, }, { "mfussenegger/nvim-dap", optional = true, dependencies = { "mfussenegger/nvim-dap-python", -- stylua: ignore keys = { { "dPt", function() require('dap-python').test_method() end, desc = "Debug Method", ft = "python" }, { "dPc", function() require('dap-python').test_class() end, desc = "Debug Class", ft = "python" }, }, config = function() if vim.fn.has("win32") == 1 then require("dap-python").setup(LazyVim.get_pkg_path("debugpy", "/venv/Scripts/pythonw.exe")) else require("dap-python").setup(LazyVim.get_pkg_path("debugpy", "/venv/bin/python")) end end, }, }, { "linux-cultist/venv-selector.nvim", branch = "regexp", -- Use this branch for the new version cmd = "VenvSelect", enabled = function() return LazyVim.has("telescope.nvim") end, opts = { settings = { options = { notify_user_on_venv_activation = true, }, }, }, -- Call config for python files and load the cached venv automatically ft = "python", keys = { { "cv", ":VenvSelect", desc = "Select VirtualEnv", ft = "python" } }, }, { "hrsh7th/nvim-cmp", opts = function(_, opts) opts.auto_brackets = opts.auto_brackets or {} table.insert(opts.auto_brackets, "python") end, }, -- Don't mess up DAP adapters provided by nvim-dap-python { "jay-babu/mason-nvim-dap.nvim", optional = true, opts = { handlers = { python = function() end, }, }, }, }