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

Todd <>
Tue May 10 08:58:38 CEST 2011


Is it possible to retrieve the documentation or the source for a given 
method?

1. I'd can to enumerate the loaded modules:

()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:

()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"}]}]
()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?



More information about the erlang-questions mailing list