[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