oak_python/ast/
mod.rs

1use crate::kind::PythonSyntaxKind;
2use core::range::Range;
3
4/// Python 源文件的根节点
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct PythonRoot {
7    pub items: Vec<Element>,
8}
9
10/// Python 语法元素
11#[derive(Debug, Clone, PartialEq, Eq)]
12pub enum Element {
13    /// 函数定义
14    FunctionDef { name: String, args: Vec<String>, body: Vec<Element>, span: Range<usize> },
15    /// 类定义
16    ClassDef { name: String, bases: Vec<String>, body: Vec<Element>, span: Range<usize> },
17    /// 赋值语句
18    Assign { target: String, value: String, span: Range<usize> },
19    /// 表达式语句
20    Expr { value: String, span: Range<usize> },
21    /// 导入语句
22    Import { module: String, alias: Option<String>, span: Range<usize> },
23    /// 从模块导入
24    ImportFrom { module: String, names: Vec<String>, span: Range<usize> },
25    /// 返回语句
26    Return { value: Option<String>, span: Range<usize> },
27    /// 条件语句
28    If { test: String, body: Vec<Element>, orelse: Vec<Element>, span: Range<usize> },
29    /// 循环语句
30    For { target: String, iter: String, body: Vec<Element>, span: Range<usize> },
31    /// While 循环
32    While { test: String, body: Vec<Element>, span: Range<usize> },
33    /// 注释
34    Comment { text: String, span: Range<usize> },
35    /// 其他元素
36    Other { kind: PythonSyntaxKind, text: String, span: Range<usize> },
37}