changeset 44:5f1d285471af

Finish ImportFrom conversion and add a test for it.
author Bastien Orivel <eijebong@bananium.fr>
date Tue, 07 Jun 2016 12:19:10 +0200
parents 4dfea217989b
children d3902e32d899
files src/ast_convert.rs src/ast_dump.rs tests/test_parse_files/test_import_from.py
diffstat 3 files changed, 20 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/ast_convert.rs
+++ b/src/ast_convert.rs
@@ -44,6 +44,16 @@ fn parse_list<T, F: Fn(Python, PyObject)
     exprs
 }
 
+fn parse_alias(py: Python, ast: PyObject) -> 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() {
--- 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),
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