eslint-config-typed 3.8.1 → 3.9.0

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 (51) hide show
  1. package/dist/plugins/react-coding-style/rules/ban-use-imperative-handle-hook.mjs +4 -4
  2. package/dist/plugins/react-coding-style/rules/ban-use-imperative-handle-hook.mjs.map +1 -1
  3. package/dist/plugins/react-coding-style/rules/component-name.d.mts.map +1 -1
  4. package/dist/plugins/react-coding-style/rules/component-name.mjs +5 -3
  5. package/dist/plugins/react-coding-style/rules/component-name.mjs.map +1 -1
  6. package/dist/plugins/react-coding-style/rules/import-style.d.mts +8 -2
  7. package/dist/plugins/react-coding-style/rules/import-style.d.mts.map +1 -1
  8. package/dist/plugins/react-coding-style/rules/import-style.mjs +63 -26
  9. package/dist/plugins/react-coding-style/rules/import-style.mjs.map +1 -1
  10. package/dist/plugins/react-coding-style/rules/props-type-annotation-style.mjs +2 -2
  11. package/dist/plugins/react-coding-style/rules/props-type-annotation-style.mjs.map +1 -1
  12. package/dist/plugins/react-coding-style/rules/react-memo-props-argument-name.mjs +2 -2
  13. package/dist/plugins/react-coding-style/rules/react-memo-props-argument-name.mjs.map +1 -1
  14. package/dist/plugins/react-coding-style/rules/react-memo-type-parameter.mjs +2 -2
  15. package/dist/plugins/react-coding-style/rules/react-memo-type-parameter.mjs.map +1 -1
  16. package/dist/plugins/react-coding-style/rules/rules.d.mts +3 -1
  17. package/dist/plugins/react-coding-style/rules/rules.d.mts.map +1 -1
  18. package/dist/plugins/react-coding-style/rules/shared.d.mts +7 -3
  19. package/dist/plugins/react-coding-style/rules/shared.d.mts.map +1 -1
  20. package/dist/plugins/react-coding-style/rules/shared.mjs +61 -3
  21. package/dist/plugins/react-coding-style/rules/shared.mjs.map +1 -1
  22. package/dist/plugins/react-coding-style/rules/use-memo-hooks-style.d.mts.map +1 -1
  23. package/dist/plugins/react-coding-style/rules/use-memo-hooks-style.mjs +45 -3
  24. package/dist/plugins/react-coding-style/rules/use-memo-hooks-style.mjs.map +1 -1
  25. package/dist/rules/eslint-import-rules.d.mts +1 -3
  26. package/dist/rules/eslint-import-rules.d.mts.map +1 -1
  27. package/dist/rules/eslint-import-rules.mjs +3 -1
  28. package/dist/rules/eslint-import-rules.mjs.map +1 -1
  29. package/dist/rules/eslint-react-coding-style-rules.d.mts +3 -1
  30. package/dist/rules/eslint-react-coding-style-rules.d.mts.map +1 -1
  31. package/dist/rules/eslint-react-coding-style-rules.mjs +2 -2
  32. package/dist/rules/eslint-react-coding-style-rules.mjs.map +1 -1
  33. package/dist/types/rules/eslint-react-coding-style-rules.d.mts +32 -2
  34. package/dist/types/rules/eslint-react-coding-style-rules.d.mts.map +1 -1
  35. package/package.json +1 -1
  36. package/src/plugins/react-coding-style/rules/ban-use-imperative-handle-hook.mts +4 -4
  37. package/src/plugins/react-coding-style/rules/ban-use-imperative-handle-hook.test.mts +50 -18
  38. package/src/plugins/react-coding-style/rules/component-name.mts +6 -3
  39. package/src/plugins/react-coding-style/rules/import-style.mts +92 -34
  40. package/src/plugins/react-coding-style/rules/import-style.test.mts +81 -34
  41. package/src/plugins/react-coding-style/rules/props-type-annotation-style.mts +2 -2
  42. package/src/plugins/react-coding-style/rules/react-memo-props-argument-name.mts +2 -2
  43. package/src/plugins/react-coding-style/rules/react-memo-type-parameter.mts +2 -2
  44. package/src/plugins/react-coding-style/rules/shared.mts +92 -7
  45. package/src/plugins/react-coding-style/rules/use-memo-hooks-style-named.test.mts +162 -0
  46. package/src/plugins/react-coding-style/rules/use-memo-hooks-style-namespace.test.mts +162 -0
  47. package/src/plugins/react-coding-style/rules/use-memo-hooks-style.mts +68 -3
  48. package/src/rules/eslint-import-rules.mts +4 -1
  49. package/src/rules/eslint-react-coding-style-rules.mts +2 -2
  50. package/src/types/rules/eslint-react-coding-style-rules.mts +36 -2
  51. package/src/plugins/react-coding-style/rules/use-memo-hooks-style.test.mts +0 -72
@@ -1,5 +1,5 @@
1
1
  import { castDeepMutable } from 'ts-data-forge';
2
- import { isReactMemberExpression } from './shared.mjs';
2
+ import { isReactApiCall } from './shared.mjs';
3
3
 
