Skip to content

Commit 7dc4fac

Browse files
authored
feat(compiler): make supported_platforms a universal source field (#2002)
Previously this field had to be handled separately in each source type. This backwards-compatible change makes `supported_platforms` a universal top-level field on the `source:` object, meaning it'll be parsed for each source type.
1 parent 9e25c98 commit 7dc4fac

File tree

9 files changed

+46
-84
lines changed

9 files changed

+46
-84
lines changed

lua/mason-core/installer/compiler/compilers/cargo.lua

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,37 @@
11
local Result = require "mason-core.result"
22
local _ = require "mason-core.functional"
33
local providers = require "mason-core.providers"
4-
local util = require "mason-core.installer.compiler.util"
54

65
local M = {}
76

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

119
---@param source CargoSource
1210
---@param purl Purl
1311
function M.parse(source, purl)
14-
return Result.try(function(try)
15-
if source.supported_platforms then
16-
try(util.ensure_valid_platform(source.supported_platforms))
17-
end
18-
19-
local repository_url = _.path({ "qualifiers", "repository_url" }, purl)
12+
local repository_url = _.path({ "qualifiers", "repository_url" }, purl)
2013

21-
local git
22-
if repository_url then
23-
git = {
24-
url = repository_url,
25-
rev = _.path({ "qualifiers", "rev" }, purl) == "true",
26-
}
27-
end
14+
local git
15+
if repository_url then
16+
git = {
17+
url = repository_url,
18+
rev = _.path({ "qualifiers", "rev" }, purl) == "true",
19+
}
20+
end
2821

29-
---@type string?
30-
local features = _.path({ "qualifiers", "features" }, purl)
31-
local locked = _.path({ "qualifiers", "locked" }, purl)
22+
---@type string?
23+
local features = _.path({ "qualifiers", "features" }, purl)
24+
local locked = _.path({ "qualifiers", "locked" }, purl)
3225

33-
---@class ParsedCargoSource : ParsedPackageSource
34-
local parsed_source = {
35-
crate = purl.name,
36-
version = purl.version,
37-
features = features,
38-
locked = locked ~= "false",
39-
git = git,
40-
}
41-
return parsed_source
42-
end)
26+
---@class ParsedCargoSource : ParsedPackageSource
27+
local parsed_source = {
28+
crate = purl.name,
29+
version = purl.version,
30+
features = features,
31+
locked = locked ~= "false",
32+
git = git,
33+
}
34+
return Result.success(parsed_source)
4335
end
4436

4537
---@async

lua/mason-core/installer/compiler/compilers/gem.lua

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,22 @@
11
local Result = require "mason-core.result"
22
local _ = require "mason-core.functional"
33
local providers = require "mason-core.providers"
4-
local util = require "mason-core.installer.compiler.util"
54

65
local M = {}
76

87
---@class GemSource : RegistryPackageSource
9-
---@field supported_platforms? string[]
108
---@field extra_packages? string[]
119

1210
---@param source GemSource
1311
---@param purl Purl
1412
function M.parse(source, purl)
15-
return Result.try(function(try)
16-
if source.supported_platforms then
17-
try(util.ensure_valid_platform(source.supported_platforms))
18-
end
19-
20-
---@class ParsedGemSource : ParsedPackageSource
21-
local parsed_source = {
22-
package = purl.name,
23-
version = purl.version,
24-
extra_packages = source.extra_packages,
25-
}
26-
return parsed_source
27-
end)
13+
---@class ParsedGemSource : ParsedPackageSource
14+
local parsed_source = {
15+
package = purl.name,
16+
version = purl.version,
17+
extra_packages = source.extra_packages,
18+
}
19+
return Result.success(parsed_source)
2820
end
2921

3022
---@async

lua/mason-core/installer/compiler/compilers/pypi.lua

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,28 @@ local Result = require "mason-core.result"
22
local _ = require "mason-core.functional"
33
local providers = require "mason-core.providers"
44
local settings = require "mason.settings"
5-
local util = require "mason-core.installer.compiler.util"
65

76
local M = {}
87

98
---@class PypiSource : RegistryPackageSource
109
---@field extra_packages? string[]
11-
---@field supported_platforms? string[]
1210

1311
---@param source PypiSource
1412
---@param purl Purl
1513
function M.parse(source, purl)
16-
return Result.try(function(try)
17-
if source.supported_platforms then
18-
try(util.ensure_valid_platform(source.supported_platforms))
19-
end
20-
21-
---@class ParsedPypiSource : ParsedPackageSource
22-
local parsed_source = {
23-
package = purl.name,
24-
version = purl.version --[[ @as string ]],
25-
extra = _.path({ "qualifiers", "extra" }, purl),
26-
extra_packages = source.extra_packages,
27-
pip = {
28-
upgrade = settings.current.pip.upgrade_pip,
29-
extra_args = settings.current.pip.install_args,
30-
},
31-
}
32-
33-
return parsed_source
34-
end)
14+
---@class ParsedPypiSource : ParsedPackageSource
15+
local parsed_source = {
16+
package = purl.name,
17+
version = purl.version --[[ @as string ]],
18+
extra = _.path({ "qualifiers", "extra" }, purl),
19+
extra_packages = source.extra_packages,
20+
pip = {
21+
upgrade = settings.current.pip.upgrade_pip,
22+
extra_args = settings.current.pip.install_args,
23+
},
24+
}
25+
26+
return Result.success(parsed_source)
3527
end
3628

3729
---@async

lua/mason-core/installer/compiler/init.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ end
7272

7373
---@param source RegistryPackageSource
7474
---@param version string?
75+
---@return RegistryPackageSource
7576
local function coalesce_source(source, version)
7677
if version and source.version_overrides then
7778
for i = #source.version_overrides, 1, -1 do
@@ -117,6 +118,10 @@ function M.parse(spec, opts)
117118

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

121+
if source.supported_platforms then
122+
try(util.ensure_valid_platform(source.supported_platforms))
123+
end
124+
120125
---@type Purl
121126
local purl = try(Purl.parse(source.id))
122127
log.trace("Parsed purl.", source.id, purl)

lua/mason-core/package/init.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ Package.License = setmetatable({}, {
6060

6161
---@class RegistryPackageSource
6262
---@field id string PURL-compliant identifier.
63+
---@field supported_platforms? Platform[]
6364
---@field version_overrides? RegistryPackageSourceVersionOverride[]
6465

6566
---@class RegistryPackageSchemas

tests/mason-core/installer/compiler/compiler_spec.lua

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ local dummy_compiler = {
1313
---@param opts PackageInstallOpts
1414
parse = function(source, purl, opts)
1515
return Result.try(function(try)
16-
if source.supported_platforms then
17-
try(util.ensure_valid_platform(source.supported_platforms))
18-
end
1916
return {
2017
package = purl.name,
2118
extra_info = source.extra_info,

tests/mason-core/installer/compiler/compilers/cargo_spec.lua

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,6 @@ describe("cargo compiler :: parsing", function()
8282
cargo.parse({}, purl { qualifiers = { locked = "false" } })
8383
)
8484
end)
85-
86-
it("should check supported platforms", function()
87-
assert.same(
88-
Result.failure "PLATFORM_UNSUPPORTED",
89-
cargo.parse({
90-
supported_platforms = { "VIC64" },
91-
}, purl { qualifiers = { locked = "false" } })
92-
)
93-
end)
9485
end)
9586

9687
describe("cargo compiler :: installing", function()

tests/mason-core/installer/compiler/compilers/gem_spec.lua

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,6 @@ describe("gem compiler :: parsing", function()
2424
gem.parse({ extra_packages = { "extra" } }, purl())
2525
)
2626
end)
27-
28-
it("should check supported platforms", function()
29-
assert.same(Result.failure "PLATFORM_UNSUPPORTED", gem.parse({ supported_platforms = { "VIC64" } }, purl()))
30-
end)
3127
end)
3228

3329
describe("gem compiler :: installing", function()

tests/mason-core/installer/compiler/compilers/pypi_spec.lua

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@ describe("pypi compiler :: parsing", function()
3737
)
3838
settings.set(settings._DEFAULT_SETTINGS)
3939
end)
40-
41-
it("should check supported platforms", function()
42-
assert.same(Result.failure "PLATFORM_UNSUPPORTED", pypi.parse({ supported_platforms = { "VIC64" } }, purl()))
43-
end)
4440
end)
4541

4642
describe("pypi compiler :: installing", function()

0 commit comments

Comments
 (0)