Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 33 additions & 41 deletions crates/oxc_linter/src/rules/react/only_export_components.rs
Original file line number Diff line number Diff line change
Expand Up @@ -614,8 +614,7 @@ impl OnlyExportComponents {
&& let Some(init_expr) = init
{
let expr_without_ts = Self::skip_ts_expression(init_expr);
let expr_type = Self::get_expression_type(expr_without_ts);
if CONSTANT_EXPORT_EXPRESSIONS.contains(expr_type) {
if is_constant_export_expression(expr_without_ts) {
return ExportType::Allowed;
}
}
Expand Down Expand Up @@ -643,8 +642,7 @@ impl OnlyExportComponents {
}

let expr_without_ts = Self::skip_ts_expression(init_expr);
let expr_type = Self::get_expression_type(expr_without_ts);
if NOT_REACT_COMPONENT_EXPRESSION.contains(expr_type) {
if is_not_react_component_expression(expr_without_ts) {
return ExportType::NonComponent(span);
}
}
Expand All @@ -656,26 +654,6 @@ impl OnlyExportComponents {
}
}

fn get_expression_type(expr: &Expression<'_>) -> &'static str {
match expr {
Expression::BooleanLiteral(_)
| Expression::NumericLiteral(_)
| Expression::StringLiteral(_) => "Literal",
Expression::UnaryExpression(_) => "UnaryExpression",
Expression::TemplateLiteral(_) => "TemplateLiteral",
Expression::BinaryExpression(_) => "BinaryExpression",
Expression::ArrayExpression(_) => "ArrayExpression",
Expression::AwaitExpression(_) => "AwaitExpression",
Expression::ChainExpression(_) => "ChainExpression",
Expression::ConditionalExpression(_) => "ConditionalExpression",
Expression::LogicalExpression(_) => "LogicalExpression",
Expression::ObjectExpression(_) => "ObjectExpression",
Expression::ThisExpression(_) => "ThisExpression",
Expression::UpdateExpression(_) => "UpdateExpression",
_ => "",
}
}

fn is_hoc_call_expression(&self, call_expr: &CallExpression) -> bool {
let is_callee_hoc = match &call_expr.callee {
Expression::CallExpression(inner_call) => {
Expand Down Expand Up @@ -716,23 +694,37 @@ impl OnlyExportComponents {
}
}

const CONSTANT_EXPORT_EXPRESSIONS: phf::Set<&'static str> =
phf::phf_set!["Literal", "UnaryExpression", "TemplateLiteral", "BinaryExpression"];

const NOT_REACT_COMPONENT_EXPRESSION: phf::Set<&'static str> = phf::phf_set![
"ArrayExpression",
"AwaitExpression",
"BinaryExpression",
"ChainExpression",
"ConditionalExpression",
"Literal",
"LogicalExpression",
"ObjectExpression",
"TemplateLiteral",
"ThisExpression",
"UnaryExpression",
"UpdateExpression"
];
fn is_constant_export_expression(expr: &Expression) -> bool {
matches!(
expr,
Expression::BooleanLiteral(_)
| Expression::NumericLiteral(_)
| Expression::StringLiteral(_)
| Expression::UnaryExpression(_)
| Expression::TemplateLiteral(_)
| Expression::BinaryExpression(_)
)
}

fn is_not_react_component_expression(expr: &Expression) -> bool {
matches!(
expr,
Expression::ArrayExpression(_)
| Expression::AwaitExpression(_)
| Expression::BinaryExpression(_)
| Expression::ChainExpression(_)
| Expression::ConditionalExpression(_)
| Expression::BooleanLiteral(_)
| Expression::NumericLiteral(_)
| Expression::StringLiteral(_)
| Expression::LogicalExpression(_)
| Expression::ObjectExpression(_)
| Expression::TemplateLiteral(_)
| Expression::ThisExpression(_)
| Expression::UnaryExpression(_)
| Expression::UpdateExpression(_)
)
}

#[derive(Debug, Default, Clone)]
struct ExportAnalysis {
Expand Down
Loading