oxc_transformer/plugins/
mod.rs1mod options;
2mod styled_components;
3mod tagged_template_transform;
4
5pub use options::PluginsOptions;
6use oxc_ast::ast::*;
7use oxc_traverse::Traverse;
8pub use styled_components::StyledComponentsOptions;
9
10use crate::{
11 context::TraverseCtx,
12 plugins::{
13 styled_components::StyledComponents, tagged_template_transform::TaggedTemplateTransform,
14 },
15 state::TransformState,
16};
17
18pub struct Plugins<'a> {
19 styled_components: Option<StyledComponents<'a>>,
20 tagged_template_escape: Option<TaggedTemplateTransform>,
21}
22
23impl Plugins<'_> {
24 pub fn new(options: PluginsOptions) -> Self {
25 Self {
26 styled_components: options.styled_components.map(StyledComponents::new),
27 tagged_template_escape: if options.tagged_template_transform {
28 Some(TaggedTemplateTransform::new())
29 } else {
30 None
31 },
32 }
33 }
34}
35
36impl<'a> Traverse<'a, TransformState<'a>> for Plugins<'a> {
37 fn enter_program(&mut self, node: &mut Program<'a>, ctx: &mut TraverseCtx<'a>) {
38 if let Some(styled_components) = &mut self.styled_components {
39 styled_components.enter_program(node, ctx);
40 }
41 }
42
43 fn enter_variable_declarator(
44 &mut self,
45 node: &mut VariableDeclarator<'a>,
46 ctx: &mut TraverseCtx<'a>,
47 ) {
48 if let Some(styled_components) = &mut self.styled_components {
49 styled_components.enter_variable_declarator(node, ctx);
50 }
51 }
52
53 fn enter_expression(
54 &mut self,
55 node: &mut Expression<'a>,
56 ctx: &mut oxc_traverse::TraverseCtx<'a, TransformState<'a>>,
57 ) {
58 if let Some(styled_components) = &mut self.styled_components {
59 styled_components.enter_expression(node, ctx);
60 }
61 if let Some(tagged_template_escape) = &mut self.tagged_template_escape {
62 tagged_template_escape.enter_expression(node, ctx);
63 }
64 }
65
66 fn enter_call_expression(&mut self, node: &mut CallExpression<'a>, ctx: &mut TraverseCtx<'a>) {
67 if let Some(styled_components) = &mut self.styled_components {
68 styled_components.enter_call_expression(node, ctx);
69 }
70 }
71}