diff options
| author | William Boman <william@redwill.se> | 2023-06-13 16:40:27 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-13 16:40:27 +0200 |
| commit | 6f4495590a0f9e121b483c9b1236fbabbd80da7a (patch) | |
| tree | 41e58fedf19e78ff08243f6043b4929a339a8e65 /lua | |
| parent | chore(main): release 1.2.0 (#1348) (diff) | |
| download | mason-6f4495590a0f9e121b483c9b1236fbabbd80da7a.tar mason-6f4495590a0f9e121b483c9b1236fbabbd80da7a.tar.gz mason-6f4495590a0f9e121b483c9b1236fbabbd80da7a.tar.bz2 mason-6f4495590a0f9e121b483c9b1236fbabbd80da7a.tar.lz mason-6f4495590a0f9e121b483c9b1236fbabbd80da7a.tar.xz mason-6f4495590a0f9e121b483c9b1236fbabbd80da7a.tar.zst mason-6f4495590a0f9e121b483c9b1236fbabbd80da7a.zip | |
fix(providers): fix some client providers and add some more (#1354)
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/mason/providers/client/gh.lua | 3 | ||||
| -rw-r--r-- | lua/mason/providers/client/golang.lua | 20 | ||||
| -rw-r--r-- | lua/mason/providers/client/init.lua | 2 | ||||
| -rw-r--r-- | lua/mason/providers/client/npm.lua | 6 | ||||
| -rw-r--r-- | lua/mason/providers/client/pypi.lua | 5 | ||||
| -rw-r--r-- | lua/mason/providers/client/rubygems.lua | 29 |
6 files changed, 59 insertions, 6 deletions
diff --git a/lua/mason/providers/client/gh.lua b/lua/mason/providers/client/gh.lua index 25c59d74..bca11460 100644 --- a/lua/mason/providers/client/gh.lua +++ b/lua/mason/providers/client/gh.lua @@ -10,9 +10,6 @@ return { get_all_release_versions = function(repo) return client.fetch_all_releases(repo):map(_.map(_.prop "tag_name")) end, - get_latest_tag = function(repo) - return Result.failure "Unimplemented" - end, get_all_tags = function(repo) return client.fetch_all_tags(repo):map(_.map(_.compose(_.gsub("^refs/tags/", ""), _.prop "ref"))) end, diff --git a/lua/mason/providers/client/golang.lua b/lua/mason/providers/client/golang.lua new file mode 100644 index 00000000..5e473005 --- /dev/null +++ b/lua/mason/providers/client/golang.lua @@ -0,0 +1,20 @@ +local _ = require "mason-core.functional" +local spawn = require "mason-core.spawn" + +---@type GolangProvider +return { + get_all_versions = function(pkg) + return spawn + .go({ + "list", + "-json", + "-m", + "-versions", + pkg, + }) + :map(_.prop "stdout") + :map_catching(vim.json.decode) + :map(_.prop "Versions") + :map(_.reverse) + end, +} diff --git a/lua/mason/providers/client/init.lua b/lua/mason/providers/client/init.lua index a32f7017..0bc264fc 100644 --- a/lua/mason/providers/client/init.lua +++ b/lua/mason/providers/client/init.lua @@ -3,4 +3,6 @@ return { github = require "mason.providers.client.gh", npm = require "mason.providers.client.npm", pypi = require "mason.providers.client.pypi", + rubygems = require "mason.providers.client.rubygems", + golang = require "mason.providers.client.golang", } diff --git a/lua/mason/providers/client/npm.lua b/lua/mason/providers/client/npm.lua index 41beb2c2..fc63f5fc 100644 --- a/lua/mason/providers/client/npm.lua +++ b/lua/mason/providers/client/npm.lua @@ -11,6 +11,10 @@ return { :map(_.pick { "name", "version" }) end, get_all_versions = function(pkg) - return spawn.npm({ "view", pkg, "versions" }):map(_.prop "stdout"):map_catching(vim.json.decode) + return spawn + .npm({ "view", "--json", pkg, "versions" }) + :map(_.prop "stdout") + :map_catching(vim.json.decode) + :map(_.reverse) end, } diff --git a/lua/mason/providers/client/pypi.lua b/lua/mason/providers/client/pypi.lua index 975142e6..ecbbfd56 100644 --- a/lua/mason/providers/client/pypi.lua +++ b/lua/mason/providers/client/pypi.lua @@ -27,8 +27,9 @@ local function get_all_versions(pkg) "--use-deprecated=legacy-resolver", -- for pip >= 20.3 ("%s=="):format(pkg), -- invalid version specifier to trigger the wanted error message }) - :map_err(_.compose(_.split ", ", _.head, _.match "%(from versions: (.+)%)", _.prop "stderr")) - :recover(_.identity) + :recover(_.prop "stderr") + :map(_.compose(_.split ", ", _.head, _.match "%(from versions: (.+)%)")) + :map(_.reverse) end ---@param pkg string diff --git a/lua/mason/providers/client/rubygems.lua b/lua/mason/providers/client/rubygems.lua new file mode 100644 index 00000000..40afbe64 --- /dev/null +++ b/lua/mason/providers/client/rubygems.lua @@ -0,0 +1,29 @@ +local Optional = require "mason-core.optional" +local _ = require "mason-core.functional" +local spawn = require "mason-core.spawn" + +---@param gem string +---@param output string "$ gem list" output +local parse_gem_versions = _.curryN(function(gem, output) + local lines = _.split("\n", output) + return Optional.of_nilable(_.find_first(_.starts_with(gem), lines)) + :map(_.compose(_.head, _.match "%((.+)%)$")) + :map(_.split ", ") + :ok_or "Failed to parse gem list output." +end, 2) + +---@async +---@param gem string +local function get_all_versions(gem) + return spawn.gem({ "list", gem, "--remote", "--all" }):map(_.prop "stdout"):and_then(parse_gem_versions(gem)) +end + +---@type RubyGemsProvider +return { + get_latest_version = function(gem) + return get_all_versions(gem):map(_.head) + end, + get_all_versions = function(gem) + return get_all_versions(gem) + end, +} |
