diff options
author | José Valim <jose.valim@dashbit.co> | 2021-11-25 21:14:14 +0100 |
---|---|---|
committer | José Valim <jose.valim@dashbit.co> | 2021-11-25 21:14:14 +0100 |
commit | f5208a39a3c13ab56516a8d5bea59ddcc3a8c472 (patch) | |
tree | 495d41d1d03c353ea83d625443073042a15357ac | |
parent | 4a88be86f8dbe46aa8315aab7fe3713882c13d30 (diff) | |
download | elixir-f5208a39a3c13ab56516a8d5bea59ddcc3a8c472.tar.gz |
Emit checker warnings on compile_string/compile_quoted, closes #11417
-rw-r--r-- | lib/elixir/lib/code.ex | 10 | ||||
-rw-r--r-- | lib/elixir/test/elixir/code_test.exs | 9 |
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") |