eslint-plugin-react-x 1.28.1-beta.5 → 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 +45 -42
- package/dist/index.mjs +45 -42
- 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,7 +137,7 @@ 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
143
|
// src/rules/avoid-shorthand-boolean.ts
|
|
@@ -167,7 +167,7 @@ var avoid_shorthand_boolean_default = createRule({
|
|
|
167
167
|
messageId: "avoidShorthandBoolean",
|
|
168
168
|
node,
|
|
169
169
|
data: {
|
|
170
|
-
propName:
|
|
170
|
+
propName: JSX8__namespace.getAttributeName(node)
|
|
171
171
|
},
|
|
172
172
|
fix: (fixer) => fixer.insertTextAfter(node.name, `={true}`)
|
|
173
173
|
});
|
|
@@ -720,7 +720,7 @@ var no_children_prop_default = createRule({
|
|
|
720
720
|
create(context) {
|
|
721
721
|
return {
|
|
722
722
|
JSXElement(node) {
|
|
723
|
-
const attribute =
|
|
723
|
+
const attribute = JSX8__namespace.getAttribute(
|
|
724
724
|
"children",
|
|
725
725
|
node.openingElement.attributes,
|
|
726
726
|
context.sourceCode.getScope(node)
|
|
@@ -939,7 +939,7 @@ var RULE_FEATURES16 = [
|
|
|
939
939
|
"MOD"
|
|
940
940
|
];
|
|
941
941
|
function isComponentWillMount(node) {
|
|
942
|
-
return AST11__namespace.
|
|
942
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillMount";
|
|
943
943
|
}
|
|
944
944
|
var no_component_will_mount_default = createRule({
|
|
945
945
|
meta: {
|
|
@@ -992,7 +992,7 @@ var RULE_FEATURES17 = [
|
|
|
992
992
|
"MOD"
|
|
993
993
|
];
|
|
994
994
|
function isComponentWillUpdate(node) {
|
|
995
|
-
return AST11__namespace.
|
|
995
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillReceiveProps";
|
|
996
996
|
}
|
|
997
997
|
var no_component_will_receive_props_default = createRule({
|
|
998
998
|
meta: {
|
|
@@ -1045,7 +1045,7 @@ var RULE_FEATURES18 = [
|
|
|
1045
1045
|
"MOD"
|
|
1046
1046
|
];
|
|
1047
1047
|
function isComponentWillUpdate2(node) {
|
|
1048
|
-
return AST11__namespace.
|
|
1048
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
|
|
1049
1049
|
}
|
|
1050
1050
|
var no_component_will_update_default = createRule({
|
|
1051
1051
|
meta: {
|
|
@@ -1119,7 +1119,7 @@ var no_context_provider_default = createRule({
|
|
|
1119
1119
|
}
|
|
1120
1120
|
return {
|
|
1121
1121
|
JSXElement(node) {
|
|
1122
|
-
const [name5, ...rest] =
|
|
1122
|
+
const [name5, ...rest] = JSX8__namespace.getElementName(node).split(".").reverse();
|
|
1123
1123
|
if (name5 !== "Provider") return;
|
|
1124
1124
|
const contextName = rest.reverse().join(".");
|
|
1125
1125
|
context.report({
|
|
@@ -1252,7 +1252,7 @@ function isAssignmentToThisState(node) {
|
|
|
1252
1252
|
return left.type === types.AST_NODE_TYPES.MemberExpression && AST11__namespace.isThisExpression(left.object) && getName2(left.property) === "state";
|
|
1253
1253
|
}
|
|
1254
1254
|
function isConstructorFunction(node) {
|
|
1255
|
-
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";
|
|
1256
1256
|
}
|
|
1257
1257
|
var no_direct_mutation_state_default = createRule({
|
|
1258
1258
|
meta: {
|
|
@@ -1548,7 +1548,7 @@ var no_implicit_key_default = createRule({
|
|
|
1548
1548
|
return {
|
|
1549
1549
|
JSXOpeningElement(node) {
|
|
1550
1550
|
const initialScope = context.sourceCode.getScope(node);
|
|
1551
|
-
const keyPropFound =
|
|
1551
|
+
const keyPropFound = JSX8__namespace.getAttribute("key", node.attributes, initialScope);
|
|
1552
1552
|
const keyPropOnElement = node.attributes.some(
|
|
1553
1553
|
(n) => n.type === types.AST_NODE_TYPES.JSXAttribute && n.name.type === types.AST_NODE_TYPES.JSXIdentifier && n.name.name === "key"
|
|
1554
1554
|
);
|
|
@@ -1808,7 +1808,7 @@ var no_missing_context_display_name_default = createRule({
|
|
|
1808
1808
|
},
|
|
1809
1809
|
"Program:exit"() {
|
|
1810
1810
|
for (const call of createCalls) {
|
|
1811
|
-
const id =
|
|
1811
|
+
const id = core.getInstanceId(call);
|
|
1812
1812
|
if (id == null) {
|
|
1813
1813
|
context.report({
|
|
1814
1814
|
messageId: "noMissingContextDisplayName",
|
|
@@ -1820,10 +1820,7 @@ var no_missing_context_display_name_default = createRule({
|
|
|
1820
1820
|
const left = node.left;
|
|
1821
1821
|
if (left.type !== types.AST_NODE_TYPES.MemberExpression) return false;
|
|
1822
1822
|
const object = left.object;
|
|
1823
|
-
return
|
|
1824
|
-
context.sourceCode.getScope(id),
|
|
1825
|
-
context.sourceCode.getScope(object)
|
|
1826
|
-
]);
|
|
1823
|
+
return core.isInstanceIdEqual(context, id, object);
|
|
1827
1824
|
});
|
|
1828
1825
|
if (!hasDisplayNameAssignment) {
|
|
1829
1826
|
context.report({
|
|
@@ -1861,7 +1858,7 @@ var no_missing_key_default = createRule({
|
|
|
1861
1858
|
switch (node.type) {
|
|
1862
1859
|
case types.AST_NODE_TYPES.JSXElement: {
|
|
1863
1860
|
const initialScope = context.sourceCode.getScope(node);
|
|
1864
|
-
if (!
|
|
1861
|
+
if (!JSX8__namespace.hasAttribute("key", node.openingElement.attributes, initialScope)) {
|
|
1865
1862
|
return {
|
|
1866
1863
|
messageId: "missingKey",
|
|
1867
1864
|
node
|
|
@@ -1922,7 +1919,7 @@ var no_missing_key_default = createRule({
|
|
|
1922
1919
|
}
|
|
1923
1920
|
const initialScope = context.sourceCode.getScope(node);
|
|
1924
1921
|
for (const element of elements) {
|
|
1925
|
-
if (!
|
|
1922
|
+
if (!JSX8__namespace.hasAttribute("key", element.openingElement.attributes, initialScope)) {
|
|
1926
1923
|
context.report({
|
|
1927
1924
|
messageId: "missingKey",
|
|
1928
1925
|
node: element
|
|
@@ -2024,7 +2021,7 @@ var no_nested_components_default = createRule({
|
|
|
2024
2021
|
continue;
|
|
2025
2022
|
}
|
|
2026
2023
|
const isInsideProperty = component.parent.type === types.AST_NODE_TYPES.Property;
|
|
2027
|
-
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;
|
|
2028
2025
|
if (isInsideJSXPropValue) {
|
|
2029
2026
|
if (!core.isDeclaredInRenderPropLoose(component)) {
|
|
2030
2027
|
context.report({
|
|
@@ -2153,7 +2150,7 @@ var RULE_FEATURES33 = [
|
|
|
2153
2150
|
"CHK"
|
|
2154
2151
|
];
|
|
2155
2152
|
function isShouldComponentUpdate(node) {
|
|
2156
|
-
return AST11__namespace.
|
|
2153
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
|
|
2157
2154
|
}
|
|
2158
2155
|
var no_redundant_should_component_update_default = createRule({
|
|
2159
2156
|
meta: {
|
|
@@ -2204,7 +2201,7 @@ var RULE_FEATURES34 = [
|
|
|
2204
2201
|
"CHK"
|
|
2205
2202
|
];
|
|
2206
2203
|
function isComponentDidMount(node) {
|
|
2207
|
-
return AST11__namespace.
|
|
2204
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
|
|
2208
2205
|
}
|
|
2209
2206
|
var no_set_state_in_component_did_mount_default = createRule({
|
|
2210
2207
|
meta: {
|
|
@@ -2249,7 +2246,7 @@ var RULE_FEATURES35 = [
|
|
|
2249
2246
|
"CHK"
|
|
2250
2247
|
];
|
|
2251
2248
|
function isComponentDidUpdate(node) {
|
|
2252
|
-
return AST11__namespace.
|
|
2249
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidUpdate";
|
|
2253
2250
|
}
|
|
2254
2251
|
var no_set_state_in_component_did_update_default = createRule({
|
|
2255
2252
|
meta: {
|
|
@@ -2294,7 +2291,7 @@ var RULE_FEATURES36 = [
|
|
|
2294
2291
|
"CHK"
|
|
2295
2292
|
];
|
|
2296
2293
|
function isComponentWillUpdate3(node) {
|
|
2297
|
-
return AST11__namespace.
|
|
2294
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
|
|
2298
2295
|
}
|
|
2299
2296
|
var no_set_state_in_component_will_update_default = createRule({
|
|
2300
2297
|
meta: {
|
|
@@ -2385,7 +2382,7 @@ var RULE_FEATURES38 = [
|
|
|
2385
2382
|
"CHK"
|
|
2386
2383
|
];
|
|
2387
2384
|
function isUnsafeComponentWillMount(node) {
|
|
2388
|
-
return AST11__namespace.
|
|
2385
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillMount";
|
|
2389
2386
|
}
|
|
2390
2387
|
var no_unsafe_component_will_mount_default = createRule({
|
|
2391
2388
|
meta: {
|
|
@@ -2430,7 +2427,7 @@ var RULE_FEATURES39 = [
|
|
|
2430
2427
|
"CHK"
|
|
2431
2428
|
];
|
|
2432
2429
|
function isUnsafeComponentWillReceiveProps(node) {
|
|
2433
|
-
return AST11__namespace.
|
|
2430
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillReceiveProps";
|
|
2434
2431
|
}
|
|
2435
2432
|
var no_unsafe_component_will_receive_props_default = createRule({
|
|
2436
2433
|
meta: {
|
|
@@ -2475,7 +2472,7 @@ var RULE_FEATURES40 = [
|
|
|
2475
2472
|
"CHK"
|
|
2476
2473
|
];
|
|
2477
2474
|
function isUnsafeComponentWillUpdate(node) {
|
|
2478
|
-
return AST11__namespace.
|
|
2475
|
+
return AST11__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillUpdate";
|
|
2479
2476
|
}
|
|
2480
2477
|
var no_unsafe_component_will_update_default = createRule({
|
|
2481
2478
|
meta: {
|
|
@@ -2533,18 +2530,17 @@ var no_unstable_context_value_default = createRule({
|
|
|
2533
2530
|
},
|
|
2534
2531
|
name: RULE_NAME41,
|
|
2535
2532
|
create(context) {
|
|
2533
|
+
const { version: version2 } = shared.getSettingsFromContext(context);
|
|
2534
|
+
const isReact18OrBelow = compareVersions.compare(version2, "19.0.0", "<");
|
|
2536
2535
|
const { ctx, listeners } = core.useComponentCollector(context);
|
|
2537
2536
|
const constructions = /* @__PURE__ */ new Map();
|
|
2538
2537
|
return {
|
|
2539
2538
|
...listeners,
|
|
2540
2539
|
JSXOpeningElement(node) {
|
|
2541
|
-
const
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
if (openingElementName.property.name !== "Provider") {
|
|
2546
|
-
return;
|
|
2547
|
-
}
|
|
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;
|
|
2548
2544
|
const functionEntry = ctx.getCurrentEntry();
|
|
2549
2545
|
if (functionEntry == null) return;
|
|
2550
2546
|
const attribute = node.attributes.find(
|
|
@@ -2583,6 +2579,13 @@ var no_unstable_context_value_default = createRule({
|
|
|
2583
2579
|
},
|
|
2584
2580
|
defaultOptions: []
|
|
2585
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
|
+
}
|
|
2586
2589
|
var RULE_NAME42 = "no-unstable-default-props";
|
|
2587
2590
|
var RULE_FEATURES42 = [
|
|
2588
2591
|
"CHK"
|
|
@@ -3114,12 +3117,12 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3114
3117
|
return null;
|
|
3115
3118
|
}
|
|
3116
3119
|
if (node.children.some(
|
|
3117
|
-
(child) =>
|
|
3120
|
+
(child) => JSX8__namespace.isLiteral(child) && !JSX8__namespace.isWhiteSpace(child) || AST11__namespace.is(types.AST_NODE_TYPES.JSXExpressionContainer)(child)
|
|
3118
3121
|
)) {
|
|
3119
3122
|
return null;
|
|
3120
3123
|
}
|
|
3121
3124
|
}
|
|
3122
|
-
if (
|
|
3125
|
+
if (JSX8__namespace.isUserDefinedElement(node.parent)) {
|
|
3123
3126
|
return null;
|
|
3124
3127
|
}
|
|
3125
3128
|
const opener = node.type === types.AST_NODE_TYPES.JSXFragment ? node.openingFragment : node.openingElement;
|
|
@@ -3128,10 +3131,10 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3128
3131
|
return fixer.replaceText(node, trimLikeReact(childrenText));
|
|
3129
3132
|
}
|
|
3130
3133
|
const initialScope = context.sourceCode.getScope(node);
|
|
3131
|
-
if (
|
|
3134
|
+
if (JSX8__namespace.isKeyedElement(node, initialScope)) {
|
|
3132
3135
|
return;
|
|
3133
3136
|
}
|
|
3134
|
-
if (
|
|
3137
|
+
if (JSX8__namespace.isBuiltInElement(node.parent)) {
|
|
3135
3138
|
context.report({
|
|
3136
3139
|
messageId: "uselessFragment",
|
|
3137
3140
|
node,
|
|
@@ -3155,7 +3158,7 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3155
3158
|
const isChildElement = AST11__namespace.isOneOf([types.AST_NODE_TYPES.JSXElement, types.AST_NODE_TYPES.JSXFragment])(node.parent);
|
|
3156
3159
|
switch (true) {
|
|
3157
3160
|
// <Foo content={<>ee eeee eeee ...</>} />
|
|
3158
|
-
case (allowExpressions && !isChildElement && node.children.length === 1 &&
|
|
3161
|
+
case (allowExpressions && !isChildElement && node.children.length === 1 && JSX8__namespace.isLiteral(node.children.at(0))): {
|
|
3159
3162
|
return;
|
|
3160
3163
|
}
|
|
3161
3164
|
// <Foo><>hello, world</></Foo>
|
|
@@ -3182,7 +3185,7 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3182
3185
|
return;
|
|
3183
3186
|
}
|
|
3184
3187
|
}
|
|
3185
|
-
const nonPaddingChildren = node.children.filter((child) => !
|
|
3188
|
+
const nonPaddingChildren = node.children.filter((child) => !JSX8__namespace.isPaddingSpaces(child));
|
|
3186
3189
|
const firstNonPaddingChild = nonPaddingChildren.at(0);
|
|
3187
3190
|
switch (true) {
|
|
3188
3191
|
case nonPaddingChildren.length === 0:
|
|
@@ -3227,7 +3230,7 @@ var no_useless_fragment_default = createRule({
|
|
|
3227
3230
|
const { allowExpressions = true } = option;
|
|
3228
3231
|
return {
|
|
3229
3232
|
JSXElement(node) {
|
|
3230
|
-
if (!
|
|
3233
|
+
if (!JSX8__namespace.isFragmentElement(node)) return;
|
|
3231
3234
|
checkAndReport(context, node, allowExpressions);
|
|
3232
3235
|
},
|
|
3233
3236
|
JSXFragment(node) {
|
|
@@ -3445,7 +3448,7 @@ var prefer_shorthand_boolean_default = createRule({
|
|
|
3445
3448
|
return {
|
|
3446
3449
|
JSXAttribute(node) {
|
|
3447
3450
|
const { value } = node;
|
|
3448
|
-
const propName =
|
|
3451
|
+
const propName = JSX8__namespace.getAttributeName(node);
|
|
3449
3452
|
const hasValueTrue = value?.type === types.AST_NODE_TYPES.JSXExpressionContainer && value.expression.type === types.AST_NODE_TYPES.Literal && value.expression.value === true;
|
|
3450
3453
|
if (!hasValueTrue) {
|
|
3451
3454
|
return;
|
|
@@ -3485,7 +3488,7 @@ var prefer_shorthand_fragment_default = createRule({
|
|
|
3485
3488
|
create(context) {
|
|
3486
3489
|
return {
|
|
3487
3490
|
JSXElement(node) {
|
|
3488
|
-
if (!
|
|
3491
|
+
if (!JSX8__namespace.isFragmentElement(node)) return;
|
|
3489
3492
|
const hasAttributes = node.openingElement.attributes.length > 0;
|
|
3490
3493
|
if (hasAttributes) {
|
|
3491
3494
|
return;
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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';
|
|
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
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';
|
|
@@ -110,7 +110,7 @@ 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
116
|
// src/rules/avoid-shorthand-boolean.ts
|
|
@@ -140,7 +140,7 @@ var avoid_shorthand_boolean_default = createRule({
|
|
|
140
140
|
messageId: "avoidShorthandBoolean",
|
|
141
141
|
node,
|
|
142
142
|
data: {
|
|
143
|
-
propName:
|
|
143
|
+
propName: JSX8.getAttributeName(node)
|
|
144
144
|
},
|
|
145
145
|
fix: (fixer) => fixer.insertTextAfter(node.name, `={true}`)
|
|
146
146
|
});
|
|
@@ -693,7 +693,7 @@ var no_children_prop_default = createRule({
|
|
|
693
693
|
create(context) {
|
|
694
694
|
return {
|
|
695
695
|
JSXElement(node) {
|
|
696
|
-
const attribute =
|
|
696
|
+
const attribute = JSX8.getAttribute(
|
|
697
697
|
"children",
|
|
698
698
|
node.openingElement.attributes,
|
|
699
699
|
context.sourceCode.getScope(node)
|
|
@@ -912,7 +912,7 @@ var RULE_FEATURES16 = [
|
|
|
912
912
|
"MOD"
|
|
913
913
|
];
|
|
914
914
|
function isComponentWillMount(node) {
|
|
915
|
-
return AST11.
|
|
915
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillMount";
|
|
916
916
|
}
|
|
917
917
|
var no_component_will_mount_default = createRule({
|
|
918
918
|
meta: {
|
|
@@ -965,7 +965,7 @@ var RULE_FEATURES17 = [
|
|
|
965
965
|
"MOD"
|
|
966
966
|
];
|
|
967
967
|
function isComponentWillUpdate(node) {
|
|
968
|
-
return AST11.
|
|
968
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillReceiveProps";
|
|
969
969
|
}
|
|
970
970
|
var no_component_will_receive_props_default = createRule({
|
|
971
971
|
meta: {
|
|
@@ -1018,7 +1018,7 @@ var RULE_FEATURES18 = [
|
|
|
1018
1018
|
"MOD"
|
|
1019
1019
|
];
|
|
1020
1020
|
function isComponentWillUpdate2(node) {
|
|
1021
|
-
return AST11.
|
|
1021
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
|
|
1022
1022
|
}
|
|
1023
1023
|
var no_component_will_update_default = createRule({
|
|
1024
1024
|
meta: {
|
|
@@ -1092,7 +1092,7 @@ var no_context_provider_default = createRule({
|
|
|
1092
1092
|
}
|
|
1093
1093
|
return {
|
|
1094
1094
|
JSXElement(node) {
|
|
1095
|
-
const [name5, ...rest] =
|
|
1095
|
+
const [name5, ...rest] = JSX8.getElementName(node).split(".").reverse();
|
|
1096
1096
|
if (name5 !== "Provider") return;
|
|
1097
1097
|
const contextName = rest.reverse().join(".");
|
|
1098
1098
|
context.report({
|
|
@@ -1225,7 +1225,7 @@ function isAssignmentToThisState(node) {
|
|
|
1225
1225
|
return left.type === AST_NODE_TYPES.MemberExpression && AST11.isThisExpression(left.object) && getName2(left.property) === "state";
|
|
1226
1226
|
}
|
|
1227
1227
|
function isConstructorFunction(node) {
|
|
1228
|
-
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";
|
|
1229
1229
|
}
|
|
1230
1230
|
var no_direct_mutation_state_default = createRule({
|
|
1231
1231
|
meta: {
|
|
@@ -1521,7 +1521,7 @@ var no_implicit_key_default = createRule({
|
|
|
1521
1521
|
return {
|
|
1522
1522
|
JSXOpeningElement(node) {
|
|
1523
1523
|
const initialScope = context.sourceCode.getScope(node);
|
|
1524
|
-
const keyPropFound =
|
|
1524
|
+
const keyPropFound = JSX8.getAttribute("key", node.attributes, initialScope);
|
|
1525
1525
|
const keyPropOnElement = node.attributes.some(
|
|
1526
1526
|
(n) => n.type === AST_NODE_TYPES.JSXAttribute && n.name.type === AST_NODE_TYPES.JSXIdentifier && n.name.name === "key"
|
|
1527
1527
|
);
|
|
@@ -1781,7 +1781,7 @@ var no_missing_context_display_name_default = createRule({
|
|
|
1781
1781
|
},
|
|
1782
1782
|
"Program:exit"() {
|
|
1783
1783
|
for (const call of createCalls) {
|
|
1784
|
-
const id =
|
|
1784
|
+
const id = getInstanceId(call);
|
|
1785
1785
|
if (id == null) {
|
|
1786
1786
|
context.report({
|
|
1787
1787
|
messageId: "noMissingContextDisplayName",
|
|
@@ -1793,10 +1793,7 @@ var no_missing_context_display_name_default = createRule({
|
|
|
1793
1793
|
const left = node.left;
|
|
1794
1794
|
if (left.type !== AST_NODE_TYPES.MemberExpression) return false;
|
|
1795
1795
|
const object = left.object;
|
|
1796
|
-
return
|
|
1797
|
-
context.sourceCode.getScope(id),
|
|
1798
|
-
context.sourceCode.getScope(object)
|
|
1799
|
-
]);
|
|
1796
|
+
return isInstanceIdEqual(context, id, object);
|
|
1800
1797
|
});
|
|
1801
1798
|
if (!hasDisplayNameAssignment) {
|
|
1802
1799
|
context.report({
|
|
@@ -1834,7 +1831,7 @@ var no_missing_key_default = createRule({
|
|
|
1834
1831
|
switch (node.type) {
|
|
1835
1832
|
case AST_NODE_TYPES.JSXElement: {
|
|
1836
1833
|
const initialScope = context.sourceCode.getScope(node);
|
|
1837
|
-
if (!
|
|
1834
|
+
if (!JSX8.hasAttribute("key", node.openingElement.attributes, initialScope)) {
|
|
1838
1835
|
return {
|
|
1839
1836
|
messageId: "missingKey",
|
|
1840
1837
|
node
|
|
@@ -1895,7 +1892,7 @@ var no_missing_key_default = createRule({
|
|
|
1895
1892
|
}
|
|
1896
1893
|
const initialScope = context.sourceCode.getScope(node);
|
|
1897
1894
|
for (const element of elements) {
|
|
1898
|
-
if (!
|
|
1895
|
+
if (!JSX8.hasAttribute("key", element.openingElement.attributes, initialScope)) {
|
|
1899
1896
|
context.report({
|
|
1900
1897
|
messageId: "missingKey",
|
|
1901
1898
|
node: element
|
|
@@ -1997,7 +1994,7 @@ var no_nested_components_default = createRule({
|
|
|
1997
1994
|
continue;
|
|
1998
1995
|
}
|
|
1999
1996
|
const isInsideProperty = component.parent.type === AST_NODE_TYPES.Property;
|
|
2000
|
-
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;
|
|
2001
1998
|
if (isInsideJSXPropValue) {
|
|
2002
1999
|
if (!isDeclaredInRenderPropLoose(component)) {
|
|
2003
2000
|
context.report({
|
|
@@ -2126,7 +2123,7 @@ var RULE_FEATURES33 = [
|
|
|
2126
2123
|
"CHK"
|
|
2127
2124
|
];
|
|
2128
2125
|
function isShouldComponentUpdate(node) {
|
|
2129
|
-
return AST11.
|
|
2126
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
|
|
2130
2127
|
}
|
|
2131
2128
|
var no_redundant_should_component_update_default = createRule({
|
|
2132
2129
|
meta: {
|
|
@@ -2177,7 +2174,7 @@ var RULE_FEATURES34 = [
|
|
|
2177
2174
|
"CHK"
|
|
2178
2175
|
];
|
|
2179
2176
|
function isComponentDidMount(node) {
|
|
2180
|
-
return AST11.
|
|
2177
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
|
|
2181
2178
|
}
|
|
2182
2179
|
var no_set_state_in_component_did_mount_default = createRule({
|
|
2183
2180
|
meta: {
|
|
@@ -2222,7 +2219,7 @@ var RULE_FEATURES35 = [
|
|
|
2222
2219
|
"CHK"
|
|
2223
2220
|
];
|
|
2224
2221
|
function isComponentDidUpdate(node) {
|
|
2225
|
-
return AST11.
|
|
2222
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidUpdate";
|
|
2226
2223
|
}
|
|
2227
2224
|
var no_set_state_in_component_did_update_default = createRule({
|
|
2228
2225
|
meta: {
|
|
@@ -2267,7 +2264,7 @@ var RULE_FEATURES36 = [
|
|
|
2267
2264
|
"CHK"
|
|
2268
2265
|
];
|
|
2269
2266
|
function isComponentWillUpdate3(node) {
|
|
2270
|
-
return AST11.
|
|
2267
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
|
|
2271
2268
|
}
|
|
2272
2269
|
var no_set_state_in_component_will_update_default = createRule({
|
|
2273
2270
|
meta: {
|
|
@@ -2358,7 +2355,7 @@ var RULE_FEATURES38 = [
|
|
|
2358
2355
|
"CHK"
|
|
2359
2356
|
];
|
|
2360
2357
|
function isUnsafeComponentWillMount(node) {
|
|
2361
|
-
return AST11.
|
|
2358
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillMount";
|
|
2362
2359
|
}
|
|
2363
2360
|
var no_unsafe_component_will_mount_default = createRule({
|
|
2364
2361
|
meta: {
|
|
@@ -2403,7 +2400,7 @@ var RULE_FEATURES39 = [
|
|
|
2403
2400
|
"CHK"
|
|
2404
2401
|
];
|
|
2405
2402
|
function isUnsafeComponentWillReceiveProps(node) {
|
|
2406
|
-
return AST11.
|
|
2403
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillReceiveProps";
|
|
2407
2404
|
}
|
|
2408
2405
|
var no_unsafe_component_will_receive_props_default = createRule({
|
|
2409
2406
|
meta: {
|
|
@@ -2448,7 +2445,7 @@ var RULE_FEATURES40 = [
|
|
|
2448
2445
|
"CHK"
|
|
2449
2446
|
];
|
|
2450
2447
|
function isUnsafeComponentWillUpdate(node) {
|
|
2451
|
-
return AST11.
|
|
2448
|
+
return AST11.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillUpdate";
|
|
2452
2449
|
}
|
|
2453
2450
|
var no_unsafe_component_will_update_default = createRule({
|
|
2454
2451
|
meta: {
|
|
@@ -2506,18 +2503,17 @@ var no_unstable_context_value_default = createRule({
|
|
|
2506
2503
|
},
|
|
2507
2504
|
name: RULE_NAME41,
|
|
2508
2505
|
create(context) {
|
|
2506
|
+
const { version: version2 } = getSettingsFromContext(context);
|
|
2507
|
+
const isReact18OrBelow = compare(version2, "19.0.0", "<");
|
|
2509
2508
|
const { ctx, listeners } = useComponentCollector(context);
|
|
2510
2509
|
const constructions = /* @__PURE__ */ new Map();
|
|
2511
2510
|
return {
|
|
2512
2511
|
...listeners,
|
|
2513
2512
|
JSXOpeningElement(node) {
|
|
2514
|
-
const
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
if (openingElementName.property.name !== "Provider") {
|
|
2519
|
-
return;
|
|
2520
|
-
}
|
|
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;
|
|
2521
2517
|
const functionEntry = ctx.getCurrentEntry();
|
|
2522
2518
|
if (functionEntry == null) return;
|
|
2523
2519
|
const attribute = node.attributes.find(
|
|
@@ -2556,6 +2552,13 @@ var no_unstable_context_value_default = createRule({
|
|
|
2556
2552
|
},
|
|
2557
2553
|
defaultOptions: []
|
|
2558
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
|
+
}
|
|
2559
2562
|
var RULE_NAME42 = "no-unstable-default-props";
|
|
2560
2563
|
var RULE_FEATURES42 = [
|
|
2561
2564
|
"CHK"
|
|
@@ -3087,12 +3090,12 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3087
3090
|
return null;
|
|
3088
3091
|
}
|
|
3089
3092
|
if (node.children.some(
|
|
3090
|
-
(child) =>
|
|
3093
|
+
(child) => JSX8.isLiteral(child) && !JSX8.isWhiteSpace(child) || AST11.is(AST_NODE_TYPES.JSXExpressionContainer)(child)
|
|
3091
3094
|
)) {
|
|
3092
3095
|
return null;
|
|
3093
3096
|
}
|
|
3094
3097
|
}
|
|
3095
|
-
if (
|
|
3098
|
+
if (JSX8.isUserDefinedElement(node.parent)) {
|
|
3096
3099
|
return null;
|
|
3097
3100
|
}
|
|
3098
3101
|
const opener = node.type === AST_NODE_TYPES.JSXFragment ? node.openingFragment : node.openingElement;
|
|
@@ -3101,10 +3104,10 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3101
3104
|
return fixer.replaceText(node, trimLikeReact(childrenText));
|
|
3102
3105
|
}
|
|
3103
3106
|
const initialScope = context.sourceCode.getScope(node);
|
|
3104
|
-
if (
|
|
3107
|
+
if (JSX8.isKeyedElement(node, initialScope)) {
|
|
3105
3108
|
return;
|
|
3106
3109
|
}
|
|
3107
|
-
if (
|
|
3110
|
+
if (JSX8.isBuiltInElement(node.parent)) {
|
|
3108
3111
|
context.report({
|
|
3109
3112
|
messageId: "uselessFragment",
|
|
3110
3113
|
node,
|
|
@@ -3128,7 +3131,7 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3128
3131
|
const isChildElement = AST11.isOneOf([AST_NODE_TYPES.JSXElement, AST_NODE_TYPES.JSXFragment])(node.parent);
|
|
3129
3132
|
switch (true) {
|
|
3130
3133
|
// <Foo content={<>ee eeee eeee ...</>} />
|
|
3131
|
-
case (allowExpressions && !isChildElement && node.children.length === 1 &&
|
|
3134
|
+
case (allowExpressions && !isChildElement && node.children.length === 1 && JSX8.isLiteral(node.children.at(0))): {
|
|
3132
3135
|
return;
|
|
3133
3136
|
}
|
|
3134
3137
|
// <Foo><>hello, world</></Foo>
|
|
@@ -3155,7 +3158,7 @@ function checkAndReport(context, node, allowExpressions) {
|
|
|
3155
3158
|
return;
|
|
3156
3159
|
}
|
|
3157
3160
|
}
|
|
3158
|
-
const nonPaddingChildren = node.children.filter((child) => !
|
|
3161
|
+
const nonPaddingChildren = node.children.filter((child) => !JSX8.isPaddingSpaces(child));
|
|
3159
3162
|
const firstNonPaddingChild = nonPaddingChildren.at(0);
|
|
3160
3163
|
switch (true) {
|
|
3161
3164
|
case nonPaddingChildren.length === 0:
|
|
@@ -3200,7 +3203,7 @@ var no_useless_fragment_default = createRule({
|
|
|
3200
3203
|
const { allowExpressions = true } = option;
|
|
3201
3204
|
return {
|
|
3202
3205
|
JSXElement(node) {
|
|
3203
|
-
if (!
|
|
3206
|
+
if (!JSX8.isFragmentElement(node)) return;
|
|
3204
3207
|
checkAndReport(context, node, allowExpressions);
|
|
3205
3208
|
},
|
|
3206
3209
|
JSXFragment(node) {
|
|
@@ -3418,7 +3421,7 @@ var prefer_shorthand_boolean_default = createRule({
|
|
|
3418
3421
|
return {
|
|
3419
3422
|
JSXAttribute(node) {
|
|
3420
3423
|
const { value } = node;
|
|
3421
|
-
const propName =
|
|
3424
|
+
const propName = JSX8.getAttributeName(node);
|
|
3422
3425
|
const hasValueTrue = value?.type === AST_NODE_TYPES.JSXExpressionContainer && value.expression.type === AST_NODE_TYPES.Literal && value.expression.value === true;
|
|
3423
3426
|
if (!hasValueTrue) {
|
|
3424
3427
|
return;
|
|
@@ -3458,7 +3461,7 @@ var prefer_shorthand_fragment_default = createRule({
|
|
|
3458
3461
|
create(context) {
|
|
3459
3462
|
return {
|
|
3460
3463
|
JSXElement(node) {
|
|
3461
|
-
if (!
|
|
3464
|
+
if (!JSX8.isFragmentElement(node)) return;
|
|
3462
3465
|
const hasAttributes = node.openingElement.attributes.length > 0;
|
|
3463
3466
|
if (hasAttributes) {
|
|
3464
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/
|
|
55
|
-
"@eslint-react/
|
|
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",
|