Skip to content

Commit 66a9cd1

Browse files
committed
feat(plugins/x): add autofix to 'prefer-shorthand-fragment', closes #898
1 parent c442638 commit 66a9cd1

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

packages/plugins/eslint-plugin-react-x/src/rules/prefer-shorthand-fragment.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ ruleTester.run(RULE_NAME, rule, {
1010
messageId: "preferShorthandFragment",
1111
},
1212
],
13+
output: "<><div /></>",
1314
},
1415
{
1516
code: /* tsx */ `<Fragment><div /></Fragment>`,
@@ -18,6 +19,24 @@ ruleTester.run(RULE_NAME, rule, {
1819
messageId: "preferShorthandFragment",
1920
},
2021
],
22+
output: "<><div /></>",
23+
},
24+
{
25+
code: /* tsx */ `
26+
<React.Fragment>
27+
<div />
28+
</React.Fragment>
29+
`,
30+
errors: [
31+
{
32+
messageId: "preferShorthandFragment",
33+
},
34+
],
35+
output: `
36+
<>
37+
<div />
38+
</>
39+
`,
2140
},
2241
],
2342
valid: [

packages/plugins/eslint-plugin-react-x/src/rules/prefer-shorthand-fragment.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export default createRule<[], MessageID>({
2222
description: "enforce using fragment syntax instead of 'Fragment' component",
2323
[Symbol.for("rule_features")]: RULE_FEATURES,
2424
},
25+
fixable: "code",
2526
messages: {
2627
preferShorthandFragment: "Use fragment shorthand syntax instead of 'Fragment' component.",
2728
},
@@ -36,6 +37,14 @@ export default createRule<[], MessageID>({
3637
return O.some({
3738
messageId: "preferShorthandFragment",
3839
node,
40+
fix: (fixer) => {
41+
const { closingElement, openingElement } = node;
42+
if (!closingElement) return [];
43+
return [
44+
fixer.replaceTextRange([openingElement.range[0], openingElement.range[1]], "<>"),
45+
fixer.replaceTextRange([closingElement.range[0], closingElement.range[1]], "</>"),
46+
];
47+
},
3948
});
4049
}
4150
return {

0 commit comments

Comments
 (0)