eslint-plugin-react-x 1.25.1-next.0 → 1.26.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -65,6 +65,7 @@ export default [
65
65
  "react-x/no-unstable-default-props": "warn",
66
66
  "react-x/no-unused-class-component-members": "warn",
67
67
  "react-x/no-unused-state": "warn",
68
+ "react-x/no-use-context": "warn",
68
69
  "react-x/use-jsx-vars": "warn",
69
70
  },
70
71
  },
package/dist/index.d.mts CHANGED
@@ -57,6 +57,7 @@ declare const _default: {
57
57
  "no-unstable-default-props": _typescript_eslint_utils_ts_eslint.RuleModule<"noUnstableDefaultProps", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
58
58
  "no-unused-class-component-members": _typescript_eslint_utils_ts_eslint.RuleModule<"noUnusedClassComponentMembers", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
59
59
  "no-unused-state": _typescript_eslint_utils_ts_eslint.RuleModule<"noUnusedState", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
60
+ "no-use-context": _typescript_eslint_utils_ts_eslint.RuleModule<"noUseContext", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
60
61
  "no-useless-fragment": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID$3, [{
61
62
  allowExpressions: boolean;
62
63
  }], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
package/dist/index.d.ts CHANGED
@@ -57,6 +57,7 @@ declare const _default: {
57
57
  "no-unstable-default-props": _typescript_eslint_utils_ts_eslint.RuleModule<"noUnstableDefaultProps", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
58
58
  "no-unused-class-component-members": _typescript_eslint_utils_ts_eslint.RuleModule<"noUnusedClassComponentMembers", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
59
59
  "no-unused-state": _typescript_eslint_utils_ts_eslint.RuleModule<"noUnusedState", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
60
+ "no-use-context": _typescript_eslint_utils_ts_eslint.RuleModule<"noUseContext", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
60
61
  "no-useless-fragment": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID$3, [{
61
62
  allowExpressions: boolean;
62
63
  }], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
package/dist/index.js CHANGED
@@ -42,9 +42,25 @@ var ts__default = /*#__PURE__*/_interopDefault(ts);
42
42
 
43
43
  // package.json
44
44
  var name = "eslint-plugin-react-x";
45
- var version = "1.25.1-next.0";
45
+ var version = "1.26.0-beta.3";
46
46
  var createRule = shared.createRuleForPlugin("x");
47
47
 
48
+ // src/utils/get-associated-tokens.ts
49
+ function getAssociatedTokens(context, node) {
50
+ {
51
+ const tokenBefore = context.sourceCode.getTokenBefore(node);
52
+ const tokenAfter = context.sourceCode.getTokenAfter(node);
53
+ const tokens = [];
54
+ if (tokenAfter?.value !== "," && tokenBefore?.value === ",") {
55
+ tokens.push(tokenBefore);
56
+ }
57
+ if (tokenAfter?.value === ",") {
58
+ tokens.push(tokenAfter);
59
+ }
60
+ return tokens;
61
+ }
62
+ }
63
+
48
64
  // src/rules/avoid-shorthand-boolean.ts
49
65
  var RULE_NAME = "avoid-shorthand-boolean";
50
66
  var RULE_FEATURES = [
@@ -2811,7 +2827,99 @@ var no_unused_state_default = createRule({
2811
2827
  },
2812
2828
  defaultOptions: []
2813
2829
  });
2814
- var RULE_NAME44 = "no-useless-fragment";
2830
+ var RULE_NAME44 = "no-use-context";
2831
+ var RULE_FEATURES44 = [
2832
+ "CHK",
2833
+ "MOD"
2834
+ ];
2835
+ var no_use_context_default = createRule({
2836
+ meta: {
2837
+ type: "problem",
2838
+ docs: {
2839
+ description: "disallow the use of 'useContext'",
2840
+ [Symbol.for("rule_features")]: RULE_FEATURES44
2841
+ },
2842
+ fixable: "code",
2843
+ messages: {
2844
+ noUseContext: "In React 19, 'use' is preferred over 'useContext' because it is more flexible."
2845
+ },
2846
+ schema: []
2847
+ },
2848
+ name: RULE_NAME44,
2849
+ create(context) {
2850
+ const settings = shared.getSettingsFromContext(context);
2851
+ const useContextAlias = /* @__PURE__ */ new Set();
2852
+ if (!context.sourceCode.text.includes("useContext")) {
2853
+ return {};
2854
+ }
2855
+ if (compareVersions.compare(settings.version, "19.0.0", "<")) {
2856
+ return {};
2857
+ }
2858
+ return {
2859
+ CallExpression(node) {
2860
+ if (!core.isReactHookCall(node)) {
2861
+ return;
2862
+ }
2863
+ if (!core.isReactHookCallWithNameAlias("useContext", context, [...useContextAlias])(node)) {
2864
+ return;
2865
+ }
2866
+ context.report({
2867
+ messageId: "noUseContext",
2868
+ node,
2869
+ fix(fixer) {
2870
+ switch (node.callee.type) {
2871
+ case types.AST_NODE_TYPES.Identifier:
2872
+ return fixer.replaceText(node.callee, "use");
2873
+ case types.AST_NODE_TYPES.MemberExpression:
2874
+ return fixer.replaceText(node.callee.property, "use");
2875
+ }
2876
+ return null;
2877
+ }
2878
+ });
2879
+ },
2880
+ ImportDeclaration(node) {
2881
+ if (node.source.value !== settings.importSource) {
2882
+ return;
2883
+ }
2884
+ const isUseImported = node.specifiers.some(tsPattern.isMatching({ local: { type: types.AST_NODE_TYPES.Identifier, name: "use" } }));
2885
+ for (const specifier of node.specifiers) {
2886
+ if (specifier.type !== types.AST_NODE_TYPES.ImportSpecifier) continue;
2887
+ if (specifier.imported.type !== types.AST_NODE_TYPES.Identifier) continue;
2888
+ if (specifier.imported.name === "useContext") {
2889
+ if (specifier.local.name !== "useContext") {
2890
+ useContextAlias.add(specifier.local.name);
2891
+ context.report({
2892
+ messageId: "noUseContext",
2893
+ node: specifier
2894
+ });
2895
+ return;
2896
+ }
2897
+ context.report({
2898
+ messageId: "noUseContext",
2899
+ node: specifier,
2900
+ fix(fixer) {
2901
+ if (isUseImported) {
2902
+ const tokenBefore = context.sourceCode.getTokenBefore(specifier);
2903
+ return [
2904
+ fixer.remove(specifier),
2905
+ ...tokenBefore?.value === "," ? [fixer.replaceTextRange([tokenBefore.range[1], specifier.range[0]], "")] : [],
2906
+ ...getAssociatedTokens(
2907
+ context,
2908
+ specifier
2909
+ ).map((token) => fixer.remove(token))
2910
+ ];
2911
+ }
2912
+ return fixer.replaceText(specifier.imported, "use");
2913
+ }
2914
+ });
2915
+ }
2916
+ }
2917
+ }
2918
+ };
2919
+ },
2920
+ defaultOptions: []
2921
+ });
2922
+ var RULE_NAME45 = "no-useless-fragment";
2815
2923
  var defaultOptions = [{
2816
2924
  allowExpressions: true
2817
2925
  }];
@@ -2903,7 +3011,7 @@ var no_useless_fragment_default = createRule({
2903
3011
  }
2904
3012
  }]
2905
3013
  },
