diff --git a/Cargo.lock b/Cargo.lock index 72ccf81b36cf8..3d7f21695e83a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1831,6 +1831,7 @@ dependencies = [ "oxc_allocator", "oxc_ast", "oxc_diagnostics", + "oxc_ecmascript", "oxc_regular_expression", "oxc_span", "oxc_syntax", diff --git a/crates/oxc_parser/Cargo.toml b/crates/oxc_parser/Cargo.toml index 7fc437e63e070..55cc1ce6f8c1b 100644 --- a/crates/oxc_parser/Cargo.toml +++ b/crates/oxc_parser/Cargo.toml @@ -22,6 +22,7 @@ doctest = false oxc_allocator = { workspace = true } oxc_ast = { workspace = true } oxc_diagnostics = { workspace = true } +oxc_ecmascript = { workspace = true } oxc_regular_expression = { workspace = true } oxc_span = { workspace = true } oxc_syntax = { workspace = true } diff --git a/crates/oxc_parser/src/js/class.rs b/crates/oxc_parser/src/js/class.rs index d18cc1d1e5b1c..45a1ebe484d34 100644 --- a/crates/oxc_parser/src/js/class.rs +++ b/crates/oxc_parser/src/js/class.rs @@ -1,6 +1,7 @@ use oxc_allocator::{Box, Vec}; use oxc_ast::ast::*; use oxc_diagnostics::Result; +use oxc_ecmascript::PropName; use oxc_span::{GetSpan, Span}; use crate::{ @@ -15,15 +16,6 @@ type Extends<'a> = type Implements<'a> = Vec<'a, TSClassImplements<'a>>; -fn prop_name<'a>(key: &'a PropertyKey<'a>) -> Option<(&'a str, Span)> { - match key { - PropertyKey::StaticIdentifier(ident) => Some((&ident.name, ident.span)), - PropertyKey::Identifier(ident) => Some((&ident.name, ident.span)), - PropertyKey::StringLiteral(lit) => Some((&lit.value, lit.span)), - _ => None, - } -} - /// Section 15.7 Class Definitions impl<'a> ParserImpl<'a> { // `start_span` points at the start of all decoractors and `class` keyword. @@ -318,7 +310,7 @@ impl<'a> ParserImpl<'a> { .map(Some) } else if self.at(Kind::LParen) || self.at(Kind::LAngle) || r#async || generator { if !computed { - if let Some((name, span)) = prop_name(&key) { + if let Some((name, span)) = key.prop_name() { if r#static && name == "prototype" && !self.ctx.has_ambient() { self.error(diagnostics::static_prototype(span)); } @@ -357,7 +349,7 @@ impl<'a> ParserImpl<'a> { return Err(self.unexpected()); } if !computed { - if let Some((name, span)) = prop_name(&key) { + if let Some((name, span)) = key.prop_name() { if name == "constructor" { self.error(diagnostics::field_constructor(span)); } @@ -410,7 +402,7 @@ impl<'a> ParserImpl<'a> { ) -> Result> { let kind = if !r#static && !computed - && prop_name(&key).map_or(false, |(name, _)| name == "constructor") + && key.prop_name().map_or(false, |(name, _)| name == "constructor") { MethodDefinitionKind::Constructor } else {