eslint-plugin-react-x 3.0.0-next.0 → 3.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +332 -246
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { DEFAULT_ESLINT_REACT_SETTINGS, WEBSITE_URL, coerceSettings, defineRuleListener, getConfigAdapters, getSettingsFromContext, report, toRegExp } from "@eslint-react/shared";
1
+ import { DEFAULT_ESLINT_REACT_SETTINGS, IMPURE_CONSTRUCTORS, IMPURE_FUNCTIONS, WEBSITE_URL, coerceSettings, defineRuleListener, getConfigAdapters, getSettingsFromContext, report, toRegExp } from "@eslint-react/shared";
2
2
  import * as ast from "@eslint-react/ast";
3
3
  import * as core from "@eslint-react/core";
4
4
  import { ESLintUtils } from "@typescript-eslint/utils";
@@ -66,7 +66,7 @@ const rules$7 = {
66
66
  //#endregion
67
67
  //#region package.json
68
68
  var name$6 = "eslint-plugin-react-x";
69
- var version = "3.0.0-next.0";
69
+ var version = "3.0.0-next.2";
70
70
 
71
71
  //#endregion
72
72
  //#region src/utils/create-rule.ts
@@ -221,7 +221,7 @@ function getTypeVariants(types) {
221
221
 
222
222
  //#endregion
223
223
  //#region src/rules/component-hook-factories.ts
224
- const RULE_NAME$63 = "component-hook-factories";
224
+ const RULE_NAME$64 = "component-hook-factories";
225
225
  var component_hook_factories_default = createRule({
226
226
  meta: {
227
227
  type: "problem",
@@ -232,11 +232,11 @@ var component_hook_factories_default = createRule({
232
232
  },
233
233
  schema: []
234
234
  },
235
- name: RULE_NAME$63,
236
- create: create$63,
235
+ name: RULE_NAME$64,
236
+ create: create$64,
237
237
  defaultOptions: []
238
238
  });
239
- function create$63(context) {
239
+ function create$64(context) {
240
240
  const hint = core.ComponentDetectionHint.DoNotIncludeJsxWithNumberValue | core.ComponentDetectionHint.DoNotIncludeJsxWithBooleanValue | core.ComponentDetectionHint.DoNotIncludeJsxWithNullValue | core.ComponentDetectionHint.DoNotIncludeJsxWithStringValue | core.ComponentDetectionHint.DoNotIncludeJsxWithUndefinedValue | core.ComponentDetectionHint.RequireBothSidesOfLogicalExpressionToBeJsx | core.ComponentDetectionHint.RequireBothBranchesOfConditionalExpressionToBeJsx | core.ComponentDetectionHint.DoNotIncludeFunctionDefinedInArrayPattern | core.ComponentDetectionHint.DoNotIncludeFunctionDefinedInArrayExpression | core.ComponentDetectionHint.DoNotIncludeFunctionDefinedAsArrayMapCallback;
241
241
  const fCollector = core.useComponentCollector(context, { hint });
242
242
  const cCollector = core.useComponentCollectorLegacy(context);
@@ -280,7 +280,7 @@ function create$63(context) {
280
280
 
281
281
  //#endregion
282
282
  //#region src/rules/error-boundaries.ts
283
- const RULE_NAME$62 = "error-boundaries";
283
+ const RULE_NAME$63 = "error-boundaries";
284
284
  var error_boundaries_default = createRule({
285
285
  meta: {
286
286
  type: "problem",
@@ -291,11 +291,11 @@ var error_boundaries_default = createRule({
291
291
  },
292
292
  schema: []
293
293
  },
294
- name: RULE_NAME$62,
295
- create: create$62,
294
+ name: RULE_NAME$63,
295
+ create: create$63,
296
296
  defaultOptions: []
297
297
  });
298
- function create$62(context) {
298
+ function create$63(context) {
299
299
  if (!context.sourceCode.text.includes("try")) return {};
300
300
  const { ctx, visitor } = core.useComponentCollector(context);
301
301
  const reported = /* @__PURE__ */ new Set();
@@ -329,7 +329,7 @@ function create$62(context) {
329
329
 
330
330
  //#endregion
331
331
  //#region src/rules/exhaustive-deps.ts
332
- const RULE_NAME$61 = "exhaustive-deps";
332
+ const RULE_NAME$62 = "exhaustive-deps";
333
333
  /**
334
334
  * Built-in hooks that accept dependency arrays.
335
335
  * Maps hook name to the index of the callback argument.
@@ -508,11 +508,11 @@ var exhaustive_deps_default = createRule({
508
508
  properties: { additionalHooks: { type: "string" } }
509
509
  }]
510
510
  },
511
- name: RULE_NAME$61,
512
- create: create$61,
511
+ name: RULE_NAME$62,
512
+ create: create$62,
513
513
  defaultOptions: [{}]
514
514
  });
515
- function create$61(context) {
515
+ function create$62(context) {
516
516
  const additionalHooks = context.options[0]?.additionalHooks;
517
517
  const additionalHooksRegex = additionalHooks != null && additionalHooks.length > 0 ? new RegExp(additionalHooks) : null;
518
518
  /** Collected hook calls for later analysis. */
@@ -724,7 +724,7 @@ function create$61(context) {
724
724
 
725
725
  //#endregion
726
726
  //#region src/rules/jsx-dollar.ts
727
- const RULE_NAME$60 = "jsx-dollar";
727
+ const RULE_NAME$61 = "jsx-dollar";
728
728
  var jsx_dollar_default = createRule({
729
729
  meta: {
730
730
  type: "problem",
@@ -737,11 +737,11 @@ var jsx_dollar_default = createRule({
737
737
  },
738
738
  schema: []
739
739
  },
740
- name: RULE_NAME$60,
741
- create: create$60,
740
+ name: RULE_NAME$61,
741
+ create: create$61,
742
742
  defaultOptions: []
743
743
  });
744
- function create$60(context) {
744
+ function create$61(context) {
745
745
  /**
746
746
  * Visitor function for JSXElement and JSXFragment nodes
747
747
  * @param node The JSXElement or JSXFragment node to be checked
@@ -782,7 +782,7 @@ function create$60(context) {
782
782
 
783
783
  //#endregion
784
784
  //#region src/rules/jsx-key-before-spread.ts
785
- const RULE_NAME$59 = "jsx-key-before-spread";
785
+ const RULE_NAME$60 = "jsx-key-before-spread";
786
786
  var jsx_key_before_spread_default = createRule({
787
787
  meta: {
788
788
  type: "problem",
@@ -790,11 +790,11 @@ var jsx_key_before_spread_default = createRule({
790
790
  messages: { default: "The 'key' prop must be placed before any spread props when using the new JSX transform." },
791
791
  schema: []
792
792
  },
793
- name: RULE_NAME$59,
794
- create: create$59,
793
+ name: RULE_NAME$60,
794
+ create: create$60,
795
795
  defaultOptions: []
796
796
  });
797
- function create$59(context) {
797
+ function create$60(context) {
798
798
  const { jsx } = {
799
799
  ...core.getJsxConfigFromContext(context),
800
800
  ...core.getJsxConfigFromAnnotation(context)
@@ -818,7 +818,7 @@ function create$59(context) {
818
818
 
819
819
  //#endregion
820
820
  //#region src/rules/jsx-no-comment-textnodes.ts
821
- const RULE_NAME$58 = "jsx-no-comment-textnodes";
821
+ const RULE_NAME$59 = "jsx-no-comment-textnodes";
822
822
  var jsx_no_comment_textnodes_default = createRule({
823
823
  meta: {
824
824
  type: "problem",
@@ -826,11 +826,11 @@ var jsx_no_comment_textnodes_default = createRule({
826
826
  messages: { default: "Possible misused comment in text node. Comments inside children section of tag should be placed inside braces." },
827
827
  schema: []
828
828
  },
829
- name: RULE_NAME$58,
830
- create: create$58,
829
+ name: RULE_NAME$59,
830
+ create: create$59,
831
831
  defaultOptions: []
832
832
  });
833
- function create$58(context) {
833
+ function create$59(context) {
834
834
  function hasCommentLike(node) {
835
835
  if (ast.isOneOf([AST_NODE_TYPES.JSXAttribute, AST_NODE_TYPES.JSXExpressionContainer])(node.parent)) return false;
836
836
  return /^\s*\/(?:\/|\*)/mu.test(context.sourceCode.getText(node));
@@ -851,7 +851,7 @@ function create$58(context) {
851
851
 
852
852
  //#endregion
853
853
  //#region src/rules/jsx-no-duplicate-props.ts
854
- const RULE_NAME$57 = "jsx-no-duplicate-props";
854
+ const RULE_NAME$58 = "jsx-no-duplicate-props";
855
855
  var jsx_no_duplicate_props_default = createRule({
856
856
  meta: {
857
857
  type: "problem",
@@ -859,11 +859,11 @@ var jsx_no_duplicate_props_default = createRule({
859
859
  messages: { default: "This JSX property is assigned multiple times." },
860
860
  schema: []
861
861
  },
862
- name: RULE_NAME$57,
863
- create: create$57,
862
+ name: RULE_NAME$58,
863
+ create: create$58,
864
864
  defaultOptions: []
865
865
  });
866
- function create$57(context) {
866
+ function create$58(context) {
867
867
  return { JSXOpeningElement(node) {
868
868
  const props = [];
869
869
  for (const attr of node.attributes) {
@@ -884,7 +884,7 @@ function create$57(context) {
884
884
 
885
885
  //#endregion
886
886
  //#region src/rules/jsx-no-iife.ts
887
- const RULE_NAME$56 = "jsx-no-iife";
887
+ const RULE_NAME$57 = "jsx-no-iife";
888
888
  var jsx_no_iife_default = createRule({
889
889
  meta: {
890
890
  type: "problem",
@@ -892,11 +892,11 @@ var jsx_no_iife_default = createRule({
892
892
  messages: { default: "Avoid using immediately-invoked function expressions in JSX." },
893
893
  schema: []
894
894
  },
895
- name: RULE_NAME$56,
896
- create: create$56,
895
+ name: RULE_NAME$57,
896
+ create: create$57,
897
897
  defaultOptions: []
898
898
  });
899
- function create$56(context) {
899
+ function create$57(context) {
900
900
  return {
901
901
  "JSXElement :function"(node) {
902
902
  if (node.parent.type === AST_NODE_TYPES.CallExpression && node.parent.callee === node) context.report({
@@ -915,7 +915,7 @@ function create$56(context) {
915
915
 
916
916
  //#endregion
917
917
  //#region src/rules/jsx-no-undef.ts
918
- const RULE_NAME$55 = "jsx-no-undef";
918
+ const RULE_NAME$56 = "jsx-no-undef";
919
919
  var jsx_no_undef_default = createRule({
920
920
  meta: {
921
921
  type: "problem",
@@ -923,11 +923,11 @@ var jsx_no_undef_default = createRule({
923
923
  messages: { default: "JSX variable '{{name}}' is not defined." },
924
924
  schema: []
925
925
  },
926
- name: RULE_NAME$55,
927
- create: create$55,
926
+ name: RULE_NAME$56,
927
+ create: create$56,
928
928
  defaultOptions: []
929
929
  });
930
- function create$55(context) {
930
+ function create$56(context) {
931
931
  return { JSXOpeningElement(node) {
932
932
  const name = match(node.name).with({ type: AST_NODE_TYPES.JSXIdentifier }, (n) => n.name).with({
933
933
  type: AST_NODE_TYPES.JSXMemberExpression,
@@ -946,7 +946,7 @@ function create$55(context) {
946
946
 
947
947
  //#endregion
948
948
  //#region src/rules/jsx-shorthand-boolean.ts
949
- const RULE_NAME$54 = "jsx-shorthand-boolean";
949
+ const RULE_NAME$55 = "jsx-shorthand-boolean";
950
950
  const defaultOptions$3 = [1];
951
951
  const schema$3 = [{
952
952
  type: "integer",
@@ -960,11 +960,11 @@ var jsx_shorthand_boolean_default = createRule({
960
960
  messages: { default: "{{message}}" },
961
961
  schema: schema$3
962
962
  },
963
- name: RULE_NAME$54,
964
- create: create$54,
963
+ name: RULE_NAME$55,
964
+ create: create$55,
965
965
  defaultOptions: defaultOptions$3
966
966
  });
967
- function create$54(context) {
967
+ function create$55(context) {
968
968
  const policy = context.options[0] ?? defaultOptions$3[0];
969
969
  return { JSXAttribute(node) {
970
970
  const { value } = node;
@@ -992,7 +992,7 @@ function create$54(context) {
992
992
 
993
993
  //#endregion
994
994
  //#region src/rules/jsx-shorthand-fragment.ts
995
- const RULE_NAME$53 = "jsx-shorthand-fragment";
995
+ const RULE_NAME$54 = "jsx-shorthand-fragment";
996
996
  const defaultOptions$2 = [1];
997
997
  const schema$2 = [{
998
998
  type: "integer",
@@ -1006,11 +1006,11 @@ var jsx_shorthand_fragment_default = createRule({
1006
1006
  messages: { default: "{{message}}" },
1007
1007
  schema: schema$2
1008
1008
  },
1009
- name: RULE_NAME$53,
1010
- create: create$53,
1009
+ name: RULE_NAME$54,
1010
+ create: create$54,
1011
1011
  defaultOptions: defaultOptions$2
1012
1012
  });
1013
- function create$53(context) {
1013
+ function create$54(context) {
1014
1014
  const policy = context.options[0] ?? defaultOptions$2[0];
1015
1015
  const jsxConfig = {
1016
1016
  ...core.getJsxConfigFromContext(context),
@@ -1045,7 +1045,7 @@ function create$53(context) {
1045
1045
 
1046
1046
  //#endregion
1047
1047
  //#region src/rules/jsx-uses-react.ts
1048
- const RULE_NAME$52 = "jsx-uses-react";
1048
+ const RULE_NAME$53 = "jsx-uses-react";
1049
1049
  var jsx_uses_react_default = createRule({
1050
1050
  meta: {
1051
1051
  type: "problem",
@@ -1053,11 +1053,11 @@ var jsx_uses_react_default = createRule({
1053
1053
  messages: { default: "Marked {{name}} as used." },
1054
1054
  schema: []
1055
1055
  },
1056
- name: RULE_NAME$52,
1057
- create: create$52,
1056
+ name: RULE_NAME$53,
1057
+ create: create$53,
1058
1058
  defaultOptions: []
1059
1059
  });
1060
- function create$52(context) {
1060
+ function create$53(context) {
1061
1061
  const { jsx, jsxFactory, jsxFragmentFactory } = {
1062
1062
  ...core.getJsxConfigFromContext(context),
1063
1063
  ...core.getJsxConfigFromAnnotation(context)
@@ -1088,7 +1088,7 @@ function debugReport(context, node, name) {
1088
1088
 
1089
1089
  //#endregion
1090
1090
  //#region src/rules/jsx-uses-vars.ts
1091
- const RULE_NAME$51 = "jsx-uses-vars";
1091
+ const RULE_NAME$52 = "jsx-uses-vars";
1092
1092
  var jsx_uses_vars_default = createRule({
1093
1093
  meta: {
1094
1094
  type: "problem",
@@ -1096,11 +1096,11 @@ var jsx_uses_vars_default = createRule({
1096
1096
  messages: { default: "An identifier in JSX is marked as used." },
1097
1097
  schema: []
1098
1098
  },
1099
- name: RULE_NAME$51,
1100
- create: create$51,
1099
+ name: RULE_NAME$52,
1100
+ create: create$52,
1101
1101
  defaultOptions: []
1102
1102
  });
1103
- function create$51(context) {
1103
+ function create$52(context) {
1104
1104
  return { JSXOpeningElement(node) {
1105
1105
  switch (node.name.type) {
1106
1106
  case AST_NODE_TYPES.JSXIdentifier:
@@ -1118,7 +1118,7 @@ function create$51(context) {
1118
1118
 
1119
1119
  //#endregion
1120
1120
  //#region src/rules/no-access-state-in-setstate.ts
1121
- const RULE_NAME$50 = "no-access-state-in-setstate";
1121
+ const RULE_NAME$51 = "no-access-state-in-setstate";
1122
1122
  function isKeyLiteral$2(node, key) {
1123
1123
  return match(key).with({ type: AST_NODE_TYPES.Literal }, constTrue).with({
1124
1124
  type: AST_NODE_TYPES.TemplateLiteral,
@@ -1132,11 +1132,11 @@ var no_access_state_in_setstate_default = createRule({
1132
1132
  messages: { default: "Do not access 'this.state' within 'setState'. Use the update function instead." },
1133
1133
  schema: []
1134
1134
  },
1135
- name: RULE_NAME$50,
1136
- create: create$50,
1135
+ name: RULE_NAME$51,
1136
+ create: create$51,
1137
1137
  defaultOptions: []
1138
1138
  });
1139
- function create$50(context) {
1139
+ function create$51(context) {
1140
1140
  if (!context.sourceCode.text.includes("setState")) return {};
1141
1141
  const classStack = [];
1142
1142
  const methodStack = [];
@@ -1207,7 +1207,7 @@ function create$50(context) {
1207
1207
 
1208
1208
  //#endregion
1209
1209
  //#region src/rules/no-array-index-key.ts
1210
- const RULE_NAME$49 = "no-array-index-key";
1210
+ const RULE_NAME$50 = "no-array-index-key";
1211
1211
  const REACT_CHILDREN_METHOD = ["forEach", "map"];
1212
1212
  function getIndexParamPosition(methodName) {
1213
1213
  switch (methodName) {
@@ -1266,11 +1266,11 @@ var no_array_index_key_default = createRule({
1266
1266
  messages: { default: "Do not use item index in the array as its key." },
1267
1267
  schema: []
1268
1268
  },
1269
- name: RULE_NAME$49,
1270
- create: create$49,
1269
+ name: RULE_NAME$50,
1270
+ create: create$50,
1271
1271
  defaultOptions: []
1272
1272
  });
1273
- function create$49(context) {
1273
+ function create$50(context) {
1274
1274
  const indexParamNames = [];
1275
1275
  function isArrayIndex(node) {
1276
1276
  return node.type === AST_NODE_TYPES.Identifier && indexParamNames.some((name) => name != null && name === node.name);
@@ -1336,7 +1336,7 @@ function create$49(context) {
1336
1336
 
1337
1337
  //#endregion
1338
1338
  //#region src/rules/no-children-count.ts
1339
- const RULE_NAME$48 = "no-children-count";
1339
+ const RULE_NAME$49 = "no-children-count";
1340
1340
  var no_children_count_default = createRule({
1341
1341
  meta: {
1342
1342
  type: "problem",
@@ -1344,11 +1344,11 @@ var no_children_count_default = createRule({
1344
1344
  messages: { default: "Using 'Children.count' is uncommon and can lead to fragile code. Use alternatives instead." },
1345
1345
  schema: []
1346
1346
  },
1347
- name: RULE_NAME$48,
1348
- create: create$48,
1347
+ name: RULE_NAME$49,
1348
+ create: create$49,
1349
1349
  defaultOptions: []
1350
1350
  });
1351
- function create$48(context) {
1351
+ function create$49(context) {
1352
1352
  return { MemberExpression(node) {
1353
1353
  if (core.isChildrenCount(context, node)) context.report({
1354
1354
  messageId: "default",
@@ -1359,7 +1359,7 @@ function create$48(context) {
1359
1359
 
1360
1360
  //#endregion
1361
1361
  //#region src/rules/no-children-for-each.ts
1362
- const RULE_NAME$47 = "no-children-for-each";
1362
+ const RULE_NAME$48 = "no-children-for-each";
1363
1363
  var no_children_for_each_default = createRule({
1364
1364
  meta: {
1365
1365
  type: "problem",
@@ -1367,11 +1367,11 @@ var no_children_for_each_default = createRule({
1367
1367
  messages: { default: "Using 'Children.forEach' is uncommon and can lead to fragile code. Use alternatives instead." },
1368
1368
  schema: []
1369
1369
  },
1370
- name: RULE_NAME$47,
1371
- create: create$47,
1370
+ name: RULE_NAME$48,
1371
+ create: create$48,
1372
1372
  defaultOptions: []
1373
1373
  });
1374
- function create$47(context) {
1374
+ function create$48(context) {
1375
1375
  return { MemberExpression(node) {
1376
1376
  if (core.isChildrenForEach(context, node)) context.report({
1377
1377
  messageId: "default",
@@ -1382,7 +1382,7 @@ function create$47(context) {
1382
1382
 
1383
1383
  //#endregion
1384
1384
  //#region src/rules/no-children-map.ts
1385
- const RULE_NAME$46 = "no-children-map";
1385
+ const RULE_NAME$47 = "no-children-map";
1386
1386
  var no_children_map_default = createRule({
1387
1387
  meta: {
1388
1388
  type: "problem",
@@ -1390,11 +1390,11 @@ var no_children_map_default = createRule({
1390
1390
  messages: { default: "Using 'Children.map' is uncommon and can lead to fragile code. Use alternatives instead." },
1391
1391
  schema: []
1392
1392
  },
1393
- name: RULE_NAME$46,
1394
- create: create$46,
1393
+ name: RULE_NAME$47,
1394
+ create: create$47,
1395
1395
  defaultOptions: []
1396
1396
  });
1397
- function create$46(context) {
1397
+ function create$47(context) {
1398
1398
  return { MemberExpression(node) {
1399
1399
  if (core.isChildrenMap(context, node)) context.report({
1400
1400
  messageId: "default",
@@ -1405,7 +1405,7 @@ function create$46(context) {
1405
1405
 
1406
1406
  //#endregion
1407
1407
  //#region src/rules/no-children-only.ts
1408
- const RULE_NAME$45 = "no-children-only";
1408
+ const RULE_NAME$46 = "no-children-only";
1409
1409
  var no_children_only_default = createRule({
1410
1410
  meta: {
1411
1411
  type: "problem",
@@ -1413,11 +1413,11 @@ var no_children_only_default = createRule({
1413
1413
  messages: { default: "Using 'Children.only' is uncommon and can lead to fragile code. Use alternatives instead." },
1414
1414
  schema: []
1415
1415
  },
1416
- name: RULE_NAME$45,
1417
- create: create$45,
1416
+ name: RULE_NAME$46,
1417
+ create: create$46,
1418
1418
  defaultOptions: []
1419
1419
  });
1420
- function create$45(context) {
1420
+ function create$46(context) {
1421
1421
  return { MemberExpression(node) {
1422
1422
  if (core.isChildrenOnly(context, node)) context.report({
1423
1423
  messageId: "default",
@@ -1428,7 +1428,7 @@ function create$45(context) {
1428
1428
 
1429
1429
  //#endregion
1430
1430
  //#region src/rules/no-children-prop.ts
1431
- const RULE_NAME$44 = "no-children-prop";
1431
+ const RULE_NAME$45 = "no-children-prop";
1432
1432
  var no_children_prop_default = createRule({
1433
1433
  meta: {
1434
1434
  type: "problem",
@@ -1436,11 +1436,11 @@ var no_children_prop_default = createRule({
1436
1436
  messages: { default: "Do not pass 'children' as props." },
1437
1437
  schema: []
1438
1438
  },
1439
- name: RULE_NAME$44,
1440
- create: create$44,
1439
+ name: RULE_NAME$45,
1440
+ create: create$45,
1441
1441
  defaultOptions: []
1442
1442
  });
1443
- function create$44(context) {
1443
+ function create$45(context) {
1444
1444
  return { JSXElement(node) {
1445
1445
  const childrenProp = core.getJsxAttribute(context, node)("children");
1446
1446
  if (childrenProp != null) context.report({
@@ -1452,7 +1452,7 @@ function create$44(context) {
1452
1452
 
1453
1453
  //#endregion
1454
1454
  //#region src/rules/no-children-to-array.ts
1455
- const RULE_NAME$43 = "no-children-to-array";
1455
+ const RULE_NAME$44 = "no-children-to-array";
1456
1456
  var no_children_to_array_default = createRule({
1457
1457
  meta: {
1458
1458
  type: "problem",
@@ -1460,11 +1460,11 @@ var no_children_to_array_default = createRule({
1460
1460
  messages: { default: "Using 'Children.toArray' is uncommon and can lead to fragile code. Use alternatives instead." },
1461
1461
  schema: []
1462
1462
  },
1463
- name: RULE_NAME$43,
1464
- create: create$43,
1463
+ name: RULE_NAME$44,
1464
+ create: create$44,
1465
1465
  defaultOptions: []
1466
1466
  });
1467
- function create$43(context) {
1467
+ function create$44(context) {
1468
1468
  return { MemberExpression(node) {
1469
1469
  if (core.isChildrenToArray(context, node)) context.report({
1470
1470
  messageId: "default",
@@ -1475,7 +1475,7 @@ function create$43(context) {
1475
1475
 
1476
1476
  //#endregion
1477
1477
  //#region src/rules/no-class-component.ts
1478
- const RULE_NAME$42 = "no-class-component";
1478
+ const RULE_NAME$43 = "no-class-component";
1479
1479
  var no_class_component_default = createRule({
1480
1480
  meta: {
1481
1481
  type: "problem",
@@ -1483,11 +1483,11 @@ var no_class_component_default = createRule({
1483
1483
  messages: { default: "Avoid using class components. Use function components instead." },
1484
1484
  schema: []
1485
1485
  },
1486
- name: RULE_NAME$42,
1487
- create: create$42,
1486
+ name: RULE_NAME$43,
1487
+ create: create$43,
1488
1488
  defaultOptions: []
1489
1489
  });
1490
- function create$42(context) {
1490
+ function create$43(context) {
1491
1491
  if (!context.sourceCode.text.includes("Component")) return {};
1492
1492
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
1493
1493
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -1504,7 +1504,7 @@ function create$42(context) {
1504
1504
 
1505
1505
  //#endregion
1506
1506
  //#region src/rules/no-clone-element.ts
1507
- const RULE_NAME$41 = "no-clone-element";
1507
+ const RULE_NAME$42 = "no-clone-element";
1508
1508
  var no_clone_element_default = createRule({
1509
1509
  meta: {
1510
1510
  type: "problem",
@@ -1512,11 +1512,11 @@ var no_clone_element_default = createRule({
1512
1512
  messages: { default: "Using 'cloneElement' is uncommon and can lead to fragile code. Use alternatives instead." },
1513
1513
  schema: []
1514
1514
  },
1515
- name: RULE_NAME$41,
1516
- create: create$41,
1515
+ name: RULE_NAME$42,
1516
+ create: create$42,
1517
1517
  defaultOptions: []
1518
1518
  });
1519
- function create$41(context) {
1519
+ function create$42(context) {
1520
1520
  return { CallExpression(node) {
1521
1521
  if (core.isCloneElementCall(context, node)) context.report({
1522
1522
  messageId: "default",
@@ -1527,7 +1527,7 @@ function create$41(context) {
1527
1527
 
1528
1528
  //#endregion
1529
1529
  //#region src/rules/no-component-will-mount.ts
1530
- const RULE_NAME$40 = "no-component-will-mount";
1530
+ const RULE_NAME$41 = "no-component-will-mount";
1531
1531
  var no_component_will_mount_default = createRule({
1532
1532
  meta: {
1533
1533
  type: "problem",
@@ -1536,11 +1536,11 @@ var no_component_will_mount_default = createRule({
1536
1536
  messages: { default: "[Deprecated] Use 'UNSAFE_componentWillMount' instead." },
1537
1537
  schema: []
1538
1538
  },
1539
- name: RULE_NAME$40,
1540
- create: create$40,
1539
+ name: RULE_NAME$41,
1540
+ create: create$41,
1541
1541
  defaultOptions: []
1542
1542
  });
1543
- function create$40(context) {
1543
+ function create$41(context) {
1544
1544
  if (!context.sourceCode.text.includes("componentWillMount")) return {};
1545
1545
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
1546
1546
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -1560,7 +1560,7 @@ function create$40(context) {
1560
1560
 
1561
1561
  //#endregion
1562
1562
  //#region src/rules/no-component-will-receive-props.ts
1563
- const RULE_NAME$39 = "no-component-will-receive-props";
1563
+ const RULE_NAME$40 = "no-component-will-receive-props";
1564
1564
  var no_component_will_receive_props_default = createRule({
1565
1565
  meta: {
1566
1566
  type: "problem",
@@ -1569,11 +1569,11 @@ var no_component_will_receive_props_default = createRule({
1569
1569
  messages: { default: "[Deprecated] Use 'UNSAFE_componentWillReceiveProps' instead." },
1570
1570
  schema: []
1571
1571
  },
1572
- name: RULE_NAME$39,
1573
- create: create$39,
1572
+ name: RULE_NAME$40,
1573
+ create: create$40,
1574
1574
  defaultOptions: []
1575
1575
  });
1576
- function create$39(context) {
1576
+ function create$40(context) {
1577
1577
  if (!context.sourceCode.text.includes("componentWillReceiveProps")) return {};
1578
1578
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
1579
1579
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -1593,7 +1593,7 @@ function create$39(context) {
1593
1593
 
1594
1594
  //#endregion
1595
1595
  //#region src/rules/no-component-will-update.ts
1596
- const RULE_NAME$38 = "no-component-will-update";
1596
+ const RULE_NAME$39 = "no-component-will-update";
1597
1597
  var no_component_will_update_default = createRule({
1598
1598
  meta: {
1599
1599
  type: "problem",
@@ -1602,11 +1602,11 @@ var no_component_will_update_default = createRule({
1602
1602
  messages: { default: "[Deprecated] Use 'UNSAFE_componentWillUpdate' instead." },
1603
1603
  schema: []
1604
1604
  },
1605
- name: RULE_NAME$38,
1606
- create: create$38,
1605
+ name: RULE_NAME$39,
1606
+ create: create$39,
1607
1607
  defaultOptions: []
1608
1608
  });
1609
- function create$38(context) {
1609
+ function create$39(context) {
1610
1610
  if (!context.sourceCode.text.includes("componentWillUpdate")) return {};
1611
1611
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
1612
1612
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -1626,7 +1626,7 @@ function create$38(context) {
1626
1626
 
1627
1627
  //#endregion
1628
1628
  //#region src/rules/no-context-provider.ts
1629
- const RULE_NAME$37 = "no-context-provider";
1629
+ const RULE_NAME$38 = "no-context-provider";
1630
1630
  var no_context_provider_default = createRule({
1631
1631
  meta: {
1632
1632
  type: "problem",
@@ -1635,11 +1635,11 @@ var no_context_provider_default = createRule({
1635
1635
  messages: { default: "In React 19, you can render '<Context>' as a provider instead of '<Context.Provider>'." },
1636
1636
  schema: []
1637
1637
  },
1638
- name: RULE_NAME$37,
1639
- create: create$37,
1638
+ name: RULE_NAME$38,
1639
+ create: create$38,
1640
1640
  defaultOptions: []
1641
1641
  });
1642
- function create$37(context) {
1642
+ function create$38(context) {
1643
1643
  if (!context.sourceCode.text.includes("Provider")) return {};
1644
1644
  const { version } = getSettingsFromContext(context);
1645
1645
  if (compare(version, "19.0.0", "<")) return {};
@@ -1666,7 +1666,7 @@ function create$37(context) {
1666
1666
 
1667
1667
  //#endregion
1668
1668
  //#region src/rules/no-create-ref.ts
1669
- const RULE_NAME$36 = "no-create-ref";
1669
+ const RULE_NAME$37 = "no-create-ref";
1670
1670
  var no_create_ref_default = createRule({
1671
1671
  meta: {
1672
1672
  type: "problem",
@@ -1674,11 +1674,11 @@ var no_create_ref_default = createRule({
1674
1674
  messages: { default: "[Deprecated] Use 'useRef' instead." },
1675
1675
  schema: []
1676
1676
  },
1677
- name: RULE_NAME$36,
1678
- create: create$36,
1677
+ name: RULE_NAME$37,
1678
+ create: create$37,
1679
1679
  defaultOptions: []
1680
1680
  });
1681
- function create$36(context) {
1681
+ function create$37(context) {
1682
1682
  return { CallExpression(node) {
1683
1683
  if (core.isCreateRefCall(context, node) && ast.findParentNode(node, core.isClassComponent) == null) context.report({
1684
1684
  messageId: "default",
@@ -1689,7 +1689,7 @@ function create$36(context) {
1689
1689
 
1690
1690
  //#endregion
1691
1691
  //#region src/rules/no-direct-mutation-state.ts
1692
- const RULE_NAME$35 = "no-direct-mutation-state";
1692
+ const RULE_NAME$36 = "no-direct-mutation-state";
1693
1693
  function isConstructorFunction(node) {
1694
1694
  return ast.isOneOf([AST_NODE_TYPES.FunctionDeclaration, AST_NODE_TYPES.FunctionExpression])(node) && ast.isMethodOrProperty(node.parent) && node.parent.key.type === AST_NODE_TYPES.Identifier && node.parent.key.name === "constructor";
1695
1695
  }
@@ -1700,11 +1700,11 @@ var no_direct_mutation_state_default = createRule({
1700
1700
  messages: { default: "Do not mutate state directly. Use 'setState()' instead." },
1701
1701
  schema: []
1702
1702
  },
1703
- name: RULE_NAME$35,
1704
- create: create$35,
1703
+ name: RULE_NAME$36,
1704
+ create: create$36,
1705
1705
  defaultOptions: []
1706
1706
  });
1707
- function create$35(context) {
1707
+ function create$36(context) {
1708
1708
  return { AssignmentExpression(node) {
1709
1709
  if (!core.isAssignmentToThisState(node)) return;
1710
1710
  const parentClass = ast.findParentNode(node, ast.isOneOf([AST_NODE_TYPES.ClassDeclaration, AST_NODE_TYPES.ClassExpression]));
@@ -1718,7 +1718,7 @@ function create$35(context) {
1718
1718
 
1719
1719
  //#endregion
1720
1720
  //#region src/rules/no-duplicate-key.ts
1721
- const RULE_NAME$34 = "no-duplicate-key";
1721
+ const RULE_NAME$35 = "no-duplicate-key";
1722
1722
  var no_duplicate_key_default = createRule({
1723
1723
  meta: {
1724
1724
  type: "problem",
@@ -1726,11 +1726,11 @@ var no_duplicate_key_default = createRule({
1726
1726
  messages: { default: "The 'key' prop must be unique to its sibling elements." },
1727
1727
  schema: []
1728
1728
  },
1729
- name: RULE_NAME$34,
1730
- create: create$34,
1729
+ name: RULE_NAME$35,
1730
+ create: create$35,
1731
1731
  defaultOptions: []
1732
1732
  });
1733
- function create$34(context) {
1733
+ function create$35(context) {
1734
1734
  if (!context.sourceCode.text.includes("key=")) return {};
1735
1735
  const keyedEntries = /* @__PURE__ */ new Map();
1736
1736
  function isKeyValueEqual(a, b) {
@@ -1785,7 +1785,7 @@ function create$34(context) {
1785
1785
 
1786
1786
  //#endregion
1787
1787
  //#region src/rules/no-forward-ref.ts
1788
- const RULE_NAME$33 = "no-forward-ref";
1788
+ const RULE_NAME$34 = "no-forward-ref";
1789
1789
  var no_forward_ref_default = createRule({
1790
1790
  meta: {
1791
1791
  type: "problem",
@@ -1794,11 +1794,11 @@ var no_forward_ref_default = createRule({
1794
1794
  messages: { default: "In React 19, 'forwardRef' is no longer necessary. Pass 'ref' as a prop instead." },
1795
1795
  schema: []
1796
1796
  },
1797
- name: RULE_NAME$33,
1798
- create: create$33,
1797
+ name: RULE_NAME$34,
1798
+ create: create$34,
1799
1799
  defaultOptions: []
1800
1800
  });
1801
- function create$33(context) {
1801
+ function create$34(context) {
1802
1802
  if (!context.sourceCode.text.includes("forwardRef")) return {};
1803
1803
  const { version } = getSettingsFromContext(context);
1804
1804
  if (compare(version, "19.0.0", "<")) return {};
@@ -1893,7 +1893,7 @@ function getComponentPropsFixes(context, fixer, node, typeArguments) {
1893
1893
 
1894
1894
  //#endregion
1895
1895
  //#region src/rules/no-implicit-key.ts
1896
- const RULE_NAME$32 = "no-implicit-key";
1896
+ const RULE_NAME$33 = "no-implicit-key";
1897
1897
  var no_implicit_key_default = createRule({
1898
1898
  meta: {
1899
1899
  type: "problem",
@@ -1901,11 +1901,11 @@ var no_implicit_key_default = createRule({
1901
1901
  messages: { default: "This spread attribute implicitly passes the 'key' prop to a component, this could lead to unexpected behavior. If you intend to pass the 'key' prop, use 'key={value}'." },
1902
1902
  schema: []
1903
1903
  },
1904
- name: RULE_NAME$32,
1905
- create: create$32,
1904
+ name: RULE_NAME$33,
1905
+ create: create$33,
1906
1906
  defaultOptions: []
1907
1907
  });
1908
- function create$32(context) {
1908
+ function create$33(context) {
1909
1909
  const services = ESLintUtils.getParserServices(context, false);
1910
1910
  const checker = services.program.getTypeChecker();
1911
1911
  return { JSXSpreadAttribute(node) {
@@ -1923,7 +1923,7 @@ function create$32(context) {
1923
1923
 
1924
1924
  //#endregion
1925
1925
  //#region src/rules/no-leaked-conditional-rendering.ts
1926
- const RULE_NAME$31 = "no-leaked-conditional-rendering";
1926
+ const RULE_NAME$32 = "no-leaked-conditional-rendering";
1927
1927
  var no_leaked_conditional_rendering_default = createRule({
1928
1928
  meta: {
1929
1929
  type: "problem",
@@ -1931,11 +1931,11 @@ var no_leaked_conditional_rendering_default = createRule({
1931
1931
  messages: { default: "Potential leaked value {{value}} that might cause unintentionally rendered values or rendering crashes." },
1932
1932
  schema: []
1933
1933
  },
1934
- name: RULE_NAME$31,
1935
- create: create$31,
1934
+ name: RULE_NAME$32,
1935
+ create: create$32,
1936
1936
  defaultOptions: []
1937
1937
  });
1938
- function create$31(context) {
1938
+ function create$32(context) {
1939
1939
  if (!context.sourceCode.text.includes("&&")) return {};
1940
1940
  const { version } = getSettingsFromContext(context);
1941
1941
  const allowedVariants = [
@@ -1992,7 +1992,7 @@ function create$31(context) {
1992
1992
 
1993
1993
  //#endregion
1994
1994
  //#region src/rules/no-missing-component-display-name.ts
1995
- const RULE_NAME$30 = "no-missing-component-display-name";
1995
+ const RULE_NAME$31 = "no-missing-component-display-name";
1996
1996
  var no_missing_component_display_name_default = createRule({
1997
1997
  meta: {
1998
1998
  type: "problem",
@@ -2000,11 +2000,11 @@ var no_missing_component_display_name_default = createRule({
2000
2000
  messages: { default: "Add missing 'displayName' for component." },
2001
2001
  schema: []
2002
2002
  },
2003
- name: RULE_NAME$30,
2004
- create: create$30,
2003
+ name: RULE_NAME$31,
2004
+ create: create$31,
2005
2005
  defaultOptions: []
2006
2006
  });
2007
- function create$30(context) {
2007
+ function create$31(context) {
2008
2008
  if (!context.sourceCode.text.includes("memo") && !context.sourceCode.text.includes("forwardRef")) return {};
2009
2009
  const { ctx, visitor } = core.useComponentCollector(context, {
2010
2010
  collectDisplayName: true,
@@ -2026,7 +2026,7 @@ function create$30(context) {
2026
2026
 
2027
2027
  //#endregion
2028
2028
  //#region src/rules/no-missing-context-display-name.ts
2029
- const RULE_NAME$29 = "no-missing-context-display-name";
2029
+ const RULE_NAME$30 = "no-missing-context-display-name";
2030
2030
  var no_missing_context_display_name_default = createRule({
2031
2031
  meta: {
2032
2032
  type: "problem",
@@ -2035,11 +2035,11 @@ var no_missing_context_display_name_default = createRule({
2035
2035
  messages: { default: "Add missing 'displayName' for context." },
2036
2036
  schema: []
2037
2037
  },
2038
- name: RULE_NAME$29,
2039
- create: create$29,
2038
+ name: RULE_NAME$30,
2039
+ create: create$30,
2040
2040
  defaultOptions: []
2041
2041
  });
2042
- function create$29(context) {
2042
+ function create$30(context) {
2043
2043
  if (!context.sourceCode.text.includes("createContext")) return {};
2044
2044
  const createCalls = [];
2045
2045
  const displayNameAssignments = [];
@@ -2091,7 +2091,7 @@ function create$29(context) {
2091
2091
 
2092
2092
  //#endregion
2093
2093
  //#region src/rules/no-missing-key.ts
2094
- const RULE_NAME$28 = "no-missing-key";
2094
+ const RULE_NAME$29 = "no-missing-key";
2095
2095
  var no_missing_key_default = createRule({
2096
2096
  meta: {
2097
2097
  type: "problem",
@@ -2102,11 +2102,11 @@ var no_missing_key_default = createRule({
2102
2102
  },
2103
2103
  schema: []
2104
2104
  },
2105
- name: RULE_NAME$28,
2106
- create: create$28,
2105
+ name: RULE_NAME$29,
2106
+ create: create$29,
2107
2107
  defaultOptions: []
2108
2108
  });
2109
- function create$28(ctx) {
2109
+ function create$29(ctx) {
2110
2110
  let inChildrenToArray = false;
2111
2111
  function check(node) {
2112
2112
  if (node.type === AST_NODE_TYPES.JSXElement) return core.getJsxAttribute(ctx, node)("key") == null ? {
@@ -2170,7 +2170,7 @@ function create$28(ctx) {
2170
2170
 
2171
2171
  //#endregion
2172
2172
  //#region src/rules/no-misused-capture-owner-stack.ts
2173
- const RULE_NAME$27 = "no-misused-capture-owner-stack";
2173
+ const RULE_NAME$28 = "no-misused-capture-owner-stack";
2174
2174
  var no_misused_capture_owner_stack_default = createRule({
2175
2175
  meta: {
2176
2176
  type: "problem",
@@ -2181,11 +2181,11 @@ var no_misused_capture_owner_stack_default = createRule({
2181
2181
  },
2182
2182
  schema: []
2183
2183
  },
2184
- name: RULE_NAME$27,
2185
- create: create$27,
2184
+ name: RULE_NAME$28,
2185
+ create: create$28,
2186
2186
  defaultOptions: []
2187
2187
  });
2188
- function create$27(context) {
2188
+ function create$28(context) {
2189
2189
  if (!context.sourceCode.text.includes("captureOwnerStack")) return {};
2190
2190
  const { importSource } = getSettingsFromContext(context);
2191
2191
  return {
@@ -2216,7 +2216,7 @@ function isDevelopmentOnlyCheck(node) {
2216
2216
 
2217
2217
  //#endregion
2218
2218
  //#region src/rules/no-nested-component-definitions.ts
2219
- const RULE_NAME$26 = "no-nested-component-definitions";
2219
+ const RULE_NAME$27 = "no-nested-component-definitions";
2220
2220
  var no_nested_component_definitions_default = createRule({
2221
2221
  meta: {
2222
2222
  type: "problem",
@@ -2224,11 +2224,11 @@ var no_nested_component_definitions_default = createRule({
2224
2224
  messages: { default: "Do not nest component definitions inside other components or props. {{suggestion}}" },
2225
2225
  schema: []
2226
2226
  },
2227
- name: RULE_NAME$26,
2228
- create: create$26,
2227
+ name: RULE_NAME$27,
2228
+ create: create$27,
2229
2229
  defaultOptions: []
2230
2230
  });
2231
- function create$26(context) {
2231
+ function create$27(context) {
2232
2232
  const hint = core.ComponentDetectionHint.DoNotIncludeJsxWithNumberValue | core.ComponentDetectionHint.DoNotIncludeJsxWithBooleanValue | core.ComponentDetectionHint.DoNotIncludeJsxWithNullValue | core.ComponentDetectionHint.DoNotIncludeJsxWithStringValue | core.ComponentDetectionHint.DoNotIncludeJsxWithUndefinedValue | core.ComponentDetectionHint.RequireBothSidesOfLogicalExpressionToBeJsx | core.ComponentDetectionHint.RequireBothBranchesOfConditionalExpressionToBeJsx | core.ComponentDetectionHint.DoNotIncludeFunctionDefinedInArrayPattern | core.ComponentDetectionHint.DoNotIncludeFunctionDefinedInArrayExpression | core.ComponentDetectionHint.DoNotIncludeFunctionDefinedAsArrayMapCallback;
2233
2233
  const fCollector = core.useComponentCollector(context, { hint });
2234
2234
  const cCollector = core.useComponentCollectorLegacy(context);
@@ -2333,7 +2333,7 @@ function isInsideCreateElementProps(context, node) {
2333
2333
 
2334
2334
  //#endregion
2335
2335
  //#region src/rules/no-nested-lazy-component-declarations.ts
2336
- const RULE_NAME$25 = "no-nested-lazy-component-declarations";
2336
+ const RULE_NAME$26 = "no-nested-lazy-component-declarations";
2337
2337
  var no_nested_lazy_component_declarations_default = createRule({
2338
2338
  meta: {
2339
2339
  type: "problem",
@@ -2341,11 +2341,11 @@ var no_nested_lazy_component_declarations_default = createRule({
2341
2341
  messages: { default: "Do not declare lazy components inside other components. Instead, always declare them at the top level of your module." },
2342
2342
  schema: []
2343
2343
  },
2344
- name: RULE_NAME$25,
2345
- create: create$25,
2344
+ name: RULE_NAME$26,
2345
+ create: create$26,
2346
2346
  defaultOptions: []
2347
2347
  });
2348
- function create$25(context) {
2348
+ function create$26(context) {
2349
2349
  const hint = core.ComponentDetectionHint.None;
2350
2350
  const collector = core.useComponentCollector(context, { hint });
2351
2351
  const collectorLegacy = core.useComponentCollectorLegacy(context);
@@ -2374,7 +2374,7 @@ function create$25(context) {
2374
2374
 
2375
2375
  //#endregion
2376
2376
  //#region src/rules/no-redundant-should-component-update.ts
2377
- const RULE_NAME$24 = "no-redundant-should-component-update";
2377
+ const RULE_NAME$25 = "no-redundant-should-component-update";
2378
2378
  function isShouldComponentUpdate(node) {
2379
2379
  return ast.isMethodOrProperty(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
2380
2380
  }
@@ -2385,11 +2385,11 @@ var no_redundant_should_component_update_default = createRule({
2385
2385
  messages: { default: "'{{componentName}}' does not need 'shouldComponentUpdate' when extending 'React.PureComponent'." },
2386
2386
  schema: []
2387
2387
  },
2388
- name: RULE_NAME$24,
2389
- create: create$24,
2388
+ name: RULE_NAME$25,
2389
+ create: create$25,
2390
2390
  defaultOptions: []
2391
2391
  });
2392
- function create$24(context) {
2392
+ function create$25(context) {
2393
2393
  if (!context.sourceCode.text.includes("shouldComponentUpdate")) return {};
2394
2394
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
2395
2395
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -2407,7 +2407,7 @@ function create$24(context) {
2407
2407
 
2408
2408
  //#endregion
2409
2409
  //#region src/rules/no-set-state-in-component-did-mount.ts
2410
- const RULE_NAME$23 = "no-set-state-in-component-did-mount";
2410
+ const RULE_NAME$24 = "no-set-state-in-component-did-mount";
2411
2411
  var no_set_state_in_component_did_mount_default = createRule({
2412
2412
  meta: {
2413
2413
  type: "problem",
@@ -2415,11 +2415,11 @@ var no_set_state_in_component_did_mount_default = createRule({
2415
2415
  messages: { default: "Do not call `this.setState` in `componentDidMount` outside functions such as callbacks." },
2416
2416
  schema: []
2417
2417
  },
2418
- name: RULE_NAME$23,
2419
- create: create$23,
2418
+ name: RULE_NAME$24,
2419
+ create: create$24,
2420
2420
  defaultOptions: []
2421
2421
  });
2422
- function create$23(context) {
2422
+ function create$24(context) {
2423
2423
  if (!context.sourceCode.text.includes("componentDidMount")) return {};
2424
2424
  return { CallExpression(node) {
2425
2425
  if (!core.isThisSetState(node)) return;
@@ -2437,7 +2437,7 @@ function create$23(context) {
2437
2437
 
2438
2438
  //#endregion
2439
2439
  //#region src/rules/no-set-state-in-component-did-update.ts
2440
- const RULE_NAME$22 = "no-set-state-in-component-did-update";
2440
+ const RULE_NAME$23 = "no-set-state-in-component-did-update";
2441
2441
  var no_set_state_in_component_did_update_default = createRule({
2442
2442
  meta: {
2443
2443
  type: "problem",
@@ -2445,11 +2445,11 @@ var no_set_state_in_component_did_update_default = createRule({
2445
2445
  messages: { default: "Do not call `this.setState` in `componentDidUpdate` outside functions such as callbacks." },
2446
2446
  schema: []
2447
2447
  },
2448
- name: RULE_NAME$22,
2449
- create: create$22,
2448
+ name: RULE_NAME$23,
2449
+ create: create$23,
2450
2450
  defaultOptions: []
2451
2451
  });
2452
- function create$22(context) {
2452
+ function create$23(context) {
2453
2453
  if (!context.sourceCode.text.includes("componentDidUpdate")) return {};
2454
2454
  return { CallExpression(node) {
2455
2455
  if (!core.isThisSetState(node)) return;
@@ -2467,7 +2467,7 @@ function create$22(context) {
2467
2467
 
2468
2468
  //#endregion
2469
2469
  //#region src/rules/no-set-state-in-component-will-update.ts
2470
- const RULE_NAME$21 = "no-set-state-in-component-will-update";
2470
+ const RULE_NAME$22 = "no-set-state-in-component-will-update";
2471
2471
  var no_set_state_in_component_will_update_default = createRule({
2472
2472
  meta: {
2473
2473
  type: "problem",
@@ -2475,11 +2475,11 @@ var no_set_state_in_component_will_update_default = createRule({
2475
2475
  messages: { default: "Do not call `this.setState` in `componentWillUpdate` outside functions such as callbacks." },
2476
2476
  schema: []
2477
2477
  },
2478
- name: RULE_NAME$21,
2479
- create: create$21,
2478
+ name: RULE_NAME$22,
2479
+ create: create$22,
2480
2480
  defaultOptions: []
2481
2481
  });
2482
- function create$21(context) {
2482
+ function create$22(context) {
2483
2483
  if (!context.sourceCode.text.includes("componentWillUpdate")) return {};
2484
2484
  return { CallExpression(node) {
2485
2485
  if (!core.isThisSetState(node)) return;
@@ -2497,7 +2497,7 @@ function create$21(context) {
2497
2497
 
2498
2498
  //#endregion
2499
2499
  //#region src/rules/no-unnecessary-use-callback.ts
2500
- const RULE_NAME$20 = "no-unnecessary-use-callback";
2500
+ const RULE_NAME$21 = "no-unnecessary-use-callback";
2501
2501
  var no_unnecessary_use_callback_default = createRule({
2502
2502
  meta: {
2503
2503
  type: "problem",
@@ -2508,11 +2508,11 @@ var no_unnecessary_use_callback_default = createRule({
2508
2508
  },
2509
2509
  schema: []
2510
2510
  },
2511
- name: RULE_NAME$20,
2512
- create: create$20,
2511
+ name: RULE_NAME$21,
2512
+ create: create$21,
2513
2513
  defaultOptions: []
2514
2514
  });
2515
- function create$20(context) {
2515
+ function create$21(context) {
2516
2516
  if (!context.sourceCode.text.includes("useCallback")) return {};
2517
2517
  return { VariableDeclarator(node) {
2518
2518
  const { id, init } = node;
@@ -2574,7 +2574,7 @@ function checkForUsageInsideUseEffect$1(sourceCode, node) {
2574
2574
 
2575
2575
  //#endregion
2576
2576
  //#region src/rules/no-unnecessary-use-memo.ts
2577
- const RULE_NAME$19 = "no-unnecessary-use-memo";
2577
+ const RULE_NAME$20 = "no-unnecessary-use-memo";
2578
2578
  var no_unnecessary_use_memo_default = createRule({
2579
2579
  meta: {
2580
2580
  type: "problem",
@@ -2585,11 +2585,11 @@ var no_unnecessary_use_memo_default = createRule({
2585
2585
  },
2586
2586
  schema: []
2587
2587
  },
2588
- name: RULE_NAME$19,
2589
- create: create$19,
2588
+ name: RULE_NAME$20,
2589
+ create: create$20,
2590
2590
  defaultOptions: []
2591
2591
  });
2592
- function create$19(context) {
2592
+ function create$20(context) {
2593
2593
  if (!context.sourceCode.text.includes("useMemo")) return {};
2594
2594
  return { VariableDeclarator(node) {
2595
2595
  const { id, init } = node;
@@ -2655,7 +2655,7 @@ function checkForUsageInsideUseEffect(sourceCode, node) {
2655
2655
 
2656
2656
  //#endregion
2657
2657
  //#region src/rules/no-unnecessary-use-prefix.ts
2658
- const RULE_NAME$18 = "no-unnecessary-use-prefix";
2658
+ const RULE_NAME$19 = "no-unnecessary-use-prefix";
2659
2659
  const WELL_KNOWN_HOOKS = ["useMDXComponents"];
2660
2660
  function containsUseComments(context, node) {
2661
2661
  return context.sourceCode.getCommentsInside(node).some(({ value }) => /use\([\s\S]*?\)/u.test(value) || /use[A-Z0-9]\w*\([\s\S]*?\)/u.test(value));
@@ -2667,11 +2667,11 @@ var no_unnecessary_use_prefix_default = createRule({
2667
2667
  messages: { default: "If your function doesn't call any Hooks, avoid the 'use' prefix. Instead, write it as a regular function without the 'use' prefix." },
2668
2668
  schema: []
2669
2669
  },
2670
- name: RULE_NAME$18,
2671
- create: create$18,
2670
+ name: RULE_NAME$19,
2671
+ create: create$19,
2672
2672
  defaultOptions: []
2673
2673
  });
2674
- function create$18(context) {
2674
+ function create$19(context) {
2675
2675
  const { ctx, visitor } = core.useHookCollector(context);
2676
2676
  return defineRuleListener(visitor, { "Program:exit"(program) {
2677
2677
  for (const { id, name, node, hookCalls } of ctx.getAllHooks(program)) {
@@ -2691,7 +2691,7 @@ function create$18(context) {
2691
2691
 
2692
2692
  //#endregion
2693
2693
  //#region src/rules/no-unsafe-component-will-mount.ts
2694
- const RULE_NAME$17 = "no-unsafe-component-will-mount";
2694
+ const RULE_NAME$18 = "no-unsafe-component-will-mount";
2695
2695
  var no_unsafe_component_will_mount_default = createRule({
2696
2696
  meta: {
2697
2697
  type: "problem",
@@ -2699,11 +2699,11 @@ var no_unsafe_component_will_mount_default = createRule({
2699
2699
  messages: { default: "Do not use 'UNSAFE_componentWillMount'." },
2700
2700
  schema: []
2701
2701
  },
2702
- name: RULE_NAME$17,
2703
- create: create$17,
2702
+ name: RULE_NAME$18,
2703
+ create: create$18,
2704
2704
  defaultOptions: []
2705
2705
  });
2706
- function create$17(context) {
2706
+ function create$18(context) {
2707
2707
  if (!context.sourceCode.text.includes("UNSAFE_componentWillMount")) return {};
2708
2708
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
2709
2709
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -2719,7 +2719,7 @@ function create$17(context) {
2719
2719
 
2720
2720
  //#endregion
2721
2721
  //#region src/rules/no-unsafe-component-will-receive-props.ts
2722
- const RULE_NAME$16 = "no-unsafe-component-will-receive-props";
2722
+ const RULE_NAME$17 = "no-unsafe-component-will-receive-props";
2723
2723
  var no_unsafe_component_will_receive_props_default = createRule({
2724
2724
  meta: {
2725
2725
  type: "problem",
@@ -2727,11 +2727,11 @@ var no_unsafe_component_will_receive_props_default = createRule({
2727
2727
  messages: { default: "Do not use 'UNSAFE_componentWillReceiveProps'." },
2728
2728
  schema: []
2729
2729
  },
2730
- name: RULE_NAME$16,
2731
- create: create$16,
2730
+ name: RULE_NAME$17,
2731
+ create: create$17,
2732
2732
  defaultOptions: []
2733
2733
  });
2734
- function create$16(context) {
2734
+ function create$17(context) {
2735
2735
  if (!context.sourceCode.text.includes("UNSAFE_componentWillReceiveProps")) return {};
2736
2736
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
2737
2737
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -2747,7 +2747,7 @@ function create$16(context) {
2747
2747
 
2748
2748
  //#endregion
2749
2749
  //#region src/rules/no-unsafe-component-will-update.ts
2750
- const RULE_NAME$15 = "no-unsafe-component-will-update";
2750
+ const RULE_NAME$16 = "no-unsafe-component-will-update";
2751
2751
  var no_unsafe_component_will_update_default = createRule({
2752
2752
  meta: {
2753
2753
  type: "problem",
@@ -2755,11 +2755,11 @@ var no_unsafe_component_will_update_default = createRule({
2755
2755
  messages: { default: "Do not use 'UNSAFE_componentWillUpdate'." },
2756
2756
  schema: []
2757
2757
  },
2758
- name: RULE_NAME$15,
2759
- create: create$15,
2758
+ name: RULE_NAME$16,
2759
+ create: create$16,
2760
2760
  defaultOptions: []
2761
2761
  });
2762
- function create$15(context) {
2762
+ function create$16(context) {
2763
2763
  if (!context.sourceCode.text.includes("UNSAFE_componentWillUpdate")) return {};
2764
2764
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
2765
2765
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -2775,7 +2775,7 @@ function create$15(context) {
2775
2775
 
2776
2776
  //#endregion
2777
2777
  //#region src/rules/no-unstable-context-value.ts
2778
- const RULE_NAME$14 = "no-unstable-context-value";
2778
+ const RULE_NAME$15 = "no-unstable-context-value";
2779
2779
  var no_unstable_context_value_default = createRule({
2780
2780
  meta: {
2781
2781
  type: "problem",
@@ -2783,11 +2783,11 @@ var no_unstable_context_value_default = createRule({
2783
2783
  messages: { unstableContextValue: "A/an '{{kind}}' passed as the value prop to the context provider should not be constructed. It will change on every render. {{suggestion}}" },
2784
2784
  schema: []
2785
2785
  },
2786
- name: RULE_NAME$14,
2787
- create: create$14,
2786
+ name: RULE_NAME$15,
2787
+ create: create$15,
2788
2788
  defaultOptions: []
2789
2789
  });
2790
- function create$14(context) {
2790
+ function create$15(context) {
2791
2791
  const { isCompilerEnabled, version } = getSettingsFromContext(context);
2792
2792
  if (isCompilerEnabled && ast.isDirectiveInFile(context.sourceCode.ast, "use memo")) return {};
2793
2793
  const isReact18OrBelow = compare(version, "19.0.0", "<");
@@ -2836,7 +2836,7 @@ function isContextName(name, isReact18OrBelow) {
2836
2836
 
2837
2837
  //#endregion
2838
2838
  //#region src/rules/no-unstable-default-props.ts
2839
- const RULE_NAME$13 = "no-unstable-default-props";
2839
+ const RULE_NAME$14 = "no-unstable-default-props";
2840
2840
  const defaultOptions$1 = [{ safeDefaultProps: [] }];
2841
2841
  const schema$1 = [{
2842
2842
  type: "object",
@@ -2853,8 +2853,8 @@ var no_unstable_default_props_default = createRule({
2853
2853
  messages: { default: "A/an '{{kind}}' as default prop. This could lead to potential infinite render loop in React. Use a variable instead of '{{kind}}'." },
2854
2854
  schema: schema$1
2855
2855
  },
2856
- name: RULE_NAME$13,
2857
- create: create$13,
2856
+ name: RULE_NAME$14,
2857
+ create: create$14,
2858
2858
  defaultOptions: defaultOptions$1
2859
2859
  });
2860
2860
  function extractIdentifier(node) {
@@ -2865,7 +2865,7 @@ function extractIdentifier(node) {
2865
2865
  }
2866
2866
  return null;
2867
2867
  }
2868
- function create$13(context, [options]) {
2868
+ function create$14(context, [options]) {
2869
2869
  const { isCompilerEnabled } = getSettingsFromContext(context);
2870
2870
  if (isCompilerEnabled && ast.isDirectiveInFile(context.sourceCode.ast, "use memo")) return {};
2871
2871
  const { ctx, visitor } = core.useComponentCollector(context);
@@ -2910,7 +2910,7 @@ function create$13(context, [options]) {
2910
2910
 
2911
2911
  //#endregion
2912
2912
  //#region src/rules/no-unused-class-component-members.ts
2913
- const RULE_NAME$12 = "no-unused-class-component-members";
2913
+ const RULE_NAME$13 = "no-unused-class-component-members";
2914
2914
  const LIFECYCLE_METHODS = new Set([
2915
2915
  "componentDidCatch",
2916
2916
  "componentDidMount",
@@ -2941,11 +2941,11 @@ var no_unused_class_component_members_default = createRule({
2941
2941
  messages: { default: "Unused method or property '{{methodName}}'' of class '{{className}}'." },
2942
2942
  schema: []
2943
2943
  },
2944
- name: RULE_NAME$12,
2945
- create: create$12,
2944
+ name: RULE_NAME$13,
2945
+ create: create$13,
2946
2946
  defaultOptions: []
2947
2947
  });
2948
- function create$12(context) {
2948
+ function create$13(context) {
2949
2949
  const classStack = [];
2950
2950
  const methodStack = [];
2951
2951
  const propertyDefs = /* @__PURE__ */ new WeakMap();
@@ -3026,7 +3026,7 @@ function create$12(context) {
3026
3026
 
3027
3027
  //#endregion
3028
3028
  //#region src/rules/no-unused-props.ts
3029
- const RULE_NAME$11 = "no-unused-props";
3029
+ const RULE_NAME$12 = "no-unused-props";
3030
3030
  var no_unused_props_default = createRule({
3031
3031
  meta: {
3032
3032
  type: "problem",
@@ -3034,11 +3034,11 @@ var no_unused_props_default = createRule({
3034
3034
  messages: { default: "Prop `{{name}}` is declared but never used" },
3035
3035
  schema: []
3036
3036
  },
3037
- name: RULE_NAME$11,
3038
- create: create$11,
3037
+ name: RULE_NAME$12,
3038
+ create: create$12,
3039
3039
  defaultOptions: []
3040
3040
  });
3041
- function create$11(context) {
3041
+ function create$12(context) {
3042
3042
  const services = ESLintUtils.getParserServices(context, false);
3043
3043
  const { ctx, visitor } = core.useComponentCollector(context);
3044
3044
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -3136,7 +3136,7 @@ function reportUnusedProp(context, services, prop) {
3136
3136
 
3137
3137
  //#endregion
3138
3138
  //#region src/rules/no-unused-state.ts
3139
- const RULE_NAME$10 = "no-unused-state";
3139
+ const RULE_NAME$11 = "no-unused-state";
3140
3140
  function isKeyLiteral(node, key) {
3141
3141
  return match(key).with({ type: AST_NODE_TYPES.Literal }, constTrue).with({
3142
3142
  type: AST_NODE_TYPES.TemplateLiteral,
@@ -3150,11 +3150,11 @@ var no_unused_state_default = createRule({
3150
3150
  messages: { default: "Unused class component state in '{{className}}'" },
3151
3151
  schema: []
3152
3152
  },
3153
- name: RULE_NAME$10,
3154
- create: create$10,
3153
+ name: RULE_NAME$11,
3154
+ create: create$11,
3155
3155
  defaultOptions: []
3156
3156
  });
3157
- function create$10(context) {
3157
+ function create$11(context) {
3158
3158
  const classStack = [];
3159
3159
  const methodStack = [];
3160
3160
  const constructorStack = [];
@@ -3263,7 +3263,7 @@ function create$10(context) {
3263
3263
 
3264
3264
  //#endregion
3265
3265
  //#region src/rules/no-use-context.ts
3266
- const RULE_NAME$9 = "no-use-context";
3266
+ const RULE_NAME$10 = "no-use-context";
3267
3267
  var no_use_context_default = createRule({
3268
3268
  meta: {
3269
3269
  type: "problem",
@@ -3272,11 +3272,11 @@ var no_use_context_default = createRule({
3272
3272
  messages: { default: "In React 19, 'use' is preferred over 'useContext' because it is more flexible." },
3273
3273
  schema: []
3274
3274
  },
3275
- name: RULE_NAME$9,
3276
- create: create$9,
3275
+ name: RULE_NAME$10,
3276
+ create: create$10,
3277
3277
  defaultOptions: []
3278
3278
  });
3279
- function create$9(context) {
3279
+ function create$10(context) {
3280
3280
  if (!context.sourceCode.text.includes("useContext")) return {};
3281
3281
  const settings = getSettingsFromContext(context);
3282
3282
  if (compare(settings.version, "19.0.0", "<")) return {};
@@ -3341,7 +3341,7 @@ function getCorrelativeTokens(context, node) {
3341
3341
 
3342
3342
  //#endregion
3343
3343
  //#region src/rules/no-useless-forward-ref.ts
3344
- const RULE_NAME$8 = "no-useless-forward-ref";
3344
+ const RULE_NAME$9 = "no-useless-forward-ref";
3345
3345
  var no_useless_forward_ref_default = createRule({
3346
3346
  meta: {
3347
3347
  type: "problem",
@@ -3349,11 +3349,11 @@ var no_useless_forward_ref_default = createRule({
3349
3349
  messages: { default: "A 'forwardRef' is used with this component but no 'ref' parameter is set." },
3350
3350
  schema: []
3351
3351
  },
3352
- name: RULE_NAME$8,
3353
- create: create$8,
3352
+ name: RULE_NAME$9,
3353
+ create: create$9,
3354
3354
  defaultOptions: []
3355
3355
  });
3356
- function create$8(context) {
3356
+ function create$9(context) {
3357
3357
  return { CallExpression(node) {
3358
3358
  if (!core.isForwardRefCall(context, node)) return;
3359
3359
  const [component] = node.arguments;
@@ -3368,7 +3368,7 @@ function create$8(context) {
3368
3368
 
3369
3369
  //#endregion
3370
3370
  //#region src/rules/no-useless-fragment.ts
3371
- const RULE_NAME$7 = "no-useless-fragment";
3371
+ const RULE_NAME$8 = "no-useless-fragment";
3372
3372
  const defaultOptions = [{
3373
3373
  allowEmptyFragment: false,
3374
3374
  allowExpressions: true
@@ -3396,11 +3396,11 @@ var no_useless_fragment_default = createRule({
3396
3396
  messages: { default: "A fragment {{reason}} is useless." },
3397
3397
  schema
3398
3398
  },
3399
- name: RULE_NAME$7,
3400
- create: create$7,
3399
+ name: RULE_NAME$8,
3400
+ create: create$8,
3401
3401
  defaultOptions
3402
3402
  });
3403
- function create$7(context, [option]) {
3403
+ function create$8(context, [option]) {
3404
3404
  const { allowEmptyFragment = false, allowExpressions = true } = option;
3405
3405
  const jsxConfig = {
3406
3406
  ...core.getJsxConfigFromContext(context),
@@ -3508,7 +3508,7 @@ function trimLikeReact(text) {
3508
3508
 
3509
3509
  //#endregion
3510
3510
  //#region src/rules/prefer-destructuring-assignment.ts
3511
- const RULE_NAME$6 = "prefer-destructuring-assignment";
3511
+ const RULE_NAME$7 = "prefer-destructuring-assignment";
3512
3512
  var prefer_destructuring_assignment_default = createRule({
3513
3513
  meta: {
3514
3514
  type: "problem",
@@ -3516,11 +3516,11 @@ var prefer_destructuring_assignment_default = createRule({
3516
3516
  messages: { default: "Use destructuring assignment for component props." },
3517
3517
  schema: []
3518
3518
  },
3519
- name: RULE_NAME$6,
3520
- create: create$6,
3519
+ name: RULE_NAME$7,
3520
+ create: create$7,
3521
3521
  defaultOptions: []
3522
3522
  });
3523
- function create$6(context) {
3523
+ function create$7(context) {
3524
3524
  const { ctx, visitor } = core.useComponentCollector(context);
3525
3525
  return defineRuleListener(visitor, { "Program:exit"(program) {
3526
3526
  for (const component of ctx.getAllComponents(program)) {
@@ -3544,7 +3544,7 @@ function create$6(context) {
3544
3544
 
3545
3545
  //#endregion
3546
3546
  //#region src/rules/prefer-namespace-import.ts
3547
- const RULE_NAME$5 = "prefer-namespace-import";
3547
+ const RULE_NAME$6 = "prefer-namespace-import";
3548
3548
  var prefer_namespace_import_default = createRule({
3549
3549
  meta: {
3550
3550
  type: "problem",
@@ -3553,11 +3553,11 @@ var prefer_namespace_import_default = createRule({
3553
3553
  messages: { default: "Prefer importing React as 'import * as React from \"{{importSource}}\"';" },
3554
3554
  schema: []
3555
3555
  },
3556
- name: RULE_NAME$5,
3557
- create: create$5,
3556
+ name: RULE_NAME$6,
3557
+ create: create$6,
3558
3558
  defaultOptions: []
3559
3559
  });
3560
- function create$5(context) {
3560
+ function create$6(context) {
3561
3561
  const { importSource } = getSettingsFromContext(context);
3562
3562
  return { [`ImportDeclaration[source.value="${importSource}"] ImportDefaultSpecifier`](node) {
3563
3563
  const hasOtherSpecifiers = node.parent.specifiers.length > 1;
@@ -3581,7 +3581,7 @@ function create$5(context) {
3581
3581
 
3582
3582
  //#endregion
3583
3583
  //#region src/rules/prefer-read-only-props.ts
3584
- const RULE_NAME$4 = "prefer-read-only-props";
3584
+ const RULE_NAME$5 = "prefer-read-only-props";
3585
3585
  var prefer_read_only_props_default = createRule({
3586
3586
  meta: {
3587
3587
  type: "problem",
@@ -3589,11 +3589,11 @@ var prefer_read_only_props_default = createRule({
3589
3589
  messages: { default: "A function component's props should be read-only." },
3590
3590
  schema: []
3591
3591
  },
3592
- name: RULE_NAME$4,
3593
- create: create$4,
3592
+ name: RULE_NAME$5,
3593
+ create: create$5,
3594
3594
  defaultOptions: []
3595
3595
  });
3596
- function create$4(context) {
3596
+ function create$5(context) {
3597
3597
  const services = ESLintUtils.getParserServices(context, false);
3598
3598
  const checker = services.program.getTypeChecker();
3599
3599
  const { ctx, visitor } = core.useComponentCollector(context);
@@ -3634,7 +3634,7 @@ function isClassOrInterfaceReadonlyLoose(checker, type) {
3634
3634
 
3635
3635
  //#endregion
3636
3636
  //#region src/rules/prefer-use-state-lazy-initialization.ts
3637
- const RULE_NAME$3 = "prefer-use-state-lazy-initialization";
3637
+ const RULE_NAME$4 = "prefer-use-state-lazy-initialization";
3638
3638
  const ALLOW_LIST = [
3639
3639
  "Boolean",
3640
3640
  "String",
@@ -3647,11 +3647,11 @@ var prefer_use_state_lazy_initialization_default = createRule({
3647
3647
  messages: { default: "To prevent re-computation, consider using lazy initial state for useState calls that involve function calls. Ex: 'useState(() => getValue())'." },
3648
3648
  schema: []
3649
3649
  },
3650
- name: RULE_NAME$3,
3651
- create: create$3,
3650
+ name: RULE_NAME$4,
3651
+ create: create$4,
3652
3652
  defaultOptions: []
3653
3653
  });
3654
- function create$3(context) {
3654
+ function create$4(context) {
3655
3655
  return { CallExpression(node) {
3656
3656
  if (!core.isUseStateCall(node)) return;
3657
3657
  const [useStateInput] = node.arguments;
@@ -3678,6 +3678,90 @@ function create$3(context) {
3678
3678
  } };
3679
3679
  }
3680
3680
 
3681
+ //#endregion
3682
+ //#region src/rules/purity.ts
3683
+ const RULE_NAME$3 = "purity";
3684
+ function isImpureMemberCall(node) {
3685
+ if (node.callee.type !== AST_NODE_TYPES.MemberExpression) return false;
3686
+ const { object, property } = node.callee;
3687
+ if (object.type !== AST_NODE_TYPES.Identifier) return false;
3688
+ if (property.type !== AST_NODE_TYPES.Identifier) return false;
3689
+ const methods = IMPURE_FUNCTIONS.get(object.name);
3690
+ if (methods == null) return false;
3691
+ return methods.has(property.name);
3692
+ }
3693
+ function isImpureNewExpression(node) {
3694
+ if (node.callee.type !== AST_NODE_TYPES.Identifier) return false;
3695
+ return IMPURE_CONSTRUCTORS.has(node.callee.name);
3696
+ }
3697
+ function getImpureCallName(node) {
3698
+ if (node.callee.type !== AST_NODE_TYPES.MemberExpression) return null;
3699
+ const { object, property } = node.callee;
3700
+ if (object.type !== AST_NODE_TYPES.Identifier) return null;
3701
+ if (property.type !== AST_NODE_TYPES.Identifier) return null;
3702
+ return `${object.name}.${property.name}()`;
3703
+ }
3704
+ function getImpureNewName(node) {
3705
+ if (node.callee.type !== AST_NODE_TYPES.Identifier) return null;
3706
+ return `new ${node.callee.name}()`;
3707
+ }
3708
+ var purity_default = createRule({
3709
+ meta: {
3710
+ type: "problem",
3711
+ docs: { description: "Validates that components and hooks are pure by checking that they do not call known-impure functions during render." },
3712
+ messages: { default: "Do not call '{{name}}' during render. Components and hooks must be pure. Move this call into an event handler, effect, or state initializer." },
3713
+ schema: []
3714
+ },
3715
+ name: RULE_NAME$3,
3716
+ create: create$3,
3717
+ defaultOptions: []
3718
+ });
3719
+ function create$3(context) {
3720
+ const hCollector = core.useHookCollector(context);
3721
+ const cCollector = core.useComponentCollector(context);
3722
+ const cExprs = [];
3723
+ const nExprs = [];
3724
+ return defineRuleListener(hCollector.visitor, cCollector.visitor, {
3725
+ CallExpression(node) {
3726
+ if (!isImpureMemberCall(node)) return;
3727
+ const name = getImpureCallName(node);
3728
+ if (name == null) return;
3729
+ const func = ast.findParentNode(node, ast.isFunction);
3730
+ if (func == null) return;
3731
+ cExprs.push({
3732
+ name,
3733
+ node,
3734
+ func
3735
+ });
3736
+ },
3737
+ NewExpression(node) {
3738
+ if (!isImpureNewExpression(node)) return;
3739
+ const name = getImpureNewName(node);
3740
+ if (name == null) return;
3741
+ const func = ast.findParentNode(node, ast.isFunction);
3742
+ if (func == null) return;
3743
+ nExprs.push({
3744
+ name,
3745
+ node,
3746
+ func
3747
+ });
3748
+ },
3749
+ "Program:exit"(node) {
3750
+ const components = cCollector.ctx.getAllComponents(node);
3751
+ const hooks = hCollector.ctx.getAllHooks(node);
3752
+ const funcs = [...components, ...hooks];
3753
+ for (const { name, node, func } of [...cExprs, ...nExprs]) {
3754
+ if (!funcs.some((f) => f.node === func)) continue;
3755
+ context.report({
3756
+ messageId: "default",
3757
+ node,
3758
+ data: { name }
3759
+ });
3760
+ }
3761
+ }
3762
+ });
3763
+ }
3764
+
3681
3765
  //#endregion
3682
3766
  //#region src/rules/rules-of-hooks.ts
3683
3767
  const RULE_NAME$2 = "rules-of-hooks";
@@ -4295,6 +4379,7 @@ const plugin = {
4295
4379
  "prefer-namespace-import": prefer_namespace_import_default,
4296
4380
  "prefer-read-only-props": prefer_read_only_props_default,
4297
4381
  "prefer-use-state-lazy-initialization": prefer_use_state_lazy_initialization_default,
4382
+ purity: purity_default,
4298
4383
  "rules-of-hooks": rules_of_hooks_default,
4299
4384
  "set-state-in-effect": set_state_in_effect_default,
4300
4385
  "set-state-in-render": set_state_in_render_default
@@ -4348,6 +4433,7 @@ const rules$6 = {
4348
4433
  "react-x/no-use-context": "warn",
4349
4434
  "react-x/no-useless-forward-ref": "warn",
4350
4435
  "react-x/prefer-use-state-lazy-initialization": "warn",
4436
+ "react-x/purity": "warn",
4351
4437
  "react-x/rules-of-hooks": "error",
4352
4438
  "react-x/set-state-in-effect": "warn",
4353
4439
  "react-x/set-state-in-render": "error"