eslint-plugin-react-x 1.18.1-beta.1 → 1.18.1-beta.2
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 +2 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +116 -74
- package/dist/index.mjs +115 -73
- package/package.json +8 -8
package/dist/index.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as JSX8 from '@eslint-react/jsx';
|
|
2
2
|
import { F, O, isString, MutRef, isNullable } from '@eslint-react/tools';
|
|
3
3
|
import { createRuleForPlugin, normalizeSettings, decodeSettings, unsafeReadSettings } from '@eslint-react/shared';
|
|
4
4
|
import * as AST11 from '@eslint-react/ast';
|
|
5
5
|
import { isForwardRefCall, isThisSetState, isClassComponent, isChildrenCount, isChildrenForEach, isChildrenMap, isChildrenOnly, isChildrenToArray, useComponentCollectorLegacy, isCloneElementCall, isCreateRefCall, isComponentName, isChildrenToArrayCall, useComponentCollector, ERFunctionComponentFlag, ERComponentHint, isDirectValueOfRenderPropertyLoose, isDeclaredInRenderPropLoose, isInsideCreateElementProps, isInsideRenderMethod, ERClassComponentFlag, isFragmentElement, isCreateElementCall, isInitializedFromReact } from '@eslint-react/core';
|
|
6
6
|
import { AST_NODE_TYPES } from '@typescript-eslint/types';
|
|
7
7
|
import { isMatching, P, match } from 'ts-pattern';
|
|
8
|
-
import * as VAR from '@eslint-react/var';
|
|
9
8
|
import { compare } from 'compare-versions';
|
|
9
|
+
import * as VAR from '@eslint-react/var';
|
|
10
10
|
import { getConstrainedTypeAtLocation, isTypeReadonly } from '@typescript-eslint/type-utils';
|
|
11
11
|
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
12
12
|
import ts from 'typescript';
|
|
@@ -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.
|
|
17
|
+
var version = "1.18.1-beta.2";
|
|
18
18
|
var createRule = createRuleForPlugin("x");
|
|
19
19
|
|
|
20
20
|
// src/rules/avoid-shorthand-boolean.ts
|
|
@@ -38,7 +38,7 @@ var avoid_shorthand_boolean_default = createRule({
|
|
|
38
38
|
messageId: "avoidShorthandBoolean",
|
|
39
39
|
node,
|
|
40
40
|
data: {
|
|
41
|
-
propName:
|
|
41
|
+
propName: JSX8.getPropName(node)
|
|
42
42
|
},
|
|
43
43
|
fix: (fixer) => fixer.insertTextAfter(node.name, `={true}`)
|
|
44
44
|
});
|
|
@@ -541,7 +541,7 @@ var no_children_prop_default = createRule({
|
|
|
541
541
|
return {
|
|
542
542
|
JSXElement(node) {
|
|
543
543
|
const initialScope = context.sourceCode.getScope(node);
|
|
544
|
-
const prop =
|
|
544
|
+
const prop = JSX8.getProp(node.openingElement.attributes, "children", initialScope);
|
|
545
545
|
const reportDescriptor = O.map(prop, (prop2) => ({ messageId: "noChildrenProp", node: prop2 }));
|
|
546
546
|
O.map(reportDescriptor, context.report);
|
|
547
547
|
}
|
|
@@ -841,7 +841,48 @@ var no_component_will_update_default = createRule({
|
|
|
841
841
|
},
|
|
842
842
|
defaultOptions: []
|
|
843
843
|
});
|
|
844
|
-
var RULE_NAME21 = "no-
|
|
844
|
+
var RULE_NAME21 = "no-context-provider";
|
|
845
|
+
var no_context_provider_default = createRule({
|
|
846
|
+
meta: {
|
|
847
|
+
type: "problem",
|
|
848
|
+
docs: {
|
|
849
|
+
description: "disallow the use of '<Context.Provider>'"
|
|
850
|
+
},
|
|
851
|
+
fixable: "code",
|
|
852
|
+
messages: {
|
|
853
|
+
noContextProvider: "In React 19, you can render '<Context>' as a provider instead of '<Context.Provider>'."
|
|
854
|
+
},
|
|
855
|
+
schema: []
|
|
856
|
+
},
|
|
857
|
+
name: RULE_NAME21,
|
|
858
|
+
create(context) {
|
|
859
|
+
if (!context.sourceCode.text.includes(".Provider")) return {};
|
|
860
|
+
const { version: version2 } = normalizeSettings(decodeSettings(context.settings));
|
|
861
|
+
if (compare(version2, "19.0.0", "<")) return {};
|
|
862
|
+
return {
|
|
863
|
+
JSXElement(node) {
|
|
864
|
+
const elementName = JSX8.getElementName(node.openingElement);
|
|
865
|
+
if (!elementName.endsWith(".Provider")) return;
|
|
866
|
+
context.report({
|
|
867
|
+
messageId: "noContextProvider",
|
|
868
|
+
node,
|
|
869
|
+
fix(fixer) {
|
|
870
|
+
const providerName = elementName.replace(/\.Provider$/, "");
|
|
871
|
+
const openingElement = node.openingElement;
|
|
872
|
+
const closingElement = node.closingElement;
|
|
873
|
+
if (!closingElement) return fixer.replaceText(openingElement.name, providerName);
|
|
874
|
+
return [
|
|
875
|
+
fixer.replaceText(openingElement.name, providerName),
|
|
876
|
+
fixer.replaceText(closingElement.name, providerName)
|
|
877
|
+
];
|
|
878
|
+
}
|
|
879
|
+
});
|
|
880
|
+
}
|
|
881
|
+
};
|
|
882
|
+
},
|
|
883
|
+
defaultOptions: []
|
|
884
|
+
});
|
|
885
|
+
var RULE_NAME22 = "no-create-ref";
|
|
845
886
|
var no_create_ref_default = createRule({
|
|
846
887
|
meta: {
|
|
847
888
|
type: "problem",
|
|
@@ -853,7 +894,7 @@ var no_create_ref_default = createRule({
|
|
|
853
894
|
},
|
|
854
895
|
schema: []
|
|
855
896
|
},
|
|
856
|
-
name:
|
|
897
|
+
name: RULE_NAME22,
|
|
857
898
|
create(context) {
|
|
858
899
|
return {
|
|
859
900
|
CallExpression(node) {
|
|
@@ -865,7 +906,7 @@ var no_create_ref_default = createRule({
|
|
|
865
906
|
},
|
|
866
907
|
defaultOptions: []
|
|
867
908
|
});
|
|
868
|
-
var
|
|
909
|
+
var RULE_NAME23 = "no-default-props";
|
|
869
910
|
var no_default_props_default = createRule({
|
|
870
911
|
meta: {
|
|
871
912
|
type: "problem",
|
|
@@ -877,7 +918,7 @@ var no_default_props_default = createRule({
|
|
|
877
918
|
},
|
|
878
919
|
schema: []
|
|
879
920
|
},
|
|
880
|
-
name:
|
|
921
|
+
name: RULE_NAME23,
|
|
881
922
|
create(context) {
|
|
882
923
|
if (!context.sourceCode.text.includes("defaultProps")) return {};
|
|
883
924
|
return {
|
|
@@ -904,7 +945,7 @@ var no_default_props_default = createRule({
|
|
|
904
945
|
},
|
|
905
946
|
defaultOptions: []
|
|
906
947
|
});
|
|
907
|
-
var
|
|
948
|
+
var RULE_NAME24 = "no-direct-mutation-state";
|
|
908
949
|
function getName2(node) {
|
|
909
950
|
if (node.type === AST_NODE_TYPES.TSAsExpression) {
|
|
910
951
|
return getName2(node.expression);
|
|
@@ -938,7 +979,7 @@ var no_direct_mutation_state_default = createRule({
|
|
|
938
979
|
},
|
|
939
980
|
schema: []
|
|
940
981
|
},
|
|
941
|
-
name:
|
|
982
|
+
name: RULE_NAME24,
|
|
942
983
|
create(context) {
|
|
943
984
|
function getReportDescriptor(node) {
|
|
944
985
|
if (!isAssignmentToThisState(node)) return O.none();
|
|
@@ -962,7 +1003,7 @@ var no_direct_mutation_state_default = createRule({
|
|
|
962
1003
|
},
|
|
963
1004
|
defaultOptions: []
|
|
964
1005
|
});
|
|
965
|
-
var
|
|
1006
|
+
var RULE_NAME25 = "no-duplicate-key";
|
|
966
1007
|
var no_duplicate_key_default = createRule({
|
|
967
1008
|
meta: {
|
|
968
1009
|
type: "problem",
|
|
@@ -974,7 +1015,7 @@ var no_duplicate_key_default = createRule({
|
|
|
974
1015
|
},
|
|
975
1016
|
schema: []
|
|
976
1017
|
},
|
|
977
|
-
name:
|
|
1018
|
+
name: RULE_NAME25,
|
|
978
1019
|
create(context) {
|
|
979
1020
|
const isWithinChildrenToArrayRef = MutRef.make(false);
|
|
980
1021
|
function isKeyEqual(a, b) {
|
|
@@ -984,7 +1025,7 @@ var no_duplicate_key_default = createRule({
|
|
|
984
1025
|
if (node.type !== AST_NODE_TYPES.JSXElement) return O.none();
|
|
985
1026
|
const initialScope = context.sourceCode.getScope(node);
|
|
986
1027
|
return F.pipe(
|
|
987
|
-
|
|
1028
|
+
JSX8.findPropInAttributes(node.openingElement.attributes, initialScope)("key"),
|
|
988
1029
|
O.flatMap((k) => "value" in k ? O.fromNullable(k.value) : O.none()),
|
|
989
1030
|
O.flatMap((v) => {
|
|
990
1031
|
return isKeyEqual(v, v) ? O.some({
|
|
@@ -1091,7 +1132,7 @@ var no_duplicate_key_default = createRule({
|
|
|
1091
1132
|
},
|
|
1092
1133
|
defaultOptions: []
|
|
1093
1134
|
});
|
|
1094
|
-
var
|
|
1135
|
+
var RULE_NAME26 = "no-forward-ref";
|
|
1095
1136
|
var no_forward_ref_default = createRule({
|
|
1096
1137
|
meta: {
|
|
1097
1138
|
type: "problem",
|
|
@@ -1103,7 +1144,7 @@ var no_forward_ref_default = createRule({
|
|
|
1103
1144
|
},
|
|
1104
1145
|
schema: []
|
|
1105
1146
|
},
|
|
1106
|
-
name:
|
|
1147
|
+
name: RULE_NAME26,
|
|
1107
1148
|
create(context) {
|
|
1108
1149
|
if (!context.sourceCode.text.includes("forwardRef")) return {};
|
|
1109
1150
|
const { version: version2 } = normalizeSettings(decodeSettings(context.settings));
|
|
@@ -1120,7 +1161,7 @@ var no_forward_ref_default = createRule({
|
|
|
1120
1161
|
},
|
|
1121
1162
|
defaultOptions: []
|
|
1122
1163
|
});
|
|
1123
|
-
var
|
|
1164
|
+
var RULE_NAME27 = "no-implicit-key";
|
|
1124
1165
|
var no_implicit_key_default = createRule({
|
|
1125
1166
|
meta: {
|
|
1126
1167
|
type: "problem",
|
|
@@ -1132,11 +1173,11 @@ var no_implicit_key_default = createRule({
|
|
|
1132
1173
|
},
|
|
1133
1174
|
schema: []
|
|
1134
1175
|
},
|
|
1135
|
-
name:
|
|
1176
|
+
name: RULE_NAME27,
|
|
1136
1177
|
create(context) {
|
|
1137
1178
|
function getReportDescriptor(node) {
|
|
1138
1179
|
const initialScope = context.sourceCode.getScope(node);
|
|
1139
|
-
const keyPropFound =
|
|
1180
|
+
const keyPropFound = JSX8.findPropInAttributes(node.attributes, initialScope)("key");
|
|
1140
1181
|
const keyPropOnElement = node.attributes.some(
|
|
1141
1182
|
(n) => AST11.is(AST_NODE_TYPES.JSXAttribute)(n) && n.name.name === "key"
|
|
1142
1183
|
);
|
|
@@ -1175,7 +1216,7 @@ function isTrueLiteralType(type) {
|
|
|
1175
1216
|
function unionTypeParts(type) {
|
|
1176
1217
|
return isUnionType(type) ? type.types : [type];
|
|
1177
1218
|
}
|
|
1178
|
-
var
|
|
1219
|
+
var RULE_NAME28 = "no-leaked-conditional-rendering";
|
|
1179
1220
|
var tsHelpers = {
|
|
1180
1221
|
isAnyType: (type) => isTypeFlagSet(type, ts.TypeFlags.TypeParameter | ts.TypeFlags.Any),
|
|
1181
1222
|
isBigIntType: (type) => isTypeFlagSet(type, ts.TypeFlags.BigIntLike),
|
|
@@ -1279,7 +1320,7 @@ var no_leaked_conditional_rendering_default = createRule({
|
|
|
1279
1320
|
},
|
|
1280
1321
|
schema: []
|
|
1281
1322
|
},
|
|
1282
|
-
name:
|
|
1323
|
+
name: RULE_NAME28,
|
|
1283
1324
|
create(context) {
|
|
1284
1325
|
if (!context.sourceCode.text.includes("&&") && !context.sourceCode.text.includes("?")) return {};
|
|
1285
1326
|
const { version: version2 } = normalizeSettings(decodeSettings(context.settings));
|
|
@@ -1336,7 +1377,7 @@ var no_leaked_conditional_rendering_default = createRule({
|
|
|
1336
1377
|
},
|
|
1337
1378
|
defaultOptions: []
|
|
1338
1379
|
});
|
|
1339
|
-
var
|
|
1380
|
+
var RULE_NAME29 = "no-missing-component-display-name";
|
|
1340
1381
|
var no_missing_component_display_name_default = createRule({
|
|
1341
1382
|
meta: {
|
|
1342
1383
|
type: "problem",
|
|
@@ -1348,7 +1389,7 @@ var no_missing_component_display_name_default = createRule({
|
|
|
1348
1389
|
},
|
|
1349
1390
|
schema: []
|
|
1350
1391
|
},
|
|
1351
|
-
name:
|
|
1392
|
+
name: RULE_NAME29,
|
|
1352
1393
|
create(context) {
|
|
1353
1394
|
if (!context.sourceCode.text.includes("memo") && !context.sourceCode.text.includes("forwardRef")) return {};
|
|
1354
1395
|
const { ctx, listeners } = useComponentCollector(context);
|
|
@@ -1372,7 +1413,7 @@ var no_missing_component_display_name_default = createRule({
|
|
|
1372
1413
|
},
|
|
1373
1414
|
defaultOptions: []
|
|
1374
1415
|
});
|
|
1375
|
-
var
|
|
1416
|
+
var RULE_NAME30 = "no-missing-key";
|
|
1376
1417
|
var no_missing_key_default = createRule({
|
|
1377
1418
|
meta: {
|
|
1378
1419
|
type: "problem",
|
|
@@ -1385,14 +1426,14 @@ var no_missing_key_default = createRule({
|
|
|
1385
1426
|
},
|
|
1386
1427
|
schema: []
|
|
1387
1428
|
},
|
|
1388
|
-
name:
|
|
1429
|
+
name: RULE_NAME30,
|
|
1389
1430
|
create(context) {
|
|
1390
1431
|
const isWithinChildrenToArrayRef = MutRef.make(false);
|
|
1391
1432
|
function checkIteratorElement(node) {
|
|
1392
1433
|
switch (node.type) {
|
|
1393
1434
|
case AST_NODE_TYPES.JSXElement: {
|
|
1394
1435
|
const initialScope = context.sourceCode.getScope(node);
|
|
1395
|
-
if (!
|
|
1436
|
+
if (!JSX8.hasProp(node.openingElement.attributes, "key", initialScope)) {
|
|
1396
1437
|
return O.some({
|
|
1397
1438
|
messageId: "noMissingKey",
|
|
1398
1439
|
node
|
|
@@ -1441,7 +1482,7 @@ var no_missing_key_default = createRule({
|
|
|
1441
1482
|
if (elements.length === 0) return;
|
|
1442
1483
|
const initialScope = context.sourceCode.getScope(node);
|
|
1443
1484
|
for (const element of elements) {
|
|
1444
|
-
if (!
|
|
1485
|
+
if (!JSX8.hasProp(element.openingElement.attributes, "key", initialScope)) {
|
|
1445
1486
|
context.report({
|
|
1446
1487
|
messageId: "noMissingKey",
|
|
1447
1488
|
node: element
|
|
@@ -1489,7 +1530,7 @@ var no_missing_key_default = createRule({
|
|
|
1489
1530
|
},
|
|
1490
1531
|
defaultOptions: []
|
|
1491
1532
|
});
|
|
1492
|
-
var
|
|
1533
|
+
var RULE_NAME31 = "no-nested-components";
|
|
1493
1534
|
var no_nested_components_default = createRule({
|
|
1494
1535
|
meta: {
|
|
1495
1536
|
type: "problem",
|
|
@@ -1502,7 +1543,7 @@ var no_nested_components_default = createRule({
|
|
|
1502
1543
|
},
|
|
1503
1544
|
schema: []
|
|
1504
1545
|
},
|
|
1505
|
-
name:
|
|
1546
|
+
name: RULE_NAME31,
|
|
1506
1547
|
create(context) {
|
|
1507
1548
|
const hint = ERComponentHint.SkipMapCallback | ERComponentHint.SkipNullLiteral | ERComponentHint.SkipUndefinedLiteral | ERComponentHint.SkipBooleanLiteral | ERComponentHint.SkipStringLiteral | ERComponentHint.SkipNumberLiteral | ERComponentHint.StrictLogical | ERComponentHint.StrictConditional;
|
|
1508
1549
|
const collector = useComponentCollector(context, hint);
|
|
@@ -1524,7 +1565,7 @@ var no_nested_components_default = createRule({
|
|
|
1524
1565
|
if (O.isNone(componentName)) continue;
|
|
1525
1566
|
const name2 = componentName.value;
|
|
1526
1567
|
const isInsideProperty = component.parent.type === AST_NODE_TYPES.Property;
|
|
1527
|
-
const isInsideJSXPropValue = component.parent.type === AST_NODE_TYPES.JSXAttribute || O.isSome(
|
|
1568
|
+
const isInsideJSXPropValue = component.parent.type === AST_NODE_TYPES.JSXAttribute || O.isSome(JSX8.traverseUpProp(node, (n) => n.value?.type === AST_NODE_TYPES.JSXExpressionContainer));
|
|
1528
1569
|
if (isInsideJSXPropValue) {
|
|
1529
1570
|
if (!isDeclaredInRenderPropLoose(component)) {
|
|
1530
1571
|
context.report({
|
|
@@ -1586,7 +1627,7 @@ var no_nested_components_default = createRule({
|
|
|
1586
1627
|
},
|
|
1587
1628
|
defaultOptions: []
|
|
1588
1629
|
});
|
|
1589
|
-
var
|
|
1630
|
+
var RULE_NAME32 = "no-prop-types";
|
|
1590
1631
|
var no_prop_types_default = createRule({
|
|
1591
1632
|
meta: {
|
|
1592
1633
|
type: "problem",
|
|
@@ -1598,7 +1639,7 @@ var no_prop_types_default = createRule({
|
|
|
1598
1639
|
},
|
|
1599
1640
|
schema: []
|
|
1600
1641
|
},
|
|
1601
|
-
name:
|
|
1642
|
+
name: RULE_NAME32,
|
|
1602
1643
|
create(context) {
|
|
1603
1644
|
if (!context.sourceCode.text.includes("propTypes")) return {};
|
|
1604
1645
|
return {
|
|
@@ -1625,7 +1666,7 @@ var no_prop_types_default = createRule({
|
|
|
1625
1666
|
},
|
|
1626
1667
|
defaultOptions: []
|
|
1627
1668
|
});
|
|
1628
|
-
var
|
|
1669
|
+
var RULE_NAME33 = "no-redundant-should-component-update";
|
|
1629
1670
|
function isShouldComponentUpdate(node) {
|
|
1630
1671
|
return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
|
|
1631
1672
|
}
|
|
@@ -1640,7 +1681,7 @@ var no_redundant_should_component_update_default = createRule({
|
|
|
1640
1681
|
},
|
|
1641
1682
|
schema: []
|
|
1642
1683
|
},
|
|
1643
|
-
name:
|
|
1684
|
+
name: RULE_NAME33,
|
|
1644
1685
|
create(context) {
|
|
1645
1686
|
if (!context.sourceCode.text.includes("shouldComponentUpdate")) return {};
|
|
1646
1687
|
const { ctx, listeners } = useComponentCollectorLegacy();
|
|
@@ -1668,7 +1709,7 @@ var no_redundant_should_component_update_default = createRule({
|
|
|
1668
1709
|
},
|
|
1669
1710
|
defaultOptions: []
|
|
1670
1711
|
});
|
|
1671
|
-
var
|
|
1712
|
+
var RULE_NAME34 = "no-set-state-in-component-did-mount";
|
|
1672
1713
|
function isComponentDidMount(node) {
|
|
1673
1714
|
return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
|
|
1674
1715
|
}
|
|
@@ -1683,7 +1724,7 @@ var no_set_state_in_component_did_mount_default = createRule({
|
|
|
1683
1724
|
},
|
|
1684
1725
|
schema: []
|
|
1685
1726
|
},
|
|
1686
|
-
name:
|
|
1727
|
+
name: RULE_NAME34,
|
|
1687
1728
|
create(context) {
|
|
1688
1729
|
if (!context.sourceCode.text.includes("componentDidMount")) return {};
|
|
1689
1730
|
function getReportDescriptor(node) {
|
|
@@ -1711,7 +1752,7 @@ var no_set_state_in_component_did_mount_default = createRule({
|
|
|
1711
1752
|
},
|
|
1712
1753
|
defaultOptions: []
|
|
1713
1754
|
});
|
|
1714
|
-
var
|
|
1755
|
+
var RULE_NAME35 = "no-set-state-in-component-did-update";
|
|
1715
1756
|
function isComponentDidUpdate(node) {
|
|
1716
1757
|
return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidUpdate";
|
|
1717
1758
|
}
|
|
@@ -1726,7 +1767,7 @@ var no_set_state_in_component_did_update_default = createRule({
|
|
|
1726
1767
|
},
|
|
1727
1768
|
schema: []
|
|
1728
1769
|
},
|
|
1729
|
-
name:
|
|
1770
|
+
name: RULE_NAME35,
|
|
1730
1771
|
create(context) {
|
|
1731
1772
|
if (!context.sourceCode.text.includes("componentDidUpdate")) return {};
|
|
1732
1773
|
function getReportDescriptor(node) {
|
|
@@ -1754,7 +1795,7 @@ var no_set_state_in_component_did_update_default = createRule({
|
|
|
1754
1795
|
},
|
|
1755
1796
|
defaultOptions: []
|
|
1756
1797
|
});
|
|
1757
|
-
var
|
|
1798
|
+
var RULE_NAME36 = "no-set-state-in-component-will-update";
|
|
1758
1799
|
function isComponentWillUpdate3(node) {
|
|
1759
1800
|
return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
|
|
1760
1801
|
}
|
|
@@ -1769,7 +1810,7 @@ var no_set_state_in_component_will_update_default = createRule({
|
|
|
1769
1810
|
},
|
|
1770
1811
|
schema: []
|
|
1771
1812
|
},
|
|
1772
|
-
name:
|
|
1813
|
+
name: RULE_NAME36,
|
|
1773
1814
|
create(context) {
|
|
1774
1815
|
if (!context.sourceCode.text.includes("componentWillUpdate")) return {};
|
|
1775
1816
|
function getReportDescriptor(node) {
|
|
@@ -1797,7 +1838,7 @@ var no_set_state_in_component_will_update_default = createRule({
|
|
|
1797
1838
|
},
|
|
1798
1839
|
defaultOptions: []
|
|
1799
1840
|
});
|
|
1800
|
-
var
|
|
1841
|
+
var RULE_NAME37 = "no-string-refs";
|
|
1801
1842
|
function containsStringLiteral({ value }) {
|
|
1802
1843
|
return value?.type === AST_NODE_TYPES.Literal && isString(value.value);
|
|
1803
1844
|
}
|
|
@@ -1817,7 +1858,7 @@ var no_string_refs_default = createRule({
|
|
|
1817
1858
|
},
|
|
1818
1859
|
schema: []
|
|
1819
1860
|
},
|
|
1820
|
-
name:
|
|
1861
|
+
name: RULE_NAME37,
|
|
1821
1862
|
create(context) {
|
|
1822
1863
|
return {
|
|
1823
1864
|
JSXAttribute(node) {
|
|
@@ -1833,7 +1874,7 @@ var no_string_refs_default = createRule({
|
|
|
1833
1874
|
},
|
|
1834
1875
|
defaultOptions: []
|
|
1835
1876
|
});
|
|
1836
|
-
var
|
|
1877
|
+
var RULE_NAME38 = "no-unsafe-component-will-mount";
|
|
1837
1878
|
function isUnsafeComponentWillMount(node) {
|
|
1838
1879
|
return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillMount";
|
|
1839
1880
|
}
|
|
@@ -1848,7 +1889,7 @@ var no_unsafe_component_will_mount_default = createRule({
|
|
|
1848
1889
|
},
|
|
1849
1890
|
schema: []
|
|
1850
1891
|
},
|
|
1851
|
-
name:
|
|
1892
|
+
name: RULE_NAME38,
|
|
1852
1893
|
create(context) {
|
|
1853
1894
|
if (!context.sourceCode.text.includes("UNSAFE_componentWillMount")) return {};
|
|
1854
1895
|
const { ctx, listeners } = useComponentCollectorLegacy();
|
|
@@ -1872,7 +1913,7 @@ var no_unsafe_component_will_mount_default = createRule({
|
|
|
1872
1913
|
},
|
|
1873
1914
|
defaultOptions: []
|
|
1874
1915
|
});
|
|
1875
|
-
var
|
|
1916
|
+
var RULE_NAME39 = "no-unsafe-component-will-receive-props";
|
|
1876
1917
|
function isUnsafeComponentWillReceiveProps(node) {
|
|
1877
1918
|
return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillReceiveProps";
|
|
1878
1919
|
}
|
|
@@ -1887,7 +1928,7 @@ var no_unsafe_component_will_receive_props_default = createRule({
|
|
|
1887
1928
|
},
|
|
1888
1929
|
schema: []
|
|
1889
1930
|
},
|
|
1890
|
-
name:
|
|
1931
|
+
name: RULE_NAME39,
|
|
1891
1932
|
create(context) {
|
|
1892
1933
|
if (!context.sourceCode.text.includes("UNSAFE_componentWillReceiveProps")) return {};
|
|
1893
1934
|
const { ctx, listeners } = useComponentCollectorLegacy();
|
|
@@ -1911,7 +1952,7 @@ var no_unsafe_component_will_receive_props_default = createRule({
|
|
|
1911
1952
|
},
|
|
1912
1953
|
defaultOptions: []
|
|
1913
1954
|
});
|
|
1914
|
-
var
|
|
1955
|
+
var RULE_NAME40 = "no-unsafe-component-will-update";
|
|
1915
1956
|
function isUnsafeComponentWillUpdate(node) {
|
|
1916
1957
|
return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillUpdate";
|
|
1917
1958
|
}
|
|
@@ -1926,7 +1967,7 @@ var no_unsafe_component_will_update_default = createRule({
|
|
|
1926
1967
|
},
|
|
1927
1968
|
schema: []
|
|
1928
1969
|
},
|
|
1929
|
-
name:
|
|
1970
|
+
name: RULE_NAME40,
|
|
1930
1971
|
create(context) {
|
|
1931
1972
|
if (!context.sourceCode.text.includes("UNSAFE_componentWillUpdate")) return {};
|
|
1932
1973
|
const { ctx, listeners } = useComponentCollectorLegacy();
|
|
@@ -1950,7 +1991,7 @@ var no_unsafe_component_will_update_default = createRule({
|
|
|
1950
1991
|
},
|
|
1951
1992
|
defaultOptions: []
|
|
1952
1993
|
});
|
|
1953
|
-
var
|
|
1994
|
+
var RULE_NAME41 = "no-unstable-context-value";
|
|
1954
1995
|
var no_unstable_context_value_default = createRule({
|
|
1955
1996
|
meta: {
|
|
1956
1997
|
type: "problem",
|
|
@@ -1964,7 +2005,7 @@ var no_unstable_context_value_default = createRule({
|
|
|
1964
2005
|
},
|
|
1965
2006
|
schema: []
|
|
1966
2007
|
},
|
|
1967
|
-
name:
|
|
2008
|
+
name: RULE_NAME41,
|
|
1968
2009
|
create(context) {
|
|
1969
2010
|
const { ctx, listeners } = useComponentCollector(context);
|
|
1970
2011
|
const possibleValueConstructions = /* @__PURE__ */ new Map();
|
|
@@ -2017,7 +2058,7 @@ var no_unstable_context_value_default = createRule({
|
|
|
2017
2058
|
},
|
|
2018
2059
|
defaultOptions: []
|
|
2019
2060
|
});
|
|
2020
|
-
var
|
|
2061
|
+
var RULE_NAME42 = "no-unstable-default-props";
|
|
2021
2062
|
var no_unstable_default_props_default = createRule({
|
|
2022
2063
|
meta: {
|
|
2023
2064
|
type: "problem",
|
|
@@ -2029,7 +2070,7 @@ var no_unstable_default_props_default = createRule({
|
|
|
2029
2070
|
},
|
|
2030
2071
|
schema: []
|
|
2031
2072
|
},
|
|
2032
|
-
name:
|
|
2073
|
+
name: RULE_NAME42,
|
|
2033
2074
|
create(context) {
|
|
2034
2075
|
const { ctx, listeners } = useComponentCollector(context);
|
|
2035
2076
|
const possibleDestructuringDeclarators = /* @__PURE__ */ new WeakMap();
|
|
@@ -2082,7 +2123,7 @@ var no_unstable_default_props_default = createRule({
|
|
|
2082
2123
|
},
|
|
2083
2124
|
defaultOptions: []
|
|
2084
2125
|
});
|
|
2085
|
-
var
|
|
2126
|
+
var RULE_NAME43 = "no-unused-class-component-members";
|
|
2086
2127
|
var LIFECYCLE_METHODS = /* @__PURE__ */ new Set([
|
|
2087
2128
|
"componentDidCatch",
|
|
2088
2129
|
"componentDidMount",
|
|
@@ -2126,7 +2167,7 @@ var no_unused_class_component_members_default = createRule({
|
|
|
2126
2167
|
},
|
|
2127
2168
|
schema: []
|
|
2128
2169
|
},
|
|
2129
|
-
name:
|
|
2170
|
+
name: RULE_NAME43,
|
|
2130
2171
|
create(context) {
|
|
2131
2172
|
const classStack = [];
|
|
2132
2173
|
const methodStack = [];
|
|
@@ -2209,7 +2250,7 @@ var no_unused_class_component_members_default = createRule({
|
|
|
2209
2250
|
},
|
|
2210
2251
|
defaultOptions: []
|
|
2211
2252
|
});
|
|
2212
|
-
var
|
|
2253
|
+
var RULE_NAME44 = "no-unused-state";
|
|
2213
2254
|
function getName4(node) {
|
|
2214
2255
|
if (node.type === AST_NODE_TYPES.TSAsExpression) {
|
|
2215
2256
|
return getName4(node.expression);
|
|
@@ -2249,7 +2290,7 @@ var no_unused_state_default = createRule({
|
|
|
2249
2290
|
},
|
|
2250
2291
|
schema: []
|
|
2251
2292
|
},
|
|
2252
|
-
name:
|
|
2293
|
+
name: RULE_NAME44,
|
|
2253
2294
|
create(context) {
|
|
2254
2295
|
const classStack = [];
|
|
2255
2296
|
const methodStack = [];
|
|
@@ -2350,21 +2391,21 @@ var no_unused_state_default = createRule({
|
|
|
2350
2391
|
},
|
|
2351
2392
|
defaultOptions: []
|
|
2352
2393
|
});
|
|
2353
|
-
var
|
|
2394
|
+
var RULE_NAME45 = "no-useless-fragment";
|
|
2354
2395
|
function check(node, context, allowExpressions) {
|
|
2355
2396
|
const initialScope = context.sourceCode.getScope(node);
|
|
2356
|
-
if (
|
|
2357
|
-
if (
|
|
2397
|
+
if (JSX8.isKeyedElement(node, initialScope)) return;
|
|
2398
|
+
if (JSX8.isBuiltInElement(node.parent)) context.report({ messageId: "noUselessFragmentInBuiltIn", node });
|
|
2358
2399
|
if (node.children.length === 0) return context.report({ messageId: "noUselessFragment", node });
|
|
2359
2400
|
const isChildren = AST11.isOneOf([AST_NODE_TYPES.JSXElement, AST_NODE_TYPES.JSXFragment])(node.parent);
|
|
2360
2401
|
const [firstChildren] = node.children;
|
|
2361
|
-
if (allowExpressions && node.children.length === 1 &&
|
|
2402
|
+
if (allowExpressions && node.children.length === 1 && JSX8.isLiteral(firstChildren) && !isChildren) return;
|
|
2362
2403
|
if (!allowExpressions && isChildren) {
|
|
2363
2404
|
return context.report({ messageId: "noUselessFragment", node });
|
|
2364
2405
|
} else if (!allowExpressions && !isChildren && node.children.length === 1) {
|
|
2365
2406
|
return context.report({ messageId: "noUselessFragment", node });
|
|
2366
2407
|
}
|
|
2367
|
-
const nonPaddingChildren = node.children.filter((child) => !
|
|
2408
|
+
const nonPaddingChildren = node.children.filter((child) => !JSX8.isPaddingSpaces(child));
|
|
2368
2409
|
if (nonPaddingChildren.length > 1) return;
|
|
2369
2410
|
if (nonPaddingChildren.length === 0) return context.report({ messageId: "noUselessFragment", node });
|
|
2370
2411
|
const [first] = nonPaddingChildren;
|
|
@@ -2392,7 +2433,7 @@ var no_useless_fragment_default = createRule({
|
|
|
2392
2433
|
}
|
|
2393
2434
|
}]
|
|
2394
2435
|
},
|
|
2395
|
-
name:
|
|
2436
|
+
name: RULE_NAME45,
|
|
2396
2437
|
create(context, [option]) {
|
|
2397
2438
|
const { allowExpressions = true } = option;
|
|
2398
2439
|
return {
|
|
@@ -2409,7 +2450,7 @@ var no_useless_fragment_default = createRule({
|
|
|
2409
2450
|
allowExpressions: true
|
|
2410
2451
|
}]
|
|
2411
2452
|
});
|
|
2412
|
-
var
|
|
2453
|
+
var RULE_NAME46 = "prefer-destructuring-assignment";
|
|
2413
2454
|
function isMemberExpressionWithObjectName(node) {
|
|
2414
2455
|
return node.object.type === AST_NODE_TYPES.Identifier && "name" in node.object;
|
|
2415
2456
|
}
|
|
@@ -2424,7 +2465,7 @@ var prefer_destructuring_assignment_default = createRule({
|
|
|
2424
2465
|
},
|
|
2425
2466
|
schema: []
|
|
2426
2467
|
},
|
|
2427
|
-
name:
|
|
2468
|
+
name: RULE_NAME46,
|
|
2428
2469
|
create(context) {
|
|
2429
2470
|
const { ctx, listeners } = useComponentCollector(context);
|
|
2430
2471
|
const memberExpressionWithNames = [];
|
|
@@ -2479,7 +2520,7 @@ var prefer_destructuring_assignment_default = createRule({
|
|
|
2479
2520
|
},
|
|
2480
2521
|
defaultOptions: []
|
|
2481
2522
|
});
|
|
2482
|
-
var
|
|
2523
|
+
var RULE_NAME47 = "prefer-react-namespace-import";
|
|
2483
2524
|
var prefer_react_namespace_import_default = createRule({
|
|
2484
2525
|
meta: {
|
|
2485
2526
|
type: "problem",
|
|
@@ -2492,7 +2533,7 @@ var prefer_react_namespace_import_default = createRule({
|
|
|
2492
2533
|
},
|
|
2493
2534
|
schema: []
|
|
2494
2535
|
},
|
|
2495
|
-
name:
|
|
2536
|
+
name: RULE_NAME47,
|
|
2496
2537
|
create(context) {
|
|
2497
2538
|
const importSource = decodeSettings(context.settings).importSource ?? "react";
|
|
2498
2539
|
return {
|
|
@@ -2528,7 +2569,7 @@ ${importStringPrefix} ${specifiers} from ${importSourceQuoted}${semiColon}`
|
|
|
2528
2569
|
},
|
|
2529
2570
|
defaultOptions: []
|
|
2530
2571
|
});
|
|
2531
|
-
var
|
|
2572
|
+
var RULE_NAME48 = "prefer-read-only-props";
|
|
2532
2573
|
function isReadonlyType(type, services) {
|
|
2533
2574
|
try {
|
|
2534
2575
|
const im = getTypeImmutability(services.program, type);
|
|
@@ -2548,7 +2589,7 @@ var prefer_read_only_props_default = createRule({
|
|
|
2548
2589
|
},
|
|
2549
2590
|
schema: []
|
|
2550
2591
|
},
|
|
2551
|
-
name:
|
|
2592
|
+
name: RULE_NAME48,
|
|
2552
2593
|
create(context) {
|
|
2553
2594
|
const services = ESLintUtils.getParserServices(context, false);
|
|
2554
2595
|
const { ctx, listeners } = useComponentCollector(context);
|
|
@@ -2568,7 +2609,7 @@ var prefer_read_only_props_default = createRule({
|
|
|
2568
2609
|
},
|
|
2569
2610
|
defaultOptions: []
|
|
2570
2611
|
});
|
|
2571
|
-
var
|
|
2612
|
+
var RULE_NAME49 = "prefer-shorthand-boolean";
|
|
2572
2613
|
var prefer_shorthand_boolean_default = createRule({
|
|
2573
2614
|
meta: {
|
|
2574
2615
|
type: "problem",
|
|
@@ -2581,11 +2622,11 @@ var prefer_shorthand_boolean_default = createRule({
|
|
|
2581
2622
|
},
|
|
2582
2623
|
schema: []
|
|
2583
2624
|
},
|
|
2584
|
-
name:
|
|
2625
|
+
name: RULE_NAME49,
|
|
2585
2626
|
create(context) {
|
|
2586
2627
|
function getReportDescriptor(node) {
|
|
2587
2628
|
const { value } = node;
|
|
2588
|
-
const propName =
|
|
2629
|
+
const propName = JSX8.getPropName(node);
|
|
2589
2630
|
const hasValueTrue = value?.type === AST_NODE_TYPES.JSXExpressionContainer && value.expression.type === AST_NODE_TYPES.Literal && value.expression.value === true;
|
|
2590
2631
|
if (!hasValueTrue) return O.none();
|
|
2591
2632
|
return O.some({
|
|
@@ -2603,7 +2644,7 @@ var prefer_shorthand_boolean_default = createRule({
|
|
|
2603
2644
|
},
|
|
2604
2645
|
defaultOptions: []
|
|
2605
2646
|
});
|
|
2606
|
-
var
|
|
2647
|
+
var RULE_NAME50 = "prefer-shorthand-fragment";
|
|
2607
2648
|
var prefer_shorthand_fragment_default = createRule({
|
|
2608
2649
|
meta: {
|
|
2609
2650
|
type: "problem",
|
|
@@ -2615,7 +2656,7 @@ var prefer_shorthand_fragment_default = createRule({
|
|
|
2615
2656
|
},
|
|
2616
2657
|
schema: []
|
|
2617
2658
|
},
|
|
2618
|
-
name:
|
|
2659
|
+
name: RULE_NAME50,
|
|
2619
2660
|
create(context) {
|
|
2620
2661
|
function getReportDescriptor(node) {
|
|
2621
2662
|
if (!isFragmentElement(node, context)) return O.none();
|
|
@@ -2668,6 +2709,7 @@ var src_default = {
|
|
|
2668
2709
|
"no-component-will-mount": no_component_will_mount_default,
|
|
2669
2710
|
"no-component-will-receive-props": no_component_will_receive_props_default,
|
|
2670
2711
|
"no-component-will-update": no_component_will_update_default,
|
|
2712
|
+
"no-context-provider": no_context_provider_default,
|
|
2671
2713
|
"no-create-ref": no_create_ref_default,
|
|
2672
2714
|
"no-default-props": no_default_props_default,
|
|
2673
2715
|
"no-direct-mutation-state": no_direct_mutation_state_default,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-react-x",
|
|
3
|
-
"version": "1.18.1-beta.
|
|
3
|
+
"version": "1.18.1-beta.2",
|
|
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.
|
|
53
|
-
"@eslint-react/
|
|
54
|
-
"@eslint-react/
|
|
55
|
-
"@eslint-react/shared": "1.18.1-beta.
|
|
56
|
-
"@eslint-react/
|
|
57
|
-
"@eslint-react/
|
|
58
|
-
"@eslint-react/
|
|
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"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@types/react": "^19.0.1",
|