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

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.4";
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,94 @@ 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
+ }
2892
+ context.report({
2893
+ messageId: "noUseContext",
2894
+ node: specifier,
2895
+ fix(fixer) {
2896
+ if (isUseImported) {
2897
+ const tokenBefore = context.sourceCode.getTokenBefore(specifier);
2898
+ return [
2899
+ fixer.remove(specifier),
2900
+ ...tokenBefore?.value === "," ? [fixer.replaceTextRange([tokenBefore.range[1], specifier.range[0]], "")] : [],
2901
+ ...getAssociatedTokens(
2902
+ context,
2903
+ specifier
2904
+ ).map((token) => fixer.remove(token))
2905
+ ];
2906
+ }
2907
+ return fixer.replaceText(specifier.imported, "use");
2908
+ }
2909
+ });
2910
+ }
2911
+ }
2912
+ }
2913
+ };
2914
+ },
2915
+ defaultOptions: []
2916
+ });
2917
+ var RULE_NAME45 = "no-useless-fragment";
2815
2918
  var defaultOptions = [{
2816
2919
  allowExpressions: true
2817
2920
  }];
@@ -2903,7 +3006,7 @@ var no_useless_fragment_default = createRule({
2903
3006
  }
2904
3007
  }]
2905
3008
  },
2906
- name: RULE_NAME44,
3009
+ name: RULE_NAME45,
2907
3010
  create(context, [option]) {
2908
3011
  const { allowExpressions = true } = option;
2909
3012
  return {
@@ -2918,8 +3021,8 @@ var no_useless_fragment_default = createRule({
2918
3021
  },
2919
3022
  defaultOptions
2920
3023
  });
2921
- var RULE_NAME45 = "prefer-destructuring-assignment";
2922
- var RULE_FEATURES44 = [
3024
+ var RULE_NAME46 = "prefer-destructuring-assignment";
3025
+ var RULE_FEATURES45 = [
2923
3026
  "CHK"
2924
3027
  ];
2925
3028
  function isMemberExpressionWithObjectName(node) {
@@ -2930,14 +3033,14 @@ var prefer_destructuring_assignment_default = createRule({
2930
3033
  type: "problem",
2931
3034
  docs: {
2932
3035
  description: "enforce using destructuring assignment in component props and context",
2933
- [Symbol.for("rule_features")]: RULE_FEATURES44
3036
+ [Symbol.for("rule_features")]: RULE_FEATURES45
2934
3037
  },
2935
3038
  messages: {
2936
3039
  preferDestructuringAssignment: "Use destructuring assignment for {{name}}."
2937
3040
  },
2938
3041
  schema: []
2939
3042
  },
2940
- name: RULE_NAME45,
3043
+ name: RULE_NAME46,
2941
3044
  create(context) {
2942
3045
  const { ctx, listeners } = core.useComponentCollector(context);
2943
3046
  const memberExpressionWithNames = [];
@@ -3000,8 +3103,8 @@ var prefer_destructuring_assignment_default = createRule({
3000
3103
  },
3001
3104
  defaultOptions: []
3002
3105
  });
3003
- var RULE_NAME46 = "prefer-react-namespace-import";
3004
- var RULE_FEATURES45 = [
3106
+ var RULE_NAME47 = "prefer-react-namespace-import";
3107
+ var RULE_FEATURES46 = [
3005
3108
  "CHK",
3006
3109
  "FIX"
3007
3110
  ];
@@ -3010,7 +3113,7 @@ var prefer_react_namespace_import_default = createRule({
3010
3113
  type: "problem",
3011
3114
  docs: {
3012
3115
  description: "enforce React is imported via a namespace import",
3013
- [Symbol.for("rule_features")]: RULE_FEATURES45
3116
+ [Symbol.for("rule_features")]: RULE_FEATURES46
3014
3117
  },
3015
3118
  fixable: "code",
3016
3119
  messages: {
@@ -3018,7 +3121,7 @@ var prefer_react_namespace_import_default = createRule({
3018
3121
  },
3019
3122
  schema: []
3020
3123
  },
3021
- name: RULE_NAME46,
3124
+ name: RULE_NAME47,
3022
3125
  create(context) {
3023
3126
  const { importSource } = shared.getSettingsFromContext(context);
3024
3127
  return {
@@ -3054,8 +3157,8 @@ ${importStringPrefix} ${specifiers} from ${importSourceQuoted}${semiColon}`
3054
3157
  },
3055
3158
  defaultOptions: []
3056
3159
  });
3057
- var RULE_NAME47 = "prefer-read-only-props";
3058
- var RULE_FEATURES46 = [
3160
+ var RULE_NAME48 = "prefer-read-only-props";
3161
+ var RULE_FEATURES47 = [
3059
3162
  "CHK",
3060
3163
  "TSC"
3061
3164
  ];
@@ -3072,14 +3175,14 @@ var prefer_read_only_props_default = createRule({
3072
3175
  type: "problem",
3073
3176
  docs: {
3074
3177
  description: "enforce read-only props in components",
3075
- [Symbol.for("rule_features")]: RULE_FEATURES46
3178
+ [Symbol.for("rule_features")]: RULE_FEATURES47
3076
3179
  },
3077
3180
  messages: {
3078
3181
  preferReadOnlyProps: "A function component's props should be read-only."
3079
3182
  },
3080
3183
  schema: []
3081
3184
  },
3082
- name: RULE_NAME47,
3185
+ name: RULE_NAME48,
3083
3186
  create(context) {
3084
3187
  const services = utils.ESLintUtils.getParserServices(context, false);
3085
3188
  const { ctx, listeners } = core.useComponentCollector(context);
@@ -3103,8 +3206,8 @@ var prefer_read_only_props_default = createRule({
3103
3206
  },
3104
3207
  defaultOptions: []
3105
3208
  });
3106
- var RULE_NAME48 = "prefer-shorthand-boolean";
3107
- var RULE_FEATURES47 = [
3209
+ var RULE_NAME49 = "prefer-shorthand-boolean";
3210
+ var RULE_FEATURES48 = [
3108
3211
  "CHK",
3109
3212
  "FIX"
3110
3213
  ];
@@ -3113,7 +3216,7 @@ var prefer_shorthand_boolean_default = createRule({
3113
3216
  type: "problem",
3114
3217
  docs: {
3115
3218
  description: "enforce using shorthand boolean attributes",
3116
- [Symbol.for("rule_features")]: RULE_FEATURES47
3219
+ [Symbol.for("rule_features")]: RULE_FEATURES48
3117
3220
  },
3118
3221
  fixable: "code",
3119
3222
  messages: {
@@ -3121,7 +3224,7 @@ var prefer_shorthand_boolean_default = createRule({
3121
3224
  },
3122
3225
  schema: []
3123
3226
  },
3124
- name: RULE_NAME48,
3227
+ name: RULE_NAME49,
3125
3228
  create(context) {
3126
3229
  return {
3127
3230
  JSXAttribute(node) {
@@ -3144,8 +3247,8 @@ var prefer_shorthand_boolean_default = createRule({
3144
3247
  },
3145
3248
  defaultOptions: []
3146
3249
  });
3147
- var RULE_NAME49 = "prefer-shorthand-fragment";
3148
- var RULE_FEATURES48 = [
3250
+ var RULE_NAME50 = "prefer-shorthand-fragment";
3251
+ var RULE_FEATURES49 = [
3149
3252
  "CHK",
3150
3253
  "FIX"
3151
3254
  ];
@@ -3154,7 +3257,7 @@ var prefer_shorthand_fragment_default = createRule({
3154
3257
  type: "problem",
3155
3258
  docs: {
3156
3259
  description: "enforce using fragment syntax instead of 'Fragment' component",
3157
- [Symbol.for("rule_features")]: RULE_FEATURES48
3260
+ [Symbol.for("rule_features")]: RULE_FEATURES49
3158
3261
  },
3159
3262
  fixable: "code",
3160
3263
  messages: {
@@ -3162,7 +3265,7 @@ var prefer_shorthand_fragment_default = createRule({
3162
3265
  },
3163
3266
  schema: []
3164
3267
  },
3165
- name: RULE_NAME49,
3268
+ name: RULE_NAME50,
3166
3269
  create(context) {
3167
3270
  return {
3168
3271
  JSXElement(node) {
@@ -3190,21 +3293,21 @@ var prefer_shorthand_fragment_default = createRule({
3190
3293
  },
3191
3294
  defaultOptions: []
3192
3295
  });
3193
- var RULE_NAME50 = "use-jsx-vars";
3194
- var RULE_FEATURES49 = [];
3296
+ var RULE_NAME51 = "use-jsx-vars";
3297
+ var RULE_FEATURES50 = [];
3195
3298
  var use_jsx_vars_default = createRule({
3196
3299
  meta: {
3197
3300
  type: "problem",
3198
3301
  docs: {
3199
3302
  description: "helpes `eslint/no-unused-vars` to correctly mark JSX variables as used.",
3200
- [Symbol.for("rule_features")]: RULE_FEATURES49
3303
+ [Symbol.for("rule_features")]: RULE_FEATURES50
3201
3304
  },
3202
3305
  messages: {
3203
3306
  useJsxVars: ""
3204
3307
  },
3205
3308
  schema: []
3206
3309
  },
3207
- name: RULE_NAME50,
3310
+ name: RULE_NAME51,
3208
3311
  create(context) {
3209
3312
  return {
3210
3313
  JSXOpeningElement(node) {
@@ -3280,6 +3383,7 @@ var index_default = {
3280
3383
  "no-unstable-default-props": no_unstable_default_props_default,
3281
3384
  "no-unused-class-component-members": no_unused_class_component_members_default,
3282
3385
  "no-unused-state": no_unused_state_default,
3386
+ "no-use-context": no_use_context_default,
3283
3387
  "no-useless-fragment": no_useless_fragment_default,
3284
3388
  "prefer-destructuring-assignment": prefer_destructuring_assignment_default,
3285
3389
  "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.4";
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,94 @@ 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
+ }
2865
+ context.report({
2866
+ messageId: "noUseContext",
2867
+ node: specifier,
2868
+ fix(fixer) {
2869
+ if (isUseImported) {
2870
+ const tokenBefore = context.sourceCode.getTokenBefore(specifier);
2871
+ return [
2872
+ fixer.remove(specifier),
2873
+ ...tokenBefore?.value === "," ? [fixer.replaceTextRange([tokenBefore.range[1], specifier.range[0]], "")] : [],
2874
+ ...getAssociatedTokens(
2875
+ context,
2876
+ specifier
2877
+ ).map((token) => fixer.remove(token))
2878
+ ];
2879
+ }
2880
+ return fixer.replaceText(specifier.imported, "use");
2881
+ }
2882
+ });
2883
+ }
2884
+ }
2885
+ }
2886
+ };
2887
+ },
2888
+ defaultOptions: []
2889
+ });
2890
+ var RULE_NAME45 = "no-useless-fragment";
2788
2891
  var defaultOptions = [{
2789
2892
  allowExpressions: true
2790
2893
  }];
@@ -2876,7 +2979,7 @@ var no_useless_fragment_default = createRule({
2876
2979
  }
2877
2980
  }]
2878
2981
  },
2879
- name: RULE_NAME44,
2982
+ name: RULE_NAME45,
2880
2983
  create(context, [option]) {
2881
2984
  const { allowExpressions = true } = option;
2882
2985
  return {
@@ -2891,8 +2994,8 @@ var no_useless_fragment_default = createRule({
2891
2994
  },
2892
2995
  defaultOptions
2893
2996
  });
2894
- var RULE_NAME45 = "prefer-destructuring-assignment";
2895
- var RULE_FEATURES44 = [
2997
+ var RULE_NAME46 = "prefer-destructuring-assignment";
2998
+ var RULE_FEATURES45 = [
2896
2999
  "CHK"
2897
3000
  ];
2898
3001
  function isMemberExpressionWithObjectName(node) {
@@ -2903,14 +3006,14 @@ var prefer_destructuring_assignment_default = createRule({
2903
3006
  type: "problem",
2904
3007
  docs: {
2905
3008
  description: "enforce using destructuring assignment in component props and context",
2906
- [Symbol.for("rule_features")]: RULE_FEATURES44
3009
+ [Symbol.for("rule_features")]: RULE_FEATURES45
2907
3010
  },
2908
3011
  messages: {
2909
3012
  preferDestructuringAssignment: "Use destructuring assignment for {{name}}."
2910
3013
  },
2911
3014
  schema: []
2912
3015
  },
2913
- name: RULE_NAME45,
3016
+ name: RULE_NAME46,
2914
3017
  create(context) {
2915
3018
  const { ctx, listeners } = useComponentCollector(context);
2916
3019
  const memberExpressionWithNames = [];
@@ -2973,8 +3076,8 @@ var prefer_destructuring_assignment_default = createRule({
2973
3076
  },
2974
3077
  defaultOptions: []
2975
3078
  });
2976
- var RULE_NAME46 = "prefer-react-namespace-import";
2977
- var RULE_FEATURES45 = [
3079
+ var RULE_NAME47 = "prefer-react-namespace-import";
3080
+ var RULE_FEATURES46 = [
2978
3081
  "CHK",
2979
3082
  "FIX"
2980
3083
  ];
@@ -2983,7 +3086,7 @@ var prefer_react_namespace_import_default = createRule({
2983
3086
  type: "problem",
2984
3087
  docs: {
2985
3088
  description: "enforce React is imported via a namespace import",
2986
- [Symbol.for("rule_features")]: RULE_FEATURES45
3089
+ [Symbol.for("rule_features")]: RULE_FEATURES46
2987
3090
  },
2988
3091
  fixable: "code",
2989
3092
  messages: {
@@ -2991,7 +3094,7 @@ var prefer_react_namespace_import_default = createRule({
2991
3094
  },
2992
3095
  schema: []
2993
3096
  },
2994
- name: RULE_NAME46,
3097
+ name: RULE_NAME47,
2995
3098
  create(context) {
2996
3099
  const { importSource } = getSettingsFromContext(context);
2997
3100
  return {
@@ -3027,8 +3130,8 @@ ${importStringPrefix} ${specifiers} from ${importSourceQuoted}${semiColon}`
3027
3130
  },
3028
3131
  defaultOptions: []
3029
3132
  });
3030
- var RULE_NAME47 = "prefer-read-only-props";
3031
- var RULE_FEATURES46 = [
3133
+ var RULE_NAME48 = "prefer-read-only-props";
3134
+ var RULE_FEATURES47 = [
3032
3135
  "CHK",
3033
3136
  "TSC"
3034
3137
  ];
@@ -3045,14 +3148,14 @@ var prefer_read_only_props_default = createRule({
3045
3148
  type: "problem",
3046
3149
  docs: {
3047
3150
  description: "enforce read-only props in components",
3048
- [Symbol.for("rule_features")]: RULE_FEATURES46
3151
+ [Symbol.for("rule_features")]: RULE_FEATURES47
3049
3152
  },
3050
3153
  messages: {
3051
3154
  preferReadOnlyProps: "A function component's props should be read-only."
3052
3155
  },
3053
3156
  schema: []
3054
3157
  },
3055
- name: RULE_NAME47,
3158
+ name: RULE_NAME48,
3056
3159
  create(context) {
3057
3160
  const services = ESLintUtils.getParserServices(context, false);
3058
3161
  const { ctx, listeners } = useComponentCollector(context);
@@ -3076,8 +3179,8 @@ var prefer_read_only_props_default = createRule({
3076
3179
  },
3077
3180
  defaultOptions: []
3078
3181
  });
3079
- var RULE_NAME48 = "prefer-shorthand-boolean";
3080
- var RULE_FEATURES47 = [
3182
+ var RULE_NAME49 = "prefer-shorthand-boolean";
3183
+ var RULE_FEATURES48 = [
3081
3184
  "CHK",
3082
3185
  "FIX"
3083
3186
  ];
@@ -3086,7 +3189,7 @@ var prefer_shorthand_boolean_default = createRule({
3086
3189
  type: "problem",
3087
3190
  docs: {
3088
3191
  description: "enforce using shorthand boolean attributes",
3089
- [Symbol.for("rule_features")]: RULE_FEATURES47
3192
+ [Symbol.for("rule_features")]: RULE_FEATURES48
3090
3193
  },
3091
3194
  fixable: "code",
3092
3195
  messages: {
@@ -3094,7 +3197,7 @@ var prefer_shorthand_boolean_default = createRule({
3094
3197
  },
3095
3198
  schema: []
3096
3199
  },
3097
- name: RULE_NAME48,
3200
+ name: RULE_NAME49,
3098
3201
  create(context) {
3099
3202
  return {
3100
3203
  JSXAttribute(node) {
@@ -3117,8 +3220,8 @@ var prefer_shorthand_boolean_default = createRule({
3117
3220
  },
3118
3221
  defaultOptions: []
3119
3222
  });
3120
- var RULE_NAME49 = "prefer-shorthand-fragment";
3121
- var RULE_FEATURES48 = [
3223
+ var RULE_NAME50 = "prefer-shorthand-fragment";
3224
+ var RULE_FEATURES49 = [
3122
3225
  "CHK",
3123
3226
  "FIX"
3124
3227
  ];
@@ -3127,7 +3230,7 @@ var prefer_shorthand_fragment_default = createRule({
3127
3230
  type: "problem",
3128
3231
  docs: {
3129
3232
  description: "enforce using fragment syntax instead of 'Fragment' component",
3130
- [Symbol.for("rule_features")]: RULE_FEATURES48
3233
+ [Symbol.for("rule_features")]: RULE_FEATURES49
3131
3234
  },
3132
3235
  fixable: "code",
3133
3236
  messages: {
@@ -3135,7 +3238,7 @@ var prefer_shorthand_fragment_default = createRule({
3135
3238
  },
3136
3239
  schema: []
3137
3240
  },
3138
- name: RULE_NAME49,
3241
+ name: RULE_NAME50,
3139
3242
  create(context) {
3140
3243
  return {
3141
3244
  JSXElement(node) {
@@ -3163,21 +3266,21 @@ var prefer_shorthand_fragment_default = createRule({
3163
3266
  },
3164
3267
  defaultOptions: []
3165
3268
  });
3166
- var RULE_NAME50 = "use-jsx-vars";
3167
- var RULE_FEATURES49 = [];
3269
+ var RULE_NAME51 = "use-jsx-vars";
3270
+ var RULE_FEATURES50 = [];
3168
3271
  var use_jsx_vars_default = createRule({
3169
3272
  meta: {
3170
3273
  type: "problem",
3171
3274
  docs: {
3172
3275
  description: "helpes `eslint/no-unused-vars` to correctly mark JSX variables as used.",
3173
- [Symbol.for("rule_features")]: RULE_FEATURES49
3276
+ [Symbol.for("rule_features")]: RULE_FEATURES50
3174
3277
  },
3175
3278
  messages: {
3176
3279
  useJsxVars: ""
3177
3280
  },
3178
3281
  schema: []
3179
3282
  },
3180
- name: RULE_NAME50,
3283
+ name: RULE_NAME51,
3181
3284
  create(context) {
3182
3285
  return {
3183
3286
  JSXOpeningElement(node) {
@@ -3253,6 +3356,7 @@ var index_default = {
3253
3356
  "no-unstable-default-props": no_unstable_default_props_default,
3254
3357
  "no-unused-class-component-members": no_unused_class_component_members_default,
3255
3358
  "no-unused-state": no_unused_state_default,
3359
+ "no-use-context": no_use_context_default,
3256
3360
  "no-useless-fragment": no_useless_fragment_default,
3257
3361
  "prefer-destructuring-assignment": prefer_destructuring_assignment_default,
3258
3362
  "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.4",
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.4",
52
+ "@eslint-react/core": "1.26.0-beta.4",
53
+ "@eslint-react/eff": "1.26.0-beta.4",
54
+ "@eslint-react/jsx": "1.26.0-beta.4",
55
+ "@eslint-react/var": "1.26.0-beta.4",
56
+ "@eslint-react/shared": "1.26.0-beta.4"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@types/react": "^19.0.8",