3 ms·
Wow, thanks! I’ve kept up with your project and greatful for the work. Out of curiosity, have you seen anything in Dialyzer for dealing with typing GenServer m
by elcritch 8y ago
Wow, thanks! I’ve kept up with your project and greatful for the work.
Out of curiosity, have you seen anything in Dialyzer for dealing with typing GenServer messages and handlers? I haven’t figured out a way to spec message handlers as dialyzer seems to only check that you have any `handle_cast` implemented and adding a behavior doesn’t compose. Given the key role GenServer plays in OTP, it’s a big lack IMHO. I’ve wondered if the new named guards in Elixir could help with it somehow.
- _asummers 8y agoNah because as soon as you deviate from the GenServer behaviour you'll get errors from not matching the @callback. The trick there is to provide a narrower API that calls into the GenServer functions with the proper @spec and treat the handle_cast and friends as private functions that you don't call directly. So like a pop/0 might call cast(:pop) and you'd have the associated handle_cast for :pop.
- elcritch 8y agoYah, that's the error I ran into. Creating function wrappers to send messages works well for client api's. However, it doesn't help verify that you've implemented the `handle_cast` properly or dealing with messages from other places. Normally it's not to big of an issue.
- _asummers 8y agoYeah ideally those APIs are well scoped enough to be able to unit test them, but I agree there's some piece missing there.