Skip to main content

react_compiler_ast/
lib.rs

1pub mod common;
2pub mod declarations;
3pub mod expressions;
4pub mod jsx;
5pub mod literals;
6pub mod operators;
7pub mod patterns;
8pub mod scope;
9pub mod statements;
10pub mod visitor;
11
12use serde::{Deserialize, Serialize};
13
14use crate::common::{BaseNode, Comment};
15use crate::statements::{Directive, Statement};
16
17/// The root type returned by @babel/parser
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct File {
20    #[serde(flatten)]
21    pub base: BaseNode,
22    pub program: Program,
23    #[serde(default)]
24    pub comments: Vec<Comment>,
25    #[serde(default)]
26    pub errors: Vec<serde_json::Value>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct Program {
31    #[serde(flatten)]
32    pub base: BaseNode,
33    pub body: Vec<Statement>,
34    #[serde(default)]
35    pub directives: Vec<Directive>,
36    #[serde(rename = "sourceType")]
37    pub source_type: SourceType,
38    #[serde(default)]
39    pub interpreter: Option<InterpreterDirective>,
40    #[serde(
41        rename = "sourceFile",
42        default,
43        skip_serializing_if = "Option::is_none"
44    )]
45    pub source_file: Option<String>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(rename_all = "lowercase")]
50pub enum SourceType {
51    Module,
52    Script,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct InterpreterDirective {
57    #[serde(flatten)]
58    pub base: BaseNode,
59    pub value: String,
60}