Re: [Pydev-code] Autocompletion in PyDev. A first working version
Brought to you by:
fabioz
|
From: Aleks T. <a...@to...> - 2004-06-14 06:45:38
|
Very cool. I fixed a few compile errors: jython lib classpath,
and inclusion of test directory inside CompletionProcessor, and
checked it in.
Can you tell me what kind of autocompletion smarts can I expect?
My first couple of tries failed, I'd like to see it in action.
Aleks
Dana Moore wrote:
> 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!
|