|
1 | 1 | defmodule HexSolver.Requirement do |
2 | 2 | @moduledoc false |
3 | 3 |
|
4 | | - alias HexSolver.Constraints.{Range, Util} |
| 4 | + alias HexSolver.Constraints.{Empty, Range, Util} |
5 | 5 | alias HexSolver.Requirement.Parser |
6 | 6 |
|
7 | 7 | @allowed_range_ops [:>, :>=, :<, :<=, :~>] |
@@ -43,7 +43,9 @@ defmodule HexSolver.Requirement do |
43 | 43 | end |
44 | 44 |
|
45 | 45 | defp delex([], acc) do |
46 | | - Util.union(acc) |
| 46 | + acc |
| 47 | + |> Enum.map(&normalize_constraint/1) |
| 48 | + |> Util.union() |
47 | 49 | end |
48 | 50 |
|
49 | 51 | defp delex([op | rest], acc) when op in [:||, :or] do |
@@ -144,6 +146,24 @@ defmodule HexSolver.Requirement do |
144 | 146 | defp to_version({major, minor, patch, pre, _build}), |
145 | 147 | do: %Elixir.Version{major: major, minor: minor, patch: patch, pre: pre} |
146 | 148 |
|
| 149 | + defp normalize_constraint(%Range{ |
| 150 | + max: %Elixir.Version{major: 0, minor: 0, patch: 0, pre: [0]}, |
| 151 | + include_max: false |
| 152 | + }) do |
| 153 | + %Empty{} |
| 154 | + end |
| 155 | + |
| 156 | + defp normalize_constraint( |
| 157 | + %Range{ |
| 158 | + min: %Elixir.Version{major: 0, minor: 0, patch: 0, pre: [0]}, |
| 159 | + include_min: true |
| 160 | + } = range |
| 161 | + ) do |
| 162 | + %{range | min: nil, include_min: false} |
| 163 | + end |
| 164 | + |
| 165 | + defp normalize_constraint(constraint), do: constraint |
| 166 | + |
147 | 167 | # Vendored from https://github.com/elixir-lang/elixir/blob/0ff6522/lib/elixir/lib/version.ex#L495 |
148 | 168 | defmodule Parser do |
149 | 169 | @moduledoc false |
|
0 commit comments