diff options
Diffstat (limited to 'src/rebar_xref.erl')
-rw-r--r-- | src/rebar_xref.erl | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/rebar_xref.erl b/src/rebar_xref.erl index 84b59f6..a55d71d 100644 --- a/src/rebar_xref.erl +++ b/src/rebar_xref.erl @@ -28,7 +28,8 @@ %% ------------------------------------------------------------------- %% This module borrows heavily from http://github.com/etnt/exrefcheck project as -%% written by Torbjorn Tornkvist <tobbe@kreditor.se>, Daniel Luna and others. +%% written by Torbjorn Tornkvist <tobbe@kreditor.se>, Daniel Luna +%% <daniel@lunas.se> and others. %% ------------------------------------------------------------------- -module(rebar_xref). @@ -43,7 +44,7 @@ xref(Config, _) -> %% Spin up xref {ok, _} = xref:start(xref), - ok = xref:set_library_path(xref, code_path()), + ok = xref:set_library_path(xref, code_path(Config)), xref:set_default(xref, [{warnings, rebar_config:get(Config, xref_warnings, false)}, @@ -131,9 +132,17 @@ check_query({Query, Value}) -> true end. -code_path() -> - [P || P <- code:get_path(), - filelib:is_dir(P)] ++ [filename:join(rebar_utils:get_cwd(), "ebin")]. +code_path(Config) -> + %% Slight hack to ensure that sub_dirs get properly included + %% in code path for xref -- otherwise one gets a lot of undefined + %% functions, even though those functions are present as part + %% of compilation. H/t to @dluna. Long term we should tie more + %% properly into the overall compile code path if possible. + BaseDir = rebar_config:get_xconf(Config, base_dir), + [P || P <- code:get_path() ++ + [filename:join(BaseDir, filename:join(SubDir, "ebin")) + || SubDir <- rebar_config:get(Config, sub_dirs, [])], + filelib:is_dir(P)]. %% %% Ignore behaviour functions, and explicitly marked functions |