瀏覽代碼

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 [...]
pull/3/head
Tuncer Ayaz 11 年之前
父節點
當前提交
97c9fdf31a
共有 1 個文件被更改,包括 23 次插入16 次删除
  1. +23
    -16
      src/rebar_base_compiler.erl

+ 23
- 16
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.

Loading…
取消
儲存