Re: [Pydev-code] Autocompletion in PyDev. A first working version
Brought to you by:
fabioz
|
From: Dana M. <dan...@ya...> - 2004-06-14 01:44:52
|
Checked in a first working version of autocomplete.
it only autocompletes '.' and not (yet) '(', but it's getting there.
If you check out the org.pydev.jython and org.python.pydev.editor you
should be able to see it in motion.
It works this way:
1. The org.pydev.jython plugin wraps jython.jar and a jythonlib.jar
(right now this is about 1.1M; I just picked up the #JYTHON_HOME/LIB on
mymachine and jar'ed it. We can probably do a better and more compact
one by leaving out some things which just happen to have got swept up
from my system.
2. At any rate, within that jar are several Python modules which do
code introspection (we probablt need to drop them into a source
directory and have a build for the lib itself at some point in time,
but first things first.
3. The PythonCompletionProcessor.java grabs the module being edited and
comiles the code ahead of the activating partial expression in the
buffer:
LL 118: interp.exec(theCode);
It then pulls up the actiuvating expression
LL 119: String xCommand = "theList =
jintrospect.getAutoCompleteList(command='"+theActivationToken+"',
locals=locals())";
and then uses Jython to introspect the code:
LL 121 interp.exec(xCommand);
creates a PyList from the suggestions:
LL 122 PyList theList = (PyList) interp.get("theList");
and returns that.
LL123 return theList;
Which in turn gets turned into autocompletion proposals.
What's kind of significant about this is that (I believe) it marks the
first time that the Java based Eclipse editor has used a facility of
the (non Java) language being edited as leverage.
Going forward, I should like to complete the other things that ought to
trigger a code introspection (other than the '.' method invocation
signifier). Although Parthaum, if you want to give this a go, it should
be easy do; the code is basically there in
PythonCompletionProcessor.java. Right now, "(" is listed as an
autocompleter, but it does the wrong thing.
I suppose that doing as well as PyAlaMode is probably good enough for
this spiral, but while we're going down this path, it would be nice to
have a decent set of CTRL-SPACE expanders/completers as well. For
example, if you type in 'sysout'CTRL-SPACE in the java development
envt, it substitutes "System.out.println()". and even more
sophistication for the phrase "for" which calls up the various
potential expansions:
for - iterate over array
for - iterate over array with temporary variable
for - iterate over collection
So what other nice expansions can we think of which are Python
specific? Maybe an exoander for the venerable expression:
if __name__ == '__main__': for one thing, maybe an expander that helps
with generators and co-routines for another.
After completing this I should like to take a look at a "New Python
Project" Wizard, unless someone else prefers to cover that.
It would be nice to have a sort of a Package Nanny that creates an
__init__.py for a package too. Ah, the fun never stops.
I am starting to fell comfortable that we will soon be in a place wher
this might be my prefered editor, especially for enterprise Python
coding.
So let me know if any of you have trouble with the bits I have done
thus far.
Happy coding all!
=====
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/ Dana Moore _/
_/ BBN Technologies LLC _/
_/ M: 240.350.4196 _/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
__________________________________
Do you Yahoo!?
Friends. Fun. Try the all-new Yahoo! Messenger.
http://messenger.yahoo.com/
|