2906
- name: RULE_NAME44,
3014
+ name: RULE_NAME45,
2907
3015
  create(context, [option]) {
2908
3016
  const { allowExpressions = true } = option;
2909
3017
  return {
@@ -2918,8 +3026,8 @@ var no_useless_fragment_default = createRule({
2918
3026
  },
2919
3027
  defaultOptions
2920
3028
  });
2921
- var RULE_NAME45 = "prefer-destructuring-assignment";
2922
- var RULE_FEATURES44 = [
3029
+ var RULE_NAME46 = "prefer-destructuring-assignment";
3030
+ var RULE_FEATURES45 = [
2923
3031
  "CHK"
2924
3032
  ];
2925
3033
  function isMemberExpressionWithObjectName(node) {
@@ -2930,14 +3038,14 @@ var prefer_destructuring_assignment_default = createRule({
2930
3038
  type: "problem",
2931
3039
  docs: {
2932
3040
  description: "enforce using destructuring assignment in component props and context",
2933
- [Symbol.for("rule_features")]: RULE_FEATURES44
3041
+ [Symbol.for("rule_features")]: RULE_FEATURES45
2934
3042
  },
2935
3043
  messages: {
2936
3044
  preferDestructuringAssignment: "Use destructuring assignment for {{name}}."
2937
3045
  },
2938
3046
  schema: []
2939
3047
  },
2940
- name: RULE_NAME45,
3048
+ name: RULE_NAME46,
2941
3049
  create(context) {
2942
3050
  const { ctx, listeners } = core.useComponentCollector(context);
2943
3051
  const memberExpressionWithNames = [];
@@ -3000,8 +3108,8 @@ var prefer_destructuring_assignment_default = createRule({
3000
3108
  },
3001
3109
  defaultOptions: []
3002
3110
  });
3003
- var RULE_NAME46 = "prefer-react-namespace-import";
3004
- var RULE_FEATURES45 = [
3111
+ var RULE_NAME47 = "prefer-react-namespace-import";
3112
+ var RULE_FEATURES46 = [
3005
3113
  "CHK",
3006
3114
  "FIX"
3007
3115
  ];
@@ -3010,7 +3118,7 @@ var prefer_react_namespace_import_default = createRule({
3010
3118
  type: "problem",
3011
3119
  docs: {
3012
3120
  description: "enforce React is imported via a namespace import",
3013
- [Symbol.for("rule_features")]: RULE_FEATURES45
3121
+ [Symbol.for("rule_features")]: RULE_FEATURES46
3014
3122
  },
3015
3123
  fixable: "code",
3016
3124
  messages: {
@@ -3018,7 +3126,7 @@ var prefer_react_namespace_import_default = createRule({
3018
3126
  },
3019
3127
  schema: []
3020
3128
  },
3021
- name: RULE_NAME46,
3129
+ name: RULE_NAME47,
3022
3130
  create(context) {
3023
3131
  const { importSource } = shared.getSettingsFromContext(context);
3024
3132
  return {
@@ -3054,8 +3162,8 @@ ${importStringPrefix} ${specifiers} from ${importSourceQuoted}${semiColon}`
3054
3162
  },
3055
3163
  defaultOptions: []
3056
3164
  });
3057
- var RULE_NAME47 = "prefer-read-only-props";
3058
- var RULE_FEATURES46 = [
3165
+ var RULE_NAME48 = "prefer-read-only-props";
3166
+ var RULE_FEATURES47 = [
3059
3167
  "CHK",
3060
3168
  "TSC"
3061
3169
  ];
@@ -3072,14 +3180,14 @@ var prefer_read_only_props_default = createRule({
3072
3180
  type: "problem",
3073
3181
  docs: {
3074
3182
  description: "enforce read-only props in components",
3075
- [Symbol.for("rule_features")]: RULE_FEATURES46
3183
+ [Symbol.for("rule_features")]: RULE_FEATURES47
3076
3184
  },
3077
3185
  messages: {
3078
3186
  preferReadOnlyProps: "A function component's props should be read-only."
3079
3187
  },
3080
3188
  schema: []
3081
3189
  },
3082
- name: RULE_NAME47,
3190
+ name: RULE_NAME48,
3083
3191
  create(context) {
3084
3192
  const services = utils.ESLintUtils.getParserServices(context, false);
3085
3193
  const { ctx, listeners } = core.useComponentCollector(context);
@@ -3103,8 +3211,8 @@ var prefer_read_only_props_default = createRule({
3103
3211
  },
3104
3212
  defaultOptions: []
3105
3213
  });
3106
- var RULE_NAME48 = "prefer-shorthand-boolean";
3107
- var RULE_FEATURES47 = [
3214
+ var RULE_NAME49 = "prefer-shorthand-boolean";
3215
+ var RULE_FEATURES48 = [
3108
3216
  "CHK",
3109
3217
  "FIX"
3110
3218
  ];
@@ -3113,7 +3221,7 @@ var prefer_shorthand_boolean_default = createRule({
3113
3221
  type: "problem",
3114
3222
  docs: {
3115
3223
  description: "enforce using shorthand boolean attributes",
3116
- [Symbol.for("rule_features")]: RULE_FEATURES47
3224
+ [Symbol.for("rule_features")]: RULE_FEATURES48
3117
3225
  },
3118
3226
  fixable: "code",
3119
3227
  messages: {
@@ -3121,7 +3229,7 @@ var prefer_shorthand_boolean_default = createRule({
3121
3229
  },
3122
3230
  schema: []
3123
3231
  },
3124
- name: RULE_NAME48,
3232
+ name: RULE_NAME49,
3125
3233
  create(context) {
3126
3234
  return {
3127
3235
  JSXAttribute(node) {
@@ -3144,8 +3252,8 @@ var prefer_shorthand_boolean_default = createRule({
3144
3252
  },
3145
3253
  defaultOptions: []
3146
3254
  });
3147
- var RULE_NAME49 = "prefer-shorthand-fragment";
3148
- var RULE_FEATURES48 = [
3255
+ var RULE_NAME50 = "prefer-shorthand-fragment";
3256
+ var RULE_FEATURES49 = [
3149
3257
  "CHK",
3150
3258
  "FIX"
3151
3259
  ];
@@ -3154,7 +3262,7 @@ var prefer_shorthand_fragment_default = createRule({
3154
3262
  type: "problem",
3155
3263
  docs: {
3156
3264
  description: "enforce using fragment syntax instead of 'Fragment' component",
3157
- [Symbol.for("rule_features")]: RULE_FEATURES48
3265
+ [Symbol.for("rule_features")]: RULE_FEATURES49
3158
3266
  },
3159
3267
  fixable: "code",
3160
3268
  messages: {
@@ -3162,7 +3270,7 @@ var prefer_shorthand_fragment_default = createRule({
3162
3270
  },
3163
3271
  schema: []
3164
3272
  },
3165
- name: RULE_NAME49,
3273
+ name: RULE_NAME50,
3166
3274
  create(context) {
3167
3275
  return {
3168
3276
  JSXElement(node) {
@@ -3190,21 +3298,21 @@ var prefer_shorthand_fragment_default = createRule({
3190
3298
  },
3191
3299
  defaultOptions: []
3192
3300
  });
3193
- var RULE_NAME50 = "use-jsx-vars";
3194
- var RULE_FEATURES49 = [];
3301
+ var RULE_NAME51 = "use-jsx-vars";
3302
+ var RULE_FEATURES50 = [];
3195
3303
  var use_jsx_vars_default = createRule({
3196
3304
  meta: {
3197
3305
  type: "problem",
3198
3306
  docs: {
3199
3307
  description: "helpes `eslint/no-unused-vars` to correctly mark JSX variables as used.",
3200
- [Symbol.for("rule_features")]: RULE_FEATURES49
3308
+ [Symbol.for("rule_features")]: RULE_FEATURES50
3201
3309
  },
3202
3310
  messages: {
3203
3311
  useJsxVars: ""
3204
3312
  },
3205
3313
  schema: []
3206
3314
  },
3207
- name: RULE_NAME50,
3315
+ name: RULE_NAME51,
3208
3316
  create(context) {
3209
3317
  return {
3210
3318
  JSXOpeningElement(node) {
@@ -3280,6 +3388,7 @@ var index_default = {
3280
3388
  "no-unstable-default-props": no_unstable_default_props_default,
3281
3389
  "no-unused-class-component-members": no_unused_class_component_members_default,
3282
3390
  "no-unused-state": no_unused_state_default,
3391
+ "no-use-context": no_use_context_default,
3283
3392
  "no-useless-fragment": no_useless_fragment_default,
3284
3393
  "prefer-destructuring-assignment": prefer_destructuring_assignment_default,
3285
3394
  "prefer-react-namespace-import": prefer_react_namespace_import_default,
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as JSX7 from '@eslint-react/jsx';
2
2
  import { createRuleForPlugin, getSettingsFromContext, unsafeDecodeSettings } from '@eslint-react/shared';
3
3
  import * as AST11 from '@eslint-react/ast';
4
- import { isForwardRefCall, isThisSetState, isClassComponent, isChildrenCount, isChildrenForEach, isChildrenMap, isChildrenOnly, isChildrenToArray, useComponentCollectorLegacy, isComponentDidCatch, isGetDerivedStateFromError, isCloneElementCall, isCreateRefCall, isComponentName, useComponentCollector, DEFAULT_COMPONENT_HINT, ERComponentFlag, isChildrenToArrayCall, ERComponentHint, isDirectValueOfRenderPropertyLoose, isDeclaredInRenderPropLoose, isInsideCreateElementProps, isInsideRenderMethod, isReactHookCall, isCreateElementCall, isGetDerivedStateFromProps, isInitializedFromReact } from '@eslint-react/core';
4
+ import { isForwardRefCall, isThisSetState, isClassComponent, isChildrenCount, isChildrenForEach, isChildrenMap, isChildrenOnly, isChildrenToArray, useComponentCollectorLegacy, isComponentDidCatch, isGetDerivedStateFromError, isCloneElementCall, isCreateRefCall, isComponentName, useComponentCollector, DEFAULT_COMPONENT_HINT, ERComponentFlag, isChildrenToArrayCall, ERComponentHint, isDirectValueOfRenderPropertyLoose, isDeclaredInRenderPropLoose, isInsideCreateElementProps, isInsideRenderMethod, isReactHookCall, isReactHookCallWithNameAlias, isCreateElementCall, isGetDerivedStateFromProps, isInitializedFromReact } from '@eslint-react/core';
5
5
  import { _, getOrUpdate, identity } from '@eslint-react/eff';
6
6
  import { AST_NODE_TYPES } from '@typescript-eslint/types';
7
7
  import { isMatching, match, P } from 'ts-pattern';
@@ -15,9 +15,25 @@ import { getTypeImmutability, isUnknown, isImmutable, isReadonlyShallow, isReado
15
15
 
16
16
  // package.json
17
17
  var name = "eslint-plugin-react-x";
18
- var version = "1.25.1-next.0";
18
+ var version = "1.26.0-beta.3";
19
19
  var createRule = createRuleForPlugin("x");
20
20
 
21
+ // src/utils/get-associated-tokens.ts
22
+ function getAssociatedTokens(context, node) {
23
+ {
24
+ const tokenBefore = context.sourceCode.getTokenBefore(node);
25
+ const tokenAfter = context.sourceCode.getTokenAfter(node);
26
+ const tokens = [];
27
+ if (tokenAfter?.value !== "," && tokenBefore?.value === ",") {
28
+ tokens.push(tokenBefore);
29
+ }
30
+ if (tokenAfter?.value === ",") {
31
+ tokens.push(tokenAfter);
32
+ }
33
+ return tokens;
34
+ }
35
+ }
36
+
21
37
  // src/rules/avoid-shorthand-boolean.ts
22
38
  var RULE_NAME = "avoid-shorthand-boolean";
23
39
  var RULE_FEATURES = [
@@ -2784,7 +2800,99 @@ var no_unused_state_default = createRule({
2784
2800
  },
2785
2801
  defaultOptions: []
2786
2802
  });
2787
- var RULE_NAME44 = "no-useless-fragment";
2803
+ var RULE_NAME44 = "no-use-context";
2804
+ var RULE_FEATURES44 = [
2805
+ "CHK",
2806
+ "MOD"
2807
+ ];
2808
+ var no_use_context_default = createRule({
2809
+ meta: {
2810
+ type: "problem",
2811
+ docs: {
2812
+ description: "disallow the use of 'useContext'",
2813
+ [Symbol.for("rule_features")]: RULE_FEATURES44
2814
+ },
2815
+ fixable: "code",
2816
+ messages: {
2817
+ noUseContext: "In React 19, 'use' is preferred over 'useContext' because it is more flexible."
2818
+ },
2819
+ schema: []
2820
+ },
2821
+ name: RULE_NAME44,
2822
+ create(context) {
2823
+ const settings = getSettingsFromContext(context);
2824
+ const useContextAlias = /* @__PURE__ */ new Set();
2825
+ if (!context.sourceCode.text.includes("useContext")) {
2826
+ return {};
2827
+ }
2828
+ if (compare(settings.version, "19.0.0", "<")) {
2829
+ return {};
2830
+ }
2831
+ return {
2832
+ CallExpression(node) {
2833
+ if (!isReactHookCall(node)) {
2834
+ return;
2835
+ }
2836
+ if (!isReactHookCallWithNameAlias("useContext", context, [...useContextAlias])(node)) {
2837
+ return;
2838
+ }
2839
+ context.report({
2840
+ messageId: "noUseContext",
2841
+ node,
2842
+ fix(fixer) {
2843
+ switch (node.callee.type) {
2844
+ case AST_NODE_TYPES.Identifier:
2845
+ return fixer.replaceText(node.callee, "use");
2846
+ case AST_NODE_TYPES.MemberExpression:
2847
+ return fixer.replaceText(node.callee.property, "use");
2848
+ }
2849
+ return null;
2850
+ }
2851
+ });
2852
+ },
2853
+ ImportDeclaration(node) {
2854
+ if (node.source.value !== settings.importSource) {
2855
+ return;
2856
+ }
2857
+ const isUseImported = node.specifiers.some(isMatching({ local: { type: AST_NODE_TYPES.Identifier, name: "use" } }));
2858
+ for (const specifier of node.specifiers) {
2859
+ if (specifier.type !== AST_NODE_TYPES.ImportSpecifier) continue;
2860
+ if (specifier.imported.type !== AST_NODE_TYPES.Identifier) continue;
2861
+ if (specifier.imported.name === "useContext") {
2862
+ if (specifier.local.name !== "useContext") {
2863
+ useContextAlias.add(specifier.local.name);
2864
+ context.report({
2865
+ messageId: "noUseContext",
2866
+ node: specifier
2867
+ });
2868
+ return;
2869
+ }
2870
+ context.report({
2871
+ messageId: "noUseContext",
2872
+ node: specifier,
2873
+ fix(fixer) {
2874
+ if (isUseImported) {
2875
+ const tokenBefore = context.sourceCode.getTokenBefore(specifier);
2876
+ return [
2877
+ fixer.remove(specifier),
2878
+ ...tokenBefore?.value === "," ? [fixer.replaceTextRange([tokenBefore.range[1], specifier.range[0]], "")] : [],
2879
+ ...getAssociatedTokens(
2880
+ context,
2881
+ specifier
2882
+ ).map((token) => fixer.remove(token))
2883
+ ];
2884
+ }
2885
+ return fixer.replaceText(specifier.imported, "use");
2886
+ }
2887
+ });
2888
+ }
2889
+ }
2890
+ }
2891
+ };
2892
+ },
2893
+ defaultOptions: []
2894
+ });
2895
+ var RULE_NAME45 = "no-useless-fragment";
2788
2896
  var defaultOptions = [{
2789
2897
  allowExpressions: true
2790
2898
  }];
@@ -2876,7 +2984,7 @@ var no_useless_fragment_default = createRule({
2876
2984
  }
2877
2985
  }]
2878
2986
  },
2879
- name: RULE_NAME44,
2987
+ name: RULE_NAME45,
2880
2988
  create(context, [option]) {
2881
2989
  const { allowExpressions = true } = option;
2882
2990
  return {
@@ -2891,8 +2999,8 @@ var no_useless_fragment_default = createRule({
2891
2999
  },
2892
3000
  defaultOptions
2893
3001
  });
2894
- var RULE_NAME45 = "prefer-destructuring-assignment";
2895
- var RULE_FEATURES44 = [
3002
+ var RULE_NAME46 = "prefer-destructuring-assignment";
3003
+ var RULE_FEATURES45 = [
2896
3004
  "CHK"
2897
3005
  ];
2898
3006
  function isMemberExpressionWithObjectName(node) {
@@ -2903,14 +3011,14 @@ var prefer_destructuring_assignment_default = createRule({
2903
3011
  type: "problem",
2904
3012
  docs: {
2905
3013
  description: "enforce using destructuring assignment in component props and context",
2906
- [Symbol.for("rule_features")]: RULE_FEATURES44
3014
+ [Symbol.for("rule_features")]: RULE_FEATURES45
2907
3015
  },
2908
3016
  messages: {
2909
3017
  preferDestructuringAssignment: "Use destructuring assignment for {{name}}."
2910
3018
  },
2911
3019
  schema: []
2912
3020
  },
2913
- name: RULE_NAME45,
3021
+ name: RULE_NAME46,
2914
3022
  create(context) {
2915
3023
  const { ctx, listeners } = useComponentCollector(context);
2916
3024
  const memberExpressionWithNames = [];
@@ -2973,8 +3081,8 @@ var prefer_destructuring_assignment_default = createRule({
2973
3081
  },
2974
3082
  defaultOptions: []
2975
3083
  });
2976
- var RULE_NAME46 = "prefer-react-namespace-import";
2977
- var RULE_FEATURES45 = [
3084
+ var RULE_NAME47 = "prefer-react-namespace-import";
3085
+ var RULE_FEATURES46 = [
2978
3086
  "CHK",
2979
3087
  "FIX"
2980
3088
  ];
@@ -2983,7 +3091,7 @@ var prefer_react_namespace_import_default = createRule({
2983
3091
  type: "problem",
2984
3092
  docs: {
2985
3093
  description: "enforce React is imported via a namespace import",
2986
- [Symbol.for("rule_features")]: RULE_FEATURES45
3094
+ [Symbol.for("rule_features")]: RULE_FEATURES46
2987
3095
  },
2988
3096
  fixable: "code",
2989
3097
  messages: {
@@ -2991,7 +3099,7 @@ var prefer_react_namespace_import_default = createRule({
2991
3099
  },
2992
3100
  schema: []
2993
3101
  },
2994
- name: RULE_NAME46,
3102
+ name: RULE_NAME47,
2995
3103
  create(context) {
2996
3104
  const { importSource } = getSettingsFromContext(context);
2997
3105
  return {
@@ -3027,8 +3135,8 @@ ${importStringPrefix} ${specifiers} from ${importSourceQuoted}${semiColon}`
3027
3135
  },
3028
3136
  defaultOptions: []
3029
3137
  });
3030
- var RULE_NAME47 = "prefer-read-only-props";
3031
- var RULE_FEATURES46 = [
3138
+ var RULE_NAME48 = "prefer-read-only-props";
3139
+ var RULE_FEATURES47 = [
3032
3140
  "CHK",
3033
3141
  "TSC"
3034
3142
  ];
@@ -3045,14 +3153,14 @@ var prefer_read_only_props_default = createRule({
3045
3153
  type: "problem",
3046
3154
  docs: {
3047
3155
  description: "enforce read-only props in components",
3048
- [Symbol.for("rule_features")]: RULE_FEATURES46
3156
+ [Symbol.for("rule_features")]: RULE_FEATURES47
3049
3157
  },
3050
3158
  messages: {
3051
3159
  preferReadOnlyProps: "A function component's props should be read-only."
3052
3160
  },
3053
3161
  schema: []
3054
3162
  },
3055
- name: RULE_NAME47,
3163
+ name: RULE_NAME48,
3056
3164
  create(context) {
3057
3165
  const services = ESLintUtils.getParserServices(context, false);
3058
3166
  const { ctx, listeners } = useComponentCollector(context);
@@ -3076,8 +3184,8 @@ var prefer_read_only_props_default = createRule({
3076
3184
  },
3077
3185
  defaultOptions: []
3078
3186
  });
3079
- var RULE_NAME48 = "prefer-shorthand-boolean";
3080
- var RULE_FEATURES47 = [
3187
+ var RULE_NAME49 = "prefer-shorthand-boolean";
3188
+ var RULE_FEATURES48 = [
3081
3189
  "CHK",
3082
3190
  "FIX"
3083
3191
  ];
@@ -3086,7 +3194,7 @@ var prefer_shorthand_boolean_default = createRule({
3086
3194
  type: "problem",
3087
3195
  docs: {
3088
3196
  description: "enforce using shorthand boolean attributes",
3089
- [Symbol.for("rule_features")]: RULE_FEATURES47
3197
+ [Symbol.for("rule_features")]: RULE_FEATURES48
3090
3198
  },
3091
3199
  fixable: "code",
3092
3200
  messages: {
@@ -3094,7 +3202,7 @@ var prefer_shorthand_boolean_default = createRule({
3094
3202
  },
3095
3203
  schema: []
3096
3204
  },
3097
- name: RULE_NAME48,
3205
+ name: RULE_NAME49,
3098
3206
  create(context) {
3099
3207
  return {
3100
3208
  JSXAttribute(node) {
@@ -3117,8 +3225,8 @@ var prefer_shorthand_boolean_default = createRule({
3117
3225
  },
3118
3226
  defaultOptions: []
3119
3227
  });
3120
- var RULE_NAME49 = "prefer-shorthand-fragment";
3121
- var RULE_FEATURES48 = [
3228
+ var RULE_NAME50 = "prefer-shorthand-fragment";
3229
+ var RULE_FEATURES49 = [
3122
3230
  "CHK",
3123
3231
  "FIX"
3124
3232
  ];
@@ -3127,7 +3235,7 @@ var prefer_shorthand_fragment_default = createRule({
3127
3235
  type: "problem",
3128
3236
  docs: {
3129
3237
  description: "enforce using fragment syntax instead of 'Fragment' component",
3130
- [Symbol.for("rule_features")]: RULE_FEATURES48
3238
+ [Symbol.for("rule_features")]: RULE_FEATURES49
3131
3239
  },
3132
3240
  fixable: "code",
3133
3241
  messages: {
@@ -3135,7 +3243,7 @@ var prefer_shorthand_fragment_default = createRule({
3135
3243
  },
3136
3244
  schema: []
3137
3245
  },
3138
- name: RULE_NAME49,
3246
+ name: RULE_NAME50,
3139
3247
  create(context) {
3140
3248
  return {
3141
3249
  JSXElement(node) {
@@ -3163,21 +3271,21 @@ var prefer_shorthand_fragment_default = createRule({
3163
3271
  },
3164
3272
  defaultOptions: []
3165
3273
  });
3166
- var RULE_NAME50 = "use-jsx-vars";
3167
- var RULE_FEATURES49 = [];
3274
+ var RULE_NAME51 = "use-jsx-vars";
3275
+ var RULE_FEATURES50 = [];
3168
3276
  var use_jsx_vars_default = createRule({
3169
3277
  meta: {
3170
3278
  type: "problem",
3171
3279
  docs: {
3172
3280
  description: "helpes `eslint/no-unused-vars` to correctly mark JSX variables as used.",
3173
- [Symbol.for("rule_features")]: RULE_FEATURES49
3281
+ [Symbol.for("rule_features")]: RULE_FEATURES50
3174
3282
  },
3175
3283
  messages: {
3176
3284
  useJsxVars: ""
3177
3285
  },
3178
3286
  schema: []
3179
3287
  },
3180
- name: RULE_NAME50,
3288
+ name: RULE_NAME51,
3181
3289
  create(context) {
3182
3290
  return {
3183
3291
  JSXOpeningElement(node) {
@@ -3253,6 +3361,7 @@ var index_default = {
3253
3361
  "no-unstable-default-props": no_unstable_default_props_default,
3254
3362
  "no-unused-class-component-members": no_unused_class_component_members_default,
3255
3363
  "no-unused-state": no_unused_state_default,
3364
+ "no-use-context": no_use_context_default,
3256
3365
  "no-useless-fragment": no_useless_fragment_default,
3257
3366
  "prefer-destructuring-assignment": prefer_destructuring_assignment_default,
3258
3367
  "prefer-react-namespace-import": prefer_react_namespace_import_default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-react-x",
3
- "version": "1.25.1-next.0",
3
+ "version": "1.26.0-beta.3",
4
4
  "description": "A set of composable ESLint rules for libraries and frameworks that use React as a UI runtime.",
5
5
  "keywords": [
6
6
  "react",
@@ -40,20 +40,20 @@
40
40
  "./package.json"
41
41
  ],
42
42
  "dependencies": {
43
- "@typescript-eslint/scope-manager": "^8.21.0",
44
- "@typescript-eslint/type-utils": "^8.21.0",
45
- "@typescript-eslint/types": "^8.21.0",
46
- "@typescript-eslint/utils": "^8.21.0",
43
+ "@typescript-eslint/scope-manager": "^8.22.0",
44
+ "@typescript-eslint/type-utils": "^8.22.0",
45
+ "@typescript-eslint/types": "^8.22.0",
46
+ "@typescript-eslint/utils": "^8.22.0",
47
47
  "compare-versions": "^6.1.1",
48
48
  "is-immutable-type": "^5.0.1",
49
49
  "string-ts": "^2.2.0",
50
50
  "ts-pattern": "^5.6.2",
51
- "@eslint-react/ast": "1.25.1-next.0",
52
- "@eslint-react/core": "1.25.1-next.0",
53
- "@eslint-react/eff": "1.25.1-next.0",
54
- "@eslint-react/shared": "1.25.1-next.0",
55
- "@eslint-react/jsx": "1.25.1-next.0",
56
- "@eslint-react/var": "1.25.1-next.0"
51
+ "@eslint-react/ast": "1.26.0-beta.3",
52
+ "@eslint-react/core": "1.26.0-beta.3",
53
+ "@eslint-react/eff": "1.26.0-beta.3",
54
+ "@eslint-react/jsx": "1.26.0-beta.3",
55
+ "@eslint-react/var": "1.26.0-beta.3",
56
+ "@eslint-react/shared": "1.26.0-beta.3"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@types/react": "^19.0.8",