diff --git a/lua/lazyvim/plugins/extras/lang/swift.lua b/lua/lazyvim/plugins/extras/lang/swift.lua new file mode 100644 index 00000000..c576a8d0 --- /dev/null +++ b/lua/lazyvim/plugins/extras/lang/swift.lua @@ -0,0 +1,90 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + opts.ensure_installed = opts.ensure_installed or {} + vim.list_extend(opts.ensure_installed, { "swift" }) + end, + }, + + -- { + -- "williamboman/mason.nvim", + -- optional = true, + -- opts = function(_, opts) + -- opts.ensure_installed = opts.ensure_installed or {} + -- vim.list_extend(opts.ensure_installed, { + -- "swiftlint", -- Required by nvim-lint swiftlint + -- "swiftformat", -- Required by confirm.nvim swiftformat + -- "xcbeautify", -- Required by xcodebuild.nvim + -- "xcode-build-server" -- Required by nvim-lspconfig sourcekit + -- }) + -- end, + -- }, + + { + "neovim/nvim-lspconfig", + opts = { + servers = { + sourcekit = { + root_dir = function(filename, _) + local util = require("lspconfig.util") + return util.root_pattern("buildServer.json")(filename) + or util.root_pattern("*.xcodeproj", "*.xcworkspace")(filename) + or util.find_git_ancestor(filename) + or util.root_pattern("Package.swift")(filename) + end, + }, + }, + }, + }, + + { + "mfussenegger/nvim-lint", + opts = { + linters_by_ft = { + swift = { "swiftlint" }, + }, + }, + }, + + { + "stevearc/conform.nvim", + opts = { + formatters_by_ft = { + swift = { "swiftformat" }, + }, + }, + }, + + { + "wojciech-kulik/xcodebuild.nvim", + dependencies = { + "nvim-telescope/telescope.nvim", + "MunifTanjim/nui.nvim", + }, + config = function() + require("xcodebuild").setup({ + code_coverage = { + enabled = true, + }, + }) + + vim.keymap.set("n", "xl", "XcodebuildToggleLogs", { desc = "Toggle Xcodebuild Logs" }) + vim.keymap.set("n", "xb", "XcodebuildBuild", { desc = "Build Project" }) + vim.keymap.set("n", "xr", "XcodebuildBuildRun", { desc = "Build & Run Project" }) + vim.keymap.set("n", "xt", "XcodebuildTest", { desc = "Run Tests" }) + vim.keymap.set("n", "xT", "XcodebuildTestClass", { desc = "Run This Test Class" }) + vim.keymap.set("n", "X", "XcodebuildPicker", { desc = "Show All Xcodebuild Actions" }) + vim.keymap.set("n", "xd", "XcodebuildSelectDevice", { desc = "Select Device" }) + vim.keymap.set("n", "xp", "XcodebuildSelectTestPlan", { desc = "Select Test Plan" }) + vim.keymap.set("n", "xc", "XcodebuildToggleCodeCoverage", { desc = "Toggle Code Coverage" }) + vim.keymap.set( + "n", + "xC", + "XcodebuildShowCodeCoverageReport", + { desc = "Show Code Coverage Report" } + ) + vim.keymap.set("n", "xq", "Telescope quickfix", { desc = "Show QuickFix List" }) + end, + }, +}