summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Sloughter <tristan.sloughter@gmail.com>2014-11-22 16:26:39 -0600
committerTristan Sloughter <tristan.sloughter@gmail.com>2014-11-22 16:26:39 -0600
commitc50bbc88e5933d42008b73de1717acf27e57b704 (patch)
treeab23d36ca311c31401300df28a3903187843ea63
parenta24f4019ed6f9b8441b24cef227d5900312a3874 (diff)
parente90219cb14f89704772321b548c1553a49da5163 (diff)
Merge pull request #17 from fishcakez/dialyzer2
Fix rebar dialyzer to work on applications in rebar archive
-rw-r--r--rebar.config2
-rw-r--r--src/rebar_prv_dialyzer.erl35
2 files changed, 31 insertions, 6 deletions
diff --git a/rebar.config b/rebar.config
index 177037f..abbb3fb 100644
--- a/rebar.config
+++ b/rebar.config
@@ -40,3 +40,5 @@
{erlydtl_opts, [{doc_root, "priv/templates"},
{compiler_options, [report, return, debug_info]}]}.
+
+{dialyzer_plt_apps, [common_test, dialyzer, erlydtl, eunit, snmp]}.
diff --git a/src/rebar_prv_dialyzer.erl b/src/rebar_prv_dialyzer.erl
index 61b25e1..6bff26b 100644
--- a/src/rebar_prv_dialyzer.erl
+++ b/src/rebar_prv_dialyzer.erl
@@ -160,16 +160,39 @@ app_member(AppName, Apps) ->
end.
app_name_to_info(AppName) ->
- case code:lib_dir(AppName) of
+ case app_name_to_ebin(AppName) of
{error, _} ->
?CONSOLE("Unknown application ~s", [AppName]),
{[], []};
- AppDir ->
- app_dir_to_info(AppDir, AppName)
+ EbinDir ->
+ ebin_to_info(EbinDir, AppName)
end.
-app_dir_to_info(AppDir, AppName) ->
- EbinDir = filename:join(AppDir, "ebin"),
+app_name_to_ebin(AppName) ->
+ case code:lib_dir(AppName, ebin) of
+ {error, bad_name} ->
+ search_ebin(AppName);
+ EbinDir ->
+ check_ebin(EbinDir, AppName)
+ end.
+
+check_ebin(EbinDir, AppName) ->
+ case filelib:is_dir(EbinDir) of
+ true ->
+ EbinDir;
+ false ->
+ search_ebin(AppName)
+ end.
+
+search_ebin(AppName) ->
+ case code:where_is_file(atom_to_list(AppName) ++ ".app") of
+ non_existing ->
+ {error, bad_name};
+ AppFile ->
+ filename:dirname(AppFile)
+ end.
+
+ebin_to_info(EbinDir, AppName) ->
AppFile = filename:join(EbinDir, atom_to_list(AppName) ++ ".app"),
case file:consult(AppFile) of
{ok, [{application, AppName, AppDetails}]} ->
@@ -331,7 +354,7 @@ app_to_files(App) ->
run_dialyzer(State, Opts) ->
Warnings = rebar_state:get(State, dialyzer_warnings, default_warnings()),
Opts2 = [{warnings, Warnings} | Opts],
- _ = [?CONSOLE(format_warning(Warning), [])
+ _ = [?CONSOLE("~s", [format_warning(Warning)])
|| Warning <- dialyzer:run(Opts2)],
{ok, State}.