From 962ada06466441fbea42eb191ea60cf3f8a178cb Mon Sep 17 00:00:00 2001 From: Yuji Sugiura Date: Wed, 7 May 2025 14:06:49 +0900 Subject: [PATCH 1/6] fix(regular_expression): Omit regex::`Modifier` AST node from `Node` union TS type definition --- crates/oxc_regular_expression/src/ast.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/oxc_regular_expression/src/ast.rs b/crates/oxc_regular_expression/src/ast.rs index f6102d4bd55a1..9072a899af8b2 100644 --- a/crates/oxc_regular_expression/src/ast.rs +++ b/crates/oxc_regular_expression/src/ast.rs @@ -326,6 +326,7 @@ pub struct Modifiers { #[ast] #[derive(Debug)] #[generate_derive(CloneIn, ContentEq, ESTree)] +#[estree(no_type)] pub struct Modifier { pub ignore_case: bool, pub multiline: bool, From aca42e0ef97ae7a9af77f4503abf3a87c2c8b756 Mon Sep 17 00:00:00 2001 From: Yuji Sugiura Date: Wed, 7 May 2025 14:08:03 +0900 Subject: [PATCH 2/6] Fix up ast_impl --- crates/oxc_regular_expression/src/ast.rs | 36 +---------------- .../src/ast_impl/mod.rs | 1 + .../src/ast_impl/span.rs | 40 +++++++++++++++++++ 3 files changed, 42 insertions(+), 35 deletions(-) create mode 100644 crates/oxc_regular_expression/src/ast_impl/span.rs diff --git a/crates/oxc_regular_expression/src/ast.rs b/crates/oxc_regular_expression/src/ast.rs index 9072a899af8b2..f01a7d9dc1a03 100644 --- a/crates/oxc_regular_expression/src/ast.rs +++ b/crates/oxc_regular_expression/src/ast.rs @@ -1,7 +1,7 @@ use oxc_allocator::{Box, CloneIn, GetAddress, Vec}; use oxc_ast_macros::ast; use oxc_estree::ESTree; -use oxc_span::{Atom, ContentEq, GetSpan, Span}; +use oxc_span::{Atom, ContentEq, Span}; /// The root of the `PatternParser` result. #[ast] @@ -52,26 +52,6 @@ pub enum Term<'a> { NamedReference(Box<'a, NamedReference<'a>>) = 11, } -impl GetSpan for Term<'_> { - #[inline] - fn span(&self) -> Span { - match self { - Term::BoundaryAssertion(it) => it.span, - Term::LookAroundAssertion(it) => it.span, - Term::Quantifier(it) => it.span, - Term::Character(it) => it.span, - Term::Dot(it) => it.span, - Term::CharacterClassEscape(it) => it.span, - Term::UnicodePropertyEscape(it) => it.span, - Term::CharacterClass(it) => it.span, - Term::CapturingGroup(it) => it.span, - Term::IgnoreGroup(it) => it.span, - Term::IndexedReference(it) => it.span, - Term::NamedReference(it) => it.span, - } - } -} - /// Simple form of assertion. /// e.g. `^`, `$`, `\b`, `\B` #[ast] @@ -241,20 +221,6 @@ pub enum CharacterClassContents<'a> { ClassStringDisjunction(Box<'a, ClassStringDisjunction<'a>>) = 5, } -impl GetSpan for CharacterClassContents<'_> { - #[inline] - fn span(&self) -> Span { - match self { - CharacterClassContents::CharacterClassRange(it) => it.span, - CharacterClassContents::CharacterClassEscape(it) => it.span, - CharacterClassContents::UnicodePropertyEscape(it) => it.span, - CharacterClassContents::Character(it) => it.span, - CharacterClassContents::NestedCharacterClass(it) => it.span, - CharacterClassContents::ClassStringDisjunction(it) => it.span, - } - } -} - /// `-` separated range of characters. /// e.g. `a-z`, `A-Z`, `0-9` #[ast] diff --git a/crates/oxc_regular_expression/src/ast_impl/mod.rs b/crates/oxc_regular_expression/src/ast_impl/mod.rs index fda7eef43f68e..e3cc281a57648 100644 --- a/crates/oxc_regular_expression/src/ast_impl/mod.rs +++ b/crates/oxc_regular_expression/src/ast_impl/mod.rs @@ -1,2 +1,3 @@ mod display; +mod span; pub mod visit; diff --git a/crates/oxc_regular_expression/src/ast_impl/span.rs b/crates/oxc_regular_expression/src/ast_impl/span.rs new file mode 100644 index 0000000000000..f26e7d60ba103 --- /dev/null +++ b/crates/oxc_regular_expression/src/ast_impl/span.rs @@ -0,0 +1,40 @@ +// NOTE: For now, this file is implemented by hand for convenience. +// But like `oxc_ast`, this should be generated by `tasks/ast_tools` in the future. + +use oxc_span::{GetSpan, Span}; + +use crate::ast::{Term, CharacterClassContents}; + +impl GetSpan for Term<'_> { + #[inline] + fn span(&self) -> Span { + match self { + Term::BoundaryAssertion(it) => it.span, + Term::LookAroundAssertion(it) => it.span, + Term::Quantifier(it) => it.span, + Term::Character(it) => it.span, + Term::Dot(it) => it.span, + Term::CharacterClassEscape(it) => it.span, + Term::UnicodePropertyEscape(it) => it.span, + Term::CharacterClass(it) => it.span, + Term::CapturingGroup(it) => it.span, + Term::IgnoreGroup(it) => it.span, + Term::IndexedReference(it) => it.span, + Term::NamedReference(it) => it.span, + } + } +} + +impl GetSpan for CharacterClassContents<'_> { + #[inline] + fn span(&self) -> Span { + match self { + CharacterClassContents::CharacterClassRange(it) => it.span, + CharacterClassContents::CharacterClassEscape(it) => it.span, + CharacterClassContents::UnicodePropertyEscape(it) => it.span, + CharacterClassContents::Character(it) => it.span, + CharacterClassContents::NestedCharacterClass(it) => it.span, + CharacterClassContents::ClassStringDisjunction(it) => it.span, + } + } +} From ab180a3bbe1f1dac1d268bf81321d8091ac8469e Mon Sep 17 00:00:00 2001 From: Yuji Sugiura Date: Wed, 7 May 2025 14:08:08 +0900 Subject: [PATCH 3/6] Gen --- crates/oxc_regular_expression/src/generated/derive_estree.rs | 1 - napi/parser/generated/deserialize/js.js | 1 - napi/parser/generated/deserialize/ts.js | 1 - npm/oxc-types/types.d.ts | 2 -- 4 files changed, 5 deletions(-) diff --git a/crates/oxc_regular_expression/src/generated/derive_estree.rs b/crates/oxc_regular_expression/src/generated/derive_estree.rs index b94e13dd268b6..b6dbe6d5624d2 100644 --- a/crates/oxc_regular_expression/src/generated/derive_estree.rs +++ b/crates/oxc_regular_expression/src/generated/derive_estree.rs @@ -310,7 +310,6 @@ impl ESTree for Modifiers { impl ESTree for Modifier { fn serialize(&self, serializer: S) { let mut state = serializer.serialize_struct(); - state.serialize_field("type", &JsonSafeString("Modifier")); state.serialize_field("ignoreCase", &self.ignore_case); state.serialize_field("multiline", &self.multiline); state.serialize_field("sticky", &self.sticky); diff --git a/napi/parser/generated/deserialize/js.js b/napi/parser/generated/deserialize/js.js index 953764279cf6e..102b2b88f942b 100644 --- a/napi/parser/generated/deserialize/js.js +++ b/napi/parser/generated/deserialize/js.js @@ -2282,7 +2282,6 @@ function deserializeModifiers(pos) { function deserializeModifier(pos) { return { - type: 'Modifier', ignoreCase: deserializeBool(pos), multiline: deserializeBool(pos + 1), sticky: deserializeBool(pos + 2), diff --git a/napi/parser/generated/deserialize/ts.js b/napi/parser/generated/deserialize/ts.js index e022743ed6ea3..d81e381217c3b 100644 --- a/napi/parser/generated/deserialize/ts.js +++ b/napi/parser/generated/deserialize/ts.js @@ -2434,7 +2434,6 @@ function deserializeModifiers(pos) { function deserializeModifier(pos) { return { - type: 'Modifier', ignoreCase: deserializeBool(pos), multiline: deserializeBool(pos + 1), sticky: deserializeBool(pos + 2), diff --git a/npm/oxc-types/types.d.ts b/npm/oxc-types/types.d.ts index dbd6985ae9001..08c0348f5011d 100644 --- a/npm/oxc-types/types.d.ts +++ b/npm/oxc-types/types.d.ts @@ -1664,7 +1664,6 @@ export interface Modifiers extends Span { } export interface Modifier { - type: 'Modifier'; ignoreCase: boolean; multiline: boolean; sticky: boolean; @@ -1878,7 +1877,6 @@ export type Node = | CapturingGroup | IgnoreGroup | Modifiers - | Modifier | IndexedReference | NamedReference | FormalParameterRest; From ff5136453d62e35e759a69b603e4196b6c69bd10 Mon Sep 17 00:00:00 2001 From: Yuji Sugiura Date: Wed, 7 May 2025 19:20:50 +0900 Subject: [PATCH 4/6] Revert "fix(regular_expression): Omit regex::`Modifier` AST node from `Node` union TS type definition" This reverts commit 962ada06466441fbea42eb191ea60cf3f8a178cb. --- crates/oxc_regular_expression/src/ast.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/oxc_regular_expression/src/ast.rs b/crates/oxc_regular_expression/src/ast.rs index f01a7d9dc1a03..778ffb3fea30b 100644 --- a/crates/oxc_regular_expression/src/ast.rs +++ b/crates/oxc_regular_expression/src/ast.rs @@ -292,7 +292,6 @@ pub struct Modifiers { #[ast] #[derive(Debug)] #[generate_derive(CloneIn, ContentEq, ESTree)] -#[estree(no_type)] pub struct Modifier { pub ignore_case: bool, pub multiline: bool, From cf3aa090ba59c400ee1f9394762a82e7b0c3efa2 Mon Sep 17 00:00:00 2001 From: Yuji Sugiura Date: Wed, 7 May 2025 19:21:08 +0900 Subject: [PATCH 5/6] Gen --- crates/oxc_regular_expression/src/generated/derive_estree.rs | 1 + napi/parser/generated/deserialize/js.js | 1 + napi/parser/generated/deserialize/ts.js | 1 + npm/oxc-types/types.d.ts | 2 ++ 4 files changed, 5 insertions(+) diff --git a/crates/oxc_regular_expression/src/generated/derive_estree.rs b/crates/oxc_regular_expression/src/generated/derive_estree.rs index b6dbe6d5624d2..b94e13dd268b6 100644 --- a/crates/oxc_regular_expression/src/generated/derive_estree.rs +++ b/crates/oxc_regular_expression/src/generated/derive_estree.rs @@ -310,6 +310,7 @@ impl ESTree for Modifiers { impl ESTree for Modifier { fn serialize(&self, serializer: S) { let mut state = serializer.serialize_struct(); + state.serialize_field("type", &JsonSafeString("Modifier")); state.serialize_field("ignoreCase", &self.ignore_case); state.serialize_field("multiline", &self.multiline); state.serialize_field("sticky", &self.sticky); diff --git a/napi/parser/generated/deserialize/js.js b/napi/parser/generated/deserialize/js.js index 102b2b88f942b..953764279cf6e 100644 --- a/napi/parser/generated/deserialize/js.js +++ b/napi/parser/generated/deserialize/js.js @@ -2282,6 +2282,7 @@ function deserializeModifiers(pos) { function deserializeModifier(pos) { return { + type: 'Modifier', ignoreCase: deserializeBool(pos), multiline: deserializeBool(pos + 1), sticky: deserializeBool(pos + 2), diff --git a/napi/parser/generated/deserialize/ts.js b/napi/parser/generated/deserialize/ts.js index d81e381217c3b..e022743ed6ea3 100644 --- a/napi/parser/generated/deserialize/ts.js +++ b/napi/parser/generated/deserialize/ts.js @@ -2434,6 +2434,7 @@ function deserializeModifiers(pos) { function deserializeModifier(pos) { return { + type: 'Modifier', ignoreCase: deserializeBool(pos), multiline: deserializeBool(pos + 1), sticky: deserializeBool(pos + 2), diff --git a/npm/oxc-types/types.d.ts b/npm/oxc-types/types.d.ts index 08c0348f5011d..dbd6985ae9001 100644 --- a/npm/oxc-types/types.d.ts +++ b/npm/oxc-types/types.d.ts @@ -1664,6 +1664,7 @@ export interface Modifiers extends Span { } export interface Modifier { + type: 'Modifier'; ignoreCase: boolean; multiline: boolean; sticky: boolean; @@ -1877,6 +1878,7 @@ export type Node = | CapturingGroup | IgnoreGroup | Modifiers + | Modifier | IndexedReference | NamedReference | FormalParameterRest; From 52eb0b7b6f9362bc89da1030e3b6a76eb80ff28a Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 10:22:08 +0000 Subject: [PATCH 6/6] [autofix.ci] apply automated fixes --- crates/oxc_regular_expression/src/ast_impl/span.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/oxc_regular_expression/src/ast_impl/span.rs b/crates/oxc_regular_expression/src/ast_impl/span.rs index f26e7d60ba103..07aa2a83b07d7 100644 --- a/crates/oxc_regular_expression/src/ast_impl/span.rs +++ b/crates/oxc_regular_expression/src/ast_impl/span.rs @@ -3,7 +3,7 @@ use oxc_span::{GetSpan, Span}; -use crate::ast::{Term, CharacterClassContents}; +use crate::ast::{CharacterClassContents, Term}; impl GetSpan for Term<'_> { #[inline]