ripex 0.2.0

Multi-language structural parsing and fact extraction.
Documentation
use crate::span::Span;

#[derive(Debug, Clone)]
pub enum Expr {
    Int(i64, Span),
    UInt(u64, Span),
    Long(i64, Span),
    ULong(u64, Span),
    Float(f64, Span),
    Double(f64, Span),
    Decimal(f64, Span),
    String(String, Span),
    Char(char, Span),
    Bool(bool, Span),
    Null(Span),
    Ident(String, Span),
    Binary(Box<Expr>, BinaryOp, Box<Expr>, Span),
    Unary(UnaryOp, Box<Expr>, Span),
    Call(Box<Expr>, Vec<Expr>, Span),
    Index(Box<Expr>, Box<Expr>, Span),
    Member(Box<Expr>, String, Span),
    Conditional(Box<Expr>, Box<Expr>, Box<Expr>, Span),
    NullCoalesce(Box<Expr>, Box<Expr>, Span),
    NullConditional(Box<Expr>, String, Span),
    Lambda(LambdaExpr, Span),
    AnonymousMethod(Vec<Expr>, Box<super::stmt::Block>, Span),
    ObjectInit(String, Vec<MemberInit>, Span),
    CollectionInit(Vec<Expr>, Span),
    Array(Vec<Expr>, Span),
    New(Box<Expr>, Vec<Expr>, Span),
    Typeof(Box<Expr>, Span),
    Nameof(Box<Expr>, Span),
    Sizeof(Box<Expr>, Span),
    Default(Box<Expr>, Span),
    Await(Box<Expr>, Span),
    Paren(Box<Expr>, Span),
    Assign(Box<Expr>, Box<Expr>, Span),
    IsPattern(Box<Expr>, Box<Expr>, Span),
    SwitchExpr(Box<Expr>, Vec<SwitchArm>, Span),
    InterpolatedString(Vec<InterpolatedPart>, Span),
    Throw(Box<Expr>, Span),
    Error(Span),
}

#[derive(Debug, Clone)]
pub struct LambdaExpr {
    pub params: Vec<LambdaParam>,
    pub body: LambdaBody,
    pub is_async: bool,
    pub is_static: bool,
    pub span: Span,
}

#[derive(Debug, Clone)]
pub struct LambdaParam {
    pub name: String,
    pub type_: Option<Box<Expr>>,
    pub span: Span,
}

#[derive(Debug, Clone)]
pub enum LambdaBody {
    Expr(Box<Expr>),
    Block(Box<super::stmt::Block>),
}

#[derive(Debug, Clone)]
pub struct MemberInit {
    pub name: String,
    pub value: Box<Expr>,
    pub span: Span,
}

#[derive(Debug, Clone)]
pub struct SwitchArm {
    pub pattern: Box<Expr>,
    pub when: Option<Box<Expr>>,
    pub value: Box<Expr>,
    pub span: Span,
}

#[derive(Debug, Clone)]
pub enum InterpolatedPart {
    Literal(String, Span),
    Expr(Box<Expr>, Span),
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BinaryOp {
    Add,
    Sub,
    Mul,
    Div,
    Mod,
    Eq,
    Ne,
    Lt,
    Gt,
    Le,
    Ge,
    And,
    Or,
    BitAnd,
    BitOr,
    BitXor,
    Shl,
    Shr,
    Assign,
    AddAssign,
    SubAssign,
    MulAssign,
    DivAssign,
    ModAssign,
    AndAssign,
    OrAssign,
    XorAssign,
    ShlAssign,
    ShrAssign,
    NullCoalesce,
    Is,
    As,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UnaryOp {
    Neg,
    Not,
    BitNot,
    Deref,
    Ref,
    Plus,
    PreInc,
    PreDec,
    PostInc,
    PostDec,
    Await,
    IndexFromEnd,
}