aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/managers/dotnet/init.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-07-08 18:34:38 +0200
committerGitHub <noreply@github.com>2022-07-08 18:34:38 +0200
commit976aa4fbee8a070f362cab6f6ec84e9251a90cf9 (patch)
tree5e8d9c9c59444a25c7801b8f39763c4ba6e1f76d /lua/mason-core/managers/dotnet/init.lua
parentfeat: add gotests, gomodifytags, impl (#28) (diff)
downloadmason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.gz
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.bz2
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.lz
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.xz
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.zst
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.zip
refactor: add mason-schemas and mason-core modules (#29)
* refactor: add mason-schemas and move generated filetype map to mason-lspconfig * refactor: add mason-core module
Diffstat (limited to 'lua/mason-core/managers/dotnet/init.lua')
-rw-r--r--lua/mason-core/managers/dotnet/init.lua64
1 files changed, 64 insertions, 0 deletions
diff --git a/lua/mason-core/managers/dotnet/init.lua b/lua/mason-core/managers/dotnet/init.lua
new file mode 100644
index 00000000..f89d61ca
--- /dev/null
+++ b/lua/mason-core/managers/dotnet/init.lua
@@ -0,0 +1,64 @@
+local process = require "mason-core.process"
+local installer = require "mason-core.installer"
+local _ = require "mason-core.functional"
+local platform = require "mason-core.platform"
+
+local M = {}
+
+local create_bin_path = _.if_else(_.always(platform.is.win), _.format "%s.exe", _.identity)
+
+---@param package string
+local function with_receipt(package)
+ return function()
+ local ctx = installer.context()
+ ctx.receipt:with_primary_source(ctx.receipt.dotnet(package))
+ end
+end
+
+---@async
+---@param pkg string
+---@param opt { bin: string[] | nil } | nil
+function M.package(pkg, opt)
+ return function()
+ return M.install(pkg, opt).with_receipt()
+ end
+end
+
+---@async
+---@param pkg string
+---@param opt { bin: string[] | nil } | nil
+function M.install(pkg, opt)
+ local ctx = installer.context()
+ ctx.spawn.dotnet {
+ "tool",
+ "update",
+ "--tool-path",
+ ".",
+ ctx.requested_version
+ :map(function(version)
+ return { "--version", version }
+ end)
+ :or_else(vim.NIL),
+ pkg,
+ }
+
+ if opt and opt.bin then
+ if opt.bin then
+ _.each(function(executable)
+ ctx:link_bin(executable, create_bin_path(executable))
+ end, opt.bin)
+ end
+ end
+
+ return {
+ with_receipt = with_receipt(pkg),
+ }
+end
+
+function M.env(root_dir)
+ return {
+ PATH = process.extend_path { root_dir },
+ }
+end
+
+return M