eslint-plugin-react-x 1.18.1-beta.2 → 1.18.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -41,7 +41,7 @@ var ts__default = /*#__PURE__*/_interopDefault(ts);
41
41
 
42
42
  // package.json
43
43
  var name = "eslint-plugin-react-x";
44
- var version = "1.18.1-beta.2";
44
+ var version = "1.18.1-beta.3";
45
45
  var createRule = shared.createRuleForPlugin("x");
46
46
 
47
47
  // src/rules/avoid-shorthand-boolean.ts
@@ -1166,6 +1166,7 @@ var no_forward_ref_default = createRule({
1166
1166
  docs: {
1167
1167
  description: "disallow the use of 'forwardRef'"
1168
1168
  },
1169
+ fixable: "code",
1169
1170
  messages: {
1170
1171
  noForwardRef: "In React 19, 'forwardRef' is no longer necessary. Pass 'ref' as a prop instead."
1171
1172
  },
@@ -1181,13 +1182,77 @@ var no_forward_ref_default = createRule({
1181
1182
  if (!core.isForwardRefCall(node, context)) return;
1182
1183
  context.report({
1183
1184
  messageId: "noForwardRef",
1184
- node
1185
+ node,
1186
+ fix: getFix(node, context)
1185
1187
  });
1186
1188
  }
1187
1189
  };
1188
1190
  },
1189
1191
  defaultOptions: []
1190
1192
  });
1193
+ function getFix(node, context) {
1194
+ return (fixer) => {
1195
+ const [componentNode] = node.arguments;
1196
+ if (!componentNode || !AST11__namespace.isFunction(componentNode)) return [];
1197
+ return [
1198
+ fixer.removeRange([node.range[0], componentNode.range[0]]),
1199
+ fixer.removeRange([componentNode.range[1], node.range[1]]),
1200
+ ...getParamsFixes(componentNode, context, node.typeArguments?.params ?? [], fixer)
1201
+ ];
1202
+ };
1203
+ }
1204
+ function getParamsFixes(node, context, typeArguments, fixer) {
1205
+ const [arg0, arg1] = node.params;
1206
+ const [typeArg0, typeArg1] = typeArguments;
1207
+ if (arg0?.type !== types.AST_NODE_TYPES.Identifier) return [];
1208
+ if (!arg1) {
1209
+ return [fixer.replaceText(
1210
+ arg0,
1211
+ [
1212
+ "{",
1213
+ "ref,",
1214
+ `...${arg0.name}`,
1215
+ "}"
1216
+ ].join(" ")
1217
+ )];
1218
+ }
1219
+ if (arg1.type !== types.AST_NODE_TYPES.Identifier) return [];
1220
+ if (!typeArg0 || !typeArg1) {
1221
+ return [
1222
+ fixer.replaceText(
1223
+ arg0,
1224
+ [
1225
+ "{",
1226
+ arg1.name === "ref" ? `ref,` : `ref: ${arg1.name},`,
1227
+ `...${arg0.name}`,
1228
+ "}"
1229
+ ].join(" ")
1230
+ ),
1231
+ fixer.remove(arg1),
1232
+ fixer.removeRange([arg0.range[1], arg1.range[0]])
1233
+ ];
1234
+ }
1235
+ const getText = (node2) => context.sourceCode.getText(node2);
1236
+ return [
1237
+ fixer.replaceText(
1238
+ arg0,
1239
+ [
1240
+ "{",
1241
+ arg1.name === "ref" ? `ref,` : `ref: ${arg1.name},`,
1242
+ `...${arg0.name}`,
1243
+ "}:",
1244
+ getText(typeArg1),
1245
+ "&",
1246
+ "{",
1247
+ `ref:`,
1248
+ `React.RefObject<${getText(typeArg0)}>`,
1249
+ "}"
1250
+ ].join(" ")
1251
+ ),
1252
+ fixer.remove(arg1),
1253
+ fixer.removeRange([arg0.range[1], arg1.range[0]])
1254
+ ];
1255
+ }
1191
1256
  var RULE_NAME27 = "no-implicit-key";
