oxc_ecmascript/
prop_name.rs1use oxc_ast::ast::{
2 ClassElement, MethodDefinition, ObjectProperty, ObjectPropertyKind, PropertyDefinition,
3 PropertyKey,
4};
5use oxc_span::Span;
6
7pub trait PropName {
9 fn prop_name(&self) -> Option<(&str, Span)>;
10}
11
12impl PropName for ObjectPropertyKind<'_> {
13 fn prop_name(&self) -> Option<(&str, Span)> {
14 match self {
15 ObjectPropertyKind::ObjectProperty(prop) => prop.prop_name(),
16 ObjectPropertyKind::SpreadProperty(_) => None,
17 }
18 }
19}
20
21impl PropName for ObjectProperty<'_> {
22 fn prop_name(&self) -> Option<(&str, Span)> {
23 if self.shorthand || self.computed {
24 return None;
25 }
26 self.key.prop_name()
27 }
28}
29
30impl PropName for PropertyKey<'_> {
31 fn prop_name(&self) -> Option<(&str, Span)> {
32 match self {
33 PropertyKey::StaticIdentifier(ident) => Some((&ident.name, ident.span)),
34 PropertyKey::Identifier(ident) => Some((&ident.name, ident.span)),
35 PropertyKey::StringLiteral(lit) => Some((&lit.value, lit.span)),
36 _ => None,
37 }
38 }
39}
40
41impl PropName for ClassElement<'_> {
42 fn prop_name(&self) -> Option<(&str, Span)> {
43 match self {
44 ClassElement::MethodDefinition(def) => def.prop_name(),
45 ClassElement::PropertyDefinition(def) => def.prop_name(),
46 _ => None,
47 }
48 }
49}
50
51impl PropName for MethodDefinition<'_> {
52 fn prop_name(&self) -> Option<(&str, Span)> {
53 if self.computed {
54 return None;
55 }
56 self.key.prop_name()
57 }
58}
59
60impl PropName for PropertyDefinition<'_> {
61 fn prop_name(&self) -> Option<(&str, Span)> {
62 if self.computed {
63 return None;
64 }
65 self.key.prop_name()
66 }
67}