diff --git a/lib/ex_type/typespec.ex b/lib/ex_type/typespec.ex index d61b5a5..0c2fd28 100644 --- a/lib/ex_type/typespec.ex +++ b/lib/ex_type/typespec.ex @@ -606,11 +606,7 @@ defmodule ExType.Typespec do # type variable def eval_type({name, meta, atom}, {_, vars} = context) when is_atom(name) and is_atom(atom) do case vars do - %{^name => %Type.SpecVariable{} = type} -> - type - - %{^name => raw} -> - eval_type(raw, context) + %{^name => type} -> type _ -> eval_type({name, meta, []}, context) diff --git a/test/ex_type/regression_39_failure_case.ex b/test/ex_type/regression_39_failure_case.ex new file mode 100644 index 0000000..2517c35 --- /dev/null +++ b/test/ex_type/regression_39_failure_case.ex @@ -0,0 +1,9 @@ +defmodule Regression39FailureCase do + @type t(elem) :: [elem] + + @spec mylength(t(term())) :: integer() + + def mylength(:foo) do + 42 + end +end diff --git a/test/ex_type/regression_39_test_case.ex b/test/ex_type/regression_39_test_case.ex new file mode 100644 index 0000000..3571688 --- /dev/null +++ b/test/ex_type/regression_39_test_case.ex @@ -0,0 +1,9 @@ +defmodule Regression39TestCase do + @type t(elem) :: [elem] + + @spec mylength(t(term())) :: integer() + + def mylength(_) do + 23 + end +end diff --git a/test/ex_type_test.exs b/test/ex_type_test.exs index d092b9d..80acb72 100644 --- a/test/ex_type_test.exs +++ b/test/ex_type_test.exs @@ -2,9 +2,15 @@ defmodule ExTypeTest do use ExUnit.Case doctest ExType - test "typespec/**/*_test_case.ex" do - for file <- Path.wildcard("#{__DIR__}/ex_type/**/*_test_case.ex") do - ExType.check(file) + for file <- Path.wildcard("#{__DIR__}/ex_type/**/*_test_case.ex") do + test "#{file}" do + ExType.check(unquote(file)) + end + end + + for file <- Path.wildcard("#{__DIR__}/ex_type/**/*_failure_case.ex") do + test "#{file}" do + ExType.check(unquote(file)) end end end