mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-09-11 23:44:23 +08:00
Delete defined modules if evaluation fails (#1528)
This commit is contained in:
parent
dc5be4a241
commit
9c9c54de65
2 changed files with 20 additions and 1 deletions
|
@ -350,10 +350,11 @@ defmodule Livebook.Runtime.Evaluator do
|
|||
eval_result = eval(code, context.binding, context.env)
|
||||
evaluation_time_ms = time_diff_ms(start_time)
|
||||
|
||||
tracer_info = Evaluator.IOProxy.get_tracer_info(state.io_proxy)
|
||||
|
||||
{new_context, result, code_error, identifiers_used, identifiers_defined} =
|
||||
case eval_result do
|
||||
{:ok, value, binding, env} ->
|
||||
tracer_info = Evaluator.IOProxy.get_tracer_info(state.io_proxy)
|
||||
context_id = random_id()
|
||||
|
||||
new_context = %{
|
||||
|
@ -370,6 +371,10 @@ defmodule Livebook.Runtime.Evaluator do
|
|||
{new_context, result, nil, identifiers_used, identifiers_defined}
|
||||
|
||||
{:error, kind, error, stacktrace, code_error} ->
|
||||
for {module, _} <- tracer_info.modules_defined do
|
||||
delete_module!(module)
|
||||
end
|
||||
|
||||
result = {:error, kind, error, stacktrace}
|
||||
identifiers_used = :unknown
|
||||
identifiers_defined = %{}
|
||||
|
|
|
@ -334,6 +334,20 @@ defmodule Livebook.Runtime.EvaluatorTest do
|
|||
assert {:docs_v1, _, _, _, _, _, _} = Code.fetch_docs(Livebook.Runtime.EvaluatorTest.Disk)
|
||||
end
|
||||
|
||||
test "deletes defined modules if the evaluation fails", %{evaluator: evaluator} do
|
||||
code = """
|
||||
defmodule Livebook.Runtime.EvaluatorTest.Raised do
|
||||
end
|
||||
|
||||
raise "failed"
|
||||
"""
|
||||
|
||||
Evaluator.evaluate_code(evaluator, code, :code_1, [])
|
||||
assert_receive {:runtime_evaluation_response, :code_1, {:error, _, _, _}, metadata()}
|
||||
|
||||
refute Code.ensure_loaded?(Livebook.Runtime.EvaluatorTest.Raised)
|
||||
end
|
||||
|
||||
@tag :with_ebin_path
|
||||
test "runs doctests when a module is defined", %{evaluator: evaluator} do
|
||||
code = ~S'''
|
||||
|
|
Loading…
Add table
Reference in a new issue