mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
feat(linter/unicorn): add fixer to prefer-date-now (#5147)
This commit is contained in:
parent
a58e44845f
commit
7ccde4b853
1 changed files with 34 additions and 14 deletions
|
|
@ -51,7 +51,7 @@ declare_oxc_lint!(
|
|||
/// ```
|
||||
PreferDateNow,
|
||||
pedantic,
|
||||
pending
|
||||
fix
|
||||
);
|
||||
|
||||
impl Rule for PreferDateNow {
|
||||
|
|
@ -60,17 +60,20 @@ impl Rule for PreferDateNow {
|
|||
AstKind::CallExpression(call_expr) => {
|
||||
// `new Date().{getTime,valueOf}()`
|
||||
if let Some(member_expr) =
|
||||
call_expr.callee.without_parenthesized().as_member_expression()
|
||||
call_expr.callee.get_inner_expression().as_member_expression()
|
||||
{
|
||||
if call_expr.arguments.is_empty()
|
||||
&& !member_expr.is_computed()
|
||||
&& matches!(member_expr.static_property_name(), Some("getTime" | "valueOf"))
|
||||
&& is_new_date(member_expr.object().without_parenthesized())
|
||||
&& is_new_date(member_expr.object().get_inner_expression())
|
||||
{
|
||||
ctx.diagnostic(prefer_date_now_over_methods(
|
||||
call_expr.span,
|
||||
member_expr.static_property_name().unwrap(),
|
||||
));
|
||||
ctx.diagnostic_with_fix(
|
||||
prefer_date_now_over_methods(
|
||||
call_expr.span,
|
||||
member_expr.static_property_name().unwrap(),
|
||||
),
|
||||
|fixer| fixer.replace(call_expr.span, "Date.now()"),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -82,10 +85,11 @@ impl Rule for PreferDateNow {
|
|||
if let Some(expr) =
|
||||
call_expr.arguments.first().and_then(Argument::as_expression)
|
||||
{
|
||||
if is_new_date(expr.without_parenthesized()) {
|
||||
ctx.diagnostic(prefer_date_now_over_number_date_object(
|
||||
call_expr.span,
|
||||
));
|
||||
if is_new_date(expr.get_inner_expression()) {
|
||||
ctx.diagnostic_with_fix(
|
||||
prefer_date_now_over_number_date_object(call_expr.span),
|
||||
|fixer| fixer.replace(call_expr.span, "Date.now()"),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -99,7 +103,9 @@ impl Rule for PreferDateNow {
|
|||
return;
|
||||
}
|
||||
if is_new_date(&unary_expr.argument) {
|
||||
ctx.diagnostic(prefer_date_now(unary_expr.argument.span()));
|
||||
ctx.diagnostic_with_fix(prefer_date_now(unary_expr.argument.span()), |fixer| {
|
||||
fixer.replace(unary_expr.span, "Date.now()")
|
||||
});
|
||||
}
|
||||
}
|
||||
AstKind::AssignmentExpression(assignment_expr) => {
|
||||
|
|
@ -143,7 +149,7 @@ impl Rule for PreferDateNow {
|
|||
}
|
||||
|
||||
fn is_new_date(expr: &Expression) -> bool {
|
||||
let Expression::NewExpression(new_expr) = expr.without_parenthesized() else {
|
||||
let Expression::NewExpression(new_expr) = expr.get_inner_expression() else {
|
||||
return false;
|
||||
};
|
||||
|
||||
|
|
@ -217,5 +223,19 @@ fn test() {
|
|||
r"function foo(){return-new Date}",
|
||||
];
|
||||
|
||||
Tester::new(PreferDateNow::NAME, pass, fail).test_and_snapshot();
|
||||
let fix = vec![
|
||||
("new Date().getTime()", "Date.now()"),
|
||||
("new Date().valueOf()", "Date.now()"),
|
||||
("Number(new Date())", "Date.now()"),
|
||||
("BigInt(new Date())", "Date.now()"),
|
||||
("(new Date() as number).getTime()", "Date.now()"),
|
||||
("(new Date().valueOf() as string)", "(Date.now() as string)"),
|
||||
("(new Date() ). getTime()", "Date.now()"),
|
||||
("(new Date().valueOf() )", "(Date.now() )"),
|
||||
("Number(new Date() )", "Date.now()"),
|
||||
("BigInt(new Date());", "Date.now();"),
|
||||
("BigInt(new Date());", "Date.now();"),
|
||||
];
|
||||
|
||||
Tester::new(PreferDateNow::NAME, pass, fail).expect_fix(fix).test_and_snapshot();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue