[erlang-questions] Dialyzer cannot catch gen_server callback return type error
Motiejus Jakštys
desired.mta@REDACTED
Thu Jul 5 13:17:48 CEST 2012
On Thu, Jul 05, 2012 at 04:12:01PM +0700, Maxim Treskin wrote:
> Hello
>
> I got error when gen_server callback returns not a proper process state,
> but another erlang term(), and dialyzer not warns me about this.
> After specification of Module:handle_cast/2 with
>
> -spec handle_cast(Msg :: term(), State :: #state{}) -> {noreply, NewState
> :: #state{}}.
>
> where #state{} is record of process state,
I don't know about this one,
> it not warns too (it also not warns about {stop, normal, State} return
> value).
but this is fine. Your function returns a *subtype* of what
Mod:handle_cast/2 is supposed to return.
If you added something that is not in return values of handle_cast, like
this:
-spec handle_cast(term(), #state{}) -> {noreply, NewState} | wrong.
Dialyzer will warn you that gen_server is not expecting 'wrong'.
> Code of callback:
>
> handle_cast({message}, _State) ->
> NewState = {bugotak},
> {noreply, NewState};
>
> Is it possible to make that dialyzer can see this mistake? Does it check
> types of gen_server callbacks?
But this one would be interesting indeed.
Motiejus
More information about the erlang-questions
mailing list