swc_ecma_quote_macros/ast/
enums.rs

1use swc_ecma_ast::*;
2use syn::parse_quote;
3
4macro_rules! impl_simple_enum {
5    ($E:ident, [ $($v:ident),* ]) => {
6        impl crate::ast::ToCode for $E {
7            fn to_code(&self, _: &crate::ctxt::Ctx) -> syn::Expr {
8                match self {
9                    $(
10                        $E::$v => parse_quote!(
11                             swc_core::ecma::ast::$E::$v
12                        ),
13                    )*
14                    #[cfg(swc_ast_unknown)]
15                    _ => panic!("unable to access unknown nodes"),
16                }
17            }
18        }
19    };
20}
21
22impl_simple_enum!(VarDeclKind, [Var, Const, Let]);
23impl_simple_enum!(UnaryOp, [Minus, Plus, Bang, Tilde, TypeOf, Void, Delete]);
24impl_simple_enum!(UpdateOp, [PlusPlus, MinusMinus]);
25impl_simple_enum!(
26    AssignOp,
27    [
28        Assign,
29        AddAssign,
30        SubAssign,
31        MulAssign,
32        DivAssign,
33        ModAssign,
34        LShiftAssign,
35        RShiftAssign,
36        ZeroFillRShiftAssign,
37        BitOrAssign,
38        BitXorAssign,
39        BitAndAssign,
40        ExpAssign,
41        AndAssign,
42        OrAssign,
43        NullishAssign
44    ]
45);
46impl_simple_enum!(
47    BinaryOp,
48    [
49        EqEq,
50        NotEq,
51        EqEqEq,
52        NotEqEq,
53        Lt,
54        LtEq,
55        Gt,
56        GtEq,
57        LShift,
58        RShift,
59        ZeroFillRShift,
60        Add,
61        Sub,
62        Mul,
63        Div,
64        Mod,
65        BitOr,
66        BitXor,
67        BitAnd,
68        LogicalOr,
69        LogicalAnd,
70        In,
71        InstanceOf,
72        Exp,
73        NullishCoalescing
74    ]
75);
76
77impl_simple_enum!(Accessibility, [Public, Protected, Private]);
78impl_simple_enum!(MethodKind, [Method, Getter, Setter]);
79impl_simple_enum!(MetaPropKind, [NewTarget, ImportMeta]);
80impl_simple_enum!(ImportPhase, [Defer, Source, Evaluation]);