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! |