1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
use crate::{module_decl::ModuleDecl, stmt::Stmt}; use is_macro::Is; use swc_atoms::JsWord; use swc_common::EqIgnoreSpan; use swc_common::{ast_node, Span}; #[ast_node] #[derive(Eq, Hash, Is, EqIgnoreSpan)] #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] pub enum Program { #[tag("Module")] Module(Module), #[tag("Script")] Script(Script), } #[ast_node("Module")] #[derive(Eq, Hash, EqIgnoreSpan)] pub struct Module { pub span: Span, pub body: Vec<ModuleItem>, #[serde(default, rename = "interpreter")] pub shebang: Option<JsWord>, } #[cfg(feature = "arbitrary")] impl arbitrary::Arbitrary for Module { fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result<Self> { let span = u.arbitrary()?; let body = u.arbitrary()?; Ok(Self { span, body, shebang: None, }) } } #[ast_node("Script")] #[derive(Eq, Hash, EqIgnoreSpan)] pub struct Script { pub span: Span, pub body: Vec<Stmt>, #[serde(default, rename = "interpreter")] pub shebang: Option<JsWord>, } #[cfg(feature = "arbitrary")] impl arbitrary::Arbitrary for Script { fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result<Self> { let span = u.arbitrary()?; let body = u.arbitrary()?; Ok(Self { span, body, shebang: None, }) } } #[ast_node] #[derive(Eq, Hash, Is, EqIgnoreSpan)] #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] pub enum ModuleItem { #[tag("ImportDeclaration")] #[tag("ExportDeclaration")] #[tag("ExportNamedDeclaration")] #[tag("ExportDefaultDeclaration")] #[tag("ExportDefaultExpression")] #[tag("ExportAllDeclaration")] #[tag("TsImportEqualsDeclaration")] #[tag("TsExportAssignment")] #[tag("TsNamespaceExportDeclaration")] ModuleDecl(ModuleDecl), #[tag("*")] Stmt(Stmt), }