Hi Tyron,<br><br>I have never used xref myself but if it doesn't fit your needs you could roll up your own custom transformation on the parsed version of the code you're trying to compile. Of course, I am assuming you have access to the source code here. Not sure what you meant by "extract a function clause by knowing its signature only" but it seems to suggest that you're looking for something along these lines.<br>
<br>Basically, when compiling your source code you can pass in an option to the compiler, {parse_transform, ModuleName} where ModuleName is expected to contain parse_transform/2 which will be passed an encoding of the source code you're compiling before it is actually compiled (i.e. an abstract syntax tree encoded in Erlang terms).<br>
<br>You can then do your analyzing (checking what functions are depended on) and extracting inside ModuleName:parse_transform/2, making sure to return something to compile.<br><br>Hi Richard,<br><br>Here's one instance that comes to mind with regards to wanting part of a function definition (i.e. just some of it's clauses):<br>
When implementing a gen_server you handle synchronous requests using handle_call/3. You might just want the implementation of handle_call/3 which deals with certain messages.<br><br>That is just something off the top of my head. There could be other reasons.<br>
<br>cheers,<br>Justin<br><br><div class="gmail_quote">On 19 August 2012 17:49, Richard O'Keefe <span dir="ltr"><<a href="mailto:ok@cs.otago.ac.nz" target="_blank">ok@cs.otago.ac.nz</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
On 19/08/2012, at 11:52 AM, Tyron Zerafa wrote:<br>
>     Is there a way in Erlang which can give me a function's dependencies?<br>
<br>
</div>It's an open source system.<br>
You have full source code for the compiler and everything.<br>
You can readily get the parsed form of any source file.<br>
<br>
You can even (gasp, the technology!) do a web search for<br>
"Erlang cross reference" and discover<br>
<a href="http://www.erlang.org/doc/apps/tools/xref_chapter.html" target="_blank">http://www.erlang.org/doc/apps/tools/xref_chapter.html</a><br>
which says<br>
"Xref is a cross reference tool that can be used for<br>
 finding dependencies between functions, modules, applications<br>
 and releases.  It does so by analyzing the defined<br>
 functions and the function calls."<br>
<div class="im"><br>
>  Such as dependency_of_fun(A) will result in all functions' names (including modules)<br>
>  being used in A?<br>
<br>
</div>See the Xref documentation.<br>
<div class="im"><br>
> Also, apart from this, can I somehow extract a function clause by knowing its signature only?<br>
<br>
</div>Signature?  The Erlang equivalent of a signature is a -spec.<br>
Function clauses don't have names, signatures, specifications, or anything else.<br>
It really makes no sense to extract just one clause from a function.<br>
I mean, here is a two-clause function:<br>
<br>
        app([], L) -> L;<br>
        app([H|T], L) -> [H|app(T, L)].<br>
<br>
What good does it do you just to have ``app([], L) -> L''?<br>
What are you going to do with half of a function (or less)?<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br>