If the syntax error is in a .hrl file, then the reported error message
is not as useful because it's not clear which .erl file was being
compiled. We can fix that easily by first printing what source file was
being processed. We don't change the actual error message, so this will
still work with your editor of choice for jumping to the right line.

Before
------

Success:
Compiled src/foo.erl

Failure:
include/foo.hrl:10: syntax error [...]

After
-----

Success:
Compiled src/foo.erl

Failure:
Compiling src/foo.erl failed:
include/foo.hrl:10: syntax error [...]
This commit is contained in:
Tuncer Ayaz 2014-01-11 22:10:50 +01:00
parent 5d2b9ba23f
commit 97c9fdf31a

View file

@ -49,7 +49,7 @@ run(Config, FirstFiles, RestFiles, CompileFn) ->
Jobs = rebar:get_jobs(Config), Jobs = rebar:get_jobs(Config),
?DEBUG("Starting ~B compile worker(s)~n", [Jobs]), ?DEBUG("Starting ~B compile worker(s)~n", [Jobs]),
Pids = [spawn_monitor(F) || _I <- lists:seq(1,Jobs)], Pids = [spawn_monitor(F) || _I <- lists:seq(1,Jobs)],
compile_queue(Pids, RestFiles) compile_queue(Config, Pids, RestFiles)
end. end.
run(Config, FirstFiles, SourceDir, SourceExt, TargetDir, TargetExt, run(Config, FirstFiles, SourceDir, SourceExt, TargetDir, TargetExt,
@ -139,27 +139,31 @@ compile_each([Source | Rest], Config, CompileFn) ->
skipped -> skipped ->
?INFO("Skipped ~s\n", [Source]); ?INFO("Skipped ~s\n", [Source]);
Error -> Error ->
?CONSOLE("Compiling ~s failed:\n",
[maybe_absname(Config, Source)]),
maybe_report(Error), maybe_report(Error),
?DEBUG("Compilation failed: ~p\n", [Error]), ?DEBUG("Compilation failed: ~p\n", [Error]),
?FAIL ?FAIL
end, end,
compile_each(Rest, Config, CompileFn). compile_each(Rest, Config, CompileFn).
compile_queue([], []) -> compile_queue(_Config, [], []) ->
ok; ok;
compile_queue(Pids, Targets) -> compile_queue(Config, Pids, Targets) ->
receive receive
{next, Worker} -> {next, Worker} ->
case Targets of case Targets of
[] -> [] ->
Worker ! empty, Worker ! empty,
compile_queue(Pids, Targets); compile_queue(Config, Pids, Targets);
[Source | Rest] -> [Source | Rest] ->
Worker ! {compile, Source}, Worker ! {compile, Source},
compile_queue(Pids, Rest) compile_queue(Config, Pids, Rest)
end; end;
{fail, Error} -> {fail, [_, {source, Source}}=Error] ->
?CONSOLE("Compiling ~s failed:\n",
[maybe_absname(Config, Source)]),
maybe_report(Error), maybe_report(Error),
?DEBUG("Worker compilation failed: ~p\n", [Error]), ?DEBUG("Worker compilation failed: ~p\n", [Error]),
?FAIL; ?FAIL;
@ -167,20 +171,20 @@ compile_queue(Pids, Targets) ->
{compiled, Source, Warnings} -> {compiled, Source, Warnings} ->
report(Warnings), report(Warnings),
?CONSOLE("Compiled ~s\n", [Source]), ?CONSOLE("Compiled ~s\n", [Source]),
compile_queue(Pids, Targets); compile_queue(Config, Pids, Targets);
{compiled, Source} -> {compiled, Source} ->
?CONSOLE("Compiled ~s\n", [Source]), ?CONSOLE("Compiled ~s\n", [Source]),
compile_queue(Pids, Targets); compile_queue(Config, Pids, Targets);
{skipped, Source} -> {skipped, Source} ->
?INFO("Skipped ~s\n", [Source]), ?INFO("Skipped ~s\n", [Source]),
compile_queue(Pids, Targets); compile_queue(Config, Pids, Targets);
{'DOWN', Mref, _, Pid, normal} -> {'DOWN', Mref, _, Pid, normal} ->
?DEBUG("Worker exited cleanly\n", []), ?DEBUG("Worker exited cleanly\n", []),
Pids2 = lists:delete({Pid, Mref}, Pids), Pids2 = lists:delete({Pid, Mref}, Pids),
compile_queue(Pids2, Targets); compile_queue(Config, Pids2, Targets);
{'DOWN', _Mref, _, _Pid, Info} -> {'DOWN', _Mref, _, _Pid, Info} ->
?DEBUG("Worker failed: ~p\n", [Info]), ?DEBUG("Worker failed: ~p\n", [Info]),
@ -239,12 +243,7 @@ report(Messages) ->
format_errors(Config, _MainSource, Extra, Errors) -> format_errors(Config, _MainSource, Extra, Errors) ->
[begin [begin
AbsSource = case rebar_utils:processing_base_dir(Config) of AbsSource = maybe_absname(Config, Source),
true ->
Source;
false ->
filename:absname(Source)
end,
[format_error(AbsSource, Extra, Desc) || Desc <- Descs] [format_error(AbsSource, Extra, Desc) || Desc <- Descs]
end end
|| {Source, Descs} <- Errors]. || {Source, Descs} <- Errors].
@ -258,3 +257,11 @@ format_error(AbsSource, Extra, {Line, Mod, Desc}) ->
format_error(AbsSource, Extra, {Mod, Desc}) -> format_error(AbsSource, Extra, {Mod, Desc}) ->
ErrorDesc = Mod:format_error(Desc), ErrorDesc = Mod:format_error(Desc),
?FMT("~s: ~s~s~n", [AbsSource, Extra, ErrorDesc]). ?FMT("~s: ~s~s~n", [AbsSource, Extra, ErrorDesc]).
maybe_absname(Config, Filename) ->
case rebar_utils:processing_base_dir(Config) of
true ->
Filename;
false ->
filename:absname(Filename)
end.