diff --git a/lib/elixir/lib/kernel/cli.ex b/lib/elixir/lib/kernel/cli.ex index 9a55f94197..84c9cb76bc 100644 --- a/lib/elixir/lib/kernel/cli.ex +++ b/lib/elixir/lib/kernel/cli.ex @@ -99,9 +99,14 @@ defmodule Kernel.CLI do Shared helper for error formatting on CLI tools. """ def format_error(kind, reason, stacktrace) do + {banner, rest} = format_error_parts(kind, reason, stacktrace) + [banner, rest] + end + + defp format_error_parts(kind, reason, stacktrace) do {blamed, stacktrace} = Exception.blame(kind, reason, stacktrace) - iodata = + banner = case blamed do %FunctionClauseError{} -> formatted = Exception.format_banner(kind, reason, stacktrace) @@ -112,7 +117,7 @@ defmodule Kernel.CLI do Exception.format_banner(kind, blamed, stacktrace) end - [iodata, ?\n, Exception.format_stacktrace(prune_stacktrace(stacktrace))] + {banner, [?\n, Exception.format_stacktrace(prune_stacktrace(stacktrace))]} end @doc """ @@ -179,7 +184,8 @@ defmodule Kernel.CLI do ## Error handling defp print_error(kind, reason, stacktrace) do - IO.write(:stderr, format_error(kind, reason, stacktrace)) + {banner, rest} = format_error_parts(kind, reason, stacktrace) + IO.write(:stderr, [IO.ANSI.format([:red, banner]), rest]) end defp blame_match(%{match?: true, node: node}), do: blame_ansi(:normal, "+", node)