Mercurial > python-compiler.rs
changeset 48:039f85b187f2
Also handle relative imports.
author | Bastien Orivel <eijebong@bananium.fr> |
---|---|
date | Tue, 07 Jun 2016 13:34:12 +0200 |
parents | 38f59b0efc2c |
children | 141f1769e1f0 |
files | src/ast_convert.rs src/ast_dump.rs src/python_ast.rs tests/test_parse_files/test_import_from.py |
diffstat | 4 files changed, 30 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ast_convert.rs +++ b/src/ast_convert.rs @@ -545,7 +545,12 @@ fn parse_statement(py: Python, ast: PyOb let module = get_str(py, module); let names = parse_list(py, names, parse_alias); - stmt::ImportFrom(module, names, None) + if level == py.None() { + stmt::ImportFrom(module, names, None) + } else { + let level = level.extract(py).unwrap(); + stmt::ImportFrom(module, names, Some(level)) + } } else if is_instance(&ast, &import_type) { let names = ast.getattr(py, "names").unwrap(); let names = parse_list(py, names, parse_alias);
--- a/src/ast_dump.rs +++ b/src/ast_dump.rs @@ -190,16 +190,28 @@ impl stmt { Some(expr) => format!(" {}", expr.to_string()), None => "".to_string() }), - stmt::ImportFrom(module, names, level) => format!("{}from {} import {}", current_indent, module.to_string(), { - 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)) + stmt::ImportFrom(module, names, level) => { + format!("{}from {}{} import {}", + current_indent, + { + match level { + None => String::new(), + Some(level) => { let dots: String = iter::repeat(".").take(level as usize).collect(); dots } + } + }, + module.to_string(), + { + 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)) + } + } + names_.join(", ") } - } - names_.join(", ") - }), + ) + }, stmt::Import(names) => format!("{}import {}", current_indent, { let mut names_ = vec!(); for name in names {
--- a/src/python_ast.rs +++ b/src/python_ast.rs @@ -58,7 +58,7 @@ pub enum stmt { Import(Vec<alias>), // ImportFrom(identifier? module, alias* names, int? level) - ImportFrom(String, Vec<alias>, Option<i32>), // TODO: check the size of level. + ImportFrom(String, Vec<alias>, Option<i32>), // Global(identifier* names) Global(Vec<String>),