4
4
  const banUseImperativeHandleHook = {
5
5
  meta: {
@@ -13,10 +13,10 @@ const banUseImperativeHandleHook = {
13
13
  },
14
14
  },
15
15
  create: (context) => ({
16
- MemberExpression: (node) => {
17
- if (isReactMemberExpression(node, 'useImperativeHandle')) {
16
+ CallExpression: (node) => {
17
+ if (isReactApiCall(context, node, 'useImperativeHandle')) {
18
18
  context.report({
19
- node: castDeepMutable(node),
19
+ node: castDeepMutable(node.callee),
20
20
  messageId: 'disallowUseImperativeHandle',
21
21
  });
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ban-use-imperative-handle-hook.mjs","sources":["../../../../src/plugins/react-coding-style/rules/ban-use-imperative-handle-hook.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAMO,MAAM,0BAA0B,GAAoC;AACzE,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,+EAA+E;AAClF,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,2BAA2B,EACzB,4EAA4E;AAC/E,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,gBAAgB,EAAE,CAAC,IAA6C,KAAI;AAClE,YAAA,IAAI,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE;gBACxD,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;AAC3B,oBAAA,SAAS,EAAE,6BAA6B;AACzC,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;;;;"}
1
+ {"version":3,"file":"ban-use-imperative-handle-hook.mjs","sources":["../../../../src/plugins/react-coding-style/rules/ban-use-imperative-handle-hook.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAMO,MAAM,0BAA0B,GAAoC;AACzE,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,+EAA+E;AAClF,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,2BAA2B,EACzB,4EAA4E;AAC/E,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAA2C,KAAI;YAC9D,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,qBAAqB,CAAC,EAAE;gBACxD,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,oBAAA,SAAS,EAAE,6BAA6B;AACzC,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"component-name.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/component-name.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzE,KAAK,mBAAmB,GAAG,QAAQ,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,KAAK,OAAO,GAAG,SAAS,CAAC,mBAAmB,CAAC,GAAG,SAAS,EAAE,CAAC;AAE5D,KAAK,UAAU,GAAG,sBAAsB,GAAG,2BAA2B,CAAC;AAcvE,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAqEtE,CAAC"}
1
+ {"version":3,"file":"component-name.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/component-name.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzE,KAAK,mBAAmB,GAAG,QAAQ,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,KAAK,OAAO,GAAG,SAAS,CAAC,mBAAmB,CAAC,GAAG,SAAS,EAAE,CAAC;AAE5D,KAAK,UAAU,GAAG,sBAAsB,GAAG,2BAA2B,CAAC;AAcvE,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAwEtE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
- import { isReactCallExpression } from './shared.mjs';
2
+ import { isReactApiCall } from './shared.mjs';
3
3
 
4
4
  // NOTE:
5
5
  // `const Name = React.memo<Props>((props) => {`
@@ -45,8 +45,10 @@ const componentNameRule = {
45
45
  return {
46
46
  VariableDeclarator: (node) => {
47
47
  if (node.id.type !== AST_NODE_TYPES.Identifier ||
48
- node.init?.type !== AST_NODE_TYPES.CallExpression ||
49
- !isReactCallExpression(node.init, 'memo')) {
48
+ node.init?.type !== AST_NODE_TYPES.CallExpression) {
49
+ return;
50
+ }
51
+ if (!isReactApiCall(context, node.init, 'memo')) {
50
52
  return;
51
53
  }
52
54
  if (node.id.name.length >= maxLength) {
@@ -1 +1 @@
1
- {"version":3,"file":"component-name.mjs","sources":["../../../../src/plugins/react-coding-style/rules/component-name.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,MAAM,iBAAiB,GAA6C;AACzE,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,mFAAmF;AACtF,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,UAAU,EAAE;AACV,oBAAA,SAAS,EAAE;AACT,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,OAAO,EAAE,CAAC;AACX,qBAAA;AACD,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,QAAQ;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,oBAAoB,EAAE,KAAK;AAC5B,aAAA;AACF,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,oBAAoB,EAClB,mLAAmL;AACrL,YAAA,yBAAyB,EACvB,gDAAgD;AACnD,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,KAAI;QAClB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACjC,QAAA,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,EAAE;AACzC,QAAA,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO;QAE/B,OAAO;AACL,YAAA,kBAAkB,EAAE,CAAC,IAAI,KAAI;gBAC3B,IACE,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAC1C,oBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,cAAc,CAAC,cAAc;oBACjD,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EACzC;oBACA;gBACF;gBAEA,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;oBACpC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,IAAI,CAAC,EAAE;AACb,wBAAA,SAAS,EAAE,sBAAsB;AACjC,wBAAA,IAAI,EAAE;AACJ,4BAAA,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;AAChC,yBAAA;AACF,qBAAA,CAAC;oBAEF;gBACF;AAEA,gBAAA,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;oBACxD,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,IAAI,CAAC,EAAE;AACb,wBAAA,SAAS,EAAE,2BAA2B;AACtC,wBAAA,IAAI,EAAE;AACJ,4BAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;AACzB,yBAAA;AACF,qBAAA,CAAC;gBACJ;YACF,CAAC;SACF;IACH,CAAC;AACD,IAAA,cAAc,EAAE,EAAE;;;;;"}
1
+ {"version":3,"file":"component-name.mjs","sources":["../../../../src/plugins/react-coding-style/rules/component-name.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,MAAM,iBAAiB,GAA6C;AACzE,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,mFAAmF;AACtF,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,UAAU,EAAE;AACV,oBAAA,SAAS,EAAE;AACT,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,OAAO,EAAE,CAAC;AACX,qBAAA;AACD,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,QAAQ;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,oBAAoB,EAAE,KAAK;AAC5B,aAAA;AACF,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,oBAAoB,EAClB,mLAAmL;AACrL,YAAA,yBAAyB,EACvB,gDAAgD;AACnD,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,KAAI;QAClB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACjC,QAAA,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,EAAE;AACzC,QAAA,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO;QAE/B,OAAO;AACL,YAAA,kBAAkB,EAAE,CAAC,IAAI,KAAI;gBAC3B,IACE,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;oBAC1C,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,cAAc,CAAC,cAAc,EACjD;oBACA;gBACF;AAEA,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;oBAC/C;gBACF;gBAEA,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;oBACpC,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,IAAI,CAAC,EAAE;AACb,wBAAA,SAAS,EAAE,sBAAsB;AACjC,wBAAA,IAAI,EAAE;AACJ,4BAAA,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;AAChC,yBAAA;AACF,qBAAA,CAAC;oBAEF;gBACF;AAEA,gBAAA,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;oBACxD,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,IAAI,CAAC,EAAE;AACb,wBAAA,SAAS,EAAE,2BAA2B;AACtC,wBAAA,IAAI,EAAE;AACJ,4BAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;AACzB,yBAAA;AACF,qBAAA,CAAC;gBACJ;YACF,CAAC;SACF;IACH,CAAC;AACD,IAAA,cAAc,EAAE,EAAE;;;;;"}
@@ -1,5 +1,11 @@
1
1
  import { type TSESLint } from '@typescript-eslint/utils';
2
- type MessageIds = 'namespaceImportRequired' | 'namespaceNameMustBeReact';
3
- export declare const importStyleRule: TSESLint.RuleModule<MessageIds>;
2
+ type ImportStyle = 'namespace' | 'named';
3
+ type Options = readonly [
4
+ Readonly<{
5
+ importStyle?: ImportStyle;
6
+ }>?
7
+ ];
8
+ type MessageIds = 'namespaceImportRequired' | 'namespaceNameMustBeReact' | 'namedImportRequired';
9
+ export declare const importStyleRule: TSESLint.RuleModule<MessageIds, Options>;
4
10
  export {};
5
11
  //# sourceMappingURL=import-style.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-style.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/import-style.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzE,KAAK,UAAU,GAAG,yBAAyB,GAAG,0BAA0B,CAAC;AAMzE,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CA6C3D,CAAC"}
1
+ {"version":3,"file":"import-style.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/import-style.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzE,KAAK,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;AAEzC,KAAK,OAAO,GAAG,SAAS;IACtB,QAAQ,CAAC;QACP,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,UAAU,GACX,yBAAyB,GACzB,0BAA0B,GAC1B,qBAAqB,CAAC;AAQ1B,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CA0FpE,CAAC"}
@@ -1,43 +1,80 @@
1
1
  import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
 
3
- // NOTE: React の import 方法を `import * as React from 'react'` と namespace import のみに限定するルール。
3
+ // NOTE: React の import 方法を指定するルール。
4
+ // デフォルトは `import * as React from 'react'` と namespace import のみに限定。
4
5
  // import を1回で済ませられて便利なのと、 React.* に対する以降のルールを書きやすくするため。
5
6
  // tree-shaking に悪影響は無い。
7
+ // オプションで named imports `import { useState, useEffect } from 'react'` も許可可能。
6
8
  const importStyleRule = {
7
9
  meta: {
8
10
  type: 'suggestion',
9
11
  docs: {
10
- description: "Enforces importing React with a single namespace import named 'React'.",
12
+ description: 'Enforces importing React with a specific style (namespace or named imports).',
11
13
  },
12
- schema: [],
14
+ schema: [
15
+ {
16
+ type: 'object',
17
+ properties: {
18
+ importStyle: {
19
+ type: 'string',
20
+ enum: ['namespace', 'named'],
21
+ description: 'Import style to enforce: "namespace" for `import * as React` or "named" for `import { ... }`',
22
+ },
23
+ },
24
+ additionalProperties: false,
25
+ },
26
+ ],
13
27
  messages: {
14
28
  namespaceImportRequired: "React should be imported as `import * as React from 'react'`.",
15
29
  namespaceNameMustBeReact: "The namespace name imported from 'react' must be 'React'.",
30
+ namedImportRequired: "React should be imported as named imports like `import { useState } from 'react'`.",
16
31
  },
17
32
  },
18
- create: (context) => ({
19
- ImportDeclaration: (node) => {
20
- if (node.source.value !== 'react') {
21
- return;
22
- }
23
- const [firstSpecifier] = node.specifiers;
24
- if (firstSpecifier === undefined ||
25
- firstSpecifier.type !== AST_NODE_TYPES.ImportNamespaceSpecifier ||
26
- node.specifiers.length !== 1) {
27
- context.report({
28
- node,
29
- messageId: 'namespaceImportRequired',
30
- });
31
- return;
32
- }
33
- if (firstSpecifier.local.name !== 'React') {
34
- context.report({
35
- node: firstSpecifier.local,
36
- messageId: 'namespaceNameMustBeReact',
37
- });
38
- }
39
- },
40
- }),
33
+ create: (context) => {
34
+ const options = context.options[0] ?? {};
35
+ const importStyle = options.importStyle ?? 'namespace';
36
+ return {
37
+ ImportDeclaration: (node) => {
38
+ if (node.source.value !== 'react') {
39
+ return;
40
+ }
41
+ switch (importStyle) {
42
+ case 'named': {
43
+ // Check that all specifiers are named imports
44
+ const hasInvalidSpecifier = node.specifiers.some((spec) => spec.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||
45
+ spec.type === AST_NODE_TYPES.ImportDefaultSpecifier);
46
+ if (hasInvalidSpecifier) {
47
+ context.report({
48
+ node,
49
+ messageId: 'namedImportRequired',
50
+ });
51
+ }
52
+ break;
53
+ }
54
+ case 'namespace': {
55
+ // namespace import mode (default)
56
+ const [firstSpecifier] = node.specifiers;
57
+ if (firstSpecifier === undefined ||
58
+ firstSpecifier.type !== AST_NODE_TYPES.ImportNamespaceSpecifier ||
59
+ node.specifiers.length !== 1) {
60
+ context.report({
61
+ node,
62
+ messageId: 'namespaceImportRequired',
63
+ });
64
+ return;
65
+ }
66
+ if (firstSpecifier.local.name !== 'React') {
67
+ context.report({
68
+ node: firstSpecifier.local,
69
+ messageId: 'namespaceNameMustBeReact',
70
+ });
71
+ }
72
+ break;
73
+ }
74
+ }
75
+ },
76
+ };
77
+ },
41
78
  defaultOptions: [],
42
79
  };
43
80
 
@@ -1 +1 @@
1
- {"version":3,"file":"import-style.mjs","sources":["../../../../src/plugins/react-coding-style/rules/import-style.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;AACA;AACA;AAEO,MAAM,eAAe,GAAoC;AAC9D,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,wEAAwE;AAC3E,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,uBAAuB,EACrB,+DAA+D;AACjE,YAAA,wBAAwB,EACtB,2DAA2D;AAC9D,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,iBAAiB,EAAE,CAAC,IAAI,KAAI;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE;gBACjC;YACF;AAEA,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,UAAU;YAExC,IACE,cAAc,KAAK,SAAS;AAC5B,gBAAA,cAAc,CAAC,IAAI,KAAK,cAAc,CAAC,wBAAwB;AAC/D,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAC5B;gBACA,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;AACJ,oBAAA,SAAS,EAAE,yBAAyB;AACrC,iBAAA,CAAC;gBAEF;YACF;YAEA,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;gBACzC,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,cAAc,CAAC,KAAK;AAC1B,oBAAA,SAAS,EAAE,0BAA0B;AACtC,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;;;;"}
1
+ {"version":3,"file":"import-style.mjs","sources":["../../../../src/plugins/react-coding-style/rules/import-style.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAeA;AACA;AACA;AACA;AACA;AAEO,MAAM,eAAe,GAA6C;AACvE,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,8EAA8E;AACjF,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,UAAU,EAAE;AACV,oBAAA,WAAW,EAAE;AACX,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;AAC5B,wBAAA,WAAW,EACT,8FAA8F;AACjG,qBAAA;AACF,iBAAA;AACD,gBAAA,oBAAoB,EAAE,KAAK;AAC5B,aAAA;AACF,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,uBAAuB,EACrB,+DAA+D;AACjE,YAAA,wBAAwB,EACtB,2DAA2D;AAC7D,YAAA,mBAAmB,EACjB,oFAAoF;AACvF,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,KAAI;QAClB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;AACxC,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,WAAW;QAEtD,OAAO;AACL,YAAA,iBAAiB,EAAE,CAAC,IAAI,KAAI;gBAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE;oBACjC;gBACF;gBAEA,QAAQ,WAAW;oBACjB,KAAK,OAAO,EAAE;;AAEZ,wBAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAC9C,CAAC,IAAI,KACH,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,wBAAwB;AACrD,4BAAA,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,sBAAsB,CACtD;wBAED,IAAI,mBAAmB,EAAE;4BACvB,OAAO,CAAC,MAAM,CAAC;gCACb,IAAI;AACJ,gCAAA,SAAS,EAAE,qBAAqB;AACjC,6BAAA,CAAC;wBACJ;wBAEA;oBACF;oBAEA,KAAK,WAAW,EAAE;;AAEhB,wBAAA,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,UAAU;wBAExC,IACE,cAAc,KAAK,SAAS;AAC5B,4BAAA,cAAc,CAAC,IAAI,KAAK,cAAc,CAAC,wBAAwB;AAC/D,4BAAA,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAC5B;4BACA,OAAO,CAAC,MAAM,CAAC;gCACb,IAAI;AACJ,gCAAA,SAAS,EAAE,yBAAyB;AACrC,6BAAA,CAAC;4BAEF;wBACF;wBAEA,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;4BACzC,OAAO,CAAC,MAAM,CAAC;gCACb,IAAI,EAAE,cAAc,CAAC,KAAK;AAC1B,gCAAA,SAAS,EAAE,0BAA0B;AACtC,6BAAA,CAAC;wBACJ;wBAEA;oBACF;;YAEJ,CAAC;SACF;IACH,CAAC;AACD,IAAA,cAAc,EAAE,EAAE;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
  import { castDeepMutable } from 'ts-data-forge';
3
- import { isReactCallExpression, getReactMemoArrowFunction } from './shared.mjs';
3
+ import { isReactApiCall, getReactMemoArrowFunction } from './shared.mjs';
4
4
 
5
5
  // 前提: Arrow function の使用が強制されていること。
6
6
  const propsTypeAnnotationStyleRule = {
@@ -16,7 +16,7 @@ const propsTypeAnnotationStyleRule = {
16
16
  },
17
17
  create: (context) => ({
18
18
  CallExpression: (node) => {
19
- if (!isReactCallExpression(node, 'memo')) {
19
+ if (!isReactApiCall(context, node, 'memo')) {
20
20
  return;
21
21
  }
22
22
  const arrowFunction = getReactMemoArrowFunction(node);
@@ -1 +1 @@
1
- {"version":3,"file":"props-type-annotation-style.mjs","sources":["../../../../src/plugins/react-coding-style/rules/props-type-annotation-style.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA;AAEO,MAAM,4BAA4B,GAAoC;AAC3E,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,+EAA+E;AAClF,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,2BAA2B,EACzB,+FAA+F;AAClG,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAA2C,KAAI;YAC9D,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBACxC;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC;YAErD,IACE,aAAa,KAAK,SAAS;gBAC3B,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc,EACzD;gBACA;YACF;AAEA,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,MAAM;YAEzC,IACE,UAAU,KAAK,SAAS;AACxB,gBAAA,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,EAC7C;gBACA;YACF;AAEA,YAAA,IAAI,UAAU,CAAC,cAAc,KAAK,SAAS,EAAE;gBAC3C,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC;AAChD,oBAAA,SAAS,EAAE,6BAA6B;AACzC,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;;;;"}
1
+ {"version":3,"file":"props-type-annotation-style.mjs","sources":["../../../../src/plugins/react-coding-style/rules/props-type-annotation-style.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA;AAEO,MAAM,4BAA4B,GAAoC;AAC3E,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,+EAA+E;AAClF,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,2BAA2B,EACzB,+FAA+F;AAClG,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAA2C,KAAI;YAC9D,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;gBAC1C;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC;YAErD,IACE,aAAa,KAAK,SAAS;gBAC3B,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc,EACzD;gBACA;YACF;AAEA,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,MAAM;YAEzC,IACE,UAAU,KAAK,SAAS;AACxB,gBAAA,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,EAC7C;gBACA;YACF;AAEA,YAAA,IAAI,UAAU,CAAC,cAAc,KAAK,SAAS,EAAE;gBAC3C,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC;AAChD,oBAAA,SAAS,EAAE,6BAA6B;AACzC,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
  import { castDeepMutable } from 'ts-data-forge';
3
- import { isReactCallExpression, getReactMemoArrowFunction } from './shared.mjs';
3
+ import { isReactApiCall, getReactMemoArrowFunction } from './shared.mjs';
4
4
 
5
5
  // NOTE: component props を "props" という名前に限定する。
6
6
  // return 文を含む component の props を "props" という名前の変数に限定する。
@@ -19,7 +19,7 @@ const reactMemoPropsArgumentNameRule = {
19
19
  },
20
20
  create: (context) => ({
21
21
  CallExpression: (node) => {
22
- if (!isReactCallExpression(node, 'memo')) {
22
+ if (!isReactApiCall(context, node, 'memo')) {
23
23
  return;
24
24
  }
25
25
  const arrowFunction = getReactMemoArrowFunction(node);
@@ -1 +1 @@
1
- {"version":3,"file":"react-memo-props-argument-name.mjs","sources":["../../../../src/plugins/react-coding-style/rules/react-memo-props-argument-name.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA;AACA;AACA;AAEO,MAAM,8BAA8B,GAAoC;AAC7E,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,0FAA0F;AAC7F,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,0BAA0B,EACxB,iFAAiF;AACnF,YAAA,0BAA0B,EACxB,iGAAiG;AACpG,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAA2C,KAAI;YAC9D,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBACxC;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC;;YAGrD,IACE,aAAa,KAAK,SAAS;gBAC3B,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc,EACzD;gBACA;YACF;AAEA,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,MAAM;AAEzC,YAAA,IAAI,UAAU,KAAK,SAAS,EAAE;gBAC5B;YACF;YAEA,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,EAAE;;AAEjD,gBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;oBAC/B,OAAO,CAAC,MAAM,CAAC;AACb,wBAAA,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC;AACjC,wBAAA,SAAS,EAAE,4BAA4B;AACxC,qBAAA,CAAC;gBACJ;gBAEA;YACF;YAEA,OAAO,CAAC,MAAM,CAAC;AACb,gBAAA,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC;AACjC,gBAAA,SAAS,EAAE,4BAA4B;AACxC,aAAA,CAAC;QACJ,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;;;;"}
1
+ {"version":3,"file":"react-memo-props-argument-name.mjs","sources":["../../../../src/plugins/react-coding-style/rules/react-memo-props-argument-name.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA;AACA;AACA;AAEO,MAAM,8BAA8B,GAAoC;AAC7E,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,0FAA0F;AAC7F,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,0BAA0B,EACxB,iFAAiF;AACnF,YAAA,0BAA0B,EACxB,iGAAiG;AACpG,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAA2C,KAAI;YAC9D,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;gBAC1C;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC;;YAGrD,IACE,aAAa,KAAK,SAAS;gBAC3B,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc,EACzD;gBACA;YACF;AAEA,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,MAAM;AAEzC,YAAA,IAAI,UAAU,KAAK,SAAS,EAAE;gBAC5B;YACF;YAEA,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,EAAE;;AAEjD,gBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;oBAC/B,OAAO,CAAC,MAAM,CAAC;AACb,wBAAA,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC;AACjC,wBAAA,SAAS,EAAE,4BAA4B;AACxC,qBAAA,CAAC;gBACJ;gBAEA;YACF;YAEA,OAAO,CAAC,MAAM,CAAC;AACb,gBAAA,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC;AACjC,gBAAA,SAAS,EAAE,4BAA4B;AACxC,aAAA,CAAC;QACJ,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
  import { castDeepMutable } from 'ts-data-forge';
3
- import { isReactCallExpression, getReactMemoArrowFunction } from './shared.mjs';
3
+ import { isReactApiCall, getReactMemoArrowFunction } from './shared.mjs';
4
4
 
5
5
  // NOTE: React.memo の型引数を `Props` に限定する。
6
6
  // これは 1ファイル1コンポーネントの強制も意味する。
@@ -19,7 +19,7 @@ const reactMemoTypeParameterRule = {
19
19
  },
20
20
  create: (context) => ({
21
21
  CallExpression: (node) => {
22
- if (!isReactCallExpression(node, 'memo')) {
22
+ if (!isReactApiCall(context, node, 'memo')) {
23
23
  return;
24
24
  }
25
25
  const arrowFunction = getReactMemoArrowFunction(node);
@@ -1 +1 @@
1
- {"version":3,"file":"react-memo-type-parameter.mjs","sources":["../../../../src/plugins/react-coding-style/rules/react-memo-type-parameter.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAYA;AACA;AACA;AAEO,MAAM,0BAA0B,GAAoC;AACzE,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,+DAA+D;AAClE,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,yBAAyB,EACvB,gDAAgD;AAClD,YAAA,+BAA+B,EAC7B,qFAAqF;AACxF,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAA2C,KAAI;YAC9D,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBACxC;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC;AACrD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;;AAGxC,YAAA,IAAI,aAAa,KAAK,SAAS,EAAE;gBAC/B,IAAI,aAAa,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBACtC;gBACF;gBAEA,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,oBAAA,SAAS,EAAE,2BAA2B;AACvC,iBAAA,CAAC;gBAEF;YACF;YAEA,IAAI,aAAa,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC;AACpC,oBAAA,SAAS,EAAE,iCAAiC;AAC7C,iBAAA,CAAC;gBAEF;YACF;YAEA,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrC,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC;AACpC,oBAAA,SAAS,EAAE,2BAA2B;AACvC,iBAAA,CAAC;gBAEF;YACF;AAEA,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,aAAa,CAAC,MAAM;AAE7C,YAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE;AACzC,gBAAA,MAAM,YAAY,GAAG,cAAc,IAAI,IAAI,CAAC,MAAM;gBAElD,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,YAAY,CAAC;AACnC,oBAAA,SAAS,EAAE,2BAA2B;AACvC,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;AAGpB,MAAM,oBAAoB,GAAG,CAC3B,IAAiD,KACtC;AACX,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,QAAA,OAAO,KAAK;IACd;;IAGA,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe,EAAE;AAChD,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;;AAG9B,IAAA,QACE,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;AAE5E,CAAC;;;;"}
1
+ {"version":3,"file":"react-memo-type-parameter.mjs","sources":["../../../../src/plugins/react-coding-style/rules/react-memo-type-parameter.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAYA;AACA;AACA;AAEO,MAAM,0BAA0B,GAAoC;AACzE,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,+DAA+D;AAClE,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,yBAAyB,EACvB,gDAAgD;AAClD,YAAA,+BAA+B,EAC7B,qFAAqF;AACxF,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAA2C,KAAI;YAC9D,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;gBAC1C;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC;AACrD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;;AAGxC,YAAA,IAAI,aAAa,KAAK,SAAS,EAAE;gBAC/B,IAAI,aAAa,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBACtC;gBACF;gBAEA,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,oBAAA,SAAS,EAAE,2BAA2B;AACvC,iBAAA,CAAC;gBAEF;YACF;YAEA,IAAI,aAAa,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC;AACpC,oBAAA,SAAS,EAAE,iCAAiC;AAC7C,iBAAA,CAAC;gBAEF;YACF;YAEA,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrC,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC;AACpC,oBAAA,SAAS,EAAE,2BAA2B;AACvC,iBAAA,CAAC;gBAEF;YACF;AAEA,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,aAAa,CAAC,MAAM;AAE7C,YAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE;AACzC,gBAAA,MAAM,YAAY,GAAG,cAAc,IAAI,IAAI,CAAC,MAAM;gBAElD,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,YAAY,CAAC;AACnC,oBAAA,SAAS,EAAE,2BAA2B;AACvC,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;AAGpB,MAAM,oBAAoB,GAAG,CAC3B,IAAiD,KACtC;AACX,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,QAAA,OAAO,KAAK;IACd;;IAGA,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe,EAAE;AAChD,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;;AAG9B,IAAA,QACE,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;AAE5E,CAAC;;;;"}
@@ -4,7 +4,9 @@ export declare const reactCodingStyleRules: {
4
4
  pattern?: RegExp;
5
5
  }>], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
6
6
  readonly 'component-var-type-annotation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"disallowReactFunctionalComponentTypes", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
7
- readonly 'import-style': import("@typescript-eslint/utils/ts-eslint").RuleModule<"namespaceImportRequired" | "namespaceNameMustBeReact", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
7
+ readonly 'import-style': import("@typescript-eslint/utils/ts-eslint").RuleModule<"namespaceImportRequired" | "namespaceNameMustBeReact" | "namedImportRequired", readonly [(Readonly<{
8
+ importStyle?: "named" | "namespace";
9
+ }> | undefined)?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
8
10
  readonly 'props-type-annotation-style': import("@typescript-eslint/utils/ts-eslint").RuleModule<"disallowPropsTypeAnnotation", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
9
11
  readonly 'react-memo-props-argument-name': import("@typescript-eslint/utils/ts-eslint").RuleModule<"propsParamMustBeNamedProps" | "propsParamMustBeIdentifier", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
10
12
  readonly 'react-memo-type-parameter': import("@typescript-eslint/utils/ts-eslint").RuleModule<"requirePropsTypeParameter" | "omitTypeParameterWhenPropsEmpty", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/rules.mts"],"names":[],"mappings":"AAUA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;CASQ,CAAC"}
1
+ {"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/rules.mts"],"names":[],"mappings":"AAUA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;CASQ,CAAC"}
@@ -1,5 +1,9 @@
1
- import { type TSESTree } from '@typescript-eslint/utils';
2
- export declare const isReactMemberExpression: (node: DeepReadonly<TSESTree.MemberExpression>, propertyName: string) => boolean;
3
- export declare const isReactCallExpression: (node: DeepReadonly<TSESTree.CallExpression>, propertyName: string) => boolean;
1
+ import { type TSESLint, type TSESTree } from '@typescript-eslint/utils';
2
+ /**
3
+ * Check if the given CallExpression is a React API call.
4
+ * Supports both namespace imports (React.memo) and named imports (memo).
5
+ * Verifies that the identifier is actually imported from "react".
6
+ */
7
+ export declare const isReactApiCall: (context: DeepReadonly<TSESLint.RuleContext<string, readonly unknown[]>>, node: DeepReadonly<TSESTree.CallExpression>, apiName: string) => boolean;
4
8
  export declare const getReactMemoArrowFunction: (node: DeepReadonly<TSESTree.CallExpression>) => DeepReadonly<TSESTree.ArrowFunctionExpression> | undefined;
5
9
  //# sourceMappingURL=shared.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/shared.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzE,eAAO,MAAM,uBAAuB,GAClC,MAAM,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAC7C,cAAc,MAAM,KACnB,OAKa,CAAC;AAEjB,eAAO,MAAM,qBAAqB,GAChC,MAAM,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC3C,cAAc,MAAM,KACnB,OAEiD,CAAC;AAErD,eAAO,MAAM,yBAAyB,GACpC,MAAM,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,KAC1C,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,SAYnD,CAAC"}
1
+ {"version":3,"file":"shared.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/shared.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAuElC;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,SAAS,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,EACvE,MAAM,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC3C,SAAS,MAAM,KACd,OAkBF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,MAAM,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,KAC1C,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,SAYnD,CAAC"}
@@ -5,8 +5,66 @@ const isReactMemberExpression = (node, propertyName) => node.object.type === AST
5
5
  node.property.type === AST_NODE_TYPES.Identifier &&
6
6
  node.property.name === propertyName &&
7
7
  !node.computed;
8
- const isReactCallExpression = (node, propertyName) => node.callee.type === AST_NODE_TYPES.MemberExpression &&
9
- isReactMemberExpression(node.callee, propertyName);
8
+ /**
9
+ * Check if the given identifier is imported from "react"
10
+ */
11
+ const isImportedFromReact = (context, identifierName) => {
12
+ const sourceCode = context.sourceCode;
13
+ // Get the global scope to search for imports
14
+ const globalScope = sourceCode.scopeManager?.globalScope ?? undefined;
15
+ if (globalScope === undefined) {
16
+ // If no scope manager, assume it's React (for backward compatibility)
17
+ return true;
18
+ }
19
+ // Search through all scopes for the variable
20
+ const scopes = [globalScope, ...globalScope.childScopes];
21
+ const variables = scopes
22
+ .map((scope) => scope.set.get(identifierName))
23
+ .filter((v) => v !== undefined);
24
+ if (variables.length === 0) {
25
+ // If variable is not found in any scope, assume it's a global (React)
26
+ // This handles cases where React is used without explicit import
27
+ return true;
28
+ }
29
+ // Check if any variable is imported from 'react'
30
+ for (const variable of variables) {
31
+ for (const def of variable.defs) {
32
+ // Type narrowing: def.type is a string literal type, not enum
33
+ if (Object.hasOwn(def, 'type') &&
34
+ typeof def.type === 'string' &&
35
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
36
+ def.type === 'ImportBinding') {
37
+ const importDeclaration = def.parent;
38
+ if (importDeclaration.type === AST_NODE_TYPES.ImportDeclaration &&
39
+ importDeclaration.source.value === 'react') {
40
+ return true;
41
+ }
42
+ // Found an import, but not from 'react'
43
+ return false;
44
+ }
45
+ }
46
+ }
47
+ // Variable was found but not as an import, it's a local definition
48
+ return false;
49
+ };
50
+ /**
51
+ * Check if the given CallExpression is a React API call.
52
+ * Supports both namespace imports (React.memo) and named imports (memo).
53
+ * Verifies that the identifier is actually imported from "react".
54
+ */
55
+ const isReactApiCall = (context, node, apiName) => {
56
+ // Check for named import: memo(...)
57
+ if (node.callee.type === AST_NODE_TYPES.Identifier &&
58
+ node.callee.name === apiName) {
59
+ return isImportedFromReact(context, apiName);
60
+ }
61
+ // Check for namespace import: React.memo(...)
62
+ if (node.callee.type === AST_NODE_TYPES.MemberExpression &&
63
+ isReactMemberExpression(node.callee, apiName)) {
64
+ return isImportedFromReact(context, 'React');
65
+ }
66
+ return false;
67
+ };
10
68
  const getReactMemoArrowFunction = (node) => {
11
69
  const [firstArgument] = node.arguments;
12
70
  if (firstArgument === undefined) {
@@ -18,5 +76,5 @@ const getReactMemoArrowFunction = (node) => {
18
76
  return firstArgument;
19
77
  };
20
78
 
21
- export { getReactMemoArrowFunction, isReactCallExpression, isReactMemberExpression };
79
+ export { getReactMemoArrowFunction, isReactApiCall };
22
80
  //# sourceMappingURL=shared.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.mjs","sources":["../../../../src/plugins/react-coding-style/rules/shared.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAEO,MAAM,uBAAuB,GAAG,CACrC,IAA6C,EAC7C,YAAoB,KAEpB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAC9C,IAAA,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;AAC5B,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAChD,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;IACnC,CAAC,IAAI,CAAC;AAED,MAAM,qBAAqB,GAAG,CACnC,IAA2C,EAC3C,YAAoB,KAEpB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB;AACpD,IAAA,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY;AAE5C,MAAM,yBAAyB,GAAG,CACvC,IAA2C,KACmB;AAC9D,IAAA,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,SAAS;AAEtC,IAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,QAAA,OAAO,SAAS;IAClB;IAEA,IAAI,aAAa,CAAC,IAAI,KAAK,cAAc,CAAC,uBAAuB,EAAE;AACjE,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,OAAO,aAAa;AACtB;;;;"}
1
+ {"version":3,"file":"shared.mjs","sources":["../../../../src/plugins/react-coding-style/rules/shared.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAMA,MAAM,uBAAuB,GAAG,CAC9B,IAA6C,EAC7C,YAAoB,KAEpB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAC9C,IAAA,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;AAC5B,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAChD,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;IACnC,CAAC,IAAI,CAAC,QAAQ;AAEhB;;AAEG;AACH,MAAM,mBAAmB,GAAG,CAC1B,OAAuE,EACvE,cAAsB,KACX;AACX,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;;IAGrC,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,EAAE,WAAW,IAAI,SAAS;AAErE,IAAA,IAAI,WAAW,KAAK,SAAS,EAAE;;AAE7B,QAAA,OAAO,IAAI;IACb;;IAGA,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC;IAExD,MAAM,SAAS,GAAG;AACf,SAAA,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;SAC5C,MAAM,CAAC,CAAC,CAAC,KAAiC,CAAC,KAAK,SAAS,CAAC;AAE7D,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;;;AAG1B,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,QAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE;;AAE/B,YAAA,IACE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;AAC1B,gBAAA,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;;AAE5B,gBAAA,GAAG,CAAC,IAAI,KAAK,eAAe,EAC5B;AACA,gBAAA,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM;AAEpC,gBAAA,IACE,iBAAiB,CAAC,IAAI,KAAK,cAAc,CAAC,iBAAiB;AAC3D,oBAAA,iBAAiB,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,EAC1C;AACA,oBAAA,OAAO,IAAI;gBACb;;AAGA,gBAAA,OAAO,KAAK;YACd;QACF;IACF;;AAGA,IAAA,OAAO,KAAK;AACd,CAAC;AAED;;;;AAIG;AACI,MAAM,cAAc,GAAG,CAC5B,OAAuE,EACvE,IAA2C,EAC3C,OAAe,KACJ;;IAEX,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAC9C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAC5B;AACA,QAAA,OAAO,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9C;;IAGA,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB;QACpD,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C;AACA,QAAA,OAAO,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9C;AAEA,IAAA,OAAO,KAAK;AACd;AAEO,MAAM,yBAAyB,GAAG,CACvC,IAA2C,KACmB;AAC9D,IAAA,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,SAAS;AAEtC,IAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,QAAA,OAAO,SAAS;IAClB;IAEA,IAAI,aAAa,CAAC,IAAI,KAAK,cAAc,CAAC,uBAAuB,EAAE;AACjE,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,OAAO,aAAa;AACtB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-memo-hooks-style.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/use-memo-hooks-style.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAIlC,KAAK,UAAU,GAAG,+BAA+B,CAAC;AAElD,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAyCjE,CAAC"}
1
+ {"version":3,"file":"use-memo-hooks-style.d.mts","sourceRoot":"","sources":["../../../../src/plugins/react-coding-style/rules/use-memo-hooks-style.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAIlC,KAAK,UAAU,GAAG,+BAA+B,CAAC;AAElD,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAwDjE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
- import { castDeepMutable } from 'ts-data-forge';
3
- import { isReactCallExpression } from './shared.mjs';
2
+ import { castDeepMutable, hasKey } from 'ts-data-forge';
3
+ import { isReactApiCall } from './shared.mjs';
4
4
 
5
5
  const useMemoHooksStyleRule = {
6
6
  meta: {
@@ -15,7 +15,7 @@ const useMemoHooksStyleRule = {
15
15
  },
16
16
  create: (context) => ({
17
17
  CallExpression: (node) => {
18
- if (!isReactCallExpression(node, 'useMemo')) {
18
+ if (!isReactApiCall(context, node, 'useMemo')) {
19
19
  return;
20
20
  }
21
21
  const parent = node.parent;
@@ -33,10 +33,52 @@ const useMemoHooksStyleRule = {
33
33
  messageId: 'disallowUseMemoTypeAnnotation',
34
34
  });
35
35
  }
36
+ const [firstArg] = node.arguments;
37
+ if (firstArg?.type === AST_NODE_TYPES.ArrowFunctionExpression) {
38
+ const { returnType, body } = firstArg;
39
+ if (returnType !== undefined) {
40
+ context.report({
41
+ node: castDeepMutable(returnType),
42
+ messageId: 'disallowUseMemoTypeAnnotation',
43
+ });
44
+ }
45
+ checkNodeForTypeAnnotations(context, body);
46
+ }
36
47
  },
37
48
  }),
38
49
  defaultOptions: [],
39
50
  };
51
+ const checkNodeForTypeAnnotations = (context, node) => {
52
+ if (node.type === AST_NODE_TYPES.TSAsExpression ||
53
+ node.type === AST_NODE_TYPES.TSTypeAssertion ||
54
+ node.type === AST_NODE_TYPES.TSSatisfiesExpression) {
55
+ context.report({
56
+ node: castDeepMutable(node),
57
+ messageId: 'disallowUseMemoTypeAnnotation',
58
+ });
59
+ return;
60
+ }
61
+ if (hasKey(node, 'body')) {
62
+ const nodeWithBody = node;
63
+ if (nodeWithBody.body !== undefined && nodeWithBody.body !== null) {
64
+ checkNodeForTypeAnnotations(context,
65
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
66
+ nodeWithBody.body);
67
+ }
68
+ }
69
+ if (hasKey(node, 'expression')) {
70
+ const nodeWithExpression = node;
71
+ checkNodeForTypeAnnotations(context,
72
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
73
+ nodeWithExpression.expression);
74
+ }
75
+ if (hasKey(node, 'argument')) {
76
+ const nodeWithArgument = node;
77
+ checkNodeForTypeAnnotations(context,
78
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
79
+ nodeWithArgument.argument);
80
+ }
81
+ };
40
82
 
41
83
  export { useMemoHooksStyleRule };
42
84
  //# sourceMappingURL=use-memo-hooks-style.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-memo-hooks-style.mjs","sources":["../../../../src/plugins/react-coding-style/rules/use-memo-hooks-style.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUO,MAAM,qBAAqB,GAAoC;AACpE,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,oEAAoE;AACvE,SAAA;AACD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,6BAA6B,EAC3B,qGAAqG;AACxG,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAA2C,KAAI;YAC9D,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;gBAC3C;YACF;AAEA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAE1B,YAAA,IACE,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc;AAC7C,gBAAA,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;AAC9C,gBAAA,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,qBAAqB,EACpD;gBACA,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC;AAC7B,oBAAA,SAAS,EAAE,+BAA+B;AAC3C,iBAAA,CAAC;YACJ;YAEA,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB,EAAE;gBACnD,OAAO,CAAC,MAAM,CAAC;AACb,oBAAA,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC;AAC7B,oBAAA,SAAS,EAAE,+BAA+B;AAC3C,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;AACF,IAAA,cAAc,EAAE,EAAE;;;;;"}
1
+ {"version":3,"file":"use-memo-hooks-style.mjs","sources":["../../../../src/plugins/react-coding-style/rules/use-memo-hooks-style.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -60,9 +60,7 @@ export declare const eslintImportsRules: {
60
60
  readonly 'import-x/dynamic-import-chunkname': "off";
61
61
  readonly 'import-x/no-empty-named-blocks': "error";
62
62
  readonly 'import-x/no-rename-default': 2 | 1;
63
- readonly 'import-x/prefer-namespace-import': readonly ["error", {
64
- readonly patterns: readonly ["react"];
65
- }];
63
+ readonly 'import-x/prefer-namespace-import': "off";
66
64
  readonly 'import-x/imports-first': 0;
67
65
  };
68
66
  //# sourceMappingURL=eslint-import-rules.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-import-rules.d.mts","sourceRoot":"","sources":["../../src/rules/eslint-import-rules.mts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiH7B;;;OAGG;;;;;;;;;;;;CAmBkC,CAAC"}
1
+ {"version":3,"file":"eslint-import-rules.d.mts","sourceRoot":"","sources":["../../src/rules/eslint-import-rules.mts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiH7B;;;OAGG;;;;;;;;;;CAsBkC,CAAC"}
@@ -114,7 +114,9 @@ const eslintImportsRules = {
114
114
  // Covered by unicorn/prefer-node-protocol
115
115
  // 'import/enforce-node-protocol-usage': ['error', 'always'],
116
116
  'import-x/no-rename-default': withDefaultOption('error'),
117
- 'import-x/prefer-namespace-import': ['error', { patterns: ['react'] }],
117
+ // Covered by react-coding-style/import-style
118
+ 'import-x/prefer-namespace-import': 'off',
119
+ // 'import-x/prefer-namespace-import': ['error', { patterns: ['react'] }],
118
120
  // deprecated rules
119
121
  'import-x/imports-first': 0,
120
122
  };
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-import-rules.mjs","sources":["../../src/rules/eslint-import-rules.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eslint-import-rules.mjs","sources":["../../src/rules/eslint-import-rules.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  export declare const eslintReactCodingStyleRules: {
2
- readonly 'react-coding-style/import-style': "off";
2
+ readonly 'react-coding-style/import-style': readonly ["error", {
3
+ readonly importStyle: "namespace";
4
+ }];
3
5
  readonly 'react-coding-style/component-name': readonly ["error", {
4
6
  readonly maxLength: 42;
5
7
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-react-coding-style-rules.d.mts","sourceRoot":"","sources":["../../src/rules/eslint-react-coding-style-rules.mts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B;;;;;;;;;;;CAWQ,CAAC"}
1
+ {"version":3,"file":"eslint-react-coding-style-rules.d.mts","sourceRoot":"","sources":["../../src/rules/eslint-react-coding-style-rules.mts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;CAWQ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  const eslintReactCodingStyleRules = {
2
- // Covered by import-x/prefer-namespace-import
3
- 'react-coding-style/import-style': 'off',
2
+ // import-x/prefer-namespace-import checks similar things, but this rule enforces more strict style.
3
+ 'react-coding-style/import-style': ['error', { importStyle: 'namespace' }],
4
4
  'react-coding-style/component-name': ['error', { maxLength: 42 }],
5
5
  'react-coding-style/component-var-type-annotation': 'error',
6
6
  'react-coding-style/props-type-annotation-style': 'error',
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-react-coding-style-rules.mjs","sources":["../../src/rules/eslint-react-coding-style-rules.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,2BAA2B,GAAG;;AAEzC,IAAA,iCAAiC,EAAE,KAAK;IAExC,mCAAmC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACjE,IAAA,kDAAkD,EAAE,OAAO;AAC3D,IAAA,gDAAgD,EAAE,OAAO;AACzD,IAAA,mDAAmD,EAAE,OAAO;AAC5D,IAAA,8CAA8C,EAAE,OAAO;AACvD,IAAA,mDAAmD,EAAE,OAAO;AAC5D,IAAA,wCAAwC,EAAE,OAAO;;;;;"}
1
+ {"version":3,"file":"eslint-react-coding-style-rules.mjs","sources":["../../src/rules/eslint-react-coding-style-rules.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,2BAA2B,GAAG;;IAEzC,iCAAiC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IAE1E,mCAAmC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACjE,IAAA,kDAAkD,EAAE,OAAO;AAC3D,IAAA,gDAAgD,EAAE,OAAO;AACzD,IAAA,mDAAmD,EAAE,OAAO;AAC5D,IAAA,8CAA8C,EAAE,OAAO;AACvD,IAAA,mDAAmD,EAAE,OAAO;AAC5D,IAAA,wCAAwC,EAAE,OAAO;;;;;"}