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 +0 -2
- package/dist/index.js +10 -20
- package/dist/index.mjs +10 -20
- package/package.json +13 -13
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
46
|
-
"@typescript-eslint/type-utils": "^8.
|
|
47
|
-
"@typescript-eslint/types": "^8.
|
|
48
|
-
"@typescript-eslint/utils": "^8.
|
|
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.
|
|
53
|
-
"@eslint-react/
|
|
54
|
-
"@eslint-react/
|
|
55
|
-
"@eslint-react/shared": "1.19.0-beta.
|
|
56
|
-
"@eslint-react/
|
|
57
|
-
"@eslint-react/
|
|
58
|
-
"@eslint-react/
|
|
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.
|
|
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"
|