From 8167578ca6b23f3043ae2e21ded4b13b8db74e20 Mon Sep 17 00:00:00 2001 From: Stavros Aronis Date: Mon, 14 Nov 2011 17:01:59 +0100 Subject: Wrap up behaviours patch for Dialyzer Enable warnings by default, add two options for suppressing them, fix warning formatting and update testsuites. --- lib/dialyzer/src/dialyzer.erl | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'lib/dialyzer/src/dialyzer.erl') diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl index 487a12b252..3e3c12405f 100644 --- a/lib/dialyzer/src/dialyzer.erl +++ b/lib/dialyzer/src/dialyzer.erl @@ -442,18 +442,24 @@ message_to_string({opaque_type_test, [Fun, Opaque]}) -> message_to_string({race_condition, [M, F, Args, Reason]}) -> io_lib:format("The call ~w:~w~s ~s\n", [M, F, Args, Reason]); %%----- Warnings for behaviour errors -------------------- -message_to_string({callback_type_mismatch, [B, F, A, T]}) -> - io_lib:format("The inferred return type for ~w/~w is ~s which is not valid" - " return for the callback of the ~w behaviour\n", - [F, A, T, B]); -message_to_string({callback_arg_type_mismatch, [B, F, A, N, T]}) -> - io_lib:format("The inferred type for the ~s argument of ~w/~w is ~s which is" - " not valid for the callback of the ~w behaviour" - "\n", [ordinal(N), F, A, T, B]); +message_to_string({callback_type_mismatch, [B, F, A, ST, CT]}) -> + io_lib:format("The inferred return type of ~w/~w (~s) has nothing in common" + " with ~s, which is the expected return type for the callback of" + " ~w behaviour\n", [F, A, ST, CT, B]); +message_to_string({callback_arg_type_mismatch, [B, F, A, N, ST, CT]}) -> + io_lib:format("The inferred type for the ~s argument of ~w/~w (~s) is" + " not a supertype of ~s, which is expected type for this" + " argument in the callback of the ~w behaviour\n", + [ordinal(N), F, A, ST, CT, B]); message_to_string({callback_spec_type_mismatch, [B, F, A, ST, CT]}) -> io_lib:format("The return type ~s in the specification of ~w/~w is not a" " subtype of ~s, which is the expected return type for the" - " callback of ~w behaviour.\n", [ST, F, A, CT, B]); + " callback of ~w behaviour\n", [ST, F, A, CT, B]); +message_to_string({callback_spec_arg_type_mismatch, [B, F, A, N, ST, CT]}) -> + io_lib:format("The specified type for the ~s argument of ~w/~w (~s) is" + " not a supertype of ~s, which is expected type for this" + " argument in the callback of the ~w behaviour\n", + [ordinal(N), F, A, ST, CT, B]); message_to_string({callback_missing, [B, F, A]}) -> io_lib:format("Undefined callback function ~w/~w (behaviour '~w')\n", [F, A, B]); -- cgit v1.2.3