summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTuncer Ayaz <tuncer.ayaz@gmail.com>2014-01-11 22:10:50 +0100
committerTuncer Ayaz <tuncer.ayaz@gmail.com>2014-01-15 19:28:41 +0100
commit97c9fdf31acad6c38a02e6433787749d7ac143ab (patch)
tree474f291710143ac2891323b382faf200fc1f18a0
parent5d2b9ba23f8e32ad4f99850a71c62d8b7df262d8 (diff)
Fix basho/rebar#388
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 [...]
-rw-r--r--src/rebar_base_compiler.erl39
1 files changed, 23 insertions, 16 deletions
diff --git a/src/rebar_base_compiler.erl b/src/rebar_base_compiler.erl
index a0dec30..2050771 100644
--- a/src/rebar_base_compiler.erl
+++ b/src/rebar_base_compiler.erl
@@ -49,7 +49,7 @@ run(Config, FirstFiles, RestFiles, CompileFn) ->
Jobs = rebar:get_jobs(Config),
?DEBUG("Starting ~B compile worker(s)~n", [Jobs]),
Pids = [spawn_monitor(F) || _I <- lists:seq(1,Jobs)],
- compile_queue(Pids, RestFiles)
+ compile_queue(Config, Pids, RestFiles)
end.
run(Config, FirstFiles, SourceDir, SourceExt, TargetDir, TargetExt,
@@ -139,27 +139,31 @@ compile_each([Source | Rest], Config, CompileFn) ->
skipped ->
?INFO("Skipped ~s\n", [Source]);
Error ->
+ ?CONSOLE("Compiling ~s failed:\n",
+ [maybe_absname(Config, Source)]),
maybe_report(Error),
?DEBUG("Compilation failed: ~p\n", [Error]),
?FAIL
end,
compile_each(Rest, Config, CompileFn).
-compile_queue([], []) ->
+compile_queue(_Config, [], []) ->
ok;
-compile_queue(Pids, Targets) ->
+compile_queue(Config, Pids, Targets) ->
receive
{next, Worker} ->
case Targets of
[] ->
Worker ! empty,
- compile_queue(Pids, Targets);
+ compile_queue(Config, Pids, Targets);
[Source | Rest] ->
Worker ! {compile, Source},
- compile_queue(Pids, Rest)
+ compile_queue(Config, Pids, Rest)
end;
- {fail, Error} ->
+ {fail, [_, {source, Source}}=Error] ->
+ ?CONSOLE("Compiling ~s failed:\n",
+ [maybe_absname(Config, Source)]),
maybe_report(Error),
?DEBUG("Worker compilation failed: ~p\n", [Error]),
?FAIL;
@@ -167,20 +171,20 @@ compile_queue(Pids, Targets) ->
{compiled, Source, Warnings} ->
report(Warnings),
?CONSOLE("Compiled ~s\n", [Source]),
- compile_queue(Pids, Targets);
+ compile_queue(Config, Pids, Targets);
{compiled, Source} ->
?CONSOLE("Compiled ~s\n", [Source]),
- compile_queue(Pids, Targets);
+ compile_queue(Config, Pids, Targets);
{skipped, Source} ->
?INFO("Skipped ~s\n", [Source]),
- compile_queue(Pids, Targets);
+ compile_queue(Config, Pids, Targets);
{'DOWN', Mref, _, Pid, normal} ->
?DEBUG("Worker exited cleanly\n", []),
Pids2 = lists:delete({Pid, Mref}, Pids),
- compile_queue(Pids2, Targets);
+ compile_queue(Config, Pids2, Targets);
{'DOWN', _Mref, _, _Pid, Info} ->
?DEBUG("Worker failed: ~p\n", [Info]),
@@ -239,12 +243,7 @@ report(Messages) ->
format_errors(Config, _MainSource, Extra, Errors) ->
[begin
- AbsSource = case rebar_utils:processing_base_dir(Config) of
- true ->
- Source;
- false ->
- filename:absname(Source)
- end,
+ AbsSource = maybe_absname(Config, Source),
[format_error(AbsSource, Extra, Desc) || Desc <- Descs]
end
|| {Source, Descs} <- Errors].
@@ -258,3 +257,11 @@ format_error(AbsSource, Extra, {Line, Mod, Desc}) ->
format_error(AbsSource, Extra, {Mod, Desc}) ->
ErrorDesc = Mod:format_error(Desc),
?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.