diff --git a/.github/generated/ast_changes_watch_list.yml b/.github/generated/ast_changes_watch_list.yml index 96738fe0fefb0..8114889c3a3b7 100644 --- a/.github/generated/ast_changes_watch_list.yml +++ b/.github/generated/ast_changes_watch_list.yml @@ -43,6 +43,7 @@ src: - 'crates/oxc_span/src/generated/derive_estree.rs' - 'crates/oxc_span/src/source_type.rs' - 'crates/oxc_span/src/span.rs' + - 'crates/oxc_syntax/src/comment_node.rs' - 'crates/oxc_syntax/src/generated/assert_layouts.rs' - 'crates/oxc_syntax/src/generated/derive_clone_in.rs' - 'crates/oxc_syntax/src/generated/derive_content_eq.rs' diff --git a/crates/oxc_ast/src/ast_builder_impl.rs b/crates/oxc_ast/src/ast_builder_impl.rs index b032dc165bbd0..088ece9436d65 100644 --- a/crates/oxc_ast/src/ast_builder_impl.rs +++ b/crates/oxc_ast/src/ast_builder_impl.rs @@ -4,7 +4,9 @@ use std::borrow::Cow; use oxc_allocator::{Allocator, AllocatorAccessor, Box, FromIn, IntoIn, Vec}; use oxc_span::{Atom, SPAN, Span}; -use oxc_syntax::{number::NumberBase, operator::UnaryOperator, scope::ScopeId}; +use oxc_syntax::{ + comment_node::CommentNodeId, number::NumberBase, operator::UnaryOperator, scope::ScopeId, +}; use crate::{AstBuilder, ast::*}; @@ -33,6 +35,13 @@ impl<'a> AstBuilder<'a> { Self { allocator } } + /// Create [`CommentNodeId`] for an AST node. + #[expect(dead_code, clippy::unused_self, clippy::trivially_copy_pass_by_ref)] + pub(crate) fn get_comment_node_id(&self) -> CommentNodeId { + // TODO: Generate a real ID + CommentNodeId::DUMMY + } + /// Move a value into the memory arena. #[inline] pub fn alloc(self, value: T) -> Box<'a, T> { diff --git a/crates/oxc_ast/src/generated/ast_builder.rs b/crates/oxc_ast/src/generated/ast_builder.rs index d6f0e29d1129c..fde062c057025 100644 --- a/crates/oxc_ast/src/generated/ast_builder.rs +++ b/crates/oxc_ast/src/generated/ast_builder.rs @@ -3,6 +3,7 @@ //! AST node factories +#![allow(unused_imports)] #![expect( clippy::default_trait_access, clippy::inconsistent_struct_constructor, @@ -12,7 +13,9 @@ use std::cell::Cell; use oxc_allocator::{Allocator, Box, IntoIn, Vec}; -use oxc_syntax::{reference::ReferenceId, scope::ScopeId, symbol::SymbolId}; +use oxc_syntax::{ + comment_node::CommentNodeId, reference::ReferenceId, scope::ScopeId, symbol::SymbolId, +}; use crate::ast::*; diff --git a/crates/oxc_ast_macros/src/generated/structs.rs b/crates/oxc_ast_macros/src/generated/structs.rs index 2047e54573300..01f1621efc073 100644 --- a/crates/oxc_ast_macros/src/generated/structs.rs +++ b/crates/oxc_ast_macros/src/generated/structs.rs @@ -8,296 +8,297 @@ use crate::ast::StructDetails; pub static STRUCTS: phf::Map<&'static str, StructDetails> = ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), - (0, 2), - (1, 40), - (1, 87), - (0, 67), - (0, 19), - (1, 49), - (3, 182), (0, 0), - (0, 80), - (1, 36), - (5, 196), - (0, 6), - (0, 4), - (8, 42), - (0, 7), + (0, 0), + (0, 59), + (0, 28), + (1, 8), + (0, 192), + (0, 218), + (0, 56), + (1, 2), + (0, 21), + (1, 119), + (0, 214), + (0, 27), + (0, 27), + (10, 38), (0, 23), + (0, 1), (1, 0), - (5, 189), - (0, 132), - (1, 51), - (0, 95), - (7, 102), - (0, 142), - (0, 2), - (2, 1), - (0, 18), - (3, 10), - (3, 89), - (0, 19), - (47, 168), - (14, 93), - (0, 81), - (12, 153), - (0, 5), - (0, 17), - (4, 221), - (0, 2), - (0, 47), - (10, 154), - (5, 11), - (0, 100), - (0, 220), - (0, 127), + (1, 61), + (1, 69), + (21, 125), + (0, 24), + (25, 162), + (1, 177), + (0, 9), + (0, 1), + (0, 6), + (2, 85), + (2, 171), + (0, 7), + (23, 188), + (3, 168), + (2, 26), + (5, 211), (0, 0), - (1, 87), + (0, 31), + (2, 138), + (0, 3), + (1, 32), + (3, 135), + (4, 162), + (1, 25), + (0, 228), + (2, 42), + (0, 3), + (0, 150), ], entries: &[ - ("ArrayPattern", StructDetails { field_order: None }), - ("ClassStringDisjunction", StructDetails { field_order: Some(&[0, 2, 1]) }), - ("TSModuleDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 5, 3]) }), - ("JSXText", StructDetails { field_order: None }), - ("TSInstantiationExpression", StructDetails { field_order: None }), - ("Span", StructDetails { field_order: None }), - ("PrivateFieldExpression", StructDetails { field_order: None }), - ("ObjectAssignmentTarget", StructDetails { field_order: None }), - ("BoundaryAssertion", StructDetails { field_order: None }), - ("AwaitExpression", StructDetails { field_order: None }), - ("DoWhileStatement", StructDetails { field_order: None }), - ("ChainExpression", StructDetails { field_order: None }), - ("FormalParameters", StructDetails { field_order: Some(&[0, 3, 1, 2]) }), - ("TSTypeParameterDeclaration", StructDetails { field_order: None }), - ("Modifier", StructDetails { field_order: None }), - ("BinaryExpression", StructDetails { field_order: Some(&[0, 1, 3, 2]) }), - ("JSXIdentifier", StructDetails { field_order: None }), - ("SwitchCase", StructDetails { field_order: None }), - ("AssignmentPattern", StructDetails { field_order: None }), - ("VariableDeclaration", StructDetails { field_order: Some(&[0, 2, 1, 3]) }), - ("Class", StructDetails { field_order: Some(&[0, 9, 1, 2, 3, 4, 5, 6, 7, 10, 11, 8]) }), - ("BindingProperty", StructDetails { field_order: None }), - ("MetaProperty", StructDetails { field_order: None }), - ("Dot", StructDetails { field_order: None }), - ("TSTupleType", StructDetails { field_order: None }), - ("NullLiteral", StructDetails { field_order: None }), - ("CommentNewlines", StructDetails { field_order: None }), - ("ImportDefaultSpecifier", StructDetails { field_order: None }), - ("TSIndexSignature", StructDetails { field_order: None }), - ("TSExportAssignment", StructDetails { field_order: None }), - ("TSNeverKeyword", StructDetails { field_order: None }), - ("BindingPattern", StructDetails { field_order: None }), - ("ComputedMemberExpression", StructDetails { field_order: None }), - ("CatchParameter", StructDetails { field_order: None }), - ("CatchClause", StructDetails { field_order: None }), - ("BreakStatement", StructDetails { field_order: None }), - ("ScopeId", StructDetails { field_order: None }), - ("UnicodePropertyEscape", StructDetails { field_order: Some(&[0, 3, 4, 1, 2]) }), - ("Error", StructDetails { field_order: Some(&[3, 0, 1, 2]) }), + ("StaticExport", StructDetails { field_order: None }), + ("CharacterClassEscape", StructDetails { field_order: None }), + ("CallExpression", StructDetails { field_order: None }), + ("ObjectProperty", StructDetails { field_order: Some(&[0, 3, 1, 2, 4, 5, 6]) }), + ("TSTypeLiteral", StructDetails { field_order: None }), + ("TSObjectKeyword", StructDetails { field_order: None }), + ("TSModuleBlock", StructDetails { field_order: None }), + ("TSNullKeyword", StructDetails { field_order: None }), ( - "Function", - StructDetails { field_order: Some(&[0, 8, 1, 9, 10, 11, 2, 3, 4, 5, 6, 7, 12]) }, + "MethodDefinition", + StructDetails { field_order: Some(&[0, 4, 1, 2, 3, 5, 6, 7, 8, 9, 10]) }, ), - ("ObjectPattern", StructDetails { field_order: None }), - ("BlockStatement", StructDetails { field_order: None }), - ("LabeledStatement", StructDetails { field_order: None }), - ("Elision", StructDetails { field_order: None }), - ("Program", StructDetails { field_order: Some(&[0, 7, 1, 2, 3, 4, 5, 6]) }), - ("TSPropertySignature", StructDetails { field_order: Some(&[0, 3, 4, 5, 1, 2]) }), - ("BooleanLiteral", StructDetails { field_order: None }), + ("AwaitExpression", StructDetails { field_order: None }), + ("ClassBody", StructDetails { field_order: None }), + ("ClassString", StructDetails { field_order: Some(&[0, 2, 1]) }), + ("DynamicImport", StructDetails { field_order: None }), + ("UnicodePropertyEscape", StructDetails { field_order: Some(&[0, 3, 4, 1, 2]) }), + ("TSIndexedAccessType", StructDetails { field_order: None }), + ("TSMappedType", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 6, 4]) }), ("SpreadElement", StructDetails { field_order: None }), - ("TSNullKeyword", StructDetails { field_order: None }), - ("Quantifier", StructDetails { field_order: Some(&[0, 1, 2, 4, 3]) }), - ("TSClassImplements", StructDetails { field_order: None }), - ("JSDocUnknownType", StructDetails { field_order: None }), - ("NumericLiteral", StructDetails { field_order: None }), + ("SourceType", StructDetails { field_order: None }), + ("BreakStatement", StructDetails { field_order: None }), ("BindingIdentifier", StructDetails { field_order: None }), - ("RegExp", StructDetails { field_order: None }), - ("TSTypeLiteral", StructDetails { field_order: None }), - ("JSXClosingElement", StructDetails { field_order: None }), - ("CallExpression", StructDetails { field_order: None }), - ("SymbolId", StructDetails { field_order: None }), - ("ImportSpecifier", StructDetails { field_order: None }), - ("LookAroundAssertion", StructDetails { field_order: Some(&[0, 2, 1]) }), - ("TSTypeAssertion", StructDetails { field_order: None }), - ("TSOptionalType", StructDetails { field_order: None }), - ("WhileStatement", StructDetails { field_order: None }), - ("LogicalExpression", StructDetails { field_order: Some(&[0, 1, 3, 2]) }), - ("TSObjectKeyword", StructDetails { field_order: None }), - ("TSEnumBody", StructDetails { field_order: None }), ("TSStringKeyword", StructDetails { field_order: None }), - ("TryStatement", StructDetails { field_order: None }), - ("DebuggerStatement", StructDetails { field_order: None }), + ( + "AccessorProperty", + StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10]) }, + ), + ("TemplateElementValue", StructDetails { field_order: None }), + ("BindingProperty", StructDetails { field_order: None }), + ("ThisExpression", StructDetails { field_order: None }), + ("ObjectExpression", StructDetails { field_order: None }), + ("JSXText", StructDetails { field_order: None }), + ("BooleanLiteral", StructDetails { field_order: None }), + ("AssignmentExpression", StructDetails { field_order: Some(&[0, 3, 1, 2]) }), + ("EmptyStatement", StructDetails { field_order: None }), + ("TSUnknownKeyword", StructDetails { field_order: None }), + ("ForInStatement", StructDetails { field_order: None }), + ("TSThisParameter", StructDetails { field_order: None }), + ("TSModuleDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 5, 3]) }), ("TSParenthesizedType", StructDetails { field_order: None }), - ("EcmaScriptModule", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }), - ("TSModuleBlock", StructDetails { field_order: None }), - ("TSLiteralType", StructDetails { field_order: None }), - ("NonMaxU32", StructDetails { field_order: None }), - ("ArrayAssignmentTarget", StructDetails { field_order: None }), - ("JSXSpreadAttribute", StructDetails { field_order: None }), - ("NamedReference", StructDetails { field_order: None }), - ("VariableDeclarator", StructDetails { field_order: Some(&[0, 3, 1, 2, 4]) }), - ("CharacterClassEscape", StructDetails { field_order: None }), - ("TSAnyKeyword", StructDetails { field_order: None }), - ("TSVoidKeyword", StructDetails { field_order: None }), - ("TSImportType", StructDetails { field_order: None }), + ("JSXNamespacedName", StructDetails { field_order: None }), + ("JSXSpreadChild", StructDetails { field_order: None }), + ("TSTypeParameter", StructDetails { field_order: None }), + ("NumericLiteral", StructDetails { field_order: None }), + ("ExportDefaultDeclaration", StructDetails { field_order: None }), + ("CatchParameter", StructDetails { field_order: None }), + ("Decorator", StructDetails { field_order: None }), + ("ConditionalExpression", StructDetails { field_order: None }), + ("BindingPattern", StructDetails { field_order: None }), ("TSEnumDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 5, 3]) }), - ("ContinueStatement", StructDetails { field_order: None }), - ("JSXAttribute", StructDetails { field_order: None }), - ("NameSpan", StructDetails { field_order: Some(&[1, 0]) }), - ("ImportNamespaceSpecifier", StructDetails { field_order: None }), - ("JSXElement", StructDetails { field_order: None }), - ("FunctionBody", StructDetails { field_order: None }), - ("RegExpFlags", StructDetails { field_order: None }), - ("UpdateExpression", StructDetails { field_order: Some(&[0, 2, 3, 1]) }), + ("JSXIdentifier", StructDetails { field_order: None }), + ("VariableDeclarator", StructDetails { field_order: Some(&[0, 3, 1, 2, 4]) }), + ("TemplateLiteral", StructDetails { field_order: None }), + ("LookAroundAssertion", StructDetails { field_order: Some(&[0, 2, 1]) }), + ("ComputedMemberExpression", StructDetails { field_order: None }), + ("TSInferType", StructDetails { field_order: None }), + ("WithClause", StructDetails { field_order: None }), + ("Super", StructDetails { field_order: None }), ( "PropertyDefinition", StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13]) }, ), - ("ObjectExpression", StructDetails { field_order: None }), - ("ExportAllDeclaration", StructDetails { field_order: None }), - ( - "MethodDefinition", - StructDetails { field_order: Some(&[0, 4, 1, 2, 3, 5, 6, 7, 8, 9, 10]) }, - ), - ("NewExpression", StructDetails { field_order: None }), - ("BindingRestElement", StructDetails { field_order: None }), - ("IdentifierName", StructDetails { field_order: None }), - ("Disjunction", StructDetails { field_order: None }), - ("AssignmentExpression", StructDetails { field_order: Some(&[0, 3, 1, 2]) }), - ("AssignmentTargetRest", StructDetails { field_order: None }), - ("TSTypeQuery", StructDetails { field_order: None }), - ("WithClause", StructDetails { field_order: None }), + ("TSIntrinsicKeyword", StructDetails { field_order: None }), + ("MetaProperty", StructDetails { field_order: None }), + ("TSImportType", StructDetails { field_order: None }), ("TSEnumMember", StructDetails { field_order: None }), + ("TSOptionalType", StructDetails { field_order: None }), + ("TSInterfaceDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 4, 6, 5]) }), + ("TSAnyKeyword", StructDetails { field_order: None }), + ("ArrayAssignmentTarget", StructDetails { field_order: None }), ("TSTypePredicate", StructDetails { field_order: Some(&[0, 1, 3, 2]) }), - ("TSTypeAnnotation", StructDetails { field_order: None }), - ("ReturnStatement", StructDetails { field_order: None }), + ("Disjunction", StructDetails { field_order: None }), ("TSTypeParameterInstantiation", StructDetails { field_order: None }), - ("ClassString", StructDetails { field_order: Some(&[0, 2, 1]) }), - ("TSMappedType", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 6, 4]) }), - ("Directive", StructDetails { field_order: None }), - ("WithStatement", StructDetails { field_order: None }), - ("TSSymbolKeyword", StructDetails { field_order: None }), - ("RegExpLiteral", StructDetails { field_order: None }), + ("TSPropertySignature", StructDetails { field_order: Some(&[0, 3, 4, 5, 1, 2]) }), + ("IndexedReference", StructDetails { field_order: None }), + ("Pattern", StructDetails { field_order: None }), + ("ReturnStatement", StructDetails { field_order: None }), + ("TSNumberKeyword", StructDetails { field_order: None }), + ("JSXElement", StructDetails { field_order: None }), + ("StringLiteral", StructDetails { field_order: None }), + ("ImportNamespaceSpecifier", StructDetails { field_order: None }), + ("IdentifierReference", StructDetails { field_order: None }), + ("JSXOpeningFragment", StructDetails { field_order: None }), + ("LabelIdentifier", StructDetails { field_order: None }), + ("EcmaScriptModule", StructDetails { field_order: Some(&[4, 0, 1, 2, 3]) }), + ("LabeledStatement", StructDetails { field_order: None }), ("TSTypeOperator", StructDetails { field_order: Some(&[0, 2, 1]) }), + ("AssignmentTargetWithDefault", StructDetails { field_order: None }), + ("Alternative", StructDetails { field_order: None }), + ("ExpressionStatement", StructDetails { field_order: None }), + ("ImportDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 3, 5]) }), + ("StaticBlock", StructDetails { field_order: None }), + ("JSXEmptyExpression", StructDetails { field_order: None }), + ("TSAsExpression", StructDetails { field_order: None }), + ("TSNamespaceExportDeclaration", StructDetails { field_order: None }), + ("PrivateInExpression", StructDetails { field_order: None }), ("CharacterClass", StructDetails { field_order: Some(&[0, 2, 3, 4, 1]) }), - ("JSXOpeningFragment", StructDetails { field_order: None }), - ("SourceType", StructDetails { field_order: None }), - ("TSTypeAliasDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 4]) }), - ("ObjectProperty", StructDetails { field_order: Some(&[0, 3, 1, 2, 4, 5, 6]) }), - ("ArrayExpression", StructDetails { field_order: None }), - ("ErrorLabel", StructDetails { field_order: Some(&[1, 0]) }), - ("TSIndexedAccessType", StructDetails { field_order: None }), - ("TSNumberKeyword", StructDetails { field_order: None }), - ("TSQualifiedName", StructDetails { field_order: None }), + ("TSTemplateLiteralType", StructDetails { field_order: None }), + ("ImportDefaultSpecifier", StructDetails { field_order: None }), + ("TSUndefinedKeyword", StructDetails { field_order: None }), + ("ExportEntry", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5, 6]) }), + ("SwitchStatement", StructDetails { field_order: None }), + ("Hashbang", StructDetails { field_order: None }), + ("TSNamedTupleMember", StructDetails { field_order: None }), + ("TSExternalModuleReference", StructDetails { field_order: None }), + ("TSIndexSignature", StructDetails { field_order: None }), + ("ObjectPattern", StructDetails { field_order: None }), + ("JSXMemberExpression", StructDetails { field_order: None }), + ("TSTypeQuery", StructDetails { field_order: None }), + ("ScopeId", StructDetails { field_order: None }), + ("AssignmentTargetRest", StructDetails { field_order: None }), ("TaggedTemplateExpression", StructDetails { field_order: None }), + ("TSFunctionType", StructDetails { field_order: None }), + ("FormalParameters", StructDetails { field_order: Some(&[0, 3, 1, 2]) }), + ("CommentNewlines", StructDetails { field_order: None }), + ("TSInterfaceBody", StructDetails { field_order: None }), + ("ClassStringDisjunction", StructDetails { field_order: Some(&[0, 2, 1]) }), + ("IdentifierName", StructDetails { field_order: None }), + ("TSCallSignatureDeclaration", StructDetails { field_order: None }), ("TSIntersectionType", StructDetails { field_order: None }), - ("SwitchStatement", StructDetails { field_order: None }), - ("ExpressionStatement", StructDetails { field_order: None }), - ("ThrowStatement", StructDetails { field_order: None }), - ("JSDocNonNullableType", StructDetails { field_order: None }), - ("ForStatement", StructDetails { field_order: None }), + ("Dot", StructDetails { field_order: None }), + ("CatchClause", StructDetails { field_order: None }), + ("Elision", StructDetails { field_order: None }), + ("TSMethodSignature", StructDetails { field_order: Some(&[0, 1, 7, 8, 9, 2, 3, 4, 5, 6]) }), + ("TSClassImplements", StructDetails { field_order: None }), + ("IgnoreGroup", StructDetails { field_order: None }), + ("JSXExpressionContainer", StructDetails { field_order: None }), + ("PrivateIdentifier", StructDetails { field_order: None }), + ("TSArrayType", StructDetails { field_order: None }), + ("TSConstructSignatureDeclaration", StructDetails { field_order: None }), + ("ParenthesizedExpression", StructDetails { field_order: None }), + ("TSRestType", StructDetails { field_order: None }), + ("Class", StructDetails { field_order: Some(&[0, 9, 1, 2, 3, 4, 5, 6, 7, 10, 11, 8]) }), + ("TSLiteralType", StructDetails { field_order: None }), + ("ArrayPattern", StructDetails { field_order: None }), + ("JSXSpreadAttribute", StructDetails { field_order: None }), + ("ChainExpression", StructDetails { field_order: None }), + ("NonMaxU32", StructDetails { field_order: None }), + ("NewExpression", StructDetails { field_order: None }), + ("IfStatement", StructDetails { field_order: None }), + ("TSUnionType", StructDetails { field_order: None }), + ("UpdateExpression", StructDetails { field_order: Some(&[0, 2, 3, 1]) }), + ("WhileStatement", StructDetails { field_order: None }), + ("ExportNamedDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 4]) }), + ("TSNonNullExpression", StructDetails { field_order: None }), + ("TSTypeAliasDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 4]) }), + ("TSSymbolKeyword", StructDetails { field_order: None }), + ("ImportExpression", StructDetails { field_order: None }), + ("TSTypeAnnotation", StructDetails { field_order: None }), + ("Comment", StructDetails { field_order: None }), + ("WithStatement", StructDetails { field_order: None }), ( - "ArrowFunctionExpression", - StructDetails { field_order: Some(&[0, 6, 7, 1, 2, 3, 4, 5, 8]) }, + "Function", + StructDetails { field_order: Some(&[0, 8, 1, 9, 10, 11, 2, 3, 4, 5, 6, 7, 12]) }, ), - ("AssignmentTargetPropertyProperty", StructDetails { field_order: None }), - ("TSCallSignatureDeclaration", StructDetails { field_order: None }), - ("LabelIdentifier", StructDetails { field_order: None }), - ("JSDocNullableType", StructDetails { field_order: None }), - ("ThisExpression", StructDetails { field_order: None }), - ("FormalParameter", StructDetails { field_order: None }), - ("ParenthesizedExpression", StructDetails { field_order: None }), ("CapturingGroup", StructDetails { field_order: None }), - ("TSMethodSignature", StructDetails { field_order: Some(&[0, 1, 7, 8, 9, 2, 3, 4, 5, 6]) }), - ("TSTypeParameter", StructDetails { field_order: None }), - ("SequenceExpression", StructDetails { field_order: None }), - ("Super", StructDetails { field_order: None }), - ("IdentifierReference", StructDetails { field_order: None }), - ("TSConstructSignatureDeclaration", StructDetails { field_order: None }), - ("TSUndefinedKeyword", StructDetails { field_order: None }), - ("TSTemplateLiteralType", StructDetails { field_order: None }), - ("TSInterfaceDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 4, 6, 5]) }), - ("TSIntrinsicKeyword", StructDetails { field_order: None }), - ("JSXMemberExpression", StructDetails { field_order: None }), - ("JSXExpressionContainer", StructDetails { field_order: None }), - ("TSFunctionType", StructDetails { field_order: None }), - ("EmptyStatement", StructDetails { field_order: None }), - ("StringLiteral", StructDetails { field_order: None }), + ("BlockStatement", StructDetails { field_order: None }), ("BigIntLiteral", StructDetails { field_order: None }), - ("AssignmentTargetWithDefault", StructDetails { field_order: None }), + ("TSVoidKeyword", StructDetails { field_order: None }), + ("StaticMemberExpression", StructDetails { field_order: None }), + ("TSTypeReference", StructDetails { field_order: None }), + ("TSIndexSignatureName", StructDetails { field_order: None }), + ("DoWhileStatement", StructDetails { field_order: None }), + ("ExportSpecifier", StructDetails { field_order: None }), + ("Quantifier", StructDetails { field_order: Some(&[0, 1, 2, 4, 3]) }), + ("ObjectAssignmentTarget", StructDetails { field_order: None }), + ("Modifiers", StructDetails { field_order: None }), + ("TSEnumBody", StructDetails { field_order: None }), + ("Directive", StructDetails { field_order: None }), + ("TSInterfaceHeritage", StructDetails { field_order: None }), + ("ForStatement", StructDetails { field_order: None }), ("TSBigIntKeyword", StructDetails { field_order: None }), - ("TSUnknownKeyword", StructDetails { field_order: None }), - ("TSArrayType", StructDetails { field_order: None }), - ("PrivateInExpression", StructDetails { field_order: None }), - ("ConditionalExpression", StructDetails { field_order: None }), - ("JSXOpeningElement", StructDetails { field_order: None }), - ("PrivateIdentifier", StructDetails { field_order: None }), - ("ImportAttribute", StructDetails { field_order: None }), - ("DynamicImport", StructDetails { field_order: None }), - ("StaticBlock", StructDetails { field_order: None }), - ("IndexedReference", StructDetails { field_order: None }), - ("ClassBody", StructDetails { field_order: None }), - ("JSXEmptyExpression", StructDetails { field_order: None }), - ("RawTransferData", StructDetails { field_order: None }), - ("Decorator", StructDetails { field_order: None }), + ("JSDocNullableType", StructDetails { field_order: None }), + ("TSNeverKeyword", StructDetails { field_order: None }), + ("NamedReference", StructDetails { field_order: None }), + ("CharacterClassRange", StructDetails { field_order: None }), ( - "AccessorProperty", - StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4, 6, 7, 8, 9, 10]) }, + "ArrowFunctionExpression", + StructDetails { field_order: Some(&[0, 6, 7, 1, 2, 3, 4, 5, 8]) }, ), - ("ExportNamedDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 3, 5, 4]) }), + ("JSDocUnknownType", StructDetails { field_order: None }), + ("TSConstructorType", StructDetails { field_order: Some(&[0, 4, 1, 2, 3]) }), + ("TSTypeParameterDeclaration", StructDetails { field_order: None }), + ("TSQualifiedName", StructDetails { field_order: None }), + ("NameSpan", StructDetails { field_order: Some(&[1, 0]) }), + ("TSExportAssignment", StructDetails { field_order: None }), + ("ImportSpecifier", StructDetails { field_order: None }), + ("TSConditionalType", StructDetails { field_order: None }), + ("CommentNodeId", StructDetails { field_order: None }), + ("JSXAttribute", StructDetails { field_order: None }), + ("BindingRestElement", StructDetails { field_order: None }), ("TSSatisfiesExpression", StructDetails { field_order: None }), - ("TSNamespaceExportDeclaration", StructDetails { field_order: None }), - ("ImportExpression", StructDetails { field_order: None }), - ("AssignmentTargetPropertyIdentifier", StructDetails { field_order: None }), - ("JSXSpreadChild", StructDetails { field_order: None }), - ("JSXClosingFragment", StructDetails { field_order: None }), - ("TSThisType", StructDetails { field_order: None }), - ("Pattern", StructDetails { field_order: None }), ("YieldExpression", StructDetails { field_order: Some(&[0, 2, 1]) }), - ("TSUnionType", StructDetails { field_order: None }), - ("TemplateLiteral", StructDetails { field_order: None }), - ("Hashbang", StructDetails { field_order: None }), - ("Alternative", StructDetails { field_order: None }), - ("V8IntrinsicExpression", StructDetails { field_order: None }), + ("TSInstantiationExpression", StructDetails { field_order: None }), + ("ThrowStatement", StructDetails { field_order: None }), + ("Program", StructDetails { field_order: Some(&[0, 7, 1, 2, 3, 4, 5, 6]) }), + ("ErrorLabel", StructDetails { field_order: Some(&[1, 0]) }), + ("AssignmentPattern", StructDetails { field_order: None }), + ("ArrayExpression", StructDetails { field_order: None }), + ("DebuggerStatement", StructDetails { field_order: None }), + ("FormalParameter", StructDetails { field_order: None }), + ("NullLiteral", StructDetails { field_order: None }), ("ImportEntry", StructDetails { field_order: None }), - ("ExportDefaultDeclaration", StructDetails { field_order: None }), - ("TSRestType", StructDetails { field_order: None }), - ("TSTypeReference", StructDetails { field_order: None }), - ("StaticMemberExpression", StructDetails { field_order: None }), - ("CharacterClassRange", StructDetails { field_order: None }), - ("ForOfStatement", StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4]) }), - ("TemplateElement", StructDetails { field_order: None }), - ("TSInferType", StructDetails { field_order: None }), - ("Character", StructDetails { field_order: Some(&[0, 2, 1]) }), - ("ExportSpecifier", StructDetails { field_order: None }), - ("TSConstructorType", StructDetails { field_order: Some(&[0, 4, 1, 2, 3]) }), - ("TSConditionalType", StructDetails { field_order: None }), - ("TSAsExpression", StructDetails { field_order: None }), - ("IgnoreGroup", StructDetails { field_order: None }), + ("JSDocNonNullableType", StructDetails { field_order: None }), + ("Modifier", StructDetails { field_order: None }), + ("TSTypeAssertion", StructDetails { field_order: None }), + ("SymbolId", StructDetails { field_order: None }), + ("TSImportEqualsDeclaration", StructDetails { field_order: None }), + ("JSXOpeningElement", StructDetails { field_order: None }), + ("ReferenceId", StructDetails { field_order: None }), + ("VariableDeclaration", StructDetails { field_order: Some(&[0, 2, 1, 3]) }), + ("V8IntrinsicExpression", StructDetails { field_order: None }), + ("ContinueStatement", StructDetails { field_order: None }), + ("JSXClosingElement", StructDetails { field_order: None }), ("JSXFragment", StructDetails { field_order: None }), - ("ImportDeclaration", StructDetails { field_order: Some(&[0, 1, 2, 4, 3, 5]) }), - ("TSIndexSignatureName", StructDetails { field_order: None }), + ("RegExp", StructDetails { field_order: None }), + ("TSTupleType", StructDetails { field_order: None }), + ("AssignmentTargetPropertyIdentifier", StructDetails { field_order: None }), + ("TemplateElement", StructDetails { field_order: None }), + ("BoundaryAssertion", StructDetails { field_order: None }), + ("ExportAllDeclaration", StructDetails { field_order: None }), ("TSBooleanKeyword", StructDetails { field_order: None }), + ("ImportAttribute", StructDetails { field_order: None }), + ("Error", StructDetails { field_order: Some(&[3, 0, 1, 2]) }), + ("RawTransferData", StructDetails { field_order: None }), + ("RegExpFlags", StructDetails { field_order: None }), + ("RegExpLiteral", StructDetails { field_order: None }), + ("Span", StructDetails { field_order: None }), + ("LogicalExpression", StructDetails { field_order: Some(&[0, 1, 3, 2]) }), ("RegExpPattern", StructDetails { field_order: None }), - ("TSNamedTupleMember", StructDetails { field_order: None }), - ("TSNonNullExpression", StructDetails { field_order: None }), + ("ForOfStatement", StructDetails { field_order: Some(&[0, 5, 1, 2, 3, 4]) }), + ("FunctionBody", StructDetails { field_order: None }), + ("BinaryExpression", StructDetails { field_order: Some(&[0, 1, 3, 2]) }), + ("Character", StructDetails { field_order: Some(&[0, 2, 1]) }), + ("TryStatement", StructDetails { field_order: None }), + ("TSThisType", StructDetails { field_order: None }), + ("SequenceExpression", StructDetails { field_order: None }), + ("SwitchCase", StructDetails { field_order: None }), + ("PrivateFieldExpression", StructDetails { field_order: None }), ("StaticImport", StructDetails { field_order: None }), - ("TSInterfaceBody", StructDetails { field_order: None }), - ("IfStatement", StructDetails { field_order: None }), - ("ReferenceId", StructDetails { field_order: None }), - ("TSInterfaceHeritage", StructDetails { field_order: None }), - ("ForInStatement", StructDetails { field_order: None }), - ("TSImportEqualsDeclaration", StructDetails { field_order: None }), - ("TSExternalModuleReference", StructDetails { field_order: None }), - ("Modifiers", StructDetails { field_order: None }), - ("TemplateElementValue", StructDetails { field_order: None }), - ("JSXNamespacedName", StructDetails { field_order: None }), - ("TSThisParameter", StructDetails { field_order: None }), + ("AssignmentTargetPropertyProperty", StructDetails { field_order: None }), ("UnaryExpression", StructDetails { field_order: Some(&[0, 2, 1]) }), - ("Comment", StructDetails { field_order: None }), - ("StaticExport", StructDetails { field_order: None }), - ("ExportEntry", StructDetails { field_order: Some(&[1, 0, 2, 3, 4, 5, 6]) }), + ("JSXClosingFragment", StructDetails { field_order: None }), ], }; diff --git a/crates/oxc_syntax/src/comment_node.rs b/crates/oxc_syntax/src/comment_node.rs new file mode 100644 index 0000000000000..04dfe8f308ecb --- /dev/null +++ b/crates/oxc_syntax/src/comment_node.rs @@ -0,0 +1,60 @@ +//! Comment Node ID. + +use oxc_index::Idx; +#[cfg(feature = "serialize")] +use serde::{Serialize, Serializer}; + +use oxc_allocator::{Allocator, CloneIn, Dummy}; +use oxc_ast_macros::ast; + +/// Comment Node ID. +#[ast] +#[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)] +#[generate_derive(CloneIn)] +#[clone_in(default)] +#[content_eq(skip)] +#[estree(skip)] +pub struct CommentNodeId(u32); + +impl CommentNodeId { + /// Mock comment node ID. + /// + /// This is used for synthetically-created AST nodes, among other things. + pub const DUMMY: Self = CommentNodeId::new(0); + + /// Create `CommentNodeId` from `u32`. + pub const fn new(idx: u32) -> Self { + Self(idx) + } +} + +impl Idx for CommentNodeId { + fn from_usize(idx: usize) -> Self { + Self(u32::try_from(idx).expect("`idx` is greater than `u32::MAX`")) + } + + fn index(self) -> usize { + self.0 as usize + } +} + +impl Default for CommentNodeId { + #[inline] + fn default() -> Self { + Self::DUMMY + } +} + +impl<'a> Dummy<'a> for CommentNodeId { + #[inline] + fn dummy(_allocator: &'a Allocator) -> Self { + Self::DUMMY + } +} + +#[cfg(feature = "serialize")] +impl Serialize for CommentNodeId { + fn serialize(&self, serializer: S) -> Result { + serializer.serialize_u32(self.0) + } +} diff --git a/crates/oxc_syntax/src/generated/assert_layouts.rs b/crates/oxc_syntax/src/generated/assert_layouts.rs index 0b05a017c4bf9..0f0d589ebca44 100644 --- a/crates/oxc_syntax/src/generated/assert_layouts.rs +++ b/crates/oxc_syntax/src/generated/assert_layouts.rs @@ -7,7 +7,9 @@ use std::mem::{align_of, offset_of, size_of}; use nonmax::NonMaxU32; -use crate::{module_record::*, number::*, operator::*, reference::*, scope::*, symbol::*}; +use crate::{ + comment_node::*, module_record::*, number::*, operator::*, reference::*, scope::*, symbol::*, +}; #[cfg(target_pointer_width = "64")] const _: () = { @@ -15,6 +17,10 @@ const _: () = { assert!(size_of::() == 4); assert!(align_of::() == 4); + // Padding: 0 bytes + assert!(size_of::() == 4); + assert!(align_of::() == 4); + // Padding: 0 bytes assert!(size_of::() == 24); assert!(align_of::() == 8); @@ -99,6 +105,10 @@ const _: () = { assert!(size_of::() == 4); assert!(align_of::() == 4); + // Padding: 0 bytes + assert!(size_of::() == 4); + assert!(align_of::() == 4); + // Padding: 0 bytes assert!(size_of::() == 16); assert!(align_of::() == 4); diff --git a/crates/oxc_syntax/src/generated/derive_clone_in.rs b/crates/oxc_syntax/src/generated/derive_clone_in.rs index ccdca60d85533..28beddf6214de 100644 --- a/crates/oxc_syntax/src/generated/derive_clone_in.rs +++ b/crates/oxc_syntax/src/generated/derive_clone_in.rs @@ -5,9 +5,22 @@ use oxc_allocator::{Allocator, CloneIn}; +use crate::comment_node::*; use crate::number::*; use crate::operator::*; +impl<'new_alloc> CloneIn<'new_alloc> for CommentNodeId { + type Cloned = CommentNodeId; + + fn clone_in(&self, allocator: &'new_alloc Allocator) -> Self::Cloned { + Default::default() + } + + fn clone_in_with_semantic_ids(&self, allocator: &'new_alloc Allocator) -> Self::Cloned { + Default::default() + } +} + impl<'new_alloc> CloneIn<'new_alloc> for NumberBase { type Cloned = NumberBase; diff --git a/crates/oxc_syntax/src/lib.rs b/crates/oxc_syntax/src/lib.rs index ac60130701e6f..7bef3d1aa996d 100644 --- a/crates/oxc_syntax/src/lib.rs +++ b/crates/oxc_syntax/src/lib.rs @@ -6,6 +6,7 @@ use std::num::NonZeroU32; use oxc_ast_macros::ast; pub mod class; +pub mod comment_node; pub mod es_target; pub mod identifier; pub mod keyword; diff --git a/crates/oxc_traverse/scripts/lib/ancestor.mjs b/crates/oxc_traverse/scripts/lib/ancestor.mjs index 91602f490f19c..ad36755d5060a 100644 --- a/crates/oxc_traverse/scripts/lib/ancestor.mjs +++ b/crates/oxc_traverse/scripts/lib/ancestor.mjs @@ -112,6 +112,7 @@ export default function generateAncestorsCode(types) { } return ` + #![allow(unused_imports)] #![expect( clippy::cast_ptr_alignment, clippy::elidable_lifetime_names, @@ -124,7 +125,7 @@ export default function generateAncestorsCode(types) { use oxc_allocator::{Address, Box, GetAddress, Vec}; use oxc_ast::ast::*; - use oxc_syntax::scope::ScopeId; + use oxc_syntax::{comment_node::CommentNodeId, scope::ScopeId}; /// Type of [\`Ancestor\`]. /// Used in [\`crate::TraverseCtx::retag_stack\`]. diff --git a/crates/oxc_traverse/src/generated/ancestor.rs b/crates/oxc_traverse/src/generated/ancestor.rs index 45c5decf8e65c..f2e215c579ee4 100644 --- a/crates/oxc_traverse/src/generated/ancestor.rs +++ b/crates/oxc_traverse/src/generated/ancestor.rs @@ -2,6 +2,7 @@ // Generated by `oxc_traverse/scripts/build.mjs`. // To alter this generated file you have to edit the codegen. +#![allow(unused_imports)] #![expect( clippy::cast_ptr_alignment, clippy::elidable_lifetime_names, @@ -14,7 +15,7 @@ use std::{cell::Cell, marker::PhantomData, mem::offset_of}; use oxc_allocator::{Address, Box, GetAddress, Vec}; use oxc_ast::ast::*; -use oxc_syntax::scope::ScopeId; +use oxc_syntax::{comment_node::CommentNodeId, scope::ScopeId}; /// Type of [`Ancestor`]. /// Used in [`crate::TraverseCtx::retag_stack`]. diff --git a/tasks/ast_tools/src/generators/assert_layouts.rs b/tasks/ast_tools/src/generators/assert_layouts.rs index 2a92c6079be94..dbc227bc18933 100644 --- a/tasks/ast_tools/src/generators/assert_layouts.rs +++ b/tasks/ast_tools/src/generators/assert_layouts.rs @@ -620,7 +620,7 @@ fn template(krate: &str, assertions_64: &TokenStream, assertions_32: &TokenStrea use nonmax::NonMaxU32; ///@@line_break - use crate::{module_record::*, number::*, operator::*, reference::*, scope::*, symbol::*}; + use crate::{comment_node::*, module_record::*, number::*, operator::*, reference::*, scope::*, symbol::*}; }, "napi/parser" => quote! { use crate::raw_transfer_types::*; diff --git a/tasks/ast_tools/src/generators/ast_builder.rs b/tasks/ast_tools/src/generators/ast_builder.rs index ec2e35438919b..9fe6377e4b98e 100644 --- a/tasks/ast_tools/src/generators/ast_builder.rs +++ b/tasks/ast_tools/src/generators/ast_builder.rs @@ -8,7 +8,7 @@ use syn::Ident; use crate::{ AST_CRATE_PATH, Codegen, Generator, Result, output::{Output, output_path}, - schema::{Def, EnumDef, FieldDef, Schema, StructDef, TypeDef, VariantDef}, + schema::{Def, EnumDef, FieldDef, Schema, StructDef, TypeDef, TypeId, VariantDef}, utils::{create_safe_ident, is_reserved_name}, }; @@ -52,6 +52,8 @@ impl Generator for AstBuilderGenerator { /// Generate `AstBuilder`. fn generate(&self, schema: &Schema, _codegen: &Codegen) -> Output { + let comment_node_id_type_id = schema.type_names["CommentNodeId"]; + let fns = schema .types .iter() @@ -62,13 +64,14 @@ impl Generator for AstBuilderGenerator { TypeDef::Enum(enum_def) => !enum_def.builder.skip && enum_def.visit.has_visitor(), _ => false, }) - .map(|type_def| generate_builder_methods(type_def, schema)) + .map(|type_def| generate_builder_methods(type_def, comment_node_id_type_id, schema)) .collect::(); let output = quote! { //! AST node factories //!@@line_break + #![allow(unused_imports)] #![expect( clippy::default_trait_access, clippy::inconsistent_struct_constructor, @@ -80,7 +83,12 @@ impl Generator for AstBuilderGenerator { ///@@line_break use oxc_allocator::{Allocator, Box, IntoIn, Vec}; - use oxc_syntax::{scope::ScopeId, symbol::SymbolId, reference::ReferenceId}; + use oxc_syntax::{ + comment_node::CommentNodeId, + scope::ScopeId, + symbol::SymbolId, + reference::ReferenceId + }; ///@@line_break use crate::ast::*; @@ -116,6 +124,8 @@ struct Param<'d> { fn_param: TokenStream, /// `true` if is a default param (semantic ID) is_default: bool, + /// `true` if is `CommentNodeId` field + is_comment_node_id: bool, /// * `None` if param is not generic. /// * `Some(GenericType::Into)` if is generic and uses `Into` /// e.g. `name: A where A: Into>`. @@ -132,10 +142,18 @@ enum GenericType { } /// Generate builder methods for a type. -fn generate_builder_methods(type_def: &TypeDef, schema: &Schema) -> TokenStream { +fn generate_builder_methods( + type_def: &TypeDef, + comment_node_id_type_id: TypeId, + schema: &Schema, +) -> TokenStream { match type_def { - TypeDef::Struct(struct_def) => generate_builder_methods_for_struct(struct_def, schema), - TypeDef::Enum(enum_def) => generate_builder_methods_for_enum(enum_def, schema), + TypeDef::Struct(struct_def) => { + generate_builder_methods_for_struct(struct_def, comment_node_id_type_id, schema) + } + TypeDef::Enum(enum_def) => { + generate_builder_methods_for_enum(enum_def, comment_node_id_type_id, schema) + } _ => unreachable!(), } } @@ -145,9 +163,13 @@ fn generate_builder_methods(type_def: &TypeDef, schema: &Schema) -> TokenStream /// Generates two builder methods: /// 1. To build an owned type e.g. `boolean_literal`. /// 2. To build a boxed type e.g. `alloc_boolean_literal`. -fn generate_builder_methods_for_struct(struct_def: &StructDef, schema: &Schema) -> TokenStream { +fn generate_builder_methods_for_struct( + struct_def: &StructDef, + comment_node_id_type_id: TypeId, + schema: &Schema, +) -> TokenStream { let (mut params, generic_params, where_clause, has_default_fields) = - get_struct_params(struct_def, schema); + get_struct_params(struct_def, comment_node_id_type_id, schema); let (fn_params, fields) = get_struct_fn_params_and_fields(¶ms, true, schema); let (fn_name_postfix, doc_postfix) = if has_default_fields { @@ -217,7 +239,7 @@ fn generate_builder_methods_for_struct_impl( let struct_ident = struct_def.ident(); let struct_ty = struct_def.ty(schema); - let args = params.iter().map(|param| ¶m.ident); + let args = params.iter().filter(|param| !param.is_comment_node_id).map(|param| ¶m.ident); let mut fn_name_base = struct_def.snake_name(); if !fn_name_postfix.is_empty() { @@ -295,6 +317,7 @@ fn generate_builder_methods_for_struct_impl( /// ``` fn get_struct_params<'s>( struct_def: &'s StructDef, + comment_node_id_type_id: TypeId, schema: &'s Schema, ) -> ( Vec>, // Params @@ -364,7 +387,15 @@ fn get_struct_params<'s>( let field_ident = field.ident(); let fn_param = quote!( #field_ident: #fn_param_ty ); - Param { field, ident: field_ident, fn_param, is_default, generic_type } + let is_comment_node_id = field.type_id == comment_node_id_type_id; + Param { + field, + ident: field_ident, + fn_param, + is_default, + is_comment_node_id, + generic_type, + } }) .collect(); @@ -414,6 +445,9 @@ fn get_struct_fn_params_and_fields( fields.push(quote!( #param_ident: Default::default() )); return None; + } else if param.is_comment_node_id { + fields.push(quote!( #param_ident: self.get_comment_node_id() )); + return None; } let field = match param.generic_type { @@ -437,11 +471,22 @@ fn get_struct_fn_params_and_fields( /// Generate builder methods for an enum. /// /// Generates a builder method for every variant of the enum (not including inherited variants). -fn generate_builder_methods_for_enum(enum_def: &EnumDef, schema: &Schema) -> TokenStream { +fn generate_builder_methods_for_enum( + enum_def: &EnumDef, + comment_node_id_type_id: TypeId, + schema: &Schema, +) -> TokenStream { enum_def .variants .iter() - .map(|variant| generate_builder_method_for_enum_variant(enum_def, variant, schema)) + .map(|variant| { + generate_builder_method_for_enum_variant( + enum_def, + variant, + comment_node_id_type_id, + schema, + ) + }) .collect() } @@ -449,6 +494,7 @@ fn generate_builder_methods_for_enum(enum_def: &EnumDef, schema: &Schema) -> Tok fn generate_builder_method_for_enum_variant( enum_def: &EnumDef, variant: &VariantDef, + comment_node_id_type_id: TypeId, schema: &Schema, ) -> TokenStream { let mut variant_type = variant.field_type(schema).unwrap(); @@ -460,7 +506,7 @@ fn generate_builder_method_for_enum_variant( let TypeDef::Struct(struct_def) = variant_type else { panic!("Unsupported!") }; let (mut params, generic_params, where_clause, has_default_fields) = - get_struct_params(struct_def, schema); + get_struct_params(struct_def, comment_node_id_type_id, schema); let fn_name = enum_variant_builder_name(enum_def, variant); let variant_ident = variant.ident(); @@ -524,8 +570,9 @@ fn generate_builder_method_for_enum_variant_impl( is_boxed: bool, ) -> TokenStream { let fn_name = format_ident!("{}{}", fn_name, fn_name_postfix); - let fn_params = params.iter().map(|param| ¶m.fn_param); - let args = params.iter().map(|param| ¶m.ident); + let fn_params = + params.iter().filter(|param| !param.is_comment_node_id).map(|param| ¶m.fn_param); + let args = params.iter().filter(|param| !param.is_comment_node_id).map(|param| ¶m.ident); let enum_ident = enum_def.ident(); let enum_ty = enum_def.ty(schema); @@ -621,7 +668,7 @@ fn generate_doc_comment_for_params(params: &[Param]) -> TokenStream { return quote!(); } - let lines = params.iter().map(|param| { + let lines = params.iter().filter(|param| !param.is_comment_node_id).map(|param| { let field = param.field; let field_name = field.name(); let field_comment = if let Some(field_comment) = field.doc_comment.as_deref() { diff --git a/tasks/ast_tools/src/main.rs b/tasks/ast_tools/src/main.rs index 15bb2fd29a937..e89703a63a308 100644 --- a/tasks/ast_tools/src/main.rs +++ b/tasks/ast_tools/src/main.rs @@ -219,6 +219,7 @@ static SOURCE_PATHS: &[&str] = &[ "crates/oxc_ast/src/serialize/jsx.rs", "crates/oxc_ast/src/serialize/ts.rs", "crates/oxc_syntax/src/lib.rs", + "crates/oxc_syntax/src/comment_node.rs", "crates/oxc_syntax/src/module_record.rs", "crates/oxc_syntax/src/number.rs", "crates/oxc_syntax/src/operator.rs",