From 3abd3017efd23fdb005577fd9e23cff8e2d12ee3 Mon Sep 17 00:00:00 2001 From: Cameron Clark Date: Fri, 23 Aug 2024 21:40:16 +0100 Subject: [PATCH] feat(linter) add fixer to `prefer-date-now` --- .../src/rules/unicorn/prefer_date_now.rs | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/crates/oxc_linter/src/rules/unicorn/prefer_date_now.rs b/crates/oxc_linter/src/rules/unicorn/prefer_date_now.rs index 6b09bf679bfa1..d1c10e78cce2a 100644 --- a/crates/oxc_linter/src/rules/unicorn/prefer_date_now.rs +++ b/crates/oxc_linter/src/rules/unicorn/prefer_date_now.rs @@ -51,7 +51,7 @@ declare_oxc_lint!( /// ``` PreferDateNow, pedantic, - pending + fix ); impl Rule for PreferDateNow { @@ -67,10 +67,13 @@ impl Rule for PreferDateNow { && matches!(member_expr.static_property_name(), Some("getTime" | "valueOf")) && is_new_date(member_expr.object().without_parenthesized()) { - 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()"), + ); } } @@ -83,9 +86,10 @@ impl Rule for PreferDateNow { 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, - )); + 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) => { @@ -217,5 +223,12 @@ 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()"), + ]; + + Tester::new(PreferDateNow::NAME, pass, fail).expect_fix(fix).test_and_snapshot(); }