aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/pep440/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/mason-core/pep440/init.lua')
-rw-r--r--lua/mason-core/pep440/init.lua64
1 files changed, 64 insertions, 0 deletions
diff --git a/lua/mason-core/pep440/init.lua b/lua/mason-core/pep440/init.lua
new file mode 100644
index 00000000..0141c501
--- /dev/null
+++ b/lua/mason-core/pep440/init.lua
@@ -0,0 +1,64 @@
+-- Function to split a version string into its components
+local function split_version(version)
+ local parts = {}
+ for part in version:gmatch "[^.]+" do
+ table.insert(parts, tonumber(part) or part)
+ end
+ 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)
+ local len = math.max(#v1_parts, #v2_parts)
+
+ for i = 1, len do
+ local v1_part = v1_parts[i] or 0
+ local v2_part = v2_parts[i] or 0
+
+ if v1_part < v2_part then
+ return -1
+ elseif v1_part > v2_part then
+ return 1
+ end
+ end
+
+ 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 comp_result = compare_versions(version, spec_version)
+
+ if operator == "==" then
+ return comp_result == 0
+ elseif operator == "!=" then
+ return comp_result ~= 0
+ elseif operator == "<=" then
+ return comp_result <= 0
+ elseif operator == "<" then
+ return comp_result < 0
+ elseif operator == ">=" then
+ return comp_result >= 0
+ elseif operator == ">" then
+ return comp_result > 0
+ else
+ error("Invalid 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
+ return false
+ end
+ end
+ return true
+end
+
+return {
+ check_version = check_version,
+}