eslint-plugin-react-x 1.19.0-beta.1 → 1.19.0-beta.4

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/README.md CHANGED
@@ -75,8 +75,6 @@ export default [
75
75
 
76
76
  | Rule | Description | 💼 | 💭 | |
77
77
  | :--------------------------------------- | :--------------------------------------------------------------------------------------------------- | :-: | :-: | :-: |
78
- | `avoid-shorthand-boolean` | Prevents using shorthand syntax for boolean attributes. | 🎨 | | 🔧 |
79
- | `avoid-shorthand-fragment` | Prevents using shorthand syntax for fragments. | 🎨 | | |
80
78
  | `ensure-forward-ref-using-ref` | Requires that components wrapped with `forwardRef` must have a `ref` parameter. | ✔️ | | |
81
79
  | `jsx-no-duplicate-props` | Prevents duplicate props in JSX. | ✔️ | | |
82
80
  | `jsx-uses-vars` | Prevents variables used in JSX to be marked as unused. | ✔️ | | |
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.19.0-beta.1";
44
+ var version = "1.19.0-beta.4";
45
45
  var createRule = shared.createRuleForPlugin("x");
46
46
 
47
47
  // src/rules/avoid-shorthand-boolean.ts
@@ -1195,8 +1195,10 @@ function getFix(node, context) {
1195
1195
  const [componentNode] = node.arguments;
1196
1196
  if (!componentNode || !AST11__namespace.isFunction(componentNode)) return [];
1197
1197
  return [
1198
+ // unwrap component from forwardRef call
1198
1199
  fixer.removeRange([node.range[0], componentNode.range[0]]),
1199
1200
  fixer.removeRange([componentNode.range[1], node.range[1]]),
1201
+ // update component props and ref arguments to match the new signature
1200
1202
  ...getComponentPropsFixes(
1201
1203
  componentNode,
1202
1204
  node.typeArguments?.params ?? [],
@@ -1212,33 +1214,22 @@ function getComponentPropsFixes(node, typeArguments, fixer, context) {
1212
1214
  const [typeArg0, typeArg1] = typeArguments;
1213
1215
  if (!arg0) return [];
1214
1216
  const fixedArg0Text = tsPattern.match(arg0).with({ type: types.AST_NODE_TYPES.Identifier }, (n) => tools.O.some(`...${n.name}`)).with({ type: types.AST_NODE_TYPES.ObjectPattern }, (n) => tools.O.some(n.properties.map(getText).join(", "))).otherwise(tools.O.none);
1215
- if (tools.O.isNone(fixedArg0Text)) return [];
1217
+ const fixedArg1Text = tsPattern.match(arg1).with(tsPattern.P.nullish, () => tools.O.some("ref")).with({ type: types.AST_NODE_TYPES.Identifier, name: "ref" }, () => tools.O.some("ref")).with({ type: types.AST_NODE_TYPES.Identifier, name: tsPattern.P.not("ref") }, (n) => tools.O.some(`ref: ${n.name}`)).otherwise(tools.O.none);
1218
+ if (tools.O.isNone(fixedArg0Text) || tools.O.isNone(fixedArg1Text)) return [];
1216
1219
  const fixedPropsText = fixedArg0Text.value;
1217
- if (!arg1) {
1218
- return [fixer.replaceText(
1219
- arg0,
1220
- [
1221
- "{",
1222
- "ref,",
1223
- fixedPropsText,
1224
- "}"
1225
- ].join(" ")
1226
- )];
1227
- }
1228
- if (arg1.type !== types.AST_NODE_TYPES.Identifier) return [];
1220
+ const fixedRefText = fixedArg1Text.value;
1229
1221
  if (!typeArg0 || !typeArg1) {
1230
1222
  return [
1231
1223
  fixer.replaceText(
1232
1224
  arg0,
1233
1225
  [
1234
1226
  "{",
1235
- arg1.name === "ref" ? `ref,` : `ref: ${arg1.name},`,
1227
+ fixedRefText + ",",
1236
1228
  fixedPropsText,
1237
1229
  "}"
1238
1230
  ].join(" ")
1239
1231
  ),
1240
- fixer.remove(arg1),
1241
- fixer.removeRange([arg0.range[1], arg1.range[0]])
1232
+ ...arg1 ? [fixer.remove(arg1), fixer.removeRange([arg0.range[1], arg1.range[0]])] : []
1242
1233
  ];
1243
1234
  }
1244
1235
  return [
@@ -1246,7 +1237,7 @@ function getComponentPropsFixes(node, typeArguments, fixer, context) {
1246
1237
  arg0,
1247
1238
  [
1248
1239
  "{",
1249
- arg1.name === "ref" ? `ref,` : `ref: ${arg1.name},`,
1240
+ fixedRefText + ",",
1250
1241
  fixedPropsText,
1251
1242
  "}:",
1252
1243
  getText(typeArg1),
@@ -1257,8 +1248,7 @@ function getComponentPropsFixes(node, typeArguments, fixer, context) {
1257
1248
  "}"
1258
1249
  ].join(" ")
1259
1250
  ),
1260
- fixer.remove(arg1),
1261
- fixer.removeRange([arg0.range[1], arg1.range[0]])
1251
+ ...arg1 ? [fixer.remove(arg1), fixer.removeRange([arg0.range[1], arg1.range[0]])] : []
1262
1252
  ];
1263
1253
  }
1264
1254
  var RULE_NAME27 = "no-implicit-key";
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.19.0-beta.1";
17
+ var version = "1.19.0-beta.4";
18
18
  var createRule = createRuleForPlugin("x");
19
19
 
20
20
  // src/rules/avoid-shorthand-boolean.ts
@@ -1168,8 +1168,10 @@ function getFix(node, context) {
1168
1168
  const [componentNode] = node.arguments;
1169
1169
  if (!componentNode || !AST11.isFunction(componentNode)) return [];
1170
1170
  return [
1171
+ // unwrap component from forwardRef call
1171
1172
  fixer.removeRange([node.range[0], componentNode.range[0]]),
1172
1173
  fixer.removeRange([componentNode.range[1], node.range[1]]),
1174
+ // update component props and ref arguments to match the new signature
1173
1175
  ...getComponentPropsFixes(
1174
1176
  componentNode,
1175
1177
  node.typeArguments?.params ?? [],
@@ -1185,33 +1187,22 @@ function getComponentPropsFixes(node, typeArguments, fixer, context) {
1185
1187
  const [typeArg0, typeArg1] = typeArguments;
1186
1188
  if (!arg0) return [];
1187
1189
  const fixedArg0Text = match(arg0).with({ type: AST_NODE_TYPES.Identifier }, (n) => O.some(`...${n.name}`)).with({ type: AST_NODE_TYPES.ObjectPattern }, (n) => O.some(n.properties.map(getText).join(", "))).otherwise(O.none);
1188
- if (O.isNone(fixedArg0Text)) return [];
1190
+ const fixedArg1Text = match(arg1).with(P.nullish, () => O.some("ref")).with({ type: AST_NODE_TYPES.Identifier, name: "ref" }, () => O.some("ref")).with({ type: AST_NODE_TYPES.Identifier, name: P.not("ref") }, (n) => O.some(`ref: ${n.name}`)).otherwise(O.none);
1191
+ if (O.isNone(fixedArg0Text) || O.isNone(fixedArg1Text)) return [];
1189
1192
  const fixedPropsText = fixedArg0Text.value;
1190
- if (!arg1) {
1191
- return [fixer.replaceText(
1192
- arg0,
1193
- [
1194
- "{",
1195
- "ref,",
1196
- fixedPropsText,
1197
- "}"
1198
- ].join(" ")
1199
- )];
1200
- }
1201
- if (arg1.type !== AST_NODE_TYPES.Identifier) return [];
1193
+ const fixedRefText = fixedArg1Text.value;
1202
1194
  if (!typeArg0 || !typeArg1) {
1203
1195
  return [
1204
1196
  fixer.replaceText(
1205
1197
  arg0,
1206
1198
  [
1207
1199
  "{",
1208
- arg1.name === "ref" ? `ref,` : `ref: ${arg1.name},`,
1200
+ fixedRefText + ",",
1209
1201
  fixedPropsText,
1210
1202
  "}"
1211
1203
  ].join(" ")
1212
1204
  ),
1213
- fixer.remove(arg1),
1214
- fixer.removeRange([arg0.range[1], arg1.range[0]])
1205
+ ...arg1 ? [fixer.remove(arg1), fixer.removeRange([arg0.range[1], arg1.range[0]])] : []
1215
1206
  ];
1216
1207
  }
1217
1208
  return [
@@ -1219,7 +1210,7 @@ function getComponentPropsFixes(node, typeArguments, fixer, context) {
1219
1210
  arg0,
1220
1211
  [
1221
1212
  "{",
1222
- arg1.name === "ref" ? `ref,` : `ref: ${arg1.name},`,
1213
+ fixedRefText + ",",
1223
1214
  fixedPropsText,
1224
1215
  "}:",
1225
1216
  getText(typeArg1),
@@ -1230,8 +1221,7 @@ function getComponentPropsFixes(node, typeArguments, fixer, context) {
1230
1221
  "}"
1231
1222
  ].join(" ")
1232
1223
  ),
1233
- fixer.remove(arg1),
1234
- fixer.removeRange([arg0.range[1], arg1.range[0]])
1224
+ ...arg1 ? [fixer.remove(arg1), fixer.removeRange([arg0.range[1], arg1.range[0]])] : []
1235
1225
  ];
1236
1226
  }
1237
1227
  var RULE_NAME27 = "no-implicit-key";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-react-x",
3
- "version": "1.19.0-beta.1",
3
+ "version": "1.19.0-beta.4",
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",
@@ -42,24 +42,24 @@
42
42
  "./package.json"
43
43
  ],
44
44
  "dependencies": {
45
- "@typescript-eslint/scope-manager": "^8.17.0",
46
- "@typescript-eslint/type-utils": "^8.17.0",
47
- "@typescript-eslint/types": "^8.17.0",
48
- "@typescript-eslint/utils": "^8.17.0",
45
+ "@typescript-eslint/scope-manager": "^8.18.0",
46
+ "@typescript-eslint/type-utils": "^8.18.0",
47
+ "@typescript-eslint/types": "^8.18.0",
48
+ "@typescript-eslint/utils": "^8.18.0",
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.19.0-beta.1",
53
- "@eslint-react/core": "1.19.0-beta.1",
54
- "@eslint-react/jsx": "1.19.0-beta.1",
55
- "@eslint-react/shared": "1.19.0-beta.1",
56
- "@eslint-react/var": "1.19.0-beta.1",
57
- "@eslint-react/tools": "1.19.0-beta.1",
58
- "@eslint-react/types": "1.19.0-beta.1"
52
+ "@eslint-react/ast": "1.19.0-beta.4",
53
+ "@eslint-react/jsx": "1.19.0-beta.4",
54
+ "@eslint-react/tools": "1.19.0-beta.4",
55
+ "@eslint-react/shared": "1.19.0-beta.4",
56
+ "@eslint-react/types": "1.19.0-beta.4",
57
+ "@eslint-react/var": "1.19.0-beta.4",
58
+ "@eslint-react/core": "1.19.0-beta.4"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/react": "^19.0.1",
62
- "@types/react-dom": "^19.0.1",
62
+ "@types/react-dom": "^19.0.2",
63
63
  "string-ts": "^2.2.0",
64
64
  "ts-api-utils": "^2.0.0",
65
65
  "tsup": "^8.3.5"