diff options
author | Björn Gustavsson <bjorn@erlang.org> | 2021-12-15 14:14:36 +0100 |
---|---|---|
committer | Björn Gustavsson <bjorn@erlang.org> | 2022-01-26 10:11:18 +0100 |
commit | 164206588d4cc6510fea76387664a56b8029f33a (patch) | |
tree | 38939bfe4ce320e63afa374bc81e69a62712613d /lib/dialyzer/src/dialyzer_dataflow.erl | |
parent | f80fb0fba1f31a0a38b99250e45fd2f83fd6f607 (diff) | |
download | erlang-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.erl | 36 |
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 |