oxc_syntax_operations/
prop_name.rs1use oxc_ast::ast::{
2 ClassElement, MethodDefinition, ObjectProperty, ObjectPropertyKind, PropertyDefinition,
3 PropertyKey, PropertyKind,
4};
5use oxc_span::Span;
6
7pub trait PropName {
9 fn prop_name(&self) -> Option<(&str, Span)>;
10}
11
12impl<'a> PropName for ObjectPropertyKind<'a> {
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<'a> PropName for ObjectProperty<'a> {
22 fn prop_name(&self) -> Option<(&str, Span)> {
23 if self.kind != PropertyKind::Init || self.method || self.shorthand || self.computed {
24 return None;
25 }
26 self.key.prop_name()
27 }
28}
29
30impl<'a> PropName for PropertyKey<'a> {
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<'a> PropName for ClassElement<'a> {
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<'a> PropName for MethodDefinition<'a> {
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<'a> PropName for PropertyDefinition<'a> {
61 fn prop_name(&self) -> Option<(&str, Span)> {
62 if self.computed {
63 return None;
64 }
65 self.key.prop_name()
66 }
67}