summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@dashbit.co>2021-11-25 21:14:14 +0100
committerJosé Valim <jose.valim@dashbit.co>2021-11-25 21:14:14 +0100
commitf5208a39a3c13ab56516a8d5bea59ddcc3a8c472 (patch)
tree495d41d1d03c353ea83d625443073042a15357ac
parent4a88be86f8dbe46aa8315aab7fe3713882c13d30 (diff)
downloadelixir-f5208a39a3c13ab56516a8d5bea59ddcc3a8c472.tar.gz
Emit checker warnings on compile_string/compile_quoted, closes #11417
-rw-r--r--lib/elixir/lib/code.ex10
-rw-r--r--lib/elixir/test/elixir/code_test.exs9
2 files changed, 15 insertions, 4 deletions
diff --git a/lib/elixir/lib/code.ex b/lib/elixir/lib/code.ex
index a26f93100..373c1deef 100644
--- a/lib/elixir/lib/code.ex
+++ b/lib/elixir/lib/code.ex
@@ -1389,8 +1389,9 @@ defmodule Code do
"""
@spec compile_string(List.Chars.t(), binary) :: [{module, binary}]
def compile_string(string, file \\ "nofile") when is_binary(file) do
- loaded = :elixir_compiler.string(to_charlist(string), file, fn _, _ -> :ok end)
- Enum.map(loaded, &elem(&1, 0))
+ Module.ParallelChecker.verify(fn ->
+ :elixir_compiler.string(to_charlist(string), file, fn _, _ -> :ok end)
+ end)
end
@doc """
@@ -1403,8 +1404,9 @@ defmodule Code do
"""
@spec compile_quoted(Macro.t(), binary) :: [{module, binary}]
def compile_quoted(quoted, file \\ "nofile") when is_binary(file) do
- loaded = :elixir_compiler.quoted(quoted, file, fn _, _ -> :ok end)
- Enum.map(loaded, &elem(&1, 0))
+ Module.ParallelChecker.verify(fn ->
+ :elixir_compiler.quoted(quoted, file, fn _, _ -> :ok end)
+ end)
end
@doc """
diff --git a/lib/elixir/test/elixir/code_test.exs b/lib/elixir/test/elixir/code_test.exs
index 6f72eecd7..997fc5d5c 100644
--- a/lib/elixir/test/elixir/code_test.exs
+++ b/lib/elixir/test/elixir/code_test.exs
@@ -197,6 +197,15 @@ defmodule CodeTest do
:code.delete(CompileSimpleSample)
end
+ test "emits checker warnings" do
+ output =
+ ExUnit.CaptureIO.capture_io(:stderr, fn ->
+ Code.compile_string(File.read!(fixture_path("checker_warning.exs")))
+ end)
+
+ assert output =~ "incompatible types"
+ end
+
test "works across lexical scopes" do
assert [{CompileCrossSample, _}] =
Code.compile_string("CodeTest.genmodule CompileCrossSample")