Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0e6a727

Browse filesBrowse files
feat(linter): add autofixer for eslint/radix (#10652)
related #10477
1 parent 344ef88 commit 0e6a727
Copy full SHA for 0e6a727

File tree

2 files changed

+43
-4
lines changed
Filter options

2 files changed

+43
-4
lines changed

‎crates/oxc_linter/src/rules/eslint/radix.rs

Copy file name to clipboardExpand all lines: crates/oxc_linter/src/rules/eslint/radix.rs
+34-4Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ fn missing_parameters(span: Span) -> OxcDiagnostic {
1313
}
1414

1515
fn missing_radix(span: Span) -> OxcDiagnostic {
16-
OxcDiagnostic::warn("Missing radix parameter.").with_label(span)
16+
OxcDiagnostic::warn("Missing radix parameter.")
17+
.with_help("Add radix parameter `10' for parsing decimal numbers.")
18+
.with_label(span)
1719
}
1820

1921
fn redundant_radix(span: Span) -> OxcDiagnostic {
@@ -51,7 +53,8 @@ declare_oxc_lint!(
5153
/// ```
5254
Radix,
5355
eslint,
54-
pedantic
56+
pedantic,
57+
conditional_fix_dangerous
5558
);
5659

5760
impl Rule for Radix {
@@ -114,7 +117,18 @@ impl Radix {
114117
0 => ctx.diagnostic(missing_parameters(call_expr.span)),
115118
1 => {
116119
if matches!(&self.radix_type, RadixType::Always) {
117-
ctx.diagnostic(missing_radix(call_expr.span));
120+
let first_arg = &call_expr.arguments[0];
121+
let end = call_expr.span.end;
122+
let check_span = Span::new(first_arg.span().start, end);
123+
let insert_param = ctx
124+
.source_range(check_span)
125+
.chars()
126+
.find_map(|c| if c == ',' { Some(" 10,") } else { None })
127+
.unwrap_or(", 10");
128+
129+
ctx.diagnostic_with_dangerous_fix(missing_radix(call_expr.span), |fixer| {
130+
fixer.insert_text_before_range(Span::new(end - 1, end - 1), insert_param)
131+
});
118132
}
119133
}
120134
_ => {
@@ -240,5 +254,21 @@ fn test() {
240254
("{ let Number; } (Number?.parseInt)();", None, None),
241255
];
242256

243-
Tester::new(Radix::NAME, Radix::PLUGIN, pass, fail).test_and_snapshot();
257+
let fix = vec![
258+
("parseInt(10)", "parseInt(10, 10)", Some(json!(["always"]))),
259+
("parseInt(10,)", "parseInt(10, 10,)", Some(json!(["always"]))),
260+
("parseInt(10 )", "parseInt(10 , 10)", Some(json!(["always"]))),
261+
("parseInt(10, )", "parseInt(10, 10,)", Some(json!(["always"]))),
262+
(
263+
r#"parseInt("123123" , )"#,
264+
r#"parseInt("123123" , 10,)"#,
265+
Some(json!(["always"])),
266+
),
267+
(r#"Number.parseInt("10")"#, r#"Number.parseInt("10", 10)"#, Some(json!(["always"]))),
268+
(r#"Number.parseInt("10",)"#, r#"Number.parseInt("10", 10,)"#, Some(json!(["always"]))),
269+
(r#"Number.parseInt?.("10")"#, r#"Number.parseInt?.("10", 10)"#, Some(json!(["always"]))),
270+
("parseInt(10, /** 213123 */)", "parseInt(10, /** 213123 */ 10,)", Some(json!(["always"]))),
271+
];
272+
273+
Tester::new(Radix::NAME, Radix::PLUGIN, pass, fail).expect_fix(fix).test_and_snapshot();
244274
}

‎crates/oxc_linter/src/snapshots/eslint_radix.snap

Copy file name to clipboardExpand all lines: crates/oxc_linter/src/snapshots/eslint_radix.snap
+9Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,28 @@ source: crates/oxc_linter/src/tester.rs
1818
1parseInt("10");
1919
· ──────────────
2020
╰────
21+
help: Add radix parameter `10' for parsing decimal numbers.
2122
2223
⚠ eslint(radix): Missing radix parameter.
2324
╭─[radix.tsx:1:1]
2425
1 │ parseInt("10",);
2526
· ───────────────
2627
╰────
28+
help: Add radix parameter `10' for parsing decimal numbers.
2729

2830
eslint(radix): Missing radix parameter.
2931
╭─[radix.tsx:1:1]
3032
1parseInt((0, "10"));
3133
· ───────────────────
3234
╰────
35+
help: Add radix parameter `10' for parsing decimal numbers.
3336
3437
⚠ eslint(radix): Missing radix parameter.
3538
╭─[radix.tsx:1:1]
3639
1 │ parseInt((0, "10"),);
3740
· ────────────────────
3841
╰────
42+
help: Add radix parameter `10' for parsing decimal numbers.
3943

4044
eslint(radix): Invalid radix parameter, must be an integer between 2 and 36.
4145
╭─[radix.tsx:1:16]
@@ -102,6 +106,7 @@ source: crates/oxc_linter/src/tester.rs
102106
1Number.parseInt("10");
103107
· ─────────────────────
104108
╰────
109+
help: Add radix parameter `10' for parsing decimal numbers.
105110
106111
⚠ eslint(radix): Invalid radix parameter, must be an integer between 2 and 36.
107112
╭─[radix.tsx:1:23]
@@ -132,24 +137,28 @@ source: crates/oxc_linter/src/tester.rs
132137
1 │ parseInt?.("10");
133138
· ────────────────
134139
╰────
140+
help: Add radix parameter `10' for parsing decimal numbers.
135141

136142
eslint(radix): Missing radix parameter.
137143
╭─[radix.tsx:1:1]
138144
1Number.parseInt?.("10");
139145
· ───────────────────────
140146
╰────
147+
help: Add radix parameter `10' for parsing decimal numbers.
141148
142149
⚠ eslint(radix): Missing radix parameter.
143150
╭─[radix.tsx:1:1]
144151
1 │ Number?.parseInt("10");
145152
· ──────────────────────
146153
╰────
154+
help: Add radix parameter `10' for parsing decimal numbers.
147155

148156
eslint(radix): Missing radix parameter.
149157
╭─[radix.tsx:1:1]
150158
1 │ (Number?.parseInt)("10");
151159
· ────────────────────────
152160
╰────
161+
help: Add radix parameter `10' for parsing decimal numbers.
153162
154163
⚠ eslint(radix): Missing parameters.
155164
╭─[radix.tsx:1:21]

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.