diff --git a/crates/oxc_ast/src/ast/js.rs b/crates/oxc_ast/src/ast/js.rs index 4c516b71391b8..616db7148c0e7 100644 --- a/crates/oxc_ast/src/ast/js.rs +++ b/crates/oxc_ast/src/ast/js.rs @@ -322,6 +322,7 @@ pub enum PropertyKey<'a> { } } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(rename_all = "lowercase"))] @@ -369,6 +370,7 @@ pub struct TemplateElement<'a> { } /// See [template-strings-cooked-vs-raw](https://exploringjs.com/impatient-js/ch_template-literals.html#template-strings-cooked-vs-raw) +#[ast] #[derive(Debug, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] pub struct TemplateElementValue<'a> { @@ -1012,6 +1014,7 @@ pub struct VariableDeclaration<'a> { pub declare: bool, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(rename_all = "lowercase"))] @@ -1475,6 +1478,7 @@ pub struct Function<'a> { pub scope_id: Cell>, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] pub enum FunctionType { @@ -1518,6 +1522,7 @@ pub struct FormalParameter<'a> { pub r#override: bool, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] pub enum FormalParameterKind { @@ -1602,6 +1607,7 @@ pub struct Class<'a> { pub scope_id: Cell>, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] pub enum ClassType { @@ -1656,6 +1662,7 @@ pub struct MethodDefinition<'a> { pub accessibility: Option, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] pub enum MethodDefinitionType { @@ -1685,6 +1692,7 @@ pub struct PropertyDefinition<'a> { pub accessibility: Option, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] pub enum PropertyDefinitionType { @@ -1692,6 +1700,7 @@ pub enum PropertyDefinitionType { TSAbstractPropertyDefinition, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(rename_all = "lowercase"))] @@ -1761,6 +1770,7 @@ macro_rules! match_module_declaration { } pub use match_module_declaration; +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] pub enum AccessorPropertyType { diff --git a/crates/oxc_ast/src/ast/jsx.rs b/crates/oxc_ast/src/ast/jsx.rs index 9f9c101f89d7f..bb7d9d2b40395 100644 --- a/crates/oxc_ast/src/ast/jsx.rs +++ b/crates/oxc_ast/src/ast/jsx.rs @@ -70,6 +70,7 @@ pub struct JSXFragment<'a> { pub children: Vec<'a, JSXChild<'a>>, } +#[ast] #[derive(Debug, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(tag = "type"))] @@ -78,6 +79,7 @@ pub struct JSXOpeningFragment { pub span: Span, } +#[ast] #[derive(Debug, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(tag = "type"))] diff --git a/crates/oxc_ast/src/ast/literal.rs b/crates/oxc_ast/src/ast/literal.rs index 380f9ef8f09bb..359485df3ec79 100644 --- a/crates/oxc_ast/src/ast/literal.rs +++ b/crates/oxc_ast/src/ast/literal.rs @@ -75,6 +75,7 @@ pub struct RegExpLiteral<'a> { pub regex: RegExp<'a>, } +#[ast] #[derive(Debug, Clone, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] pub struct RegExp<'a> { @@ -82,6 +83,7 @@ pub struct RegExp<'a> { pub flags: RegExpFlags, } +#[ast] #[derive(Debug, Clone, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] pub struct EmptyObject; diff --git a/crates/oxc_ast/src/ast/ts.rs b/crates/oxc_ast/src/ast/ts.rs index b8bbdac18a103..5881d347044ae 100644 --- a/crates/oxc_ast/src/ast/ts.rs +++ b/crates/oxc_ast/src/ast/ts.rs @@ -294,6 +294,7 @@ pub struct TSTypeOperator<'a> { pub type_annotation: TSType<'a>, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(rename_all = "lowercase"))] @@ -621,6 +622,7 @@ pub struct TSTypeAliasDeclaration<'a> { pub scope_id: Cell>, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(rename_all = "lowercase"))] @@ -722,6 +724,7 @@ pub struct TSCallSignatureDeclaration<'a> { pub type_parameters: Option>>, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(rename_all = "lowercase"))] @@ -838,6 +841,7 @@ pub struct TSModuleDeclaration<'a> { pub scope_id: Cell>, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(rename_all = "lowercase"))] @@ -1019,6 +1023,7 @@ pub struct TSMappedType<'a> { pub scope_id: Cell>, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(rename_all = "camelCase"))] @@ -1172,6 +1177,7 @@ pub struct TSInstantiationExpression<'a> { pub type_parameters: Box<'a, TSTypeParameterInstantiation<'a>>, } +#[ast] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] #[cfg_attr(feature = "serialize", serde(rename_all = "camelCase"))] diff --git a/tasks/ast_codegen/src/schema.rs b/tasks/ast_codegen/src/schema.rs index 9054a7c7e0237..c3f3ef54d7190 100644 --- a/tasks/ast_codegen/src/schema.rs +++ b/tasks/ast_codegen/src/schema.rs @@ -386,7 +386,7 @@ pub fn analyze(type_def: &TypeRef) -> Result<()> { // AST without visit! type_def.borrow_mut().set_ast(true)?; } - Some(AstAttr::None) => { /* non AST types */ } + Some(AstAttr::None) => return Err(String::from("All `enums` and `structs` defined in the source of truth should be marked with an `#[ast]` attribute!")), None => { /* unrelated items like `use`, `type` and `macro` definitions */ } }