diff options
author | Tuncer Ayaz <tuncer.ayaz@gmail.com> | 2015-05-15 11:56:31 +0200 |
---|---|---|
committer | Tuncer Ayaz <tuncer.ayaz@gmail.com> | 2015-05-22 09:53:09 +0200 |
commit | 46869dabbe96481db5d8f17f449cbdc40b387409 (patch) | |
tree | 83cade937e7d7b93b38b195cfa8b3d79854ce580 | |
parent | 72d2bf506d3e3f8011c43f7d8e40cdeac892ac34 (diff) | |
download | rebar-46869dabbe96481db5d8f17f449cbdc40b387409.tar.gz |
dialyzer: nest dialyzer options to match rebar3
{dialyzer,
[
%% Store PLT in ~/.rebar/plt (Default)
{plt_location, shared},
%% Store PLT locally inside the project in .rebar
{plt_location, local},
%% Store PLT in custom directory
{plt_location, "custom_dir"},
%% Extra apps to include in the PLT
{plt_extra_apps, [app1, app2]},
{warnings, [unmatched_returns, error_handling]}
]}.
-rw-r--r-- | rebar.config | 17 | ||||
-rw-r--r-- | rebar.config.sample | 25 | ||||
-rw-r--r-- | src/rebar_dialyzer.erl | 71 |
3 files changed, 59 insertions, 54 deletions
diff --git a/rebar.config b/rebar.config index 370bc8f..a3849ec 100644 --- a/rebar.config +++ b/rebar.config @@ -32,14 +32,13 @@ - (\"diameter_dict_util\":\"parse\"/\"2\"))", []}]}. -{dialyzer_plt_extra_apps, +{dialyzer, [ - diameter - ]}. - -{dialyzer_warnings, - [ - unmatched_returns, - error_handling, - race_conditions + {plt_extra_apps, [diameter]}, + {warnings, + [ + unmatched_returns, + error_handling, + race_conditions + ]} ]}. diff --git a/rebar.config.sample b/rebar.config.sample index 41a96a4..da1e929 100644 --- a/rebar.config.sample +++ b/rebar.config.sample @@ -269,16 +269,15 @@ %% == Dialyzer == -%% Store PLT in ~/.rebar/plt (Default) -{dialyzer_plt_location, shared}. - -%% Store PLT locally inside the project in .rebar -{dialyzer_plt_location, local}. - -%% Store PLT in custom directory -{dialyzer_plt_location, "custom_path"}. - -%% Extra apps to include in the PLT -{dialyzer_plt_extra_apps, [app1, app2]}. - -{dialyzer_warnings, [unmatched_returns, error_handling]}. +{dialyzer, + [ + %% Store PLT in ~/.rebar/plt (Default) + {plt_location, shared}, + %% Store PLT locally inside the project in .rebar + {plt_location, local}, + %% Store PLT in custom directory + {plt_location, "custom_dir"}, + %% Extra apps to include in the PLT + {plt_extra_apps, [app1, app2]}, + {warnings, [unmatched_returns, error_handling]} + ]}. diff --git a/src/rebar_dialyzer.erl b/src/rebar_dialyzer.erl index 1685b99..982cc7e 100644 --- a/src/rebar_dialyzer.erl +++ b/src/rebar_dialyzer.erl @@ -43,10 +43,11 @@ %% =================================================================== dialyze(Config, AppFile) -> - {NewConfig, Plt} = plt(Config, AppFile), + Opts = opts(Config), + {NewConfig, Plt} = plt(Config, AppFile, Opts), ok = check_plt_existence(Plt), - Opts = [ + Args = [ {analysis_type, succ_typings}, %% http://erlang.org/pipermail/erlang-bugs/2015-February/004781.html %% TODO: remove once the minimum required Erlang/OTP release @@ -56,10 +57,10 @@ dialyze(Config, AppFile) -> {check_plt, false}, {init_plt, Plt}, {files_rec, ["ebin"]}, - {warnings, warnings(Config)} + {warnings, warnings(Opts)} ], - ?DEBUG("dialyze opts:~n~p~n", [Opts]), - case run(Opts) of + ?DEBUG("dialyze opts:~n~p~n", [Args]), + case run(Args) of [] -> {ok, NewConfig}; Ws -> @@ -68,15 +69,17 @@ dialyze(Config, AppFile) -> end. 'build-plt'(Config, AppFile) -> - {Config1, AppDirs} = app_dirs(Config, AppFile), - {NewConfig, Plt} = plt(Config1, AppFile), - Opts = [ + Opts = opts(Config), + {Config1, AppDirs} = app_dirs(Config, AppFile, Opts), + {NewConfig, Plt} = plt(Config1, AppFile, Opts), + + Args = [ {analysis_type, plt_build}, {output_plt, Plt}, {files_rec, AppDirs} ], - ?DEBUG("build-plt opts:~n~p~n", [Opts]), - case run(Opts) of + ?DEBUG("build-plt opts:~n~p~n", [Args]), + case run(Args) of [] -> {ok, NewConfig}; Ws -> @@ -87,10 +90,11 @@ dialyze(Config, AppFile) -> end. 'check-plt'(Config, AppFile) -> - {NewConfig, Plt} = plt(Config, AppFile), + Opts = opts(Config), + {NewConfig, Plt} = plt(Config, AppFile, Opts), ok = check_plt_existence(Plt), - Opts = [ + Args = [ {analysis_type, plt_check}, %% http://erlang.org/pipermail/erlang-bugs/2015-February/004781.html %% Without this, the PLT will be checked twice. @@ -99,8 +103,8 @@ dialyze(Config, AppFile) -> {check_plt, false}, {init_plt, Plt} ], - ?DEBUG("build-plt opts:~n~p~n", [Opts]), - case run(Opts) of + ?DEBUG("build-plt opts:~n~p~n", [Args]), + case run(Args) of [] -> {ok, NewConfig}; Ws -> @@ -109,7 +113,8 @@ dialyze(Config, AppFile) -> end. 'delete-plt'(Config, AppFile) -> - {NewConfig, Plt} = plt(Config, AppFile), + Opts = opts(Config), + {NewConfig, Plt} = plt(Config, AppFile, Opts), ?DEBUG("Delete PLT '~s'~n", [Plt]), ok = rebar_file_utils:delete_each([Plt]), {ok, NewConfig}. @@ -133,22 +138,24 @@ info_help(Description) -> "~s.~n" "~n" "Valid rebar.config options:~n" - " ~p~n" - " ~p~n" - " ~p~n" - " ~p~n" " ~p~n", [ Description, - {dialyzer_plt_location, shared}, - {dialyzer_plt_location, local}, - {dialyzer_plt_location, "custom_path"}, - {dialyzer_plt_extra_apps, [app1, app2]}, - {dialyzer_warnings, [unmatched_returns, error_handling]} + {dialyzer, + [ + {plt_location, shared}, + {plt_location, local}, + {plt_location, "custom_dir"}, + {plt_extra_apps, [app1, app2]}, + {warnings, [unmatched_returns, error_handling]} + ]} ]). -plt(Config, AppFile) -> - PltDir = plt_dir(Config), +opts(Config) -> + rebar_config:get_local(Config, dialyzer, []). + +plt(Config, AppFile, Opts) -> + PltDir = plt_dir(Config, Opts), {NewConfig, RawAppName} = rebar_app_utils:app_name(Config, AppFile), AppName = atom_to_list(RawAppName), OtpRel = rebar_utils:otp_release(), @@ -156,8 +163,8 @@ plt(Config, AppFile) -> ok = filelib:ensure_dir(Plt), {NewConfig, Plt}. -plt_dir(Config) -> - Location = rebar_config:get_local(Config, dialyzer_plt_location, shared), +plt_dir(Config, Opts) -> + Location = proplists:get_value(plt_location, Opts, shared), plt_dir1(Config, Location). plt_dir1(_Config, Location) when is_list(Location) -> @@ -192,8 +199,8 @@ run(Opts) -> ?ABORT("Dialyzer error:~n~s~n", [Reason]) end. -warnings(Config) -> - rebar_config:get_local(Config, dialyzer_warnings, []). +warnings(Opts) -> + proplists:get_value(warnings, Opts, []). print_warnings(Ws, Option) -> lists:foreach( @@ -214,12 +221,12 @@ format_warning(W, Option) -> strip_newline(Warning) -> string:strip(Warning, right, $\n). -app_dirs(Config, AppFile) -> +app_dirs(Config, AppFile, Opts) -> {NewConfig, AppFileApps} = app_file_apps(Config, AppFile), ?DEBUG("app file apps:~n~p~n", [AppFileApps]), Deps = deps_apps(Config), ?DEBUG("deps apps:~n~p~n", [Deps]), - ExtraApps = rebar_config:get_local(Config, dialyzer_plt_extra_apps, []), + ExtraApps = proplists:get_value(plt_extra_apps, Opts, []), ?DEBUG("extra apps:~n~p~n", [ExtraApps]), %% erts is assumed, and has to be present unconditionally. Erts = [erts], |