[erlang-questions] api to retrieve module documentation (comparison to python shell)

Travis Jensen travis.jensen@REDACTED
Mon May 16 15:54:22 CEST 2011


I agree docstrings are an amazingly valuable part of python.  I doubt you'll find access to them in Erlang, since the compile step removes them.

I wonder how hard it would be to patch the shell to look for the source of a .beam and parse it's docs. It would be nice to have a more immediate method than my 15 tab browser window or "man".

Tj

On May 10, 2011, at 12:58 AM, Todd <t.greenwoodgeer@REDACTED> wrote:

> Is it possible to retrieve the documentation or the source for a given method?
> 
> 1. I'd can to enumerate the loaded modules:
> 
> (nitrogen@REDACTED)18> erlang:loaded(). 
> [sys_expand_pmod,eunit_autoexport,security_handler,
> route_handler,role_handler,identity_handler,cache_handler,
> eval_bits,cerl_trees,lib,action_hide,action_jquery_effect,
> action_show,element_link,net_adm,process_registry_handler,
> session_handler,element_placeholder,element_listitem,
> element_bind,element_list,action_update,wf_validation,
> element_span,processes,epp,log_handler,file_not_found_page,
> re|...]
> 
> 2. And I can get the exported methods for a given module:
> 
> (nitrogen@REDACTED)25> [{exports, Exports}, _, _, _] = net_adm:module_info().
> [{exports,[{host_file,0},
>           {localhost,0},
>           {names,0},
>           {names,1},
>           {dns_hostname,1},
>           {ping_list,1},
>           {world,0},
>           {world,1},
>           {world_list,1},
>           {world_list,2},
>           {module_info,0},
>           {module_info,1},
>           {ping,1}]},
> {imports,[]},
> {attributes,[{vsn,[82065340652727412467812120004278067483]}]},
> {compile,[{options,[{cwd,"/home/user/erlang/otp_src_R14B02/lib/kernel/src"},
> {outdir,"/home/user/erlang/otp_src_R14B02/lib/kernel/src/../ebin"},
> {i,"/home/user/erlang/otp_src_R14B02/lib/kernel/src/../include"},
>                     debug_info]},
>           {version,"4.7.3"},
>           {time,{2011,4,26,3,21,35}},
> {source,"/home/user/erlang/otp_src_R14B02/lib/kernel/src/net_adm.erl"}]}]
> (nitrogen@REDACTED)26> Exports. 
> [{host_file,0},
> {localhost,0},
> {names,0},
> {names,1},
> {dns_hostname,1},
> {ping_list,1},
> {world,0},
> {world,1},
> {world_list,1},
> {world_list,2},
> {module_info,0},
> {module_info,1},
> {ping,1}]
> 
> 3. But now I'd like to get the docstring and/or the source for a given module:export. Is there an existing api method that does this?
> 
> BTW - this is the sort of thing that python is really good at. I love being able to simply type "dir()" and navigate through the local environment and into objects.
> 
> For example, running the python shell:
> 
> a) look at the local environment
> 
> >>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__']
> 
> b) examine an entry
> 
> >>> dir (__doc__)
> ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
> 
> c) create an object
> >>> a = [1,2,3]
> 
> d) examine the object
> >>> dir(a)
> ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
> 
> 
> e) get the help on this object
> >>> help(a)
> 
> Help on list object:
> 
> class list(object)
> |  list() -> new list
> |  list(sequence) -> new list initialized from sequence's items
> |
> |  Methods defined here:
> |
> |  __add__(...)
> |      x.__add__(y) <==> x+y
> <snip>
> 
> f) get help on a method:
> >>> help(a.pop)
> Help on built-in function pop:
> 
> pop(...)
>    L.pop([index]) -> item -- remove and return item at index (default last).
>    Raises IndexError if list is empty or index is out of range.
> 
> 
> This is amazingly useful. Is there anyway to have a similar experience in the erlang shell?
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions



More information about the erlang-questions mailing list