extern crate regex;
extern crate fall_tree;
extern crate fall_parse;

mod rust;

pub use self::rust::language as lang_rust;

pub use self::rust::{
    WHITESPACE,
    LINE_COMMENT,
    BLOCK_COMMENT,
    UNION,
    AS,
    CRATE,
    EXTERN,
    FN,
    LET,
    PUB,
    STRUCT,
    USE,
    MOD,
    IF,
    ELSE,
    ENUM,
    IMPL,
    SELF,
    SUPER,
    TYPE,
    CONST,
    STATIC,
    FOR,
    LOOP,
    WHILE,
    MOVE,
    MUT,
    REF,
    TRAIT,
    MATCH,
    RETURN,
    CONTINUE,
    BREAK,
    IN,
    UNSAFE,
    WHERE,
    R_ANGLE,
    L_BRACK,
    R_BRACK,
    SHL,
    SHL_EQ,
    SHR,
    SHR_EQ,
    AND,
    OR,
    THIN_ARROW,
    FAT_ARROW,
    EQ,
    EQEQ,
    BANGEQ,
    GTET,
    LTEQ,
    SEMI,
    COLON,
    COLONCOLON,
    COMMA,
    DOT,
    DOTDOT,
    DOTDOTDOT,
    HASH,
    DOLLAR,
    STAR,
    STAR_EQ,
    SLASH,
    SLASH_EQ,
    PERCENT,
    PERCENT_EQ,
    PLUS,
    PLUS_EQ,
    MINUS,
    MINUS_EQ,
    AMPERSAND,
    AMPERSAND_EQ,
    PIPE,
    PIPE_EQ,
    UNDERSCORE,
    BANG,
    QUESTION,
    CARET,
    CARET_EQ,
    CHAR,
    LIFETIME,
    BOOL,
    NUMBER,
    STRING,
    RAW_STRING,
    IDENT,
    FILE,
    USE_DECL,
    USE_SPEC,
    USE_SPEC_ENTRY,
    EXTERN_CRATE_DECL,
    FN_DEF,
    LINKAGE,
    VALUE_PARAM,
    LAMBDA_VALUE_PARAM,
    SELF_PARAMETER,
    STRUCT_DEF,
    STRUCT_FIELD,
    TUPLE_FIELD,
    ENUM_DEF,
    ENUM_VARIANT,
    MOD_DEF,
    IMPL_DEF,
    TRAIT_DEF,
    MEMBERS,
    TYPE_DEF,
    CONST_DEF,
    MACRO_ITEM,
    EXTERN_BLOCK,
    TYPE_PARAMETERS,
    TYPE_PARAMETER,
    TYPE_BOUND,
    LIFETIME_PARAMETER,
    VISIBILITY,
    WHERE_CLAUSE,
    PATH,
    TRAIT_PROJECTION_PATH,
    PATH_SEGMENT,
    TYPE_ARGUMENTS,
    FN_TRAIT_SUGAR,
    ALIAS,
    TYPE_REFERENCE,
    PATH_TYPE,
    REFERENCE_TYPE,
    POINTER_TYPE,
    PLACEHOLDER_TYPE,
    UNIT_TYPE,
    PAREN_TYPE,
    TUPLE_TYPE,
    NEVER_TYPE,
    ARRAY_TYPE,
    FN_POINTER_TYPE,
    FOR_TYPE,
    WILDCARD_PATTERN,
    PATH_PATTERN,
    TUPE_STRUCT_PATTERN,
    STRUCT_PATTERN,
    STRUCT_PATTERN_FIELD,
    BINDING_PATTERN,
    LITERAL_PATTERN,
    UNIT_PATTERN,
    PAREN_PATTERN,
    TUPLE_PATTERN,
    REFERENCE_PATTERN,
    EXPR,
    LITERAL,
    PATH_EXPR,
    STRUCT_LITERAL,
    STRUCT_LITERAL_FIELD,
    UNIT_EXPR,
    PAREN_EXPR,
    TUPLE_EXPR,
    ARRAY_LITERAL,
    LAMBDA_EXPR,
    RETURN_EXPR,
    LOOP_CF_EXPR,
    BLOCK_EXPR,
    LET_STMT,
    TYPE_ASCRIPTION,
    EMPTY_STMT,
    EXPR_STMT,
    IF_EXPR,
    WHILE_EXPR,
    LOOP_EXPR,
    FOR_EXPR,
    MATCH_EXPR,
    MATCH_ARM,
    GUARD,
    BLOCK_MACRO_EXPR,
    LINE_MACRO_EXPR,
    METHOD_CALL_EXPR,
    CALL_EXPR,
    VALUE_ARGUMENT,
    FIELD_EXPR,
    INDEX_EXPR,
    TRY_EXPR,
    CAST_EXPR,
    REFERENCE_EXPR,
    DEREFERENCE_EXPR,
    NEGATION_EXPR,
    NOT_EXPR,
    PRODUCT_EXPR,
    SUM_EXPR,
    BIT_SHIFT,
    BIT_AND,
    BIT_XOR,
    BIT_OR,
    COMPARISON,
    LOGICAL_AND,
    LOGICAL_OR,
    RANGE_EXPR,
    ASSIGNMENT_EXPR,
    ATTRIBUTE,
    INNER_ATTRIBUTE,
    ATTR_VALUE,
    BLOCK_MACRO,
    LINE_MACRO,
    TT,
};

pub use self::rust::{
    NameOwner,
    TypeParametersOwner,

    FnDef,
    StructDef,
    EnumDef,
    TraitDef,
    TypeDef,
    ModDef,
    ImplDef,
    UseDecl,
    TypeParameter,
    TypeReference,
    LetStmt,
    ExprStmt,
};
    L_PAREN,
    R_PAREN,
    L_CURLY,
    R_CURLY,
    L_ANGLE,