aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2025-08-02 00:19:10 +0200
committerGitHub <noreply@github.com>2025-08-01 22:19:10 +0000
commit9e25c98d4826998460926f8c5c2284848d80ae89 (patch)
tree6ba2cce1709bfb1af4d1fd6f48c155ed69b14106 /lua
parentfix(ui): only set border to none if `'winborder'` doesn't exist (#1984) (diff)
downloadmason-9e25c98d4826998460926f8c5c2284848d80ae89.tar
mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.gz
mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.bz2
mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.lz
mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.xz
mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.zst
mason-9e25c98d4826998460926f8c5c2284848d80ae89.zip
fix(pypi): add support for "compatible release" (~=) PEP440 expressions (#2000)
Diffstat (limited to 'lua')
-rw-r--r--lua/mason-core/pep440/init.lua20
1 files changed, 14 insertions, 6 deletions
diff --git a/lua/mason-core/pep440/init.lua b/lua/mason-core/pep440/init.lua
index 0141c501..526bb87e 100644
--- a/lua/mason-core/pep440/init.lua
+++ b/lua/mason-core/pep440/init.lua
@@ -1,4 +1,3 @@
--- Function to split a version string into its components
local function split_version(version)
local parts = {}
for part in version:gmatch "[^.]+" do
@@ -7,7 +6,6 @@ local function split_version(version)
return parts
end
--- Function to compare two versions
local function compare_versions(version1, version2)
local v1_parts = split_version(version1)
local v2_parts = split_version(version2)
@@ -27,9 +25,8 @@ local function compare_versions(version1, version2)
return 0
end
--- Function to check a version against a single specifier
local function check_single_specifier(version, specifier)
- local operator, spec_version = specifier:match "^([<>=!]+)%s*(.+)$"
+ local operator, spec_version = specifier:match "^([<>=!~]+)%s*(.+)$"
local comp_result = compare_versions(version, spec_version)
if operator == "==" then
@@ -44,12 +41,23 @@ local function check_single_specifier(version, specifier)
return comp_result >= 0
elseif operator == ">" then
return comp_result > 0
+ elseif operator == "~=" then
+ if comp_result < 0 then
+ return false
+ end
+ local spec_version_components = split_version(spec_version)
+ local version_components = split_version(version)
+ for i = 1, #spec_version_components - 1 do
+ if spec_version_components[i] ~= version_components[i] then
+ return false
+ end
+ end
+ return true
else
- error("Invalid operator in version specifier: " .. operator)
+ error("Unknown operator in version specifier: " .. operator)
end
end
--- Function to check a version against multiple specifiers
local function check_version(version, specifiers)
for specifier in specifiers:gmatch "[^,]+" do
if not check_single_specifier(version, specifier:match "^%s*(.-)%s*$") then