summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Łępicki <michallepicki@users.noreply.github.com>2021-12-01 09:56:54 +0100
committerGitHub <noreply@github.com>2021-12-01 09:56:54 +0100
commit0ff6522ab4216134da60bdcfa647688334d1cce8 (patch)
treeb047671719827a461b5e274fe24ee6f7d62583b3
parent31dd59dbd1dcc5af86823efcf232980769cb37d1 (diff)
downloadelixir-0ff6522ab4216134da60bdcfa647688334d1cce8.tar.gz
Fix opaque Version.Requirement usage (#11428)
Do not pattern match on internal opaque type structure outside of the module with that opaque type definition. Fixes related dialyzer issues.
-rw-r--r--lib/elixir/lib/version.ex10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/elixir/lib/version.ex b/lib/elixir/lib/version.ex
index c43fe02fd..fc990e9a1 100644
--- a/lib/elixir/lib/version.ex
+++ b/lib/elixir/lib/version.ex
@@ -140,6 +140,12 @@ defmodule Version do
end
@doc false
+ @spec compile_requirement(t) :: t
+ def compile_requirement(%Requirement{} = requirement) do
+ requirement
+ end
+
+ @doc false
@spec match?(t, tuple) :: boolean
def match?(%__MODULE__{lexed: [operator, req | rest]}, version) do
match_lexed?(rest, version, match_op?(operator, req, version))
@@ -440,9 +446,7 @@ defmodule Version do
The internal representation is opaque.
"""
@spec compile_requirement(Requirement.t()) :: Requirement.t()
- def compile_requirement(%Requirement{} = requirement) do
- requirement
- end
+ defdelegate compile_requirement(requirement), to: Requirement
defp to_matchable(%Version{major: major, minor: minor, patch: patch, pre: pre}, allow_pre?) do
{major, minor, patch, pre, allow_pre?}