summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rebar_xref.erl16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/rebar_xref.erl b/src/rebar_xref.erl
index c210486..84d422e 100644
--- a/src/rebar_xref.erl
+++ b/src/rebar_xref.erl
@@ -188,8 +188,14 @@ find_mfa_source({M, F, A}) ->
%% Extract the original source filename from the abstract code
[{attribute, 1, file, {Source, _}} | _] = Code,
%% Extract the line number for a given function def
- [{function, Line, F, _, _}] = [E || E <- Code,
- safe_element(1, E) == function,
- safe_element(3, E) == F,
- safe_element(4, E) == A],
- {Source, Line}.
+ Fn = [E || E <- Code,
+ safe_element(1, E) == function,
+ safe_element(3, E) == F,
+ safe_element(4, E) == A],
+ case Fn of
+ [{function, Line, F, _, _}] -> {Source, Line};
+ %% do not crash if functions are exported, even though they
+ %% are not in the source.
+ %% parameterized modules add new/1 and instance/1 for example.
+ [] -> {Source, function_not_found}
+ end.