Extracting detailed information from TypEr/Dialyzer

Torben Hoffmann torben.lehoff@REDACTED
Tue Oct 12 09:00:00 CEST 2010


Hi,

I want to extract the following information from a gen_fsm:

   - all the states
   - the incoming events
   - possible next states

but I want to do it per function clause and not only on the function level
as TypEr and Dialyzer does it.
(I have to help a little by stating which functions are states in the
gen_fsm, but that is so easy that I can live with the manual labour
involved.)

I have created a half-baked solution that is very specific to the code style
I use so that I can extract the following about a gen_fsm:
[{state_name(),{event(),
                [outgoing_messages()],
                {next_state,[state_name()]}]

Each state has an entry in the list for each incoming event.
(The format should probably be
{state_name,event(),[outgoing_messages()],{next_state,[state_name()]}, but
that is besides the point right now.)

My problem is that my quick'n'dirty approach does not come out on top for
all the next_state calculations since you can return from a function clause
in many different ways.

This kind of information must be available at some point during the TypEr
and dialyzer processing of a file - I am okay with throwing my own code away
if I get build on existing code and get the job done in a more general way
than my current hack.

Has anybody been down this road before me? If so, do you have some insights
to share?

For those who is questioning why I want to extract this information: I have
modules which are several thousand lines long and no matter how readable and
nice Erlang code is there is still a need to get a quick overview of what
goes on in a module. The information above would be enough to create an SDL
diagram of the main behaviour of a module which greatly helps when you have
to communicate with non-Erlangers about the functionality of your code. This
way I can acknowledge that the code is King and any manually created
documentation is, well, at best a valiant Knight ;-)

Thanks in advance,
Torben
-- 
http://www.linkedin.com/in/torbenhoffmann


More information about the erlang-questions mailing list