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