From 99e566c5021a96109e3e3679e6d551d48feb26d7 Mon Sep 17 00:00:00 2001 From: xfy Date: Mon, 24 Mar 2025 09:17:20 +0800 Subject: [PATCH] refactor: update mason install all command skip packages already installed --- lua/rua/core/usercmd.lua | 16 ++++++++++-- lua/rua/plugins/lsp/mason.lua | 49 +++++++++++++++++++---------------- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/lua/rua/core/usercmd.lua b/lua/rua/core/usercmd.lua index 9568515..4681432 100644 --- a/lua/rua/core/usercmd.lua +++ b/lua/rua/core/usercmd.lua @@ -116,8 +116,20 @@ for _, group in pairs(ensure_installed) do end -- Create user command to synchronously install all Mason tools in `opts.ensure_installed`. -user_command("MasonInstallAll", function() +vim.api.nvim_create_user_command("MasonInstallAll", function() + -- 使用 pcall 引入 mason-registry + local success, registry = pcall(require, "mason-registry") + if not success then + vim.notify("Failed to load mason-registry: " .. registry, vim.log.levels.ERROR) + return + end + for _, tool in ipairs(flattened_ensure_installed) do - vim.cmd("MasonInstall " .. tool) + local pkg = registry.get_package(tool) + if not pkg:is_installed() then + vim.cmd("MasonInstall " .. tool) + else + vim.notify(tool .. " is already installed", vim.log.levels.INFO) + end end end, {}) diff --git a/lua/rua/plugins/lsp/mason.lua b/lua/rua/plugins/lsp/mason.lua index 206f38f..b8c5896 100644 --- a/lua/rua/plugins/lsp/mason.lua +++ b/lua/rua/plugins/lsp/mason.lua @@ -1,26 +1,31 @@ return { - "williamboman/mason.nvim", - -- event = "VeryLazy", - cmd = { - "Mason", - "MasonUpdate", - "MasonInstall", - "MasonUninstall", - "MasonUninstallAll", - "MasonLog", - }, - config = function() - local mason = require("mason") + { + "williamboman/mason.nvim", + -- event = "VeryLazy", + cmd = { + "Mason", + "MasonUpdate", + "MasonInstall", + "MasonUninstall", + "MasonUninstallAll", + "MasonLog", + }, + config = function() + local mason = require("mason") - -- enable mason and configure icons - mason.setup({ - ui = { - icons = { - package_installed = "✓", - package_pending = "➜", - package_uninstalled = "✗", + -- enable mason and configure icons + mason.setup({ + ui = { + icons = { + package_installed = "✓", + package_pending = "➜", + package_uninstalled = "✗", + }, }, - }, - }) - end, + }) + end, + }, + { + "mason-org/mason-registry", + }, }