Minor refactorings to simplify the code.
This commit is contained in:
@@ -33,39 +33,38 @@ defmodule Display do
|
|||||||
IO.puts(format_red(Exception.format(:error, error, trace)))
|
IO.puts(format_red(Exception.format(:error, error, trace)))
|
||||||
end
|
end
|
||||||
|
|
||||||
defp line_number({_, [line: line], _}, in: _) do
|
defp line_number({_, [line: line], _}, in: _), do: line
|
||||||
line
|
|
||||||
end
|
|
||||||
defp line_number(expr, in: file) do
|
defp line_number(expr, in: file) do
|
||||||
expression = expr_to_s(expr)
|
expr
|
||||||
{:ok, line} = File.open(file, fn(x) ->
|
|> to_s
|
||||||
IO.read(x, :all)
|
|> find_in_file(file)
|
||||||
|
|> interpret
|
||||||
|
end
|
||||||
|
|
||||||
|
defp interpret({:ok, n}), do: n
|
||||||
|
|
||||||
|
defp find_in_file(line, file) do
|
||||||
|
File.open(file, fn(handle) ->
|
||||||
|
IO.read(handle, :all)
|
||||||
|> String.split("\n")
|
|> String.split("\n")
|
||||||
|> Enum.find_index(fn(candidate) -> String.contains?(candidate, expression) end)
|
|> Enum.find_index(fn(candidate) -> String.contains?(candidate, line) end)
|
||||||
|> one_based
|
|> one_based
|
||||||
end)
|
end)
|
||||||
line
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp one_based(line) when is_number(line), do: line + 1
|
|
||||||
defp one_based(nil), do: "???"
|
defp one_based(nil), do: "???"
|
||||||
|
defp one_based(line), do: line + 1
|
||||||
|
|
||||||
defp expr_to_s(tuple) when is_tuple(tuple) do
|
defp to_s(atom) when is_atom(atom), do: ":#{to_string(atom)}"
|
||||||
|
defp to_s(tuple) when is_tuple(tuple) do
|
||||||
elements = tuple
|
elements = tuple
|
||||||
|> Tuple.to_list
|
|> Tuple.to_list
|
||||||
|> Enum.map(fn(x) -> to_s(x) end)
|
|> Enum.map(fn(x) -> to_s(x) end)
|
||||||
|
|
||||||
"{#{Enum.join(elements, ", ")}}"
|
"{#{Enum.join(elements, ", ")}}"
|
||||||
end
|
end
|
||||||
|
defp to_s(x), do: "\"#{x}\""
|
||||||
|
|
||||||
defp expr_to_s(atom) when is_atom(atom) do
|
|
||||||
to_string(atom)
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_s(x) when is_atom(x) do
|
|
||||||
":#{to_string(x)}"
|
|
||||||
end
|
|
||||||
def to_s(x), do: "\"#{x}\""
|
|
||||||
|
|
||||||
defp source_file(module) do
|
defp source_file(module) do
|
||||||
module.__info__(:compile)
|
module.__info__(:compile)
|
||||||
|
|||||||
Reference in New Issue
Block a user