summaryrefslogtreecommitdiff
path: root/lib/dialyzer/src/dialyzer_dataflow.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <bjorn@erlang.org>2021-12-15 14:14:36 +0100
committerBjörn Gustavsson <bjorn@erlang.org>2022-01-26 10:11:18 +0100
commit164206588d4cc6510fea76387664a56b8029f33a (patch)
tree38939bfe4ce320e63afa374bc81e69a62712613d /lib/dialyzer/src/dialyzer_dataflow.erl
parentf80fb0fba1f31a0a38b99250e45fd2f83fd6f607 (diff)
downloaderlang-164206588d4cc6510fea76387664a56b8029f33a.tar.gz
dialyzer_dataflow: Break out handling of unmatched return warnings
Diffstat (limited to 'lib/dialyzer/src/dialyzer_dataflow.erl')
-rw-r--r--lib/dialyzer/src/dialyzer_dataflow.erl36
1 files changed, 22 insertions, 14 deletions
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index 698396ea5c..b52e258f95 100644
--- a/lib/dialyzer/src/dialyzer_dataflow.erl
+++ b/lib/dialyzer/src/dialyzer_dataflow.erl
@@ -287,20 +287,7 @@ traverse(Tree, Map, State) ->
true ->
SMA;
false ->
- State2 =
- case
- t_is_any(ArgType)
- orelse t_is_simple(ArgType, State)
- orelse is_call_to_send(Arg)
- orelse is_lc_simple_list(Arg, ArgType, State)
- of
- true -> % do not warn in these cases
- State1;
- false ->
- state__add_warning(State1, ?WARN_UNMATCHED_RETURN, Arg,
- {unmatched_return,
- [format_type(ArgType, State1)]})
- end,
+ State2 = maybe_warn_unmatched_return(Arg, ArgType, State1),
traverse(Body, Map1, State2)
end;
'try' ->
@@ -335,6 +322,27 @@ traverse_list([Tree|Tail], Map, State, Acc) ->
traverse_list([], Map, State, Acc) ->
{State, Map, lists:reverse(Acc)}.
+maybe_warn_unmatched_return(Arg, ArgType, State) ->
+ case state__warning_mode(State) of
+ false ->
+ State;
+ true ->
+ %% Warn when return values such as 'ok' | {'error',any()}
+ %% are ignored. Don't warn when a single value such as 'ok'
+ %% is returned.
+ case t_is_any(ArgType) orelse
+ t_is_simple(ArgType, State) orelse
+ is_call_to_send(Arg) orelse
+ is_lc_simple_list(Arg, ArgType, State) of
+ true ->
+ State;
+ false ->
+ state__add_warning(State, ?WARN_UNMATCHED_RETURN, Arg,
+ {unmatched_return,
+ [format_type(ArgType, State)]})
+ end
+ end.
+
%%________________________________________
%%
%% Special instructions