<div class="gmail_quote">Millian, thanks for the response :)</div><div class="gmail_quote"><br></div><div class="gmail_quote">2010/7/31 Milian Wolff <span dir="ltr"><<a href="mailto:mail@milianw.de">mail@milianw.de</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On Saturday 31 July 2010 17:33:35 Victor Vicente de Carvalho wrote:<br>
> Hi<br>
folks,<br>
><br>
> since I've almost finished the debug part for my erlang plugin,<br>
I'm<br>
> starting to dig into code completion stuff. So some questions<br>
arrived:<br>
><br>
> 1 - I need the DUChain to get Code Completion working? I mean<br>
that because<br>
> I'm not interested on type inference and this kind of stuff<br>
since Erlang is<br>
> dynamically typed, but code completion is good for the<br>
fellas. I'm looking<br>
> for displaying litte information on CC, just the<br>
module and functions with<br>
> a possible documentation from them.<br>
> Ex: the<br>
user writes "lists:" and press ctrl+space<br>
><br>
> the code completion shows up<br>
with functions that were matched from the<br>
> module "lists"<br>
<br>
</div>You need to have<br>
the information about what "lists:" means and what is contained there. PHP<br>
is also dynamic but we use the DUChain to give as much information from<br>
static analysis as possible and it rocks. E.g.:<br>
<br>
MyClass::<br>
<br>
1) find<br>
declaration of MyClass<br>
2) find publically accessible static members and<br>
functions in that class<br>
3) world domination<br>
<br>
Imo having a DUChain is good<br>
for code completion, as it gives you the required informations about what<br>
elements are available.<br>
<br>
I don't know erlang, so maybe I'm wrong here...<br>
<div class="im"><br>
><br>
2 - I've managed to fetch the functions from a module on my<br>
><br>
DeclarationBuilder, but not the arguments from them. I've seen that the<br>
><br>
function declaration class only have a addDefaultParameter. How I can add<br>
><br>
common parameters for it?<br>
<br>
</div>I remember that Adymo had similar problems in<br>
Ruby, but take a look at this commit from him, does it help?<br>
<br>
~~~<br>
<br>
Author:<br>
dymo <dymo@283d02a7-25f6-0310-bc7c-ecb5cbfe19da><br>
Date:   Thu Feb 25 00:58:01<br>
2010 +0000<br>
<br>
    Parse ruby function arguments, build AST nodes for them,<br>
declarations and types.<br>
    This also introduces type builder to the ruby<br>
support. Currently it constructs<br>
    types for classes, functions and<br>
function arguments.<br>
<br>
    Note, that quickopen still doesn't show the<br>
arguments (but it already knows that<br>
    functions have types and doesn't<br>
print "..." instead of args anymore).<br>
<br>
<br>
    git-svn-id:<br>
svn+ssh://<a href="http://svn.kde.org/home/kde/trunk/playground/devtools/kdevelop4-extra-plu
gins/ruby@1095782" target="_blank">svn.kde.org/home/kde/trunk/playground/devtools/kdevelop4-extra-plu<br>
gins/ruby@1095782</a> 283d02a7-25f6-0310-bc7c-ecb5cbfe19da<br>
<br>
~~~<br>
<br>
If I understand<br>
it correctly, it's still not fixed for him apparently. Anyhow, to my<br>
knowledge a function in the DUChain has it's arguments in the argument<br>
context. Maybe take a look at PHP's DeclarationBuilder and ContextBuilder,<br>
most notably visitFunctionDeclarationStatement and visitParameter.<br>
<div class="im"><br></div></blockquote><div><br></div><div>Ok, I've did that, implemented the type builder and I'm setting correctly the value for my "raw type". I've noticed that the toString() method is called when I'm about to open the QuickOpen, but somehow my data is empty. On Adymo's code the string "Object" is hardcoded there, so always "Object" is displayed. I could see also is that this type data is copied, but in this moment the value string I've set is not there anymore. Somehow my type information is getting lost?</div>
<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">
> 3 -<br>
Erlang, as a functional languange, supports "matching parameters" like:<br>
><br>
><br>
func ( Param1 = { [ H | T ] , atom, Variable } , Param2 ) -><br>
>    ok.<br>
><br>
><br>
this means that on my Ast I may have an entire expression inside a<br>
><br>
parameter, and may have items that are not variables (like atom). Saying<br>
><br>
again, I'm not interested in digging into that as I won't bet able to do<br>
><br>
much with that, so how can I display what is inside the function parameter<br>
><br>
list  in a "raw string" way?<br>
<br>
</div>You could add your own type and write<br>
arbitrary strings in it.<br>
<div class="im"><br>
> 4 - I'm willing to parse Erlang default<br>
libraries, so I'll have to fetch<br>
> the ones present on erlang instalation<br>
dir. I need to create a context for<br>
> them too?<br>
<br>
</div>If you want to access their<br>
data somehow afterwards, i.e. to find the declarations in them then yes - of<br>
course you need to create contexts for them too :)<br>
<br>
You should be able to<br>
"simply" add parsejobs for those files from inside your LanguageSupport<br>
plugin upon loading it. That should trigger a normal ParseJob call<br>
eventually and you could do what you do for the other Erlang files. Or ar e<br>
the installed erlang files somewhat different (binary? packed? ...)<br>
<div class="im"><br></div></blockquote><div><br></div><div>These parsejobs will be attached to my current project or they'll be loaded directly from disk, as I'm not changing them?</div><div><br></div><div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">
> 5 -<br>
If I have to implement DUChain for question 1, what contexts do I need?<br>
><br>
I'm asking this since the simplicity of what I'm trying to do.<br>
<br>
</div>TopDUContext<br>
of course, but that's more or less done automatically in<br>
AbstractContextBuilder::build()<br>
<br>
Then a DUContext for each function and one<br>
for it's arguments, see above. Then if Erlang has something like "classes"<br>
or something similar to it, a context for that. Same if something like<br>
namespaces exists.<br>
<br>
Bye, hope this helps.<br>
<font color="#888888"><br>
--<br>
Milian<br>
Wolff<br>
<a href="mailto:mail@milianw.de">mail@milianw.de</a><br>
<a href="http://milianw.de" target="_blank">http://milianw.de</a><br>
</font><br>--<br>
KDevelop-devel mailing list<br>
<a href="mailto:KDevelop-devel@kdevelop.org">KDevelop-devel@kdevelop.org</a><br>
<a href="https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel" target="_blank">https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel</a><br>
<br></blockquote></div><br><div><br></div><div>Thanks!</div><div><br></div>