# HG changeset patch # User Bastien Orivel # Date 1465294750 -7200 # Node ID 5f1d285471af493fa3785e2027f54bcde64d73f3 # Parent 4dfea217989bdc3763ea697c5053e326ea1e5647 Finish ImportFrom conversion and add a test for it. diff --git a/src/ast_convert.rs b/src/ast_convert.rs --- a/src/ast_convert.rs +++ b/src/ast_convert.rs @@ -44,6 +44,16 @@ fn parse_list alias { + let ast_alias = get_str(py, ast.getattr(py, "name").unwrap()); + let asname = ast.getattr(py, "asname").unwrap(); + if asname == py.None() { + alias{name: ast_alias, asname: None} + } else { + alias{name: ast_alias, asname: Some(get_str(py, asname))} + } +} + fn parse_unaryop(py: Python, ast: PyObject) -> unaryop { let builtins_module = py.import("builtins").unwrap(); let isinstance = builtins_module.get(py, "isinstance").unwrap(); @@ -532,18 +542,9 @@ fn parse_statement(py: Python, ast: PyOb let level = ast.getattr(py, "level").unwrap(); let module = get_str(py, module); + let names = parse_list(py, names, parse_alias); - // TODO: move that into another function. - let mut names_ = vec!(); - for alias in names.iter(py).unwrap() { - let alias = alias.unwrap(); - let alias = parse_expr(py, alias); - println!("{:?}", alias); - // XXX - //names_.push(alias{name: alias, asname: alias}); - } - - stmt::ImportFrom(module, names_, None) + stmt::ImportFrom(module, names, None) } else if is_instance(&ast, &return_type) { let value = ast.getattr(py, "value").unwrap(); if value == py.None() { diff --git a/src/ast_dump.rs b/src/ast_dump.rs --- a/src/ast_dump.rs +++ b/src/ast_dump.rs @@ -191,15 +191,14 @@ impl stmt { None => "".to_string() }), stmt::ImportFrom(module, names, level) => format!("{}from {} import {}", current_indent, module.to_string(), { - /* - let mut exprs = vec!(); - for alias in names.iter() { - let alias = alias.to_string(); - exprs.push(alias); + let mut names_ = vec!(); + for name in names { + match name.asname { + None => names_.push(name.name), + Some(asname) => names_.push(format!("{} as {}", name.name, asname)) + } } - exprs.join(", ") - */ - "".to_string() + names_.join(", ") }), stmt::Expr(expr) => format!("{}{}", current_indent, expr.to_string()), stmt::Break => format!("{}break", current_indent), diff --git a/tests/test_parse_files/test_import_from.py b/tests/test_parse_files/test_import_from.py new file mode 100644 --- /dev/null +++ b/tests/test_parse_files/test_import_from.py @@ -0,0 +1,1 @@ +from mod import func as name, func2 as name2