Browse Source

Merge pull request #1056 from lpgauth/xref_ignores

Add support for xref_ignores
pull/1178/head
Fred Hebert 9 years ago
parent
commit
c9cc58d2b8
1 changed files with 12 additions and 10 deletions
  1. +12
    -10
      src/rebar_prv_xref.erl

+ 12
- 10
src/rebar_prv_xref.erl View File

@ -38,10 +38,10 @@ init(State) ->
do(State) -> do(State) ->
code:add_pathsa(rebar_state:code_paths(State, all_deps)), code:add_pathsa(rebar_state:code_paths(State, all_deps)),
XrefChecks = prepare(State), XrefChecks = prepare(State),
XrefIgnores = rebar_state:get(State, xref_ignores, []),
%% Run xref checks %% Run xref checks
?INFO("Running cross reference analysis...", []), ?INFO("Running cross reference analysis...", []),
XrefResults = xref_checks(XrefChecks),
XrefResults = xref_checks(XrefChecks, XrefIgnores),
%% Run custom queries %% Run custom queries
QueryChecks = rebar_state:get(State, xref_queries, []), QueryChecks = rebar_state:get(State, xref_queries, []),
@ -110,16 +110,18 @@ prepare(State) ->
sets:from_list(ConfXrefChecks))), sets:from_list(ConfXrefChecks))),
XrefChecks. XrefChecks.
xref_checks(XrefChecks) ->
lists:foldl(fun run_xref_check/2, [], XrefChecks).
xref_checks(XrefChecks, XrefIgnores) ->
run_xref_checks(XrefChecks, XrefIgnores, []).
run_xref_check(XrefCheck, Acc) ->
run_xref_checks([], _XrefIgnores, Acc) ->
Acc;
run_xref_checks([XrefCheck | T], XrefIgnores, Acc) ->
{ok, Results} = xref:analyze(xref, XrefCheck), {ok, Results} = xref:analyze(xref, XrefCheck),
case filter_xref_results(XrefCheck, Results) of
case filter_xref_results(XrefCheck, XrefIgnores, Results) of
[] -> [] ->
Acc;
run_xref_checks(T, XrefIgnores, Acc);
FilterResult -> FilterResult ->
[{XrefCheck, FilterResult} | Acc]
run_xref_checks(T, XrefIgnores, [{XrefCheck, FilterResult} | Acc])
end. end.
check_query({Query, Value}, Acc) -> check_query({Query, Value}, Acc) ->
@ -170,7 +172,7 @@ get_behaviour_callbacks(_XrefCheck, _Attributes) ->
parse_xref_result({_, MFAt}) -> MFAt; parse_xref_result({_, MFAt}) -> MFAt;
parse_xref_result(MFAt) -> MFAt. parse_xref_result(MFAt) -> MFAt.
filter_xref_results(XrefCheck, XrefResults) ->
filter_xref_results(XrefCheck, XrefIgnores, XrefResults) ->
SearchModules = lists:usort( SearchModules = lists:usort(
lists:map( lists:map(
fun({Mt,_Ft,_At}) -> Mt; fun({Mt,_Ft,_At}) -> Mt;
@ -178,7 +180,7 @@ filter_xref_results(XrefCheck, XrefResults) ->
(_) -> undefined (_) -> undefined
end, XrefResults)), end, XrefResults)),
Ignores = lists:flatmap(fun(Module) ->
Ignores = XrefIgnores ++ lists:flatmap(fun(Module) ->
get_xref_ignorelist(Module, XrefCheck) get_xref_ignorelist(Module, XrefCheck)
end, SearchModules), end, SearchModules),

Loading…
Cancel
Save