1use crate::kind::PythonSyntaxKind;
2use core::range::Range;
3
4#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct PythonRoot {
7 pub items: Vec<Element>,
8}
9
10#[derive(Debug, Clone, PartialEq, Eq)]
12pub enum Element {
13 FunctionDef { name: String, args: Vec<String>, body: Vec<Element>, span: Range<usize> },
15 ClassDef { name: String, bases: Vec<String>, body: Vec<Element>, span: Range<usize> },
17 Assign { target: String, value: String, span: Range<usize> },
19 Expr { value: String, span: Range<usize> },
21 Import { module: String, alias: Option<String>, span: Range<usize> },
23 ImportFrom { module: String, names: Vec<String>, span: Range<usize> },
25 Return { value: Option<String>, span: Range<usize> },
27 If { test: String, body: Vec<Element>, orelse: Vec<Element>, span: Range<usize> },
29 For { target: String, iter: String, body: Vec<Element>, span: Range<usize> },
31 While { test: String, body: Vec<Element>, span: Range<usize> },
33 Comment { text: String, span: Range<usize> },
35 Other { kind: PythonSyntaxKind, text: String, span: Range<usize> },
37}