ripex 0.2.0

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

#[derive(Debug, Clone)]
pub enum Expr {
    Literal(Literal, Span),
    Ident(String, Span),
    Attribute(Box<Expr>, String, Span),
    Subscript(Box<Expr>, Box<Expr>, Span),
    Slice(
        Option<Box<Expr>>,
        Option<Box<Expr>>,
        Option<Box<Expr>>,
        Span,
    ),
    Call(Box<Expr>, Vec<Expr>, Vec<Keyword>, Span),
    Binary(Box<Expr>, BinaryOp, Box<Expr>, Span),
    Unary(UnaryOp, Box<Expr>, Span),
    IfElse(Box<Expr>, Box<Expr>, Box<Expr>, Span),
    Lambda(Vec<String>, Box<Expr>, Span),
    List(Vec<Expr>, Span),
    Tuple(Vec<Expr>, Span),
    Dict(Vec<(Expr, Expr)>, Span),
    Set(Vec<Expr>, Span),
    ListComp(Box<Expr>, Vec<Comprehension>, Span),
    SetComp(Box<Expr>, Vec<Comprehension>, Span),
    DictComp(Box<Expr>, Vec<Comprehension>, Span),
    Generator(Box<Expr>, Vec<Comprehension>, Span),
    Await(Box<Expr>, Span),
    Yield(Option<Box<Expr>>, Span),
    YieldFrom(Box<Expr>, Span),
    Starred(Box<Expr>, Span),
    Walrus(Box<Expr>, Box<Expr>, Span),
    FString(Vec<FStringPart>, Span),
    Compare(Box<Expr>, Vec<CmpOp>, Vec<Box<Expr>>, Span),
    Paren(Box<Expr>, Span),
    Ellipsis(Span),
    Match(Box<Expr>, Vec<super::pattern::MatchCase>, Span),
    Error(Span),
}

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

#[derive(Debug, Clone)]
pub struct Comprehension {
    pub target: Box<Expr>,
    pub iter: Box<Expr>,
    pub ifs: Vec<Box<Expr>>,
    pub is_async: bool,
    pub span: Span,
}

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

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BinaryOp {
    Add,
    Sub,
    Mul,
    Div,
    FloorDiv,
    Mod,
    Pow,
    BitAnd,
    BitOr,
    BitXor,
    Shl,
    Shr,
    And,
    Or,
    MatMult,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UnaryOp {
    Neg,
    Pos,
    Not,
    Invert,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CmpOp {
    Eq,
    Ne,
    Lt,
    Gt,
    Le,
    Ge,
    Is,
    IsNot,
    In,
    NotIn,
}