eslint-plugin-react-x 1.28.1-beta.4 → 1.28.1-beta.7
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 +73 -63
- package/dist/index.mjs +74 -64
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var shared = require('@eslint-react/shared');
|
|
4
|
-
var
|
|
4
|
+
var JSX8 = require('@eslint-react/jsx');
|
|
5
5
|
var AST11 = require('@eslint-react/ast');
|
|
6
6
|
var core = require('@eslint-react/core');
|
|
7
7
|
var eff = require('@eslint-react/eff');
|
|
@@ -35,7 +35,7 @@ function _interopNamespace(e) {
|
|
|
35
35
|
return Object.freeze(n);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
var
|
|
38
|
+
var JSX8__namespace = /*#__PURE__*/_interopNamespace(JSX8);
|
|
39
39
|
var AST11__namespace = /*#__PURE__*/_interopNamespace(AST11);
|
|
40
40
|
var VAR__namespace = /*#__PURE__*/_interopNamespace(VAR);
|
|
41
41
|
var ts__default = /*#__PURE__*/_interopDefault(ts);
|
|
@@ -137,25 +137,9 @@ var settings3 = {
|
|
|
137
137
|
|
|
138
138
|
// package.json
|
|
139
139
|
var name4 = "eslint-plugin-react-x";
|
|
140
|
-
var version = "1.28.1-beta.
|
|
140
|
+
var version = "1.28.1-beta.7";
|
|
141
141
|
var createRule = shared.createRuleForPlugin("x");
|
|
142
142
|
|
|
143
|
-
// src/utils/get-associated-tokens.ts
|
|
144
|
-
function getAssociatedTokens(context, node) {
|
|
145
|
-
{
|
|
146
|
-
const tokenBefore = context.sourceCode.getTokenBefore(node);
|
|
147
|
-
const tokenAfter = context.sourceCode.getTokenAfter(node);
|
|
148
|
-
const tokens = [];
|
|
149
|
-
if (tokenAfter?.value !== "," && tokenBefore?.value === ",") {
|
|
150
|
-
tokens.push(tokenBefore);
|
|
151
|
-
}
|
|
152
|
-
if (tokenAfter?.value === ",") {
|
|
153
|
-
tokens.push(tokenAfter);
|
|
154
|
-
}
|
|
155
|
-
return tokens;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
143
|
// src/rules/avoid-shorthand-boolean.ts
|
|
160
144
|
var RULE_NAME = "avoid-shorthand-boolean";
|
|
161
145
|
var RULE_FEATURES = [
|
|
@@ -183,7 +167,7 @@ var avoid_shorthand_boolean_default = createRule({
|
|
|
183
167
|
messageId: "avoidShorthandBoolean",
|
|
184
168
|
node,
|
|
185
169
|
data: {
|
|
186
|
-
propName:
|
|
170
|
+
propName: JSX8__namespace.getAttributeName(node)
|
|
187
171
|
},
|
|
188
172
|
fix: (fixer) => fixer.insertTextAfter(node.name, `={true}`)
|
|
189
173
|
});
|
|
@@ -268,6 +252,9 @@ var RULE_NAME4 = "no-access-state-in-setstate";
|
|
|
268
252
|
var RULE_FEATURES4 = [
|
|
269
253
|
"CHK"
|
|
270
254
|
];
|
|
255
|
+
function isKeyLiteral(node, key) {
|
|
256
|
+
return tsPattern.match(key).with({ type: types.AST_NODE_TYPES.Literal }, eff.constTrue).with({ type: types.AST_NODE_TYPES.TemplateLiteral, expressions: [] }, eff.constTrue).with({ type: types.AST_NODE_TYPES.Identifier }, () => !node.computed).otherwise(eff.constFalse);
|
|
257
|
+
}
|
|
271
258
|
function getName(node) {
|
|
272
259
|
if (AST11__namespace.isTsOnlyExpression(node)) {
|
|
273
260
|
return getName(node.expression);
|
|
@@ -378,7 +365,7 @@ var no_access_state_in_setstate_default = createRule({
|
|
|
378
365
|
return;
|
|
379
366
|
}
|
|
380
367
|
const hasState = node.id.properties.some(
|
|
381
|
-
(prop) => prop.type === types.AST_NODE_TYPES.Property &&
|
|
368
|
+
(prop) => prop.type === types.AST_NODE_TYPES.Property && isKeyLiteral(prop, prop.key) && getName(prop.key) === "state"
|
|
382
369
|
);
|
|
383
370
|
if (!hasState) {
|
|
384
371
|
return;
|
|
@@ -733,7 +720,7 @@ var no_children_prop_default = createRule({
|
|
|
733
720
|
create(context) {
|
|
734
721
|
return {
|
|
735
722
|
JSXElement(node) {
|
|
736
|
-
const attribute =
|
|
723
|
+
const attribute = JSX8__namespace.getAttribute(
|
|
737
724
|
"children",
|
|
738
725
|
node.openingElement.attributes,
|
|
739
726
|
context.sourceCode.getScope(node)
|
|
@@ -952,7 +939,7 @@ var RULE_FEATURES16 = [
|
|
|
952
939
|
"MOD"
|
|
953
940
|
];
|
|
954
941
|
function isComponentWillMount(node) {
|
|
955
|
-
return AST11__namespace.
|
|
942
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillMount";
|
|
956
943
|
}
|
|
957
944
|
var no_component_will_mount_default = createRule({
|
|
958
945
|
meta: {
|
|
@@ -1005,7 +992,7 @@ var RULE_FEATURES17 = [
|
|
|
1005
992
|
"MOD"
|
|
1006
993
|
];
|
|
1007
994
|
function isComponentWillUpdate(node) {
|
|
1008
|
-
return AST11__namespace.
|
|
995
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillReceiveProps";
|
|
1009
996
|
}
|
|
1010
997
|
var no_component_will_receive_props_default = createRule({
|
|
1011
998
|
meta: {
|
|
@@ -1058,7 +1045,7 @@ var RULE_FEATURES18 = [
|
|
|
1058
1045
|
"MOD"
|
|
1059
1046
|
];
|
|
1060
1047
|
function isComponentWillUpdate2(node) {
|
|
1061
|
-
return AST11__namespace.
|
|
1048
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
|
|
1062
1049
|
}
|
|
1063
1050
|
var no_component_will_update_default = createRule({
|
|
1064
1051
|
meta: {
|
|
@@ -1132,7 +1119,7 @@ var no_context_provider_default = createRule({
|
|
|
1132
1119
|
}
|
|
1133
1120
|
return {
|
|
1134
1121
|
JSXElement(node) {
|
|
1135
|
-
const [name5, ...rest] =
|
|
1122
|
+
const [name5, ...rest] = JSX8__namespace.getElementName(node).split(".").reverse();
|
|
1136
1123
|
if (name5 !== "Provider") return;
|
|
1137
1124
|
const contextName = rest.reverse().join(".");
|
|
1138
1125
|
context.report({
|
|
@@ -1265,7 +1252,7 @@ function isAssignmentToThisState(node) {
|
|
|
1265
1252
|
return left.type === types.AST_NODE_TYPES.MemberExpression && AST11__namespace.isThisExpression(left.object) && getName2(left.property) === "state";
|
|
1266
1253
|
}
|
|
1267
1254
|
function isConstructorFunction(node) {
|
|
1268
|
-
return AST11__namespace.isOneOf([types.AST_NODE_TYPES.FunctionDeclaration, types.AST_NODE_TYPES.FunctionExpression])(node) && AST11__namespace.
|
|
1255
|
+
return AST11__namespace.isOneOf([types.AST_NODE_TYPES.FunctionDeclaration, types.AST_NODE_TYPES.FunctionExpression])(node) && AST11__namespace.isMethodOrProperty(node.parent) && node.parent.key.type === types.AST_NODE_TYPES.Identifier && node.parent.key.name === "constructor";
|
|
1269
1256
|
}
|
|
1270
1257
|
var no_direct_mutation_state_default = createRule({
|
|
1271
1258
|
meta: {
|
|
@@ -1561,7 +1548,7 @@ var no_implicit_key_default = createRule({
|
|
|
1561
1548
|
return {
|
|
1562
1549
|
JSXOpeningElement(node) {
|
|
1563
1550
|
const initialScope = context.sourceCode.getScope(node);
|
|
1564
|
-
const keyPropFound =
|
|
1551
|
+
const keyPropFound = JSX8__namespace.getAttribute("key", node.attributes, initialScope);
|
|
1565
1552
|
const keyPropOnElement = node.attributes.some(
|
|
1566
1553
|
(n) => n.type === types.AST_NODE_TYPES.JSXAttribute && n.name.type === types.AST_NODE_TYPES.JSXIdentifier && n.name.name === "key"
|
|
1567
1554
|
);
|
|
@@ -1821,7 +1808,7 @@ var no_missing_context_display_name_default = createRule({
|
|
|
1821
1808
|
},
|
|
1822
1809
|
"Program:exit"() {
|
|
1823
1810
|
for (const call of createCalls) {
|
|
1824
|
-
const id =
|
|
1811
|
+
const id = core.getInstanceId(call);
|
|
1825
1812
|
if (id == null) {
|
|
1826
1813
|
context.report({
|
|
1827
1814
|
messageId: "noMissingContextDisplayName",
|
|
@@ -1833,10 +1820,7 @@ var no_missing_context_display_name_default = createRule({
|
|
|
1833
1820
|
const left = node.left;
|
|
1834
1821
|
if (left.type !== types.AST_NODE_TYPES.MemberExpression) return false;
|
|
1835
1822
|
const object = left.object;
|
|
1836
|
-
return
|
|
1837
|
-
context.sourceCode.getScope(id),
|
|
1838
|
-
context.sourceCode.getScope(object)
|
|
1839
|
-
]);
|
|
1823
|
+
return core.isInstanceIdEqual(context, id, object);
|
|
1840
1824
|
});
|
|
1841
1825
|
if (!hasDisplayNameAssignment) {
|
|
1842
1826
|
context.report({
|
|
@@ -1874,7 +1858,7 @@ var no_missing_key_default = createRule({
|
|
|
1874
1858
|
switch (node.type) {
|
|
1875
1859
|
case types.AST_NODE_TYPES.JSXElement: {
|
|
1876
1860
|
const initialScope = context.sourceCode.getScope(node);
|
|
1877
|
-
if (!
|
|
1861
|
+
if (!JSX8__namespace.hasAttribute("key", node.openingElement.attributes, initialScope)) {
|
|
1878
1862
|
return {
|
|
1879
1863
|
messageId: "missingKey",
|
|
1880
1864
|
node
|
|
@@ -1935,7 +1919,7 @@ var no_missing_key_default = createRule({
|
|
|
1935
1919
|
}
|
|
1936
1920
|
const initialScope = context.sourceCode.getScope(node);
|
|
1937
1921
|
for (const element of elements) {
|
|
1938
|
-
if (!
|
|
1922
|
+
if (!JSX8__namespace.hasAttribute("key", element.openingElement.attributes, initialScope)) {
|
|
1939
1923
|
context.report({
|
|
1940
1924
|
messageId: "missingKey",
|
|
1941
1925
|
node: element
|
|
@@ -2037,7 +2021,7 @@ var no_nested_components_default = createRule({
|
|
|
2037
2021
|
continue;
|
|
2038
2022
|
}
|
|
2039
2023
|
const isInsideProperty = component.parent.type === types.AST_NODE_TYPES.Property;
|
|
2040
|
-
const isInsideJSXPropValue = component.parent.type === types.AST_NODE_TYPES.JSXAttribute ||
|
|
2024
|
+
const isInsideJSXPropValue = component.parent.type === types.AST_NODE_TYPES.JSXAttribute || JSX8__namespace.findParentAttribute(node, (n) => n.value?.type === types.AST_NODE_TYPES.JSXExpressionContainer) != null;
|
|
2041
2025
|
if (isInsideJSXPropValue) {
|
|
2042
2026
|
if (!core.isDeclaredInRenderPropLoose(component)) {
|
|
2043
2027
|
context.report({
|
|
@@ -2166,7 +2150,7 @@ var RULE_FEATURES33 = [
|
|
|
2166
2150
|
"CHK"
|
|
2167
2151
|
];
|
|
2168
2152
|
function isShouldComponentUpdate(node) {
|
|
2169
|
-
return AST11__namespace.
|
|
2153
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
|
|
2170
2154
|
}
|
|
2171
2155
|
var no_redundant_should_component_update_default = createRule({
|
|
2172
2156
|
meta: {
|
|
@@ -2217,7 +2201,7 @@ var RULE_FEATURES34 = [
|
|
|
2217
2201
|
"CHK"
|
|
2218
2202
|
];
|
|
2219
2203
|
function isComponentDidMount(node) {
|
|
2220
|
-
return AST11__namespace.
|
|
2204
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
|
|
2221
2205
|
}
|
|
2222
2206
|
var no_set_state_in_component_did_mount_default = createRule({
|
|
2223
2207
|
meta: {
|
|
@@ -2262,7 +2246,7 @@ var RULE_FEATURES35 = [
|
|
|
2262
2246
|
"CHK"
|
|
2263
2247
|
];
|
|
2264
2248
|
function isComponentDidUpdate(node) {
|
|
2265
|
-
return AST11__namespace.
|
|
2249
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidUpdate";
|
|
2266
2250
|
}
|
|
2267
2251
|
var no_set_state_in_component_did_update_default = createRule({
|
|
2268
2252
|
meta: {
|
|
@@ -2307,7 +2291,7 @@ var RULE_FEATURES36 = [
|
|
|
2307
2291
|
"CHK"
|
|
2308
2292
|
];
|
|
2309
2293
|
function isComponentWillUpdate3(node) {
|
|
2310
|
-
return AST11__namespace.
|
|
2294
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
|
|
2311
2295
|
}
|
|
2312
2296
|
var no_set_state_in_component_will_update_default = createRule({
|
|
2313
2297
|
meta: {
|
|
@@ -2398,7 +2382,7 @@ var RULE_FEATURES38 = [
|
|
|
2398
2382
|
"CHK"
|
|
2399
2383
|
];
|
|
2400
2384
|
function isUnsafeComponentWillMount(node) {
|
|
2401
|
-
return AST11__namespace.
|
|
2385
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillMount";
|
|
2402
2386
|
}
|
|
2403
2387
|
var no_unsafe_component_will_mount_default = createRule({
|
|
2404
2388
|
meta: {
|
|
@@ -2443,7 +2427,7 @@ var RULE_FEATURES39 = [
|
|
|
2443
2427
|
"CHK"
|
|
2444
2428
|
];
|
|
2445
2429
|
function isUnsafeComponentWillReceiveProps(node) {
|
|
2446
|
-
return AST11__namespace.
|
|
2430
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillReceiveProps";
|
|
2447
2431
|
}
|
|
2448
2432
|
var no_unsafe_component_will_receive_props_default = createRule({
|
|
2449
2433
|
meta: {
|
|
@@ -2488,7 +2472,7 @@ var RULE_FEATURES40 = [
|
|
|
2488
2472
|
"CHK"
|
|
2489
2473
|
];
|
|
2490
2474
|
function isUnsafeComponentWillUpdate(node) {
|
|
2491
|
-
return AST11__namespace.
|
|
2475
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillUpdate";
|
|
2492
2476
|
}
|
|
2493
2477
|
var no_unsafe_component_will_update_default = createRule({
|
|
2494
2478
|
meta: {
|
|
@@ -2546,18 +2530,17 @@ var no_unstable_context_value_default = createRule({
|
|
|
2546
2530
|
},
|
|
2547
2531
|
name: RULE_NAME41,
|
|
2548
2532
|
create(context) {
|
|
2533
|
+
const { version: version2 } = shared.getSettingsFromContext(context);
|
|
2534
|
+
const isReact18OrBelow = compareVersions.compare(version2, "19.0.0", "<");
|
|
2549
2535
|
const { ctx, listeners } = core.useComponentCollector(context);
|
|
2550
2536
|
const constructions = /* @__PURE__ */ new Map();
|
|
2551
2537
|
return {
|
|
2552
2538
|
...listeners,
|
|
2553
2539
|
JSXOpeningElement(node) {
|
|
2554
|
-
const
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
if (openingElementName.property.name !== "Provider") {
|
|
2559
|
-
return;
|
|
2560
|
-
}
|
|
2540
|
+
const fullName = JSX8__namespace.getElementName(node.parent);
|
|
2541
|
+
const selfName = fullName.split(".").at(-1);
|
|
2542
|
+
if (selfName == null) return;
|
|
2543
|
+
if (!isContextName(selfName, isReact18OrBelow)) return;
|
|
2561
2544
|
const functionEntry = ctx.getCurrentEntry();
|
|
2562
2545
|
if (functionEntry == null) return;
|
|
2563
2546
|
const attribute = node.attributes.find(
|
|
@@ -2596,6 +2579,13 @@ var no_unstable_context_value_default = createRule({
|
|
|
2596
2579
|
},
|
|
2597
2580
|
defaultOptions: []
|
|
2598
2581
|
});
|
|
2582
|
+
function isContextName(name5, isReact18OrBelow) {
|
|
2583
|
+
if (name5 === "Provider") return true;
|
|
2584
|
+
if (!isReact18OrBelow) {
|
|
2585
|
+
return name5.endsWith("Context") || name5.endsWith("CONTEXT");
|
|
2586
|
+
}
|
|
2587
|
+
return false;
|
|
2588
|
+
}
|
|
2599
2589
|
var RULE_NAME42 = "no-unstable-default-props";
|
|
2600
2590
|
var RULE_FEATURES42 = [
|
|
2601
2591
|
"CHK"
|
|
@@ -2692,6 +2682,9 @@ var LIFECYCLE_METHODS = /* @__PURE__ */ new Set([
|
|
|
2692
2682
|
"UNSAFE_componentWillReceiveProps",
|
|
2693
2683
|
"UNSAFE_componentWillUpdate"
|
|
2694
2684
|
]);
|
|
2685
|
+
function isKeyLiteral2(node, key) {
|
|
2686
|
+
return tsPattern.match(key).with({ type: types.AST_NODE_TYPES.Literal }, eff.constTrue).with({ type: types.AST_NODE_TYPES.TemplateLiteral, expressions: [] }, eff.constTrue).with({ type: types.AST_NODE_TYPES.Identifier }, () => !node.computed).otherwise(eff.constFalse);
|
|
2687
|
+
}
|
|
2695
2688
|
function getName3(node) {
|
|
2696
2689
|
if (AST11__namespace.isTsOnlyExpression(node)) {
|
|
2697
2690
|
return getName3(node.expression);
|
|
@@ -2771,7 +2764,7 @@ var no_unused_class_component_members_default = createRule({
|
|
|
2771
2764
|
if (node.static) {
|
|
2772
2765
|
return;
|
|
2773
2766
|
}
|
|
2774
|
-
if (
|
|
2767
|
+
if (isKeyLiteral2(node, node.key)) {
|
|
2775
2768
|
propertyDefs.get(currentClass)?.add(node.key);
|
|
2776
2769
|
}
|
|
2777
2770
|
}
|
|
@@ -2792,7 +2785,7 @@ var no_unused_class_component_members_default = createRule({
|
|
|
2792
2785
|
if (!core.isClassComponent(currentClass) || currentMethod.static) {
|
|
2793
2786
|
return;
|
|
2794
2787
|
}
|
|
2795
|
-
if (!AST11__namespace.isThisExpression(node.object) || !
|
|
2788
|
+
if (!AST11__namespace.isThisExpression(node.object) || !isKeyLiteral2(node, node.property)) {
|
|
2796
2789
|
return;
|
|
2797
2790
|
}
|
|
2798
2791
|
if (node.parent.type === types.AST_NODE_TYPES.AssignmentExpression && node.parent.left === node) {
|
|
@@ -2819,7 +2812,7 @@ var no_unused_class_component_members_default = createRule({
|
|
|
2819
2812
|
}
|
|
2820
2813
|
if (node.init != null && AST11__namespace.isThisExpression(node.init) && node.id.type === types.AST_NODE_TYPES.ObjectPattern) {
|
|
2821
2814
|
for (const prop of node.id.properties) {
|
|
2822
|
-
if (prop.type === types.AST_NODE_TYPES.Property &&
|
|
2815
|
+
if (prop.type === types.AST_NODE_TYPES.Property && isKeyLiteral2(prop, prop.key)) {
|
|
2823
2816
|
const keyName = getName3(prop.key);
|
|
2824
2817
|
if (keyName != null) {
|
|
2825
2818
|
propertyUsages.get(currentClass)?.add(keyName);
|
|
@@ -2836,6 +2829,9 @@ var RULE_NAME44 = "no-unused-state";
|
|
|
2836
2829
|
var RULE_FEATURES44 = [
|
|
2837
2830
|
"CHK"
|
|
2838
2831
|
];
|
|
2832
|
+
function isKeyLiteral3(node, key) {
|
|
2833
|
+
return tsPattern.match(key).with({ type: types.AST_NODE_TYPES.Literal }, eff.constTrue).with({ type: types.AST_NODE_TYPES.TemplateLiteral, expressions: [] }, eff.constTrue).with({ type: types.AST_NODE_TYPES.Identifier }, () => !node.computed).otherwise(eff.constFalse);
|
|
2834
|
+
}
|
|
2839
2835
|
function getName4(node) {
|
|
2840
2836
|
if (AST11__namespace.isTsOnlyExpression(node)) {
|
|
2841
2837
|
return getName4(node.expression);
|
|
@@ -2989,7 +2985,7 @@ var no_unused_state_default = createRule({
|
|
|
2989
2985
|
return;
|
|
2990
2986
|
}
|
|
2991
2987
|
const hasState = node.id.properties.some((prop) => {
|
|
2992
|
-
if (prop.type === types.AST_NODE_TYPES.Property &&
|
|
2988
|
+
if (prop.type === types.AST_NODE_TYPES.Property && isKeyLiteral3(prop, prop.key)) {
|
|
2993
2989
|
return getName4(prop.key) === "state";
|
|
2994
2990
|
}
|
|
2995
2991
|
return false;
|
|
@@ -3089,6 +3085,20 @@ var no_use_context_default = createRule({
|
|
|
3089
3085
|
},
|
|
3090
3086
|
defaultOptions: []
|
|
3091
3087
|
});
|
|
3088
|
+
function getAssociatedTokens(context, node) {
|
|
3089
|
+
{
|
|
3090
|
+
const tokenBefore = context.sourceCode.getTokenBefore(node);
|
|
3091
|
+
const tokenAfter = context.sourceCode.getTokenAfter(node);
|
|
3092
|
+
const tokens = [];
|
|
3093
|
+
if (tokenAfter?.value !== "," && tokenBefore?.value === ",") {
|
|
3094
|
+
tokens.push(tokenBefore);
|
|
3095
|
+
}
|
|
3096
|
+
if (tokenAfter?.value === ",") {
|
|
3097
|
+
tokens.push(tokenAfter);
|
|
3098
|
+
}
|
|
3099
|
+
return tokens;
|
|
3100
|
+
}
|
|
3101
|
+
}
|
|
3092
3102
|
var RULE_NAME46 = "no-useless-fragment";
|
|
3093
3103
|
var defaultOptions = [{
|
|
3094
3104
|
allowExpressions: true
|
|
@@ -3107,12 +3117,12 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3107
3117
|
return null;
|
|
3108
3118
|
}
|
|
3109
3119
|
if (node.children.some(
|
|
3110
|
-
(child) =>
|
|
3120
|
+
(child) => JSX8__namespace.isLiteral(child) && !JSX8__namespace.isWhiteSpace(child) || AST11__namespace.is(types.AST_NODE_TYPES.JSXExpressionContainer)(child)
|
|
3111
3121
|
)) {
|
|
3112
3122
|
return null;
|
|
3113
3123
|
}
|
|
3114
3124
|
}
|
|
3115
|
-
if (
|
|
3125
|
+
if (JSX8__namespace.isUserDefinedElement(node.parent)) {
|
|
3116
3126
|
return null;
|
|
3117
3127
|
}
|
|
3118
3128
|
const opener = node.type === types.AST_NODE_TYPES.JSXFragment ? node.openingFragment : node.openingElement;
|
|
@@ -3121,10 +3131,10 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3121
3131
|
return fixer.replaceText(node, trimLikeReact(childrenText));
|
|
3122
3132
|
}
|
|
3123
3133
|
const initialScope = context.sourceCode.getScope(node);
|
|
3124
|
-
if (
|
|
3134
|
+
if (JSX8__namespace.isKeyedElement(node, initialScope)) {
|
|
3125
3135
|
return;
|
|
3126
3136
|
}
|
|
3127
|
-
if (
|
|
3137
|
+
if (JSX8__namespace.isBuiltInElement(node.parent)) {
|
|
3128
3138
|
context.report({
|
|
3129
3139
|
messageId: "uselessFragment",
|
|
3130
3140
|
node,
|
|
@@ -3148,7 +3158,7 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3148
3158
|
const isChildElement = AST11__namespace.isOneOf([types.AST_NODE_TYPES.JSXElement, types.AST_NODE_TYPES.JSXFragment])(node.parent);
|
|
3149
3159
|
switch (true) {
|
|
3150
3160
|
// <Foo content={<>ee eeee eeee ...</>} />
|
|
3151
|
-
case (allowExpressions && !isChildElement && node.children.length === 1 &&
|
|
3161
|
+
case (allowExpressions && !isChildElement && node.children.length === 1 && JSX8__namespace.isLiteral(node.children.at(0))): {
|
|
3152
3162
|
return;
|
|
3153
3163
|
}
|
|
3154
3164
|
// <Foo><>hello, world</></Foo>
|
|
@@ -3175,7 +3185,7 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3175
3185
|
return;
|
|
3176
3186
|
}
|
|
3177
3187
|
}
|
|
3178
|
-
const nonPaddingChildren = node.children.filter((child) => !
|
|
3188
|
+
const nonPaddingChildren = node.children.filter((child) => !JSX8__namespace.isPaddingSpaces(child));
|
|
3179
3189
|
const firstNonPaddingChild = nonPaddingChildren.at(0);
|
|
3180
3190
|
switch (true) {
|
|
3181
3191
|
case nonPaddingChildren.length === 0:
|
|
@@ -3220,7 +3230,7 @@ var no_useless_fragment_default = createRule({
|
|
|
3220
3230
|
const { allowExpressions = true } = option;
|
|
3221
3231
|
return {
|
|
3222
3232
|
JSXElement(node) {
|
|
3223
|
-
if (!
|
|
3233
|
+
if (!JSX8__namespace.isFragmentElement(node)) return;
|
|
3224
3234
|
checkAndReport(context, node, allowExpressions);
|
|
3225
3235
|
},
|
|
3226
3236
|
JSXFragment(node) {
|
|
@@ -3438,7 +3448,7 @@ var prefer_shorthand_boolean_default = createRule({
|
|
|
3438
3448
|
return {
|
|
3439
3449
|
JSXAttribute(node) {
|
|
3440
3450
|
const { value } = node;
|
|
3441
|
-
const propName =
|
|
3451
|
+
const propName = JSX8__namespace.getAttributeName(node);
|
|
3442
3452
|
const hasValueTrue = value?.type === types.AST_NODE_TYPES.JSXExpressionContainer && value.expression.type === types.AST_NODE_TYPES.Literal && value.expression.value === true;
|
|
3443
3453
|
if (!hasValueTrue) {
|
|
3444
3454
|
return;
|
|
@@ -3478,7 +3488,7 @@ var prefer_shorthand_fragment_default = createRule({
|
|
|
3478
3488
|
create(context) {
|
|
3479
3489
|
return {
|
|
3480
3490
|
JSXElement(node) {
|
|
3481
|
-
if (!
|
|
3491
|
+
if (!JSX8__namespace.isFragmentElement(node)) return;
|
|
3482
3492
|
const hasAttributes = node.openingElement.attributes.length > 0;
|
|
3483
3493
|
if (hasAttributes) {
|
|
3484
3494
|
return;
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRuleForPlugin, getSettingsFromContext, unsafeDecodeSettings, DEFAULT_ESLINT_REACT_SETTINGS } from '@eslint-react/shared';
|
|
2
|
-
import * as
|
|
2
|
+
import * as JSX8 from '@eslint-react/jsx';
|
|
3
3
|
import * as AST11 from '@eslint-react/ast';
|
|
4
|
-
import { isForwardRefCall, isClassComponent, isThisSetState, isChildrenCount, isChildrenForEach, isChildrenMap, isChildrenOnly, isChildrenToArray, useComponentCollectorLegacy, isComponentDidCatch, isGetDerivedStateFromError, isCloneElementCall, isCreateRefCall, isComponentName, useComponentCollector, DEFAULT_COMPONENT_HINT, ERComponentFlag, DISPLAY_NAME_ASSIGNMENT_SELECTOR, isCreateContextCall, isChildrenToArrayCall, ERComponentHint, isDirectValueOfRenderPropertyLoose, isDeclaredInRenderPropLoose, isInsideRenderMethod, isCreateElementCall, isReactHookCall, isReactHookCallWithNameAlias, isGetDerivedStateFromProps, isInitializedFromReact } from '@eslint-react/core';
|
|
5
|
-
import { _, getOrUpdate, identity } from '@eslint-react/eff';
|
|
4
|
+
import { isForwardRefCall, isClassComponent, isThisSetState, isChildrenCount, isChildrenForEach, isChildrenMap, isChildrenOnly, isChildrenToArray, useComponentCollectorLegacy, isComponentDidCatch, isGetDerivedStateFromError, isCloneElementCall, isCreateRefCall, isComponentName, useComponentCollector, DEFAULT_COMPONENT_HINT, ERComponentFlag, getInstanceId, isInstanceIdEqual, DISPLAY_NAME_ASSIGNMENT_SELECTOR, isCreateContextCall, isChildrenToArrayCall, ERComponentHint, isDirectValueOfRenderPropertyLoose, isDeclaredInRenderPropLoose, isInsideRenderMethod, isCreateElementCall, isReactHookCall, isReactHookCallWithNameAlias, isGetDerivedStateFromProps, isInitializedFromReact } from '@eslint-react/core';
|
|
5
|
+
import { _, getOrUpdate, constTrue, constFalse, identity } from '@eslint-react/eff';
|
|
6
6
|
import { AST_NODE_TYPES } from '@typescript-eslint/types';
|
|
7
7
|
import { isMatching, match, P } from 'ts-pattern';
|
|
8
8
|
import { compare } from 'compare-versions';
|
|
@@ -110,25 +110,9 @@ var settings3 = {
|
|
|
110
110
|
|
|
111
111
|
// package.json
|
|
112
112
|
var name4 = "eslint-plugin-react-x";
|
|
113
|
-
var version = "1.28.1-beta.
|
|
113
|
+
var version = "1.28.1-beta.7";
|
|
114
114
|
var createRule = createRuleForPlugin("x");
|
|
115
115
|
|
|
116
|
-
// src/utils/get-associated-tokens.ts
|
|
117
|
-
function getAssociatedTokens(context, node) {
|
|
118
|
-
{
|
|
119
|
-
const tokenBefore = context.sourceCode.getTokenBefore(node);
|
|
120
|
-
const tokenAfter = context.sourceCode.getTokenAfter(node);
|
|
121
|
-
const tokens = [];
|
|
122
|
-
if (tokenAfter?.value !== "," && tokenBefore?.value === ",") {
|
|
123
|
-
tokens.push(tokenBefore);
|
|
124
|
-
}
|
|
125
|
-
if (tokenAfter?.value === ",") {
|
|
126
|
-
tokens.push(tokenAfter);
|
|
127
|
-
}
|
|
128
|
-
return tokens;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
116
|
// src/rules/avoid-shorthand-boolean.ts
|
|
133
117
|
var RULE_NAME = "avoid-shorthand-boolean";
|
|
134
118
|
var RULE_FEATURES = [
|
|
@@ -156,7 +140,7 @@ var avoid_shorthand_boolean_default = createRule({
|
|
|
156
140
|
messageId: "avoidShorthandBoolean",
|
|
157
141
|
node,
|
|
158
142
|
data: {
|
|
159
|
-
propName:
|
|
143
|
+
propName: JSX8.getAttributeName(node)
|
|
160
144
|
},
|
|
161
145
|
fix: (fixer) => fixer.insertTextAfter(node.name, `={true}`)
|
|
162
146
|
});
|
|
@@ -241,6 +225,9 @@ var RULE_NAME4 = "no-access-state-in-setstate";
|
|
|
241
225
|
var RULE_FEATURES4 = [
|
|
242
226
|
"CHK"
|
|
243
227
|
];
|
|
228
|
+
function isKeyLiteral(node, key) {
|
|
229
|
+
return match(key).with({ type: AST_NODE_TYPES.Literal }, constTrue).with({ type: AST_NODE_TYPES.TemplateLiteral, expressions: [] }, constTrue).with({ type: AST_NODE_TYPES.Identifier }, () => !node.computed).otherwise(constFalse);
|
|
230
|
+
}
|
|
244
231
|
function getName(node) {
|
|
245
232
|
if (AST11.isTsOnlyExpression(node)) {
|
|
246
233
|
return getName(node.expression);
|
|
@@ -351,7 +338,7 @@ var no_access_state_in_setstate_default = createRule({
|
|
|
351
338
|
return;
|
|
352
339
|
}
|
|
353
340
|
const hasState = node.id.properties.some(
|
|
354
|
-
(prop) => prop.type === AST_NODE_TYPES.Property &&
|
|
341
|
+
(prop) => prop.type === AST_NODE_TYPES.Property && isKeyLiteral(prop, prop.key) && getName(prop.key) === "state"
|
|
355
342
|
);
|
|
356
343
|
if (!hasState) {
|
|
357
344
|
return;
|
|
@@ -706,7 +693,7 @@ var no_children_prop_default = createRule({
|
|
|
706
693
|
create(context) {
|
|
707
694
|
return {
|
|
708
695
|
JSXElement(node) {
|
|
709
|
-
const attribute =
|
|
696
|
+
const attribute = JSX8.getAttribute(
|
|
710
697
|
"children",
|
|
711
698
|
node.openingElement.attributes,
|
|
712
699
|
context.sourceCode.getScope(node)
|
|
@@ -925,7 +912,7 @@ var RULE_FEATURES16 = [
|
|
|
925
912
|
"MOD"
|
|
926
913
|
];
|
|
927
914
|
function isComponentWillMount(node) {
|
|
928
|
-
return AST11.
|
|
915
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillMount";
|
|
929
916
|
}
|
|
930
917
|
var no_component_will_mount_default = createRule({
|
|
931
918
|
meta: {
|
|
@@ -978,7 +965,7 @@ var RULE_FEATURES17 = [
|
|
|
978
965
|
"MOD"
|
|
979
966
|
];
|
|
980
967
|
function isComponentWillUpdate(node) {
|
|
981
|
-
return AST11.
|
|
968
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillReceiveProps";
|
|
982
969
|
}
|
|
983
970
|
var no_component_will_receive_props_default = createRule({
|
|
984
971
|
meta: {
|
|
@@ -1031,7 +1018,7 @@ var RULE_FEATURES18 = [
|
|
|
1031
1018
|
"MOD"
|
|
1032
1019
|
];
|
|
1033
1020
|
function isComponentWillUpdate2(node) {
|
|
1034
|
-
return AST11.
|
|
1021
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
|
|
1035
1022
|
}
|
|
1036
1023
|
var no_component_will_update_default = createRule({
|
|
1037
1024
|
meta: {
|
|
@@ -1105,7 +1092,7 @@ var no_context_provider_default = createRule({
|
|
|
1105
1092
|
}
|
|
1106
1093
|
return {
|
|
1107
1094
|
JSXElement(node) {
|
|
1108
|
-
const [name5, ...rest] =
|
|
1095
|
+
const [name5, ...rest] = JSX8.getElementName(node).split(".").reverse();
|
|
1109
1096
|
if (name5 !== "Provider") return;
|
|
1110
1097
|
const contextName = rest.reverse().join(".");
|
|
1111
1098
|
context.report({
|
|
@@ -1238,7 +1225,7 @@ function isAssignmentToThisState(node) {
|
|
|
1238
1225
|
return left.type === AST_NODE_TYPES.MemberExpression && AST11.isThisExpression(left.object) && getName2(left.property) === "state";
|
|
1239
1226
|
}
|
|
1240
1227
|
function isConstructorFunction(node) {
|
|
1241
|
-
return AST11.isOneOf([AST_NODE_TYPES.FunctionDeclaration, AST_NODE_TYPES.FunctionExpression])(node) && AST11.
|
|
1228
|
+
return AST11.isOneOf([AST_NODE_TYPES.FunctionDeclaration, AST_NODE_TYPES.FunctionExpression])(node) && AST11.isMethodOrProperty(node.parent) && node.parent.key.type === AST_NODE_TYPES.Identifier && node.parent.key.name === "constructor";
|
|
1242
1229
|
}
|
|
1243
1230
|
var no_direct_mutation_state_default = createRule({
|
|
1244
1231
|
meta: {
|
|
@@ -1534,7 +1521,7 @@ var no_implicit_key_default = createRule({
|
|
|
1534
1521
|
return {
|
|
1535
1522
|
JSXOpeningElement(node) {
|
|
1536
1523
|
const initialScope = context.sourceCode.getScope(node);
|
|
1537
|
-
const keyPropFound =
|
|
1524
|
+
const keyPropFound = JSX8.getAttribute("key", node.attributes, initialScope);
|
|
1538
1525
|
const keyPropOnElement = node.attributes.some(
|
|
1539
1526
|
(n) => n.type === AST_NODE_TYPES.JSXAttribute && n.name.type === AST_NODE_TYPES.JSXIdentifier && n.name.name === "key"
|
|
1540
1527
|
);
|
|
@@ -1794,7 +1781,7 @@ var no_missing_context_display_name_default = createRule({
|
|
|
1794
1781
|
},
|
|
1795
1782
|
"Program:exit"() {
|
|
1796
1783
|
for (const call of createCalls) {
|
|
1797
|
-
const id =
|
|
1784
|
+
const id = getInstanceId(call);
|
|
1798
1785
|
if (id == null) {
|
|
1799
1786
|
context.report({
|
|
1800
1787
|
messageId: "noMissingContextDisplayName",
|
|
@@ -1806,10 +1793,7 @@ var no_missing_context_display_name_default = createRule({
|
|
|
1806
1793
|
const left = node.left;
|
|
1807
1794
|
if (left.type !== AST_NODE_TYPES.MemberExpression) return false;
|
|
1808
1795
|
const object = left.object;
|
|
1809
|
-
return
|
|
1810
|
-
context.sourceCode.getScope(id),
|
|
1811
|
-
context.sourceCode.getScope(object)
|
|
1812
|
-
]);
|
|
1796
|
+
return isInstanceIdEqual(context, id, object);
|
|
1813
1797
|
});
|
|
1814
1798
|
if (!hasDisplayNameAssignment) {
|
|
1815
1799
|
context.report({
|
|
@@ -1847,7 +1831,7 @@ var no_missing_key_default = createRule({
|
|
|
1847
1831
|
switch (node.type) {
|
|
1848
1832
|
case AST_NODE_TYPES.JSXElement: {
|
|
1849
1833
|
const initialScope = context.sourceCode.getScope(node);
|
|
1850
|
-
if (!
|
|
1834
|
+
if (!JSX8.hasAttribute("key", node.openingElement.attributes, initialScope)) {
|
|
1851
1835
|
return {
|
|
1852
1836
|
messageId: "missingKey",
|
|
1853
1837
|
node
|
|
@@ -1908,7 +1892,7 @@ var no_missing_key_default = createRule({
|
|
|
1908
1892
|
}
|
|
1909
1893
|
const initialScope = context.sourceCode.getScope(node);
|
|
1910
1894
|
for (const element of elements) {
|
|
1911
|
-
if (!
|
|
1895
|
+
if (!JSX8.hasAttribute("key", element.openingElement.attributes, initialScope)) {
|
|
1912
1896
|
context.report({
|
|
1913
1897
|
messageId: "missingKey",
|
|
1914
1898
|
node: element
|
|
@@ -2010,7 +1994,7 @@ var no_nested_components_default = createRule({
|
|
|
2010
1994
|
continue;
|
|
2011
1995
|
}
|
|
2012
1996
|
const isInsideProperty = component.parent.type === AST_NODE_TYPES.Property;
|
|
2013
|
-
const isInsideJSXPropValue = component.parent.type === AST_NODE_TYPES.JSXAttribute ||
|
|
1997
|
+
const isInsideJSXPropValue = component.parent.type === AST_NODE_TYPES.JSXAttribute || JSX8.findParentAttribute(node, (n) => n.value?.type === AST_NODE_TYPES.JSXExpressionContainer) != null;
|
|
2014
1998
|
if (isInsideJSXPropValue) {
|
|
2015
1999
|
if (!isDeclaredInRenderPropLoose(component)) {
|
|
2016
2000
|
context.report({
|
|
@@ -2139,7 +2123,7 @@ var RULE_FEATURES33 = [
|
|
|
2139
2123
|
"CHK"
|
|
2140
2124
|
];
|
|
2141
2125
|
function isShouldComponentUpdate(node) {
|
|
2142
|
-
return AST11.
|
|
2126
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
|
|
2143
2127
|
}
|
|
2144
2128
|
var no_redundant_should_component_update_default = createRule({
|
|
2145
2129
|
meta: {
|
|
@@ -2190,7 +2174,7 @@ var RULE_FEATURES34 = [
|
|
|
2190
2174
|
"CHK"
|
|
2191
2175
|
];
|
|
2192
2176
|
function isComponentDidMount(node) {
|
|
2193
|
-
return AST11.
|
|
2177
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
|
|
2194
2178
|
}
|
|
2195
2179
|
var no_set_state_in_component_did_mount_default = createRule({
|
|
2196
2180
|
meta: {
|
|
@@ -2235,7 +2219,7 @@ var RULE_FEATURES35 = [
|
|
|
2235
2219
|
"CHK"
|
|
2236
2220
|
];
|
|
2237
2221
|
function isComponentDidUpdate(node) {
|
|
2238
|
-
return AST11.
|
|
2222
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidUpdate";
|
|
2239
2223
|
}
|
|
2240
2224
|
var no_set_state_in_component_did_update_default = createRule({
|
|
2241
2225
|
meta: {
|
|
@@ -2280,7 +2264,7 @@ var RULE_FEATURES36 = [
|
|
|
2280
2264
|
"CHK"
|
|
2281
2265
|
];
|
|
2282
2266
|
function isComponentWillUpdate3(node) {
|
|
2283
|
-
return AST11.
|
|
2267
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
|
|
2284
2268
|
}
|
|
2285
2269
|
var no_set_state_in_component_will_update_default = createRule({
|
|
2286
2270
|
meta: {
|
|
@@ -2371,7 +2355,7 @@ var RULE_FEATURES38 = [
|
|
|
2371
2355
|
"CHK"
|
|
2372
2356
|
];
|
|
2373
2357
|
function isUnsafeComponentWillMount(node) {
|
|
2374
|
-
return AST11.
|
|
2358
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillMount";
|
|
2375
2359
|
}
|
|
2376
2360
|
var no_unsafe_component_will_mount_default = createRule({
|
|
2377
2361
|
meta: {
|
|
@@ -2416,7 +2400,7 @@ var RULE_FEATURES39 = [
|
|
|
2416
2400
|
"CHK"
|
|
2417
2401
|
];
|
|
2418
2402
|
function isUnsafeComponentWillReceiveProps(node) {
|
|
2419
|
-
return AST11.
|
|
2403
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillReceiveProps";
|
|
2420
2404
|
}
|
|
2421
2405
|
var no_unsafe_component_will_receive_props_default = createRule({
|
|
2422
2406
|
meta: {
|
|
@@ -2461,7 +2445,7 @@ var RULE_FEATURES40 = [
|
|
|
2461
2445
|
"CHK"
|
|
2462
2446
|
];
|
|
2463
2447
|
function isUnsafeComponentWillUpdate(node) {
|
|
2464
|
-
return AST11.
|
|
2448
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillUpdate";
|
|
2465
2449
|
}
|
|
2466
2450
|
var no_unsafe_component_will_update_default = createRule({
|
|
2467
2451
|
meta: {
|
|
@@ -2519,18 +2503,17 @@ var no_unstable_context_value_default = createRule({
|
|
|
2519
2503
|
},
|
|
2520
2504
|
name: RULE_NAME41,
|
|
2521
2505
|
create(context) {
|
|
2506
|
+
const { version: version2 } = getSettingsFromContext(context);
|
|
2507
|
+
const isReact18OrBelow = compare(version2, "19.0.0", "<");
|
|
2522
2508
|
const { ctx, listeners } = useComponentCollector(context);
|
|
2523
2509
|
const constructions = /* @__PURE__ */ new Map();
|
|
2524
2510
|
return {
|
|
2525
2511
|
...listeners,
|
|
2526
2512
|
JSXOpeningElement(node) {
|
|
2527
|
-
const
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
if (openingElementName.property.name !== "Provider") {
|
|
2532
|
-
return;
|
|
2533
|
-
}
|
|
2513
|
+
const fullName = JSX8.getElementName(node.parent);
|
|
2514
|
+
const selfName = fullName.split(".").at(-1);
|
|
2515
|
+
if (selfName == null) return;
|
|
2516
|
+
if (!isContextName(selfName, isReact18OrBelow)) return;
|
|
2534
2517
|
const functionEntry = ctx.getCurrentEntry();
|
|
2535
2518
|
if (functionEntry == null) return;
|
|
2536
2519
|
const attribute = node.attributes.find(
|
|
@@ -2569,6 +2552,13 @@ var no_unstable_context_value_default = createRule({
|
|
|
2569
2552
|
},
|
|
2570
2553
|
defaultOptions: []
|
|
2571
2554
|
});
|
|
2555
|
+
function isContextName(name5, isReact18OrBelow) {
|
|
2556
|
+
if (name5 === "Provider") return true;
|
|
2557
|
+
if (!isReact18OrBelow) {
|
|
2558
|
+
return name5.endsWith("Context") || name5.endsWith("CONTEXT");
|
|
2559
|
+
}
|
|
2560
|
+
return false;
|
|
2561
|
+
}
|
|
2572
2562
|
var RULE_NAME42 = "no-unstable-default-props";
|
|
2573
2563
|
var RULE_FEATURES42 = [
|
|
2574
2564
|
"CHK"
|
|
@@ -2665,6 +2655,9 @@ var LIFECYCLE_METHODS = /* @__PURE__ */ new Set([
|
|
|
2665
2655
|
"UNSAFE_componentWillReceiveProps",
|
|
2666
2656
|
"UNSAFE_componentWillUpdate"
|
|
2667
2657
|
]);
|
|
2658
|
+
function isKeyLiteral2(node, key) {
|
|
2659
|
+
return match(key).with({ type: AST_NODE_TYPES.Literal }, constTrue).with({ type: AST_NODE_TYPES.TemplateLiteral, expressions: [] }, constTrue).with({ type: AST_NODE_TYPES.Identifier }, () => !node.computed).otherwise(constFalse);
|
|
2660
|
+
}
|
|
2668
2661
|
function getName3(node) {
|
|
2669
2662
|
if (AST11.isTsOnlyExpression(node)) {
|
|
2670
2663
|
return getName3(node.expression);
|
|
@@ -2744,7 +2737,7 @@ var no_unused_class_component_members_default = createRule({
|
|
|
2744
2737
|
if (node.static) {
|
|
2745
2738
|
return;
|
|
2746
2739
|
}
|
|
2747
|
-
if (
|
|
2740
|
+
if (isKeyLiteral2(node, node.key)) {
|
|
2748
2741
|
propertyDefs.get(currentClass)?.add(node.key);
|
|
2749
2742
|
}
|
|
2750
2743
|
}
|
|
@@ -2765,7 +2758,7 @@ var no_unused_class_component_members_default = createRule({
|
|
|
2765
2758
|
if (!isClassComponent(currentClass) || currentMethod.static) {
|
|
2766
2759
|
return;
|
|
2767
2760
|
}
|
|
2768
|
-
if (!AST11.isThisExpression(node.object) || !
|
|
2761
|
+
if (!AST11.isThisExpression(node.object) || !isKeyLiteral2(node, node.property)) {
|
|
2769
2762
|
return;
|
|
2770
2763
|
}
|
|
2771
2764
|
if (node.parent.type === AST_NODE_TYPES.AssignmentExpression && node.parent.left === node) {
|
|
@@ -2792,7 +2785,7 @@ var no_unused_class_component_members_default = createRule({
|
|
|
2792
2785
|
}
|
|
2793
2786
|
if (node.init != null && AST11.isThisExpression(node.init) && node.id.type === AST_NODE_TYPES.ObjectPattern) {
|
|
2794
2787
|
for (const prop of node.id.properties) {
|
|
2795
|
-
if (prop.type === AST_NODE_TYPES.Property &&
|
|
2788
|
+
if (prop.type === AST_NODE_TYPES.Property && isKeyLiteral2(prop, prop.key)) {
|
|
2796
2789
|
const keyName = getName3(prop.key);
|
|
2797
2790
|
if (keyName != null) {
|
|
2798
2791
|
propertyUsages.get(currentClass)?.add(keyName);
|
|
@@ -2809,6 +2802,9 @@ var RULE_NAME44 = "no-unused-state";
|
|
|
2809
2802
|
var RULE_FEATURES44 = [
|
|
2810
2803
|
"CHK"
|
|
2811
2804
|
];
|
|
2805
|
+
function isKeyLiteral3(node, key) {
|
|
2806
|
+
return match(key).with({ type: AST_NODE_TYPES.Literal }, constTrue).with({ type: AST_NODE_TYPES.TemplateLiteral, expressions: [] }, constTrue).with({ type: AST_NODE_TYPES.Identifier }, () => !node.computed).otherwise(constFalse);
|
|
2807
|
+
}
|
|
2812
2808
|
function getName4(node) {
|
|
2813
2809
|
if (AST11.isTsOnlyExpression(node)) {
|
|
2814
2810
|
return getName4(node.expression);
|
|
@@ -2962,7 +2958,7 @@ var no_unused_state_default = createRule({
|
|
|
2962
2958
|
return;
|
|
2963
2959
|
}
|
|
2964
2960
|
const hasState = node.id.properties.some((prop) => {
|
|
2965
|
-
if (prop.type === AST_NODE_TYPES.Property &&
|
|
2961
|
+
if (prop.type === AST_NODE_TYPES.Property && isKeyLiteral3(prop, prop.key)) {
|
|
2966
2962
|
return getName4(prop.key) === "state";
|
|
2967
2963
|
}
|
|
2968
2964
|
return false;
|
|
@@ -3062,6 +3058,20 @@ var no_use_context_default = createRule({
|
|
|
3062
3058
|
},
|
|
3063
3059
|
defaultOptions: []
|
|
3064
3060
|
});
|
|
3061
|
+
function getAssociatedTokens(context, node) {
|
|
3062
|
+
{
|
|
3063
|
+
const tokenBefore = context.sourceCode.getTokenBefore(node);
|
|
3064
|
+
const tokenAfter = context.sourceCode.getTokenAfter(node);
|
|
3065
|
+
const tokens = [];
|
|
3066
|
+
if (tokenAfter?.value !== "," && tokenBefore?.value === ",") {
|
|
3067
|
+
tokens.push(tokenBefore);
|
|
3068
|
+
}
|
|
3069
|
+
if (tokenAfter?.value === ",") {
|
|
3070
|
+
tokens.push(tokenAfter);
|
|
3071
|
+
}
|
|
3072
|
+
return tokens;
|
|
3073
|
+
}
|
|
3074
|
+
}
|
|
3065
3075
|
var RULE_NAME46 = "no-useless-fragment";
|
|
3066
3076
|
var defaultOptions = [{
|
|
3067
3077
|
allowExpressions: true
|
|
@@ -3080,12 +3090,12 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3080
3090
|
return null;
|
|
3081
3091
|
}
|
|
3082
3092
|
if (node.children.some(
|
|
3083
|
-
(child) =>
|
|
3093
|
+
(child) => JSX8.isLiteral(child) && !JSX8.isWhiteSpace(child) || AST11.is(AST_NODE_TYPES.JSXExpressionContainer)(child)
|
|
3084
3094
|
)) {
|
|
3085
3095
|
return null;
|
|
3086
3096
|
}
|
|
3087
3097
|
}
|
|
3088
|
-
if (
|
|
3098
|
+
if (JSX8.isUserDefinedElement(node.parent)) {
|
|
3089
3099
|
return null;
|
|
3090
3100
|
}
|
|
3091
3101
|
const opener = node.type === AST_NODE_TYPES.JSXFragment ? node.openingFragment : node.openingElement;
|
|
@@ -3094,10 +3104,10 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3094
3104
|
return fixer.replaceText(node, trimLikeReact(childrenText));
|
|
3095
3105
|
}
|
|
3096
3106
|
const initialScope = context.sourceCode.getScope(node);
|
|
3097
|
-
if (
|
|
3107
|
+
if (JSX8.isKeyedElement(node, initialScope)) {
|
|
3098
3108
|
return;
|
|
3099
3109
|
}
|
|
3100
|
-
if (
|
|
3110
|
+
if (JSX8.isBuiltInElement(node.parent)) {
|
|
3101
3111
|
context.report({
|
|
3102
3112
|
messageId: "uselessFragment",
|
|
3103
3113
|
node,
|
|
@@ -3121,7 +3131,7 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3121
3131
|
const isChildElement = AST11.isOneOf([AST_NODE_TYPES.JSXElement, AST_NODE_TYPES.JSXFragment])(node.parent);
|
|
3122
3132
|
switch (true) {
|
|
3123
3133
|
// <Foo content={<>ee eeee eeee ...</>} />
|
|
3124
|
-
case (allowExpressions && !isChildElement && node.children.length === 1 &&
|
|
3134
|
+
case (allowExpressions && !isChildElement && node.children.length === 1 && JSX8.isLiteral(node.children.at(0))): {
|
|
3125
3135
|
return;
|
|
3126
3136
|
}
|
|
3127
3137
|
// <Foo><>hello, world</></Foo>
|
|
@@ -3148,7 +3158,7 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3148
3158
|
return;
|
|
3149
3159
|
}
|
|
3150
3160
|
}
|
|
3151
|
-
const nonPaddingChildren = node.children.filter((child) => !
|
|
3161
|
+
const nonPaddingChildren = node.children.filter((child) => !JSX8.isPaddingSpaces(child));
|
|
3152
3162
|
const firstNonPaddingChild = nonPaddingChildren.at(0);
|
|
3153
3163
|
switch (true) {
|
|
3154
3164
|
case nonPaddingChildren.length === 0:
|
|
@@ -3193,7 +3203,7 @@ var no_useless_fragment_default = createRule({
|
|
|
3193
3203
|
const { allowExpressions = true } = option;
|
|
3194
3204
|
return {
|
|
3195
3205
|
JSXElement(node) {
|
|
3196
|
-
if (!
|
|
3206
|
+
if (!JSX8.isFragmentElement(node)) return;
|
|
3197
3207
|
checkAndReport(context, node, allowExpressions);
|
|
3198
3208
|
},
|
|
3199
3209
|
JSXFragment(node) {
|
|
@@ -3411,7 +3421,7 @@ var prefer_shorthand_boolean_default = createRule({
|
|
|
3411
3421
|
return {
|
|
3412
3422
|
JSXAttribute(node) {
|
|
3413
3423
|
const { value } = node;
|
|
3414
|
-
const propName =
|
|
3424
|
+
const propName = JSX8.getAttributeName(node);
|
|
3415
3425
|
const hasValueTrue = value?.type === AST_NODE_TYPES.JSXExpressionContainer && value.expression.type === AST_NODE_TYPES.Literal && value.expression.value === true;
|
|
3416
3426
|
if (!hasValueTrue) {
|
|
3417
3427
|
return;
|
|
@@ -3451,7 +3461,7 @@ var prefer_shorthand_fragment_default = createRule({
|
|
|
3451
3461
|
create(context) {
|
|
3452
3462
|
return {
|
|
3453
3463
|
JSXElement(node) {
|
|
3454
|
-
if (!
|
|
3464
|
+
if (!JSX8.isFragmentElement(node)) return;
|
|
3455
3465
|
const hasAttributes = node.openingElement.attributes.length > 0;
|
|
3456
3466
|
if (hasAttributes) {
|
|
3457
3467
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-react-x",
|
|
3
|
-
"version": "1.28.1-beta.
|
|
3
|
+
"version": "1.28.1-beta.7",
|
|
4
4
|
"description": "A set of composable linting rules for libraries and frameworks that use React as a UI runtime.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -50,12 +50,12 @@
|
|
|
50
50
|
"is-immutable-type": "^5.0.1",
|
|
51
51
|
"string-ts": "^2.2.1",
|
|
52
52
|
"ts-pattern": "^5.6.2",
|
|
53
|
-
"@eslint-react/ast": "1.28.1-beta.
|
|
54
|
-
"@eslint-react/core": "1.28.1-beta.
|
|
55
|
-
"@eslint-react/eff": "1.28.1-beta.
|
|
56
|
-
"@eslint-react/
|
|
57
|
-
"@eslint-react/
|
|
58
|
-
"@eslint-react/var": "1.28.1-beta.
|
|
53
|
+
"@eslint-react/ast": "1.28.1-beta.7",
|
|
54
|
+
"@eslint-react/core": "1.28.1-beta.7",
|
|
55
|
+
"@eslint-react/eff": "1.28.1-beta.7",
|
|
56
|
+
"@eslint-react/shared": "1.28.1-beta.7",
|
|
57
|
+
"@eslint-react/jsx": "1.28.1-beta.7",
|
|
58
|
+
"@eslint-react/var": "1.28.1-beta.7"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@types/react": "^19.0.10",
|