Skip to content
Merged
Changes from 1 commit
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
Next Next commit
feat(linter): add fixer for eslint/for-direction
  • Loading branch information
heygsc authored Aug 6, 2024
commit 1eb752a73045839162785f7bec2ffaa5d572de9f
37 changes: 34 additions & 3 deletions crates/oxc_linter/src/rules/eslint/for_direction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ declare_oxc_lint!(
/// for (var = 10; i >= 0; i++) {}
/// ```
ForDirection,
correctness
correctness,
dangerous_fix
);

impl Rule for ForDirection {
Expand Down Expand Up @@ -66,7 +67,28 @@ impl Rule for ForDirection {
let update_direction = get_update_direction(update, counter);
if update_direction == wrong_direction {
let update_span = get_update_span(update);
ctx.diagnostic(for_direction_diagnostic(test.span, update_span));
let new_operator_str = match update {
Expression::UpdateExpression(update) => match update.operator {
UpdateOperator::Increment => "--",
UpdateOperator::Decrement => "++",
},
Expression::AssignmentExpression(update) => match update.operator {
AssignmentOperator::Addition => "-=",
AssignmentOperator::Subtraction => "+=",
_ => return,
},
_ => return,
};
ctx.diagnostic_with_dangerous_fix(
for_direction_diagnostic(test.span, update_span),
|fix| {
// ++ -- += -= are both 2 in length
let start = update_span.start + 1;
let end = update_span.start + 3;
let span: Span = Span::new(start, end);
fix.replace(span, new_operator_str)
},
);
}
}
}
Expand Down Expand Up @@ -224,5 +246,14 @@ fn test() {
("for(var i = 0; 10 > i; i-=1){}", None),
];

Tester::new(ForDirection::NAME, pass, fail).test_and_snapshot();
let fix = vec![
("for(var i = 0; i < 10; i--){}", "for(var i = 0; i < 10; i++){}", None),
("for(var i = 10; i > 0; i++){}", "for(var i = 10; i > 0; i--){}", None),
("for(var i = 0; i < 10; i-=1){}", "for(var i = 0; i < 10; i+=1){}", None),
("for(var i = 10; i > 0; i+=1){}", "for(var i = 10; i > 0; i-=1){}", None),
("for(var i = 0; i < 10; i+=-1){}", "for(var i = 0; i < 10; i-=-1){}", None),
("for(var i = 10; i > 0; i-=-1){}", "for(var i = 10; i > 0; i+=-1){}", None),
];

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