eslint-plugin-react-x 1.22.2 → 1.23.0-beta.1
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 +30 -21
- package/dist/index.mjs +31 -22
- package/package.json +12 -12
package/dist/index.js
CHANGED
|
@@ -42,7 +42,7 @@ var ts__default = /*#__PURE__*/_interopDefault(ts);
|
|
|
42
42
|
|
|
43
43
|
// package.json
|
|
44
44
|
var name = "eslint-plugin-react-x";
|
|
45
|
-
var version = "1.
|
|
45
|
+
var version = "1.23.0-beta.1";
|
|
46
46
|
var createRule = shared.createRuleForPlugin("x");
|
|
47
47
|
|
|
48
48
|
// src/rules/avoid-shorthand-boolean.ts
|
|
@@ -2553,29 +2553,38 @@ var no_unused_state_default = createRule({
|
|
|
2553
2553
|
defaultOptions: []
|
|
2554
2554
|
});
|
|
2555
2555
|
var RULE_NAME44 = "no-useless-fragment";
|
|
2556
|
-
|
|
2556
|
+
var defaultOptions = [{
|
|
2557
|
+
allowExpressions: true
|
|
2558
|
+
}];
|
|
2559
|
+
function checkAndReport(node, context, allowExpressions) {
|
|
2557
2560
|
const initialScope = context.sourceCode.getScope(node);
|
|
2558
2561
|
if (JSX7__namespace.isKeyedElement(node, initialScope)) return;
|
|
2559
2562
|
if (JSX7__namespace.isBuiltInElement(node.parent)) context.report({ messageId: "noUselessFragmentInBuiltIn", node });
|
|
2560
2563
|
if (node.children.length === 0) return context.report({ messageId: "noUselessFragment", node });
|
|
2561
|
-
const
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2564
|
+
const isChildElement = AST11__namespace.isOneOf([types.AST_NODE_TYPES.JSXElement, types.AST_NODE_TYPES.JSXFragment])(node.parent);
|
|
2565
|
+
switch (true) {
|
|
2566
|
+
// <Foo content={<>ee eeee eeee ...</>} />
|
|
2567
|
+
case (allowExpressions && !isChildElement && node.children.length === 1 && JSX7__namespace.isLiteral(node.children.at(0))): {
|
|
2568
|
+
return;
|
|
2569
|
+
}
|
|
2570
|
+
// <Foo><>hello, world</></Foo>
|
|
2571
|
+
case (!allowExpressions && isChildElement): {
|
|
2572
|
+
return context.report({ messageId: "noUselessFragment", node });
|
|
2573
|
+
}
|
|
2574
|
+
case (!allowExpressions && !isChildElement && node.children.length === 1): {
|
|
2575
|
+
return context.report({ messageId: "noUselessFragment", node });
|
|
2576
|
+
}
|
|
2568
2577
|
}
|
|
2569
2578
|
const nonPaddingChildren = node.children.filter((child) => !JSX7__namespace.isPaddingSpaces(child));
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2579
|
+
const firstNonPaddingChild = nonPaddingChildren.at(0);
|
|
2580
|
+
switch (true) {
|
|
2581
|
+
case nonPaddingChildren.length === 0:
|
|
2582
|
+
case (nonPaddingChildren.length === 1 && firstNonPaddingChild?.type !== types.AST_NODE_TYPES.JSXExpressionContainer): {
|
|
2583
|
+
return context.report({ messageId: "noUselessFragment", node });
|
|
2584
|
+
}
|
|
2585
|
+
}
|
|
2586
|
+
return;
|
|
2575
2587
|
}
|
|
2576
|
-
var defaultOptions = [{
|
|
2577
|
-
allowExpressions: true
|
|
2578
|
-
}];
|
|
2579
2588
|
var no_useless_fragment_default = createRule({
|
|
2580
2589
|
meta: {
|
|
2581
2590
|
type: "problem",
|
|
@@ -2603,11 +2612,11 @@ var no_useless_fragment_default = createRule({
|
|
|
2603
2612
|
const { allowExpressions = true } = option;
|
|
2604
2613
|
return {
|
|
2605
2614
|
JSXElement(node) {
|
|
2606
|
-
if (
|
|
2607
|
-
|
|
2615
|
+
if (JSX7__namespace.getElementName(node.openingElement).split(".").at(-1) !== "Fragment") return;
|
|
2616
|
+
checkAndReport(node, context, allowExpressions);
|
|
2608
2617
|
},
|
|
2609
2618
|
JSXFragment(node) {
|
|
2610
|
-
|
|
2619
|
+
checkAndReport(node, context, allowExpressions);
|
|
2611
2620
|
}
|
|
2612
2621
|
};
|
|
2613
2622
|
},
|
|
@@ -2845,7 +2854,7 @@ var prefer_shorthand_fragment_default = createRule({
|
|
|
2845
2854
|
name: RULE_NAME49,
|
|
2846
2855
|
create(context) {
|
|
2847
2856
|
function getReportDescriptor(node) {
|
|
2848
|
-
if (
|
|
2857
|
+
if (JSX7__namespace.getElementName(node.openingElement).split(".").at(-1) !== "Fragment") return eff.O.none();
|
|
2849
2858
|
const hasAttributes = node.openingElement.attributes.length > 0;
|
|
2850
2859
|
if (hasAttributes) return eff.O.none();
|
|
2851
2860
|
return eff.O.some({
|
package/dist/index.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { F, O, or, isString, isNullable } from '@eslint-react/eff';
|
|
|
2
2
|
import * as JSX7 from '@eslint-react/jsx';
|
|
3
3
|
import { createRuleForPlugin, normalizeSettings, decodeSettings, unsafeReadSettings } from '@eslint-react/shared';
|
|
4
4
|
import * as AST11 from '@eslint-react/ast';
|
|
5
|
-
import { isForwardRefCall, isThisSetState, isClassComponent, isCreateElementCall, isCloneElementCall, isChildrenCount, isChildrenForEach, isChildrenMap, isChildrenOnly, isChildrenToArray, useComponentCollectorLegacy, isCreateRefCall, isComponentName, useComponentCollector, ERFunctionComponentFlag, isChildrenToArrayCall, ERComponentHint, isDirectValueOfRenderPropertyLoose, isDeclaredInRenderPropLoose, isInsideCreateElementProps, isInsideRenderMethod, ERClassComponentFlag,
|
|
5
|
+
import { isForwardRefCall, isThisSetState, isClassComponent, isCreateElementCall, isCloneElementCall, isChildrenCount, isChildrenForEach, isChildrenMap, isChildrenOnly, isChildrenToArray, useComponentCollectorLegacy, isCreateRefCall, isComponentName, useComponentCollector, ERFunctionComponentFlag, isChildrenToArrayCall, ERComponentHint, isDirectValueOfRenderPropertyLoose, isDeclaredInRenderPropLoose, isInsideCreateElementProps, isInsideRenderMethod, ERClassComponentFlag, 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
8
|
import { compare } from 'compare-versions';
|
|
@@ -15,7 +15,7 @@ import { getTypeImmutability, isUnknown, isImmutable, isReadonlyShallow, isReado
|
|
|
15
15
|
|
|
16
16
|
// package.json
|
|
17
17
|
var name = "eslint-plugin-react-x";
|
|
18
|
-
var version = "1.
|
|
18
|
+
var version = "1.23.0-beta.1";
|
|
19
19
|
var createRule = createRuleForPlugin("x");
|
|
20
20
|
|
|
21
21
|
// src/rules/avoid-shorthand-boolean.ts
|
|
@@ -2526,29 +2526,38 @@ var no_unused_state_default = createRule({
|
|
|
2526
2526
|
defaultOptions: []
|
|
2527
2527
|
});
|
|
2528
2528
|
var RULE_NAME44 = "no-useless-fragment";
|
|
2529
|
-
|
|
2529
|
+
var defaultOptions = [{
|
|
2530
|
+
allowExpressions: true
|
|
2531
|
+
}];
|
|
2532
|
+
function checkAndReport(node, context, allowExpressions) {
|
|
2530
2533
|
const initialScope = context.sourceCode.getScope(node);
|
|
2531
2534
|
if (JSX7.isKeyedElement(node, initialScope)) return;
|
|
2532
2535
|
if (JSX7.isBuiltInElement(node.parent)) context.report({ messageId: "noUselessFragmentInBuiltIn", node });
|
|
2533
2536
|
if (node.children.length === 0) return context.report({ messageId: "noUselessFragment", node });
|
|
2534
|
-
const
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2537
|
+
const isChildElement = AST11.isOneOf([AST_NODE_TYPES.JSXElement, AST_NODE_TYPES.JSXFragment])(node.parent);
|
|
2538
|
+
switch (true) {
|
|
2539
|
+
// <Foo content={<>ee eeee eeee ...</>} />
|
|
2540
|
+
case (allowExpressions && !isChildElement && node.children.length === 1 && JSX7.isLiteral(node.children.at(0))): {
|
|
2541
|
+
return;
|
|
2542
|
+
}
|
|
2543
|
+
// <Foo><>hello, world</></Foo>
|
|
2544
|
+
case (!allowExpressions && isChildElement): {
|
|
2545
|
+
return context.report({ messageId: "noUselessFragment", node });
|
|
2546
|
+
}
|
|
2547
|
+
case (!allowExpressions && !isChildElement && node.children.length === 1): {
|
|
2548
|
+
return context.report({ messageId: "noUselessFragment", node });
|
|
2549
|
+
}
|
|
2541
2550
|
}
|
|
2542
2551
|
const nonPaddingChildren = node.children.filter((child) => !JSX7.isPaddingSpaces(child));
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2552
|
+
const firstNonPaddingChild = nonPaddingChildren.at(0);
|
|
2553
|
+
switch (true) {
|
|
2554
|
+
case nonPaddingChildren.length === 0:
|
|
2555
|
+
case (nonPaddingChildren.length === 1 && firstNonPaddingChild?.type !== AST_NODE_TYPES.JSXExpressionContainer): {
|
|
2556
|
+
return context.report({ messageId: "noUselessFragment", node });
|
|
2557
|
+
}
|
|
2558
|
+
}
|
|
2559
|
+
return;
|
|
2548
2560
|
}
|
|
2549
|
-
var defaultOptions = [{
|
|
2550
|
-
allowExpressions: true
|
|
2551
|
-
}];
|
|
2552
2561
|
var no_useless_fragment_default = createRule({
|
|
2553
2562
|
meta: {
|
|
2554
2563
|
type: "problem",
|
|
@@ -2576,11 +2585,11 @@ var no_useless_fragment_default = createRule({
|
|
|
2576
2585
|
const { allowExpressions = true } = option;
|
|
2577
2586
|
return {
|
|
2578
2587
|
JSXElement(node) {
|
|
2579
|
-
if (
|
|
2580
|
-
|
|
2588
|
+
if (JSX7.getElementName(node.openingElement).split(".").at(-1) !== "Fragment") return;
|
|
2589
|
+
checkAndReport(node, context, allowExpressions);
|
|
2581
2590
|
},
|
|
2582
2591
|
JSXFragment(node) {
|
|
2583
|
-
|
|
2592
|
+
checkAndReport(node, context, allowExpressions);
|
|
2584
2593
|
}
|
|
2585
2594
|
};
|
|
2586
2595
|
},
|
|
@@ -2818,7 +2827,7 @@ var prefer_shorthand_fragment_default = createRule({
|
|
|
2818
2827
|
name: RULE_NAME49,
|
|
2819
2828
|
create(context) {
|
|
2820
2829
|
function getReportDescriptor(node) {
|
|
2821
|
-
if (
|
|
2830
|
+
if (JSX7.getElementName(node.openingElement).split(".").at(-1) !== "Fragment") return O.none();
|
|
2822
2831
|
const hasAttributes = node.openingElement.attributes.length > 0;
|
|
2823
2832
|
if (hasAttributes) return O.none();
|
|
2824
2833
|
return O.some({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-react-x",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.0-beta.1",
|
|
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
|
"react",
|
|
@@ -40,22 +40,22 @@
|
|
|
40
40
|
"./package.json"
|
|
41
41
|
],
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@typescript-eslint/scope-manager": "^8.
|
|
44
|
-
"@typescript-eslint/type-utils": "^8.
|
|
45
|
-
"@typescript-eslint/types": "^8.
|
|
46
|
-
"@typescript-eslint/utils": "^8.
|
|
43
|
+
"@typescript-eslint/scope-manager": "^8.19.0",
|
|
44
|
+
"@typescript-eslint/type-utils": "^8.19.0",
|
|
45
|
+
"@typescript-eslint/types": "^8.19.0",
|
|
46
|
+
"@typescript-eslint/utils": "^8.19.0",
|
|
47
47
|
"compare-versions": "^6.1.1",
|
|
48
48
|
"is-immutable-type": "^5.0.0",
|
|
49
49
|
"string-ts": "^2.2.0",
|
|
50
50
|
"ts-api-utils": "^2.0.0",
|
|
51
51
|
"ts-pattern": "^5.6.0",
|
|
52
|
-
"@eslint-react/ast": "1.
|
|
53
|
-
"@eslint-react/
|
|
54
|
-
"@eslint-react/
|
|
55
|
-
"@eslint-react/jsx": "1.
|
|
56
|
-
"@eslint-react/
|
|
57
|
-
"@eslint-react/
|
|
58
|
-
"@eslint-react/
|
|
52
|
+
"@eslint-react/ast": "1.23.0-beta.1",
|
|
53
|
+
"@eslint-react/eff": "1.23.0-beta.1",
|
|
54
|
+
"@eslint-react/core": "1.23.0-beta.1",
|
|
55
|
+
"@eslint-react/jsx": "1.23.0-beta.1",
|
|
56
|
+
"@eslint-react/shared": "1.23.0-beta.1",
|
|
57
|
+
"@eslint-react/types": "1.23.0-beta.1",
|
|
58
|
+
"@eslint-react/var": "1.23.0-beta.1"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@types/react": "^19.0.2",
|