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 CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var shared = require('@eslint-react/shared');
4
- var JSX7 = require('@eslint-react/jsx');
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 JSX7__namespace = /*#__PURE__*/_interopNamespace(JSX7);
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.4";
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: JSX7__namespace.getAttributeName(node)
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 && AST11__namespace.isKeyLiteralLike(prop, prop.key) && getName(prop.key) === "state"
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 = JSX7__namespace.getAttribute(
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillMount";
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillReceiveProps";
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
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] = JSX7__namespace.getElementName(node).split(".").reverse();
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node.parent) && node.parent.key.type === types.AST_NODE_TYPES.Identifier && node.parent.key.name === "constructor";
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 = JSX7__namespace.getAttribute("key", node.attributes, initialScope);
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 = VAR__namespace.getVariableId(call);
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 VAR__namespace.isVariableIdEqual(id, object, [
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 (!JSX7__namespace.hasAttribute("key", node.openingElement.attributes, initialScope)) {
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 (!JSX7__namespace.hasAttribute("key", element.openingElement.attributes, initialScope)) {
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 || JSX7__namespace.findParentAttribute(node, (n) => n.value?.type === types.AST_NODE_TYPES.JSXExpressionContainer) != null;
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidUpdate";
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillMount";
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillReceiveProps";
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.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillUpdate";
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 openingElementName = node.name;
2555
- if (openingElementName.type !== types.AST_NODE_TYPES.JSXMemberExpression) {
2556
- return;
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 (AST11__namespace.isKeyLiteralLike(node, node.key)) {
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) || !AST11__namespace.isKeyLiteralLike(node, node.property)) {
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 && AST11__namespace.isKeyLiteralLike(prop, prop.key)) {
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 && AST11__namespace.isKeyLiteralLike(prop, prop.key)) {
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) => JSX7__namespace.isLiteral(child) && !JSX7__namespace.isWhiteSpace(child) || AST11__namespace.is(types.AST_NODE_TYPES.JSXExpressionContainer)(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 (JSX7__namespace.isUserDefinedElement(node.parent)) {
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 (JSX7__namespace.isKeyedElement(node, initialScope)) {
3134
+ if (JSX8__namespace.isKeyedElement(node, initialScope)) {
3125
3135
  return;
3126
3136
  }
3127
- if (JSX7__namespace.isBuiltInElement(node.parent)) {
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 && JSX7__namespace.isLiteral(node.children.at(0))): {
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) => !JSX7__namespace.isPaddingSpaces(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 (!JSX7__namespace.isFragmentElement(node)) return;
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 = JSX7__namespace.getAttributeName(node);
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 (!JSX7__namespace.isFragmentElement(node)) return;
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 JSX7 from '@eslint-react/jsx';
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.4";
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: JSX7.getAttributeName(node)
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 && AST11.isKeyLiteralLike(prop, prop.key) && getName(prop.key) === "state"
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 = JSX7.getAttribute(
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillMount";
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillReceiveProps";
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
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] = JSX7.getElementName(node).split(".").reverse();
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node.parent) && node.parent.key.type === AST_NODE_TYPES.Identifier && node.parent.key.name === "constructor";
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 = JSX7.getAttribute("key", node.attributes, initialScope);
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 = VAR.getVariableId(call);
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 VAR.isVariableIdEqual(id, object, [
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 (!JSX7.hasAttribute("key", node.openingElement.attributes, initialScope)) {
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 (!JSX7.hasAttribute("key", element.openingElement.attributes, initialScope)) {
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 || JSX7.findParentAttribute(node, (n) => n.value?.type === AST_NODE_TYPES.JSXExpressionContainer) != null;
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidUpdate";
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillMount";
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillReceiveProps";
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.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillUpdate";
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 openingElementName = node.name;
2528
- if (openingElementName.type !== AST_NODE_TYPES.JSXMemberExpression) {
2529
- return;
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 (AST11.isKeyLiteralLike(node, node.key)) {
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) || !AST11.isKeyLiteralLike(node, node.property)) {
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 && AST11.isKeyLiteralLike(prop, prop.key)) {
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 && AST11.isKeyLiteralLike(prop, prop.key)) {
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) => JSX7.isLiteral(child) && !JSX7.isWhiteSpace(child) || AST11.is(AST_NODE_TYPES.JSXExpressionContainer)(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 (JSX7.isUserDefinedElement(node.parent)) {
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 (JSX7.isKeyedElement(node, initialScope)) {
3107
+ if (JSX8.isKeyedElement(node, initialScope)) {
3098
3108
  return;
3099
3109
  }
3100
- if (JSX7.isBuiltInElement(node.parent)) {
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 && JSX7.isLiteral(node.children.at(0))): {
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) => !JSX7.isPaddingSpaces(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 (!JSX7.isFragmentElement(node)) return;
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 = JSX7.getAttributeName(node);
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 (!JSX7.isFragmentElement(node)) return;
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.4",
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.4",
54
- "@eslint-react/core": "1.28.1-beta.4",
55
- "@eslint-react/eff": "1.28.1-beta.4",
56
- "@eslint-react/jsx": "1.28.1-beta.4",
57
- "@eslint-react/shared": "1.28.1-beta.4",
58
- "@eslint-react/var": "1.28.1-beta.4"
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",