Change parsing format to use AST via RedBaron

Moved away from using manual parsing. Source is parsed using RedBaron to make the FST. Some import formats not yet implemented, and still some bugs to work out. However, the current script works well for the two cases in the file comments.
This commit is contained in:
Keyan Pishdadian 2015-02-11 13:07:24 -05:00
parent 508614fed2
commit 38c8f47d46
3 changed files with 51 additions and 27 deletions

View file

@ -5,10 +5,41 @@ from redbaron import RedBaron
import sys
with open("test.py", "r") as source_code:
red = RedBaron(source_code.read())
def read_source(input_file):
with open(input_file, "r") as source_code:
red = RedBaron(source_code.read())
return red
print red.dumps()
# with open("code.py", "w") as source_code:
# source_code.write(red.dumps())
def write_source(red, input_file):
with open(input_file, "w") as source_code:
source_code.write(red.dumps())
def fix_imports(red):
from_imports = red.find_all("FromImport")
for x in range(len(from_imports)):
values = from_imports[x].value
if (values[0].value == 'flask') and (values[1].value == 'ext'):
# Case 1
if len(from_imports[x].value) == 3:
package = values[2].value
modules = from_imports[x].modules()
r = "{}," * len(modules)
print modules
from_imports[x].replace("from flask_%s import %s"
% (package, r.format(*modules)[:-1]))
# Case 2
else:
module = from_imports[x].modules()[0]
from_imports[x].replace("import flask_%s as %s"
% (module, module))
return red
if __name__ == "__main__":
input_file = sys.argv[1]
ast = read_source(input_file)
new_ast = fix_imports(ast)
write_source(new_ast, input_file)