Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 20 additions & 28 deletions lua/mason-core/installer/compiler/compilers/cargo.lua
Original file line number Diff line number Diff line change
@@ -1,45 +1,37 @@
local Result = require "mason-core.result"
local _ = require "mason-core.functional"
local providers = require "mason-core.providers"
local util = require "mason-core.installer.compiler.util"

local M = {}

---@class CargoSource : RegistryPackageSource
---@field supported_platforms? string[]

---@param source CargoSource
---@param purl Purl
function M.parse(source, purl)
return Result.try(function(try)
if source.supported_platforms then
try(util.ensure_valid_platform(source.supported_platforms))
end

local repository_url = _.path({ "qualifiers", "repository_url" }, purl)
local repository_url = _.path({ "qualifiers", "repository_url" }, purl)

local git
if repository_url then
git = {
url = repository_url,
rev = _.path({ "qualifiers", "rev" }, purl) == "true",
}
end
local git
if repository_url then
git = {
url = repository_url,
rev = _.path({ "qualifiers", "rev" }, purl) == "true",
}
end

---@type string?
local features = _.path({ "qualifiers", "features" }, purl)
local locked = _.path({ "qualifiers", "locked" }, purl)
---@type string?
local features = _.path({ "qualifiers", "features" }, purl)
local locked = _.path({ "qualifiers", "locked" }, purl)

---@class ParsedCargoSource : ParsedPackageSource
local parsed_source = {
crate = purl.name,
version = purl.version,
features = features,
locked = locked ~= "false",
git = git,
}
return parsed_source
end)
---@class ParsedCargoSource : ParsedPackageSource
local parsed_source = {
crate = purl.name,
version = purl.version,
features = features,
locked = locked ~= "false",
git = git,
}
return Result.success(parsed_source)
end

---@async
Expand Down
22 changes: 7 additions & 15 deletions lua/mason-core/installer/compiler/compilers/gem.lua
Original file line number Diff line number Diff line change
@@ -1,30 +1,22 @@
local Result = require "mason-core.result"
local _ = require "mason-core.functional"
local providers = require "mason-core.providers"
local util = require "mason-core.installer.compiler.util"

local M = {}

---@class GemSource : RegistryPackageSource
---@field supported_platforms? string[]
---@field extra_packages? string[]

---@param source GemSource
---@param purl Purl
function M.parse(source, purl)
return Result.try(function(try)
if source.supported_platforms then
try(util.ensure_valid_platform(source.supported_platforms))
end

---@class ParsedGemSource : ParsedPackageSource
local parsed_source = {
package = purl.name,
version = purl.version,
extra_packages = source.extra_packages,
}
return parsed_source
end)
---@class ParsedGemSource : ParsedPackageSource
local parsed_source = {
package = purl.name,
version = purl.version,
extra_packages = source.extra_packages,
}
return Result.success(parsed_source)
end

---@async
Expand Down
34 changes: 13 additions & 21 deletions lua/mason-core/installer/compiler/compilers/pypi.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,28 @@ local Result = require "mason-core.result"
local _ = require "mason-core.functional"
local providers = require "mason-core.providers"
local settings = require "mason.settings"
local util = require "mason-core.installer.compiler.util"

local M = {}

---@class PypiSource : RegistryPackageSource
---@field extra_packages? string[]
---@field supported_platforms? string[]

---@param source PypiSource
---@param purl Purl
function M.parse(source, purl)
return Result.try(function(try)
if source.supported_platforms then
try(util.ensure_valid_platform(source.supported_platforms))
end

---@class ParsedPypiSource : ParsedPackageSource
local parsed_source = {
package = purl.name,
version = purl.version --[[ @as string ]],
extra = _.path({ "qualifiers", "extra" }, purl),
extra_packages = source.extra_packages,
pip = {
upgrade = settings.current.pip.upgrade_pip,
extra_args = settings.current.pip.install_args,
},
}

return parsed_source
end)
---@class ParsedPypiSource : ParsedPackageSource
local parsed_source = {
package = purl.name,
version = purl.version --[[ @as string ]],
extra = _.path({ "qualifiers", "extra" }, purl),
extra_packages = source.extra_packages,
pip = {
upgrade = settings.current.pip.upgrade_pip,
extra_args = settings.current.pip.install_args,
},
}

return Result.success(parsed_source)
end

---@async
Expand Down
5 changes: 5 additions & 0 deletions lua/mason-core/installer/compiler/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ end

---@param source RegistryPackageSource
---@param version string?
---@return RegistryPackageSource
local function coalesce_source(source, version)
if version and source.version_overrides then
for i = #source.version_overrides, 1, -1 do
Expand Down Expand Up @@ -117,6 +118,10 @@ function M.parse(spec, opts)

local source = coalesce_source(spec.source, opts.version)

if source.supported_platforms then
try(util.ensure_valid_platform(source.supported_platforms))
end

---@type Purl
local purl = try(Purl.parse(source.id))
log.trace("Parsed purl.", source.id, purl)
Expand Down
1 change: 1 addition & 0 deletions lua/mason-core/package/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ Package.License = setmetatable({}, {

---@class RegistryPackageSource
---@field id string PURL-compliant identifier.
---@field supported_platforms? Platform[]
---@field version_overrides? RegistryPackageSourceVersionOverride[]

---@class RegistryPackageSchemas
Expand Down
3 changes: 0 additions & 3 deletions tests/mason-core/installer/compiler/compiler_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ local dummy_compiler = {
---@param opts PackageInstallOpts
parse = function(source, purl, opts)
return Result.try(function(try)
if source.supported_platforms then
try(util.ensure_valid_platform(source.supported_platforms))
end
return {
package = purl.name,
extra_info = source.extra_info,
Expand Down
9 changes: 0 additions & 9 deletions tests/mason-core/installer/compiler/compilers/cargo_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,6 @@ describe("cargo compiler :: parsing", function()
cargo.parse({}, purl { qualifiers = { locked = "false" } })
)
end)

it("should check supported platforms", function()
assert.same(
Result.failure "PLATFORM_UNSUPPORTED",
cargo.parse({
supported_platforms = { "VIC64" },
}, purl { qualifiers = { locked = "false" } })
)
end)
end)

describe("cargo compiler :: installing", function()
Expand Down
4 changes: 0 additions & 4 deletions tests/mason-core/installer/compiler/compilers/gem_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,6 @@ describe("gem compiler :: parsing", function()
gem.parse({ extra_packages = { "extra" } }, purl())
)
end)

it("should check supported platforms", function()
assert.same(Result.failure "PLATFORM_UNSUPPORTED", gem.parse({ supported_platforms = { "VIC64" } }, purl()))
end)
end)

describe("gem compiler :: installing", function()
Expand Down
4 changes: 0 additions & 4 deletions tests/mason-core/installer/compiler/compilers/pypi_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,6 @@ describe("pypi compiler :: parsing", function()
)
settings.set(settings._DEFAULT_SETTINGS)
end)

it("should check supported platforms", function()
assert.same(Result.failure "PLATFORM_UNSUPPORTED", pypi.parse({ supported_platforms = { "VIC64" } }, purl()))
end)
end)

describe("pypi compiler :: installing", function()
Expand Down