return { { "nvim-treesitter/nvim-treesitter", opts = function(_, opts) if type(opts.ensure_installed) == "table" then vim.list_extend(opts.ensure_installed, { "zig" }) end end, }, { "neovim/nvim-lspconfig", opts = { servers = { zls = {}, }, }, }, { "williamboman/mason.nvim", opts = function(_, opts) opts.ensure_installed = opts.ensure_installed or {} vim.list_extend(opts.ensure_installed, { "zls", "codelldb" }) end, }, { "nvim-neotest/neotest", optional = true, dependencies = { "lawrence-laz/neotest-zig", }, opts = { adapters = { ["neotest-zig"] = {}, }, }, }, { "mfussenegger/nvim-dap", optional = true, opts = function() local dap = require("dap") dap.configurations.zig = { { name = "Zig Run", type = "codelldb", request = "launch", program = function() os.execute("zig build") local command = "find ! -type d -path './zig-out/bin/*' | grep -v 'Test' | sed 's#.*/##'" local bin_location = io.popen(command, "r") if bin_location ~= nil then return "zig-out/bin/" .. bin_location:read("*a"):gsub("[\n\r]", "") else return "" end end, cwd = "${workspaceFolder}", stopOnEntry = false, args = function() local argv = {} arg = vim.fn.input(string.format("Arguments: ")) for a in string.gmatch(arg, "%S+") do table.insert(argv, a) end return argv end, }, } end, }, { "stevearc/conform.nvim", opts = function(_, opts) opts.formatters_by_ft.python = opts.formatters_by_ft.python or {} table.insert(opts.formatters_by_ft.python, "zigfmt") return opts end, }, }