1192
1257
  var no_implicit_key_default = createRule({
1193
1258
  meta: {
package/dist/index.mjs CHANGED
@@ -14,7 +14,7 @@ import { getTypeImmutability, isUnknown, isImmutable, isReadonlyShallow, isReado
14
14
 
15
15
  // package.json
16
16
  var name = "eslint-plugin-react-x";
17
- var version = "1.18.1-beta.2";
17
+ var version = "1.18.1-beta.3";
18
18
  var createRule = createRuleForPlugin("x");
19
19
 
20
20
  // src/rules/avoid-shorthand-boolean.ts
@@ -1139,6 +1139,7 @@ var no_forward_ref_default = createRule({
1139
1139
  docs: {
1140
1140
  description: "disallow the use of 'forwardRef'"
1141
1141
  },
1142
+ fixable: "code",
1142
1143
  messages: {
1143
1144
  noForwardRef: "In React 19, 'forwardRef' is no longer necessary. Pass 'ref' as a prop instead."
1144
1145
  },
@@ -1154,13 +1155,77 @@ var no_forward_ref_default = createRule({
1154
1155
  if (!isForwardRefCall(node, context)) return;
1155
1156
  context.report({
1156
1157
  messageId: "noForwardRef",
1157
- node
1158
+ node,
1159
+ fix: getFix(node, context)
1158
1160
  });
1159
1161
  }
1160
1162
  };
1161
1163
  },
1162
1164
  defaultOptions: []
1163
1165
  });
1166
+ function getFix(node, context) {
1167
+ return (fixer) => {
1168
+ const [componentNode] = node.arguments;
1169
+ if (!componentNode || !AST11.isFunction(componentNode)) return [];
1170
+ return [
1171
+ fixer.removeRange([node.range[0], componentNode.range[0]]),
1172
+ fixer.removeRange([componentNode.range[1], node.range[1]]),
1173
+ ...getParamsFixes(componentNode, context, node.typeArguments?.params ?? [], fixer)
1174
+ ];
1175
+ };
1176
+ }
1177
+ function getParamsFixes(node, context, typeArguments, fixer) {
1178
+ const [arg0, arg1] = node.params;
1179
+ const [typeArg0, typeArg1] = typeArguments;
1180
+ if (arg0?.type !== AST_NODE_TYPES.Identifier) return [];
1181
+ if (!arg1) {
1182
+ return [fixer.replaceText(
1183
+ arg0,
1184
+ [
1185
+ "{",
1186
+ "ref,",
1187
+ `...${arg0.name}`,
1188
+ "}"
1189
+ ].join(" ")
1190
+ )];
1191
+ }
1192
+ if (arg1.type !== AST_NODE_TYPES.Identifier) return [];
1193
+ if (!typeArg0 || !typeArg1) {
1194
+ return [
1195
+ fixer.replaceText(
1196
+ arg0,
1197
+ [
1198
+ "{",
1199
+ arg1.name === "ref" ? `ref,` : `ref: ${arg1.name},`,
1200
+ `...${arg0.name}`,
1201
+ "}"
1202
+ ].join(" ")
1203
+ ),
1204
+ fixer.remove(arg1),
1205
+ fixer.removeRange([arg0.range[1], arg1.range[0]])
1206
+ ];
1207
+ }
1208
+ const getText = (node2) => context.sourceCode.getText(node2);
1209
+ return [
1210
+ fixer.replaceText(
1211
+ arg0,
1212
+ [
1213
+ "{",
1214
+ arg1.name === "ref" ? `ref,` : `ref: ${arg1.name},`,
1215
+ `...${arg0.name}`,
1216
+ "}:",
1217
+ getText(typeArg1),
1218
+ "&",
1219
+ "{",
1220
+ `ref:`,
1221
+ `React.RefObject<${getText(typeArg0)}>`,
1222
+ "}"
1223
+ ].join(" ")
1224
+ ),
1225
+ fixer.remove(arg1),
1226
+ fixer.removeRange([arg0.range[1], arg1.range[0]])
1227
+ ];
1228
+ }
1164
1229
  var RULE_NAME27 = "no-implicit-key";
1165
1230
  var no_implicit_key_default = createRule({
1166
1231
  meta: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-react-x",
3
- "version": "1.18.1-beta.2",
3
+ "version": "1.18.1-beta.3",
4
4
  "description": "A set of composable ESLint rules for libraries and frameworks that use React as a UI runtime.",
5
5
  "keywords": [
6
6
  "eslint",
@@ -49,13 +49,13 @@
49
49
  "compare-versions": "^6.1.1",
50
50
  "is-immutable-type": "^5.0.0",
51
51
  "ts-pattern": "^5.5.0",
52
- "@eslint-react/ast": "1.18.1-beta.2",
53
- "@eslint-react/jsx": "1.18.1-beta.2",
54
- "@eslint-react/core": "1.18.1-beta.2",
55
- "@eslint-react/shared": "1.18.1-beta.2",
56
- "@eslint-react/types": "1.18.1-beta.2",
57
- "@eslint-react/var": "1.18.1-beta.2",
58
- "@eslint-react/tools": "1.18.1-beta.2"
52
+ "@eslint-react/ast": "1.18.1-beta.3",
53
+ "@eslint-react/core": "1.18.1-beta.3",
54
+ "@eslint-react/shared": "1.18.1-beta.3",
55
+ "@eslint-react/var": "1.18.1-beta.3",
56
+ "@eslint-react/jsx": "1.18.1-beta.3",
57
+ "@eslint-react/types": "1.18.1-beta.3",
58
+ "@eslint-react/tools": "1.18.1-beta.3"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/react": "^19.0.1",