Skip to content

Commit

Permalink
feat(linter): add fixer for eslint/no-eq-null (#4758)
Browse files Browse the repository at this point in the history
  • Loading branch information
heygsc authored Aug 8, 2024
1 parent 790c551 commit b20e335
Showing 1 changed file with 28 additions and 7 deletions.
35 changes: 28 additions & 7 deletions crates/oxc_linter/src/rules/eslint/no_eq_null.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::fmt::Debug;
use oxc_ast::AstKind;
use oxc_diagnostics::OxcDiagnostic;
use oxc_macros::declare_oxc_lint;
use oxc_span::Span;
use oxc_span::{GetSpan, Span};
use oxc_syntax::operator::BinaryOperator;

use crate::{context::LintContext, rule::Rule, AstNode};
Expand Down Expand Up @@ -31,7 +31,8 @@ declare_oxc_lint!(
/// }
/// ```
NoEqNull,
restriction
restriction,
fix_dangerous
);

impl Rule for NoEqNull {
Expand All @@ -49,10 +50,24 @@ impl Rule for NoEqNull {
& binary_expression.left.is_null()
& bad_operator
{
ctx.diagnostic(no_eq_null_diagnostic(Span::new(
binary_expression.span.start,
binary_expression.span.end,
)));
ctx.diagnostic_with_dangerous_fix(
no_eq_null_diagnostic(Span::new(
binary_expression.span.start,
binary_expression.span.end,
)),
|fixer| {
let start = binary_expression.left.span().end;
let end = binary_expression.right.span().start;
let span = Span::new(start, end);
let new_operator_str =
if binary_expression.operator == BinaryOperator::Equality {
" === "
} else {
" !== "
};
fixer.replace(span, new_operator_str)
},
);
}
}
}
Expand All @@ -66,5 +81,11 @@ fn test() {

let fail = vec!["if (x == null) { }", "if (x != null) { }", "do {} while (null == x)"];

Tester::new(NoEqNull::NAME, pass, fail).test_and_snapshot();
let fix = vec![
("if (x == null) { }", "if (x === null) { }"),
("if (x != null) { }", "if (x !== null) { }"),
("do {} while (null == x)", "do {} while (null === x)"),
];

Tester::new(NoEqNull::NAME, pass, fail).expect_fix(fix).test_and_snapshot();
}

0 comments on commit b20e335

Please sign in to comment.