Thread: [Pydev-users] [Users] Programmatically alter python files
Brought to you by:
fabioz
From: SourceForge.net <no...@so...> - 2010-12-20 17:51:41
|
The following forum message was posted by dhaber3 at http://sourceforge.net/projects/pydev/forums/forum/293649/topic/4021200: Hi, I'm developing an eclipse plugin and I would like to be able to programmatically alter python files. For example, find a variable "foo" and change: [code]foo = [1,2,3][/code] to: [code]foo = [2,4,6][/code] Is this something that PyDev can help with? For example, can I re-use PyDev's python parser to manipulate the file? Thanks! Doug |
From: SourceForge.net <no...@so...> - 2010-12-20 18:24:02
|
The following forum message was posted by fabioz at http://sourceforge.net/projects/pydev/forums/forum/293649/topic/4021200: Yes, you can use the python parser for that (the only thing is that it's not safe to do those changes if there's some syntax error). Take a look at: org.python.pydev.parser.PyParser.reparseDocument to parse the document (which will give you an AST and the errors it found during parsing) org.python.pydev.refactoring.ast.factory.PyAstFactory: some helpers to deal with the node (it's currently very raw, but that's where the functions for creating an AST should be) org.python.pydev.parser.visitors.NodeUtils: Some utilitaries for dealing with nodes org.python.pydev.refactoring.tests.ast.factory.PyAstFactoryWithPrettyPrinting: A test that will parse a document and pretty-print it. Cheers, Fabio |
From: SourceForge.net <no...@so...> - 2010-12-20 21:34:23
|
The following forum message was posted by dhaber3 at http://sourceforge.net/projects/pydev/forums/forum/293649/topic/4021200: Thanks! I was able to parse my file and find the appropriate statement. Can PyDev help me alter the statement and change only that line in the original source file? This is all programmatic so I don't have an editor to work with. Thanks again! Doug |
From: SourceForge.net <no...@so...> - 2010-12-31 11:37:22
|
The following forum message was posted by fabioz at http://sourceforge.net/projects/pydev/forums/forum/293649/topic/4021200: Right now there's no API to change only that line (although you should be able to do that from the AST information). Cheers, Fabio |
From: SourceForge.net <no...@so...> - 2011-01-03 17:26:13
|
The following forum message was posted by dhaber3 at http://sourceforge.net/projects/pydev/forums/forum/293649/topic/4021200: Thanks! I was able to find the starting location for code statements, however, there doesn't appear to be any ending line. I guess I can infer it from the next statement or the specials after, but is there a smarter way to do it? Thanks! Doug |
From: SourceForge.net <no...@so...> - 2011-01-06 12:36:28
|
The following forum message was posted by fabioz at http://sourceforge.net/projects/pydev/forums/forum/293649/topic/4021200: Unfortunately that has to be actually implemented... I was hoping to add that to the ast, but it's not very simple (so, it's still not done). Currently you have to calculate that afterwards... there are already some helpers for it... if you traverse it with a subclass of org.python.pydev.parser.visitors.scope.EasyAstIteratorBase you get the end line and if you want to treat for a specific ast, the place that should be extended is org.python.pydev.parser.visitors.NodeUtils.getLineEnd(SimpleNode). Cheers, Fabio |