Skip to content

Commit ed2bbe5

Browse files
committed
Pass original exception down to details in diagnostic, closes #13142
1 parent 6acc174 commit ed2bbe5

File tree

5 files changed

+21
-12
lines changed

5 files changed

+21
-12
lines changed

lib/elixir/lib/code.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ defmodule Code do
204204
required(:position) => position,
205205
required(:stacktrace) => Exception.stacktrace(),
206206
required(:span) => {non_neg_integer, non_neg_integer} | nil,
207+
optional(:exception) => Exception.t() | nil,
207208
optional(any()) => any()
208209
}
209210

lib/elixir/lib/kernel/parallel_compiler.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -900,10 +900,14 @@ defmodule Kernel.ParallelCompiler do
900900
message: message,
901901
severity: :error,
902902
stacktrace: stack,
903-
span: nil
903+
span: nil,
904+
exception: get_exception(reason)
904905
}
905906
end
906907

908+
defp get_exception(exception) when is_exception(exception), do: exception
909+
defp get_exception(_reason), do: nil
910+
907911
defp get_line(_file, %{line: line, column: column}, _stack)
908912
when is_integer(line) and line > 0 and is_integer(column) and column >= 0 do
909913
{line, column}

lib/mix/lib/mix/compilers/elixir.ex

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -767,22 +767,25 @@ defmodule Mix.Compilers.Elixir do
767767
end
768768
end
769769

770-
defp diagnostic(%{
771-
file: file,
772-
position: position,
773-
message: message,
774-
severity: severity,
775-
stacktrace: stacktrace,
776-
span: span
777-
}) do
770+
defp diagnostic(
771+
%{
772+
file: file,
773+
position: position,
774+
message: message,
775+
severity: severity,
776+
stacktrace: stacktrace,
777+
span: span
778+
} = diagnostic
779+
) do
778780
%Mix.Task.Compiler.Diagnostic{
779781
file: file,
780782
position: position,
781783
message: message,
782784
severity: severity,
783785
compiler_name: "Elixir",
784786
stacktrace: stacktrace,
785-
span: span
787+
span: span,
788+
details: Map.get(diagnostic, :exception, nil)
786789
}
787790
end
788791

lib/mix/lib/mix/task.compiler.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ defmodule Mix.Task.Compiler do
3939
message: IO.chardata(),
4040
position: position,
4141
compiler_name: String.t(),
42-
details: any,
42+
details: Exception.t() | any,
4343
stacktrace: Exception.stacktrace(),
4444
span: {non_neg_integer, non_neg_integer} | nil
4545
}

lib/mix/test/mix/tasks/compile_test.exs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,8 @@ defmodule Mix.Tasks.CompileTest do
182182
severity: :error,
183183
position: {2, 20},
184184
message: "** (SyntaxError) invalid syntax found on lib/a.ex:2:" <> _,
185-
compiler_name: "Elixir"
185+
compiler_name: "Elixir",
186+
details: %SyntaxError{}
186187
} = diagnostic
187188
end)
188189
end)

0 commit comments

Comments
 (0)