#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub struct Module {
pub name: String,
pub modules: Vec<Module>,
pub classes: Vec<Class>,
pub functions: Vec<Function>,
pub attributes: Vec<Attribute>,
pub incomplete: bool,
pub docstring: Option<String>,
}
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub struct Class {
pub name: String,
pub bases: Vec<Expr>,
pub methods: Vec<Function>,
pub attributes: Vec<Attribute>,
pub decorators: Vec<Expr>,
pub inner_classes: Vec<Class>,
pub docstring: Option<String>,
}
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub struct Function {
pub name: String,
pub decorators: Vec<Expr>,
pub arguments: Arguments,
pub returns: Option<Expr>,
pub is_async: bool,
pub docstring: Option<String>,
}
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub struct Attribute {
pub name: String,
pub value: Option<Expr>,
pub annotation: Option<Expr>,
pub docstring: Option<String>,
}
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub struct Arguments {
pub positional_only_arguments: Vec<Argument>,
pub arguments: Vec<Argument>,
pub vararg: Option<VariableLengthArgument>,
pub keyword_only_arguments: Vec<Argument>,
pub kwarg: Option<VariableLengthArgument>,
}
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub struct Argument {
pub name: String,
pub default_value: Option<Expr>,
pub annotation: Option<Expr>,
}
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub struct VariableLengthArgument {
pub name: String,
pub annotation: Option<Expr>,
}
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub enum Expr {
Constant { value: Constant },
Name { id: String },
Attribute { value: Box<Self>, attr: String },
BinOp {
left: Box<Self>,
op: Operator,
right: Box<Self>,
},
Tuple { elts: Vec<Self> },
List { elts: Vec<Self> },
Subscript { value: Box<Self>, slice: Box<Self> },
}
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
pub enum Constant {
None,
Bool(bool),
Int(String),
Float(String),
Str(String),
Ellipsis,
}
#[derive(Debug, Eq, PartialEq, Clone, Copy, Hash)]
pub enum Operator {
BitOr,
}