python-parser 0.2.0

A complete Python parser based on nom.
Documentation
extern crate python_parser;

use python_parser::ast::*;
use python_parser::*;

#[test]
fn test_call_and_attribute() {
    let (rest, ast) = file_input(make_strspan("egg = foo.bar().baz()")).unwrap();
    assert_eq!(rest.fragment.0, "");
    assert_eq!(
        ast,
        vec![Statement::Assignment(
            vec![Expression::Name("egg".to_string()),],
            vec![vec![Expression::Call(
                Box::new(Expression::Attribute(
                    Box::new(Expression::Call(
                        Box::new(Expression::Attribute(
                            Box::new(Expression::Name("foo".to_string())),
                            "bar".to_string(),
                        )),
                        Vec::new(),
                    )),
                    "baz".to_string(),
                )),
                Vec::new(),
            ),],],
        )]
    );
}

#[test]
fn test_call_and_attribute2() {
    let (rest, ast) = file_input(make_strspan("egg = foo.bar(baz, qux)")).unwrap();
    assert_eq!(rest.fragment.0, "");
    assert_eq!(
        ast,
        vec![Statement::Assignment(
            vec![Expression::Name("egg".to_string()),],
            vec![vec![Expression::Call(
                Box::new(Expression::Attribute(
                    Box::new(Expression::Name("foo".to_string())),
                    "bar".to_string(),
                )),
                vec![
                    Argument::Positional(Expression::Name("baz".to_string())),
                    Argument::Positional(Expression::Name("qux".to_string())),
                ],
            ),],],
        )]
    );
}