diff --git a/lvim/.gitignore b/lvim/.gitignore new file mode 100644 index 0000000..e033bc6 --- /dev/null +++ b/lvim/.gitignore @@ -0,0 +1 @@ +lazy-lock.json diff --git a/lvim/config.lua b/lvim/config.lua new file mode 100644 index 0000000..405a369 --- /dev/null +++ b/lvim/config.lua @@ -0,0 +1,8 @@ +-- Read the docs: https://www.lunarvim.org/docs/configuration +-- Example configs: https://github.com/LunarVim/starter.lvim +-- Video Tutorials: https://www.youtube.com/watch?v=sFA9kX-Ud_c&list=PLhoH5vyxr6QqGu0i7tt_XoVK9v-KvZ3m6 +-- Forum: https://www.reddit.com/r/lunarvim/ +-- Discord: https://discord.com/invite/Xb9B4Ny + +require("config.go") +require("config.py") diff --git a/lvim/lua/config/go.lua b/lvim/lua/config/go.lua new file mode 100644 index 0000000..848072c --- /dev/null +++ b/lvim/lua/config/go.lua @@ -0,0 +1,101 @@ +------------------------ +-- Treesitter +------------------------ +lvim.builtin.treesitter.ensure_installed = { + "go", + "gomod", +} + +------------------------ +-- Plugins +------------------------ +lvim.plugins = { + "olexsmir/gopher.nvim", + "leoluz/nvim-dap-go", +} + +------------------------ +-- Formatting +------------------------ +local formatters = require "lvim.lsp.null-ls.formatters" +formatters.setup { + { command = "goimports", filetypes = { "go" } }, + { command = "gofumpt", filetypes = { "go" } }, +} + +lvim.format_on_save = { + pattern = { "*.go" }, +} + +------------------------ +-- Dap +------------------------ +local dap_ok, dapgo = pcall(require, "dap-go") +if not dap_ok then + return +end + +dapgo.setup() + +------------------------ +-- LSP +------------------------ +vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "gopls" }) + +local lsp_manager = require "lvim.lsp.manager" +lsp_manager.setup("golangci_lint_ls", { + on_init = require("lvim.lsp").common_on_init, + capabilities = require("lvim.lsp").common_capabilities(), +}) + +lsp_manager.setup("gopls", { + on_attach = function(client, bufnr) + require("lvim.lsp").common_on_attach(client, bufnr) + local _, _ = pcall(vim.lsp.codelens.refresh) + local map = function(mode, lhs, rhs, desc) + if desc then + desc = desc + end + + vim.keymap.set(mode, lhs, rhs, { silent = true, desc = desc, buffer = bufnr, noremap = true }) + end + map("n", "Ci", "GoInstallDeps", "Install Go Dependencies") + map("n", "Ct", "GoMod tidy", "Tidy") + map("n", "Ca", "GoTestAdd", "Add Test") + map("n", "CA", "GoTestsAll", "Add All Tests") + map("n", "Ce", "GoTestsExp", "Add Exported Tests") + map("n", "Cg", "GoGenerate", "Go Generate") + map("n", "Cf", "GoGenerate %", "Go Generate File") + map("n", "Cc", "GoCmt", "Generate Comment") + map("n", "DT", "lua require('dap-go').debug_test()", "Debug Test") + end, + on_init = require("lvim.lsp").common_on_init, + capabilities = require("lvim.lsp").common_capabilities(), + settings = { + gopls = { + usePlaceholders = true, + gofumpt = true, + codelenses = { + generate = false, + gc_details = true, + test = true, + tidy = true, + }, + }, + }, +}) + +local status_ok, gopher = pcall(require, "gopher") +if not status_ok then + return +end + +gopher.setup { + commands = { + go = "go", + gomodifytags = "gomodifytags", + gotests = "gotests", + impl = "impl", + iferr = "iferr", + }, +} diff --git a/lvim/lua/config/py.lua b/lvim/lua/config/py.lua new file mode 100644 index 0000000..16f8b7f --- /dev/null +++ b/lvim/lua/config/py.lua @@ -0,0 +1,64 @@ +-- install plugins +lvim.plugins = { + "ChristianChiarulli/swenv.nvim", + "stevearc/dressing.nvim", + "mfussenegger/nvim-dap-python", + "nvim-neotest/neotest", + "nvim-neotest/neotest-python", +} + +-- automatically install python syntax highlighting +lvim.builtin.treesitter.ensure_installed = { + "python", +} + +-- setup formatting +local formatters = require "lvim.lsp.null-ls.formatters" +formatters.setup { { name = "black" }, } +lvim.format_on_save.enabled = true +lvim.format_on_save.pattern = { "*.py" } + +-- setup linting +local linters = require "lvim.lsp.null-ls.linters" +linters.setup { { command = "flake8", filetypes = { "python" } } } + +-- setup debug adapter +lvim.builtin.dap.active = true +local mason_path = vim.fn.glob(vim.fn.stdpath "data" .. "/mason/") +pcall(function() + require("dap-python").setup(mason_path .. "packages/debugpy/venv/bin/python") +end) + +-- setup testing +require("neotest").setup({ + adapters = { + require("neotest-python")({ + -- Extra arguments for nvim-dap configuration + -- See https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for values + dap = { + justMyCode = false, + console = "integratedTerminal", + }, + args = { "--log-level", "DEBUG", "--quiet" }, + runner = "pytest", + }) + } +}) + +lvim.builtin.which_key.mappings["dm"] = { "lua require('neotest').run.run()", + "Test Method" } +lvim.builtin.which_key.mappings["dM"] = { "lua require('neotest').run.run({strategy = 'dap'})", + "Test Method DAP" } +lvim.builtin.which_key.mappings["df"] = { + "lua require('neotest').run.run({vim.fn.expand('%')})", "Test Class" } +lvim.builtin.which_key.mappings["dF"] = { + "lua require('neotest').run.run({vim.fn.expand('%'), strategy = 'dap'})", "Test Class DAP" } +lvim.builtin.which_key.mappings["dS"] = { "lua require('neotest').summary.toggle()", "Test Summary" } + + +-- binding for switching +lvim.builtin.which_key.mappings["C"] = { + name = "Python", + c = { "lua require('swenv.api').pick_venv()", "Choose Env" }, +} +