{"version":3,"sources":["../../src/index.ts","../../package.json","../../src/rules/no-component-memo/no-component-memo.rule.ts","../../src/utils/get-docs-url.js","../../src/utils/detect-react-imports.ts","../../src/rules/no-custom-memo-hook/no-custom-memo-hook.rule.ts","../../src/utils/detect-memo-only-hooks.ts","../../src/rules/no-hook-memo/no-hook-memo.rule.ts","../../src/utils/ast-utils.ts","../../src/rules.ts","../../src/namespace.ts"],"sourcesContent":["import packageJson from '../package.json';\nimport { rules } from './rules';\nimport { namespace } from './namespace';\nimport type { ESLint, Linter } from 'eslint';\nimport type { ESLintUtils } from '@typescript-eslint/utils';\nimport type { ExtraRuleDocs } from './types';\n\nexport interface Plugin extends Omit<ESLint.Plugin, 'rules'> {\n\trules: Record<string, ESLintUtils.RuleModule<\n\t\tstring,\n\t\tReadonlyArray<unknown>,\n\t\tExtraRuleDocs,\n\t\tESLintUtils.RuleListener\n\t>>;\n\tconfigs: {\n\t\trecommended: ESLint.ConfigData;\n\t\tall: ESLint.ConfigData;\n\t\t'flat/recommended': Array<Linter.Config>;\n\t\t'flat/all': Array<Linter.Config>;\n\t};\n}\n\nexport const plugin = {\n\tmeta: {\n\t\tname: packageJson.name,\n\t\tversion: packageJson.version,\n\t\tnamespace,\n\t},\n\tconfigs: {\n\t\trecommended: {\n\t\t\tplugins: [namespace],\n\t\t\trules: {\n\t\t\t\t[`${namespace}/no-hook-memo`]: 'error',\n\t\t\t\t[`${namespace}/no-component-memo`]: 'error',\n\t\t\t\t[`${namespace}/no-custom-memo-hook`]: 'warn',\n\t\t\t},\n\t\t},\n\t\tall: {\n\t\t\tplugins: [namespace],\n\t\t\trules: {\n\t\t\t\t[`${namespace}/no-hook-memo`]: 'error',\n\t\t\t\t[`${namespace}/no-component-memo`]: 'error',\n\t\t\t\t[`${namespace}/no-custom-memo-hook`]: 'error',\n\t\t\t},\n\t\t},\n\t\t'flat/recommended': [\n\t\t\t{\n\t\t\t\tname: `${namespace}/flat/recommended`,\n\t\t\t\tplugins: {\n\t\t\t\t\t[namespace]: {}, // circular ref; assigned after the plugin object is initially created\n\t\t\t\t},\n\t\t\t\trules: {\n\t\t\t\t\t[`${namespace}/no-hook-memo`]: 'error',\n\t\t\t\t\t[`${namespace}/no-component-memo`]: 'error',\n\t\t\t\t\t[`${namespace}/no-custom-memo-hook`]: 'warn',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\t'flat/all': [\n\t\t\t{\n\t\t\t\tname: `${namespace}/flat/all`,\n\t\t\t\tplugins: {\n\t\t\t\t\t[namespace]: {}, // circular ref; assigned after the plugin object is initially created\n\t\t\t\t},\n\t\t\t\trules: {\n\t\t\t\t\t[`${namespace}/no-hook-memo`]: 'error',\n\t\t\t\t\t[`${namespace}/no-component-memo`]: 'error',\n\t\t\t\t\t[`${namespace}/no-custom-memo-hook`]: 'error',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\trules: rules,\n} satisfies Plugin;\n\nplugin.configs['flat/recommended'][0]!.plugins[namespace] = plugin;\nplugin.configs['flat/all'][0]!.plugins[namespace] = plugin;\n\nexport default plugin;\n","{\n  \"name\": \"eslint-plugin-react-no-manual-memo\",\n  \"version\": \"1.0.4\",\n  \"description\": \"ESLint plugin for React Compiler users to flag manual memoization (useMemo, useCallback, React.memo), reminding you to let the compiler do its thing ✨\",\n  \"author\": \"BellCube\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/BellCubeDev/eslint-plugin-react-no-manual-memo.git\"\n  },\n  \"keywords\": [\n    \"react\",\n    \"compiler\",\n    \"react-compiler\",\n    \"eslint\",\n    \"plugin\",\n    \"linting\",\n    \"memoization\",\n    \"memo\",\n    \"React.memo\",\n    \"hooks\",\n    \"react-hooks\",\n    \"useMemo\",\n    \"useCallback\",\n    \"optimization\",\n    \"performance\",\n    \"refactoring\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/BellCubeDev/eslint-plugin-react-no-manual-memo/issues\"\n  },\n  \"type\": \"module\",\n  \"files\": [\n    \"build\",\n    \"src\",\n    \"!src/__tests__\"\n  ],\n  \"types\": \"build/legacy/index.d.ts\",\n  \"main\": \"build/legacy/index.cjs\",\n  \"module\": \"build/legacy/index.js\",\n  \"react-native\": \"src/index.ts\",\n  \"exports\": {\n    \".\": {\n      \"@tanstack/custom-condition\": \"./src/index.ts\",\n      \"import\": {\n        \"types\": \"./build/modern/index.d.ts\",\n        \"default\": \"./build/modern/index.js\"\n      },\n      \"require\": {\n        \"types\": \"./build/modern/index.d.cts\",\n        \"default\": \"./build/modern/index.cjs\"\n      }\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"sideEffects\": false,\n  \"peerDependencies\": {\n    \"eslint\": \"^8.57.0 || ^9.0.0\"\n  },\n  \"packageManager\": \"pnpm@10.18.0+sha512.e804f889f1cecc40d572db084eec3e4881739f8dec69c0ff10d2d1beff9a4e309383ba27b5b750059d7f4c149535b6cd0d2cb1ed3aeb739239a4284a68f40cfa\",\n  \"scripts\": {\n    \"test\": \"pnpm run /^test:[^:]+$/\",\n    \"clean\": \"premove ./dist ./coverage ./dist-ts\",\n    \"compile\": \"tsc --build\",\n    \"test:eslint\": \"eslint --concurrency=auto ./src\",\n    \"test:types\": \"tsc --build\",\n    \"test:lib\": \"vitest\",\n    \"test:lib:dev\": \"pnpm run test:lib --watch\",\n    \"test:build\": \"pnpm run build && publint --strict && attw --pack\",\n    \"build\": \"tsup --tsconfig tsconfig.prod.json\",\n    \"docgen\": \"pnpm run build && eslint-doc-generator\",\n    \"docgen:check\": \"pnpm run docgen --check\"\n  },\n  \"dependencies\": {\n    \"@typescript-eslint/utils\": \"^8.45.0\"\n  },\n  \"devDependencies\": {\n    \"@arethetypeswrong/cli\": \"^0.18.2\",\n    \"@cspell/eslint-plugin\": \"^9.2.1\",\n    \"@eslint/compat\": \"^1.4.0\",\n    \"@tanstack/config\": \"^0.20.3\",\n    \"@types/node\": \"^24.6.2\",\n    \"@typescript-eslint/parser\": \"^8.45.0\",\n    \"@typescript-eslint/rule-tester\": \"^8.45.0\",\n    \"@vitest/coverage-istanbul\": \"3.2.4\",\n    \"@vitest/eslint-plugin\": \"^1.3.15\",\n    \"esbuild-plugin-file-path-extensions\": \"^2.1.4\",\n    \"eslint\": \"^9.37.0\",\n    \"eslint-doc-generator\": \"^2.2.2\",\n    \"eslint-plugin-eslint-plugin\": \"^7.0.0\",\n    \"husky\": \"^9.1.7\",\n    \"premove\": \"^4.0.0\",\n    \"publint\": \"^0.3.13\",\n    \"tinyglobby\": \"^0.2.15\",\n    \"tsup\": \"^8.5.0\",\n    \"typescript\": \"5.9.3\",\n    \"vite\": \"^7.1.9\",\n    \"vitest\": \"3.2.4\"\n  },\n  \"pnpm\": {\n    \"onlyBuiltDependencies\": [\n      \"@parcel/watcher\",\n      \"esbuild\",\n      \"msw\",\n      \"unrs-resolver\"\n    ],\n    \"patchedDependencies\": {\n      \"eslint-doc-generator\": \"patches/eslint-doc-generator.patch\"\n    }\n  }\n}","import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils';\nimport { getDocsUrl } from '../../utils/get-docs-url';\nimport { detectReactImports } from '../../utils/detect-react-imports';\nimport type { TSESLint, TSESTree } from '@typescript-eslint/utils';\nimport type { ExtraRuleDocs } from '../../types';\n\nexport const name = 'no-component-memo';\n\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl);\n\nfunction isReactMemo(\n\tnode: TSESTree.CallExpression,\n\thelpers: { isReactImport: (node: TSESTree.Identifier) => boolean; }\n): boolean {\n\t// Handle React.memo()\n\tif (\n\t\tnode.callee.type === AST_NODE_TYPES.MemberExpression &&\n\t\tnode.callee.object.type === AST_NODE_TYPES.Identifier &&\n\t\tnode.callee.object.name === 'React' &&\n\t\tnode.callee.property.type === AST_NODE_TYPES.Identifier &&\n\t\tnode.callee.property.name === 'memo'\n\t) {\n\t\treturn true;\n\t}\n\n\t// Handle memo() (imported directly)\n\tif (\n\t\tnode.callee.type === AST_NODE_TYPES.Identifier &&\n\t\tnode.callee.name === 'memo' &&\n\t\thelpers.isReactImport(node.callee)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport const rule = createRule({\n\tname,\n\tmeta: {\n\t\ttype: 'suggestion',\n\t\tdocs: {\n\t\t\tdescription: 'Disallow React.memo() in favor of React Compiler automatic memoization',\n\t\t\trecommended: 'warn',\n\t\t},\n\t\tmessages: {\n\t\t\tnoMemo: 'Avoid React.memo(). Let React Compiler handle memoization automatically.',\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [],\n\t},\n\tdefaultOptions: [],\n\n\tcreate: detectReactImports((context, _, helpers) => {\n\t\tconst sourceCode = context.sourceCode;\n\t\tconst importedComponents = new Map<string, string>();\n\n\t\tfunction isImportedFromExternalPackage(componentName: string): boolean {\n\t\t\tconst importSource = importedComponents.get(componentName);\n\t\t\tif (!importSource) return false;\n\n\t\t\t// Relative imports are definitely internal\n\t\t\tif (importSource.startsWith('.') || importSource.startsWith('/')) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// For non-scoped packages, assume they're external npm packages\n\t\t\t// Examples: 'react', 'lodash', 'axios', 'classnames'\n\t\t\tif (!importSource.includes('/') || importSource.includes('node_modules')) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Some common patterns for internal import aliases\n\t\t\tconst internalAliasPatterns = [\n\t\t\t\t/^@(?:\\/|[^/]*$)/, // e.g. @/components/Button (we sadly can't detect `@components/Button` without checking an infinite number of possible alias configs)\n\t\t\t\t/^[~#$]/, // e.g. ~/components/Button or #db/schema\n\t\t\t];\n\n\t\t\tfor (const pattern of internalAliasPatterns) {\n\t\t\t\tif (pattern.test(importSource)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Default to external for anything else we can't clearly identify as internal\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction isExternalComponent(node: TSESTree.CallExpression): boolean {\n\t\t\tconst [componentArg] = node.arguments;\n\t\t\tif (!componentArg) return false;\n\n\t\t\t// Check if the component is a direct identifier reference to an imported component\n\t\t\tif (componentArg.type === AST_NODE_TYPES.Identifier) {\n\t\t\t\treturn isImportedFromExternalPackage(componentArg.name);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getAutoFix(node: TSESTree.CallExpression): TSESLint.ReportFixFunction | null {\n\t\t\tconst [componentArg, comparisonArg] = node.arguments;\n\t\t\tif (!componentArg) return null;\n\n\t\t\t// Don't auto-fix if there's a comparison function\n\t\t\tif (comparisonArg && comparisonArg.type !== AST_NODE_TYPES.Literal) return null;\n\n\t\t\treturn (fixer: TSESLint.RuleFixer) => {\n\t\t\t\treturn fixer.replaceText(node, sourceCode.getText(componentArg));\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tImportDeclaration: (node: TSESTree.ImportDeclaration) => {\n\t\t\t\tconst source = node.source.value;\n\n\t\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\t\tif (specifier.type === AST_NODE_TYPES.ImportDefaultSpecifier) {\n\t\t\t\t\t\timportedComponents.set(specifier.local.name, source);\n\t\t\t\t\t} else if (specifier.type === AST_NODE_TYPES.ImportSpecifier) {\n\t\t\t\t\t\timportedComponents.set(specifier.local.name, source);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tCallExpression: (node: TSESTree.CallExpression) => {\n\t\t\t\tif (!isReactMemo(node, helpers)) return;\n\n\t\t\t\t// Don't flag React.memo if it's wrapping an external component\n\t\t\t\tif (isExternalComponent(node)) return;\n\n\t\t\t\tconst fix = getAutoFix(node);\n\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId: 'noMemo',\n\t\t\t\t\tfix,\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t}),\n});\n","\n/**\n * @param {string} ruleName\n * @returns {string}\n */\nexport const getDocsUrl = (ruleName) => `https://github.com/BellCubeDev/eslint-plugin-react-no-manual-memo/blob/main/docs/${ruleName}.md`;\n","import { TSESTree } from '@typescript-eslint/utils';\nimport type { ESLintUtils, TSESLint } from '@typescript-eslint/utils';\n\ntype Create = Parameters<\n\tReturnType<typeof ESLintUtils.RuleCreator>\n>[0]['create'];\n\ntype Context = Parameters<Create>[0];\ntype Options = Parameters<Create>[1];\ntype Helpers = {\n\tisReactImport: (node: TSESTree.Identifier) => boolean;\n};\n\ntype EnhancedCreate = (\n\tcontext: Context,\n\toptions: Options,\n\thelpers: Helpers,\n) => ReturnType<Create>;\n\nexport function detectReactImports(create: EnhancedCreate): Create {\n\treturn (context, optionsWithDefault) => {\n\t\tconst reactImportSpecifiers: Array<TSESTree.ImportClause> = [];\n\n\t\tconst helpers: Helpers = {\n\t\t\tisReactImport(node) {\n\t\t\t\treturn !!reactImportSpecifiers.find((specifier) => {\n\t\t\t\t\tif (specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier) {\n\t\t\t\t\t\treturn node.name === specifier.local.name;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\n\t\tconst detectionInstructions: TSESLint.RuleListener = {\n\t\t\tImportDeclaration(node) {\n\t\t\t\tif (\n\t\t\t\t\tnode.specifiers.length > 0 &&\n\t\t\t\t\tnode.importKind === 'value' &&\n\t\t\t\t\tnode.source.value === 'react'\n\t\t\t\t) {\n\t\t\t\t\treactImportSpecifiers.push(...node.specifiers);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\n\t\t// Call original rule definition\n\t\tconst ruleInstructions = create(context, optionsWithDefault, helpers);\n\t\tconst enhancedRuleInstructions: TSESLint.RuleListener = {};\n\n\t\tconst allKeys = new Set(\n\t\t\tObject.keys(detectionInstructions).concat(Object.keys(ruleInstructions)),\n\t\t);\n\n\t\t// Iterate over ALL instructions keys so we can override original rule instructions\n\t\t// to prevent their execution if conditions to report errors are not met.\n\t\tallKeys.forEach((instruction) => {\n\t\t\tenhancedRuleInstructions[instruction] = (node) => {\n\t\t\t\tif (instruction in detectionInstructions) {\n\t\t\t\t\tdetectionInstructions[instruction]?.(node);\n\t\t\t\t}\n\n\t\t\t\tconst ruleInstruction = ruleInstructions[instruction];\n\n\t\t\t\t// TODO: canReportErrors()\n\t\t\t\tif (ruleInstruction) {\n\t\t\t\t\treturn ruleInstruction(node);\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t};\n\t\t});\n\n\t\treturn enhancedRuleInstructions;\n\t};\n}\n","import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils';\n\nimport { detectMemoOnlyHooks } from '../../utils/detect-memo-only-hooks';\nimport { detectReactImports } from '../../utils/detect-react-imports';\nimport { getDocsUrl } from '../../utils/get-docs-url';\nimport type { HookAnalysis } from '../../utils/detect-memo-only-hooks';\nimport type { ExtraRuleDocs } from '../../types';\nimport type { TSESTree } from '@typescript-eslint/utils';\n\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl);\n\nexport const name = 'no-custom-memo-hook';\n\nconst RECOMMENDED_FIX = `\nConsider either:\n- Inlining this hook's logic directly into the components that use it, allowing the React Compiler to optimize them fully\n- Removing memoization and renaming to a regular function (no \"use\" prefix) so the React Compiler can optimize calls to the function\n`.trim();\n\nexport enum NoCustomMemoHookMessageIDs {\n\tnoMemoOnlyHookBoth = 'noMemoOnlyHookBoth',\n\tnoMemoOnlyHookMemo = 'noMemoOnlyHookMemo',\n\tnoMemoOnlyHookCallback = 'noMemoOnlyHookCallback',\n}\n\nexport const rule = createRule({\n\tname: 'no-custom-memo-hook',\n\tdefaultOptions: [],\n\tmeta: {\n\t\ttype: 'suggestion',\n\t\tdocs: {\n\t\t\tdescription: 'Disallow custom hooks that only use useCallback and useMemo',\n\t\t\trecommended: 'warn',\n\t\t},\n\t\tmessages: {\n\t\t\t[NoCustomMemoHookMessageIDs.noMemoOnlyHookBoth]:\n\t\t\t\t`Custom hook \"{{ hookName }}\" is a memo-only custom hook. It only calls the hooks useCallback and useMemo. ${RECOMMENDED_FIX}`,\n\t\t\t[NoCustomMemoHookMessageIDs.noMemoOnlyHookMemo]:\n\t\t\t\t`Custom hook \"{{ hookName }}\" is a memo-only custom hook. It only calls the hook useMemo. ${RECOMMENDED_FIX}`,\n\t\t\t[NoCustomMemoHookMessageIDs.noMemoOnlyHookCallback]:\n\t\t\t\t`Custom hook \"{{ hookName }}\" is a memo-only custom hook. It only calls the hook useCallback. ${RECOMMENDED_FIX}`,\n\t\t},\n\t\tschema: [],\n\t},\n\tcreate: detectReactImports((context, _options, _reactHelpers) => {\n\t\t// eslint-disable-next-line no-shadow\n\t\treturn detectMemoOnlyHooks((context, _options, memoHelpers) => {\n\t\t\tfunction getHookName(node: TSESTree.Node): string | undefined {\n\t\t\t\tif (node.type === AST_NODE_TYPES.FunctionDeclaration) {\n\t\t\t\t\treturn node.id?.name;\n\t\t\t\t} else if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n\t\t\t\t\tconst id = node.id as TSESTree.Identifier | undefined;\n\t\t\t\t\treturn id?.name;\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tfunction isHookName(nameToCheck: string): boolean {\n\t\t\t\treturn /^use[A-Z]/.test(nameToCheck);\n\t\t\t}\n\n\t\t\tfunction reportMemoOnlyHook(node: TSESTree.Node, hookName: string, analysis: HookAnalysis): void {\n\t\t\t\tcontext.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessageId:\n\t\t\t\t\t\tanalysis.usesCallback\n\t\t\t\t\t\t\t? analysis.usesMemo ? NoCustomMemoHookMessageIDs.noMemoOnlyHookBoth\n\t\t\t\t\t\t\t\t: NoCustomMemoHookMessageIDs.noMemoOnlyHookCallback\n\t\t\t\t\t\t\t: analysis.usesMemo ? NoCustomMemoHookMessageIDs.noMemoOnlyHookMemo\n\t\t\t\t\t\t\t\t: 'INTERNAL_ERROR___ESLINT_PLUGIN_REACT_NO_MANUAL_MEMO___IN_RULE___NO_CUSTOM_MEMO_HOOK' as never,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\thookName,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tFunctionDeclaration(node: TSESTree.FunctionDeclaration) {\n\t\t\t\t\tconst hookName = getHookName(node);\n\t\t\t\t\tif (!hookName || !isHookName(hookName)) return;\n\t\t\t\t\tconst analysis = memoHelpers.getMemoOnlyHookAnalysis(node);\n\t\t\t\t\tif (analysis.isMemoOnly) {\n\t\t\t\t\t\treportMemoOnlyHook(node, hookName, analysis);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tVariableDeclarator(node: TSESTree.VariableDeclarator) {\n\t\t\t\t\tif (!node.init) return;\n\t\t\t\t\tif (node.init.type !== AST_NODE_TYPES.ArrowFunctionExpression && node.init.type !== AST_NODE_TYPES.FunctionExpression) return;\n\n\t\t\t\t\tconst hookName = getHookName(node);\n\n\t\t\t\t\tif (!hookName || !isHookName(hookName)) return;\n\n\t\t\t\t\tconst analysis = memoHelpers.getMemoOnlyHookAnalysis(node);\n\t\t\t\t\tif (analysis.isMemoOnly) {\n\t\t\t\t\t\treportMemoOnlyHook(node, hookName, analysis);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t})(context, _options);\n\t}),\n});\n","import { AST_NODE_TYPES } from '@typescript-eslint/utils';\nimport type { ESLintUtils, TSESLint, TSESTree } from '@typescript-eslint/utils';\n\ntype Create = Parameters<\n\tReturnType<typeof ESLintUtils.RuleCreator>\n>[0]['create'];\n\ntype Context = Parameters<Create>[0];\ntype Options = Parameters<Create>[1];\ntype Helpers = {\n\tgetMemoOnlyHookAnalysis: (node: TSESTree.Node) => HookAnalysis;\n\tisWithinMemoOnlyCustomHook: (node: TSESTree.Node) => boolean;\n};\n\ntype EnhancedCreate = (\n\tcontext: Context,\n\toptions: Options,\n\thelpers: Helpers,\n) => ReturnType<Create>;\n\nexport interface HookAnalysis {\n\tisMemoOnly: boolean;\n\tcallsOtherHooks: boolean;\n\tcontainsJSX: boolean;\n\tusesCallback: boolean;\n\tusesMemo: boolean;\n}\n\nexport function detectMemoOnlyHooks(create: EnhancedCreate): Create {\n\treturn (context, optionsWithDefault) => {\n\t\tconst hookAnalyses = new Map<TSESTree.Node, HookAnalysis>();\n\t\tconst sourceCode = context.sourceCode;\n\n\t\tfunction isHookName(name: string): boolean {\n\t\t\treturn /^use[A-Z]/.test(name);\n\t\t}\n\n\t\tfunction isMemoHook(name: string): boolean {\n\t\t\treturn name === 'useCallback' || name === 'useMemo';\n\t\t}\n\n\t\tfunction isOtherHook(name: string): boolean {\n\t\t\treturn isHookName(name) && !isMemoHook(name);\n\t\t}\n\n\t\tfunction analyzeHookFunction(node: TSESTree.Node): HookAnalysis {\n\t\t\tif (hookAnalyses.has(node)) {\n\t\t\t\treturn hookAnalyses.get(node)!;\n\t\t\t}\n\n\t\t\tconst analysis: HookAnalysis = {\n\t\t\t\tisMemoOnly: false,\n\t\t\t\tcallsOtherHooks: false,\n\t\t\t\tcontainsJSX: false,\n\t\t\t\tusesCallback: false,\n\t\t\t\tusesMemo: false,\n\t\t\t};\n\n\t\t\t// Traverse the function body to analyze hook calls and JSX\n\t\t\tfunction traverse(currentNode: TSESTree.Node): void {\n\t\t\t\tswitch (currentNode.type) {\n\t\t\t\t\tcase AST_NODE_TYPES.JSXElement:\n\t\t\t\t\tcase AST_NODE_TYPES.JSXFragment:\n\t\t\t\t\t\tanalysis.containsJSX = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase AST_NODE_TYPES.CallExpression:\n\t\t\t\t\t\tif (currentNode.callee.type === AST_NODE_TYPES.Identifier) {\n\t\t\t\t\t\t\tconst calleeName = currentNode.callee.name;\n\t\t\t\t\t\t\tif (calleeName === 'useCallback') {\n\t\t\t\t\t\t\t\tanalysis.usesCallback = true;\n\t\t\t\t\t\t\t} else if (calleeName === 'useMemo') {\n\t\t\t\t\t\t\t\tanalysis.usesMemo = true;\n\t\t\t\t\t\t\t} else if (isOtherHook(calleeName)) {\n\t\t\t\t\t\t\t\tanalysis.callsOtherHooks = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tcurrentNode.callee.type === AST_NODE_TYPES.MemberExpression &&\n\t\t\t\t\t\t\tcurrentNode.callee.object.type === AST_NODE_TYPES.Identifier &&\n\t\t\t\t\t\t\tcurrentNode.callee.object.name === 'React' &&\n\t\t\t\t\t\t\tcurrentNode.callee.property.type === AST_NODE_TYPES.Identifier\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst methodName = currentNode.callee.property.name;\n\t\t\t\t\t\t\tif (methodName === 'useCallback') {\n\t\t\t\t\t\t\t\tanalysis.usesCallback = true;\n\t\t\t\t\t\t\t} else if (methodName === 'useMemo') {\n\t\t\t\t\t\t\t\tanalysis.usesMemo = true;\n\t\t\t\t\t\t\t} else if (isOtherHook(methodName)) {\n\t\t\t\t\t\t\t\tanalysis.callsOtherHooks = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Recursively traverse child nodes\n\t\t\t\tfor (const key of sourceCode.visitorKeys[currentNode.type] || []) {\n\t\t\t\t\tconst child = (currentNode as any)[key];\n\t\t\t\t\tif (Array.isArray(child)) {\n\t\t\t\t\t\tchild.forEach((item) => {\n\t\t\t\t\t\t\tif (item && typeof item === 'object' && 'type' in item) {\n\t\t\t\t\t\t\t\ttraverse(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (child && typeof child === 'object' && 'type' in child) {\n\t\t\t\t\t\ttraverse(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get the function body for analysis\n\t\t\tlet bodyNode: TSESTree.Node | undefined;\n\t\t\tif ('body' in node && node.body) { // eslint-disable-line eslint-plugin/no-property-in-node\n\t\t\t\tbodyNode = node.body as TSESTree.Node;\n\t\t\t} else if (\n\t\t\t\tnode.type === AST_NODE_TYPES.VariableDeclarator &&\n\t\t\t\tnode.init &&\n\t\t\t\t'body' in node.init // eslint-disable-line eslint-plugin/no-property-in-node\n\t\t\t) {\n\t\t\t\tbodyNode = node.init.body as TSESTree.Node;\n\t\t\t}\n\n\t\t\tif (bodyNode) {\n\t\t\t\ttraverse(bodyNode);\n\t\t\t}\n\n\t\t\t// Determine if this is a memo-only hook\n\t\t\tanalysis.isMemoOnly =\n\t\t\t\t(analysis.usesCallback || analysis.usesMemo) &&\n\t\t\t\t!analysis.callsOtherHooks &&\n\t\t\t\t!analysis.containsJSX;\n\n\t\t\thookAnalyses.set(node, analysis);\n\t\t\treturn analysis;\n\t\t}\n\n\t\tfunction findContainingFunction(node: TSESTree.Node): TSESTree.Node | undefined {\n\t\t\tlet current = node.parent;\n\t\t\twhile (current) {\n\t\t\t\tif (\n\t\t\t\t\tcurrent.type === AST_NODE_TYPES.FunctionDeclaration ||\n\t\t\t\t\tcurrent.type === AST_NODE_TYPES.FunctionExpression ||\n\t\t\t\t\tcurrent.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n\t\t\t\t\t(current.type === AST_NODE_TYPES.VariableDeclarator &&\n\t\t\t\t\t\tcurrent.init &&\n\t\t\t\t\t\t(current.init.type === AST_NODE_TYPES.FunctionExpression ||\n\t\t\t\t\t\t\tcurrent.init.type === AST_NODE_TYPES.ArrowFunctionExpression))\n\t\t\t\t) {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\tcurrent = current.parent;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst helpers: Helpers = {\n\t\t\tgetMemoOnlyHookAnalysis(node: TSESTree.Node): HookAnalysis {\n\t\t\t\treturn analyzeHookFunction(node);\n\t\t\t},\n\t\t\tisWithinMemoOnlyCustomHook(node: TSESTree.Node): boolean {\n\t\t\t\tconst containingFunction = findContainingFunction(node);\n\t\t\t\tif (!containingFunction) return false;\n\t\t\t\treturn helpers.getMemoOnlyHookAnalysis(containingFunction).isMemoOnly;\n\t\t\t},\n\t\t};\n\n\t\tconst detectionInstructions: TSESLint.RuleListener = {\n\t\t\t// Pre-analyze all function declarations and variable declarators that might be hooks\n\t\t\tFunctionDeclaration(node) {\n\t\t\t\tif (node.id && isHookName(node.id.name)) {\n\t\t\t\t\tanalyzeHookFunction(node);\n\t\t\t\t}\n\t\t\t},\n\t\t\tVariableDeclarator(node) {\n\t\t\t\tif (\n\t\t\t\t\tnode.id.type === AST_NODE_TYPES.Identifier &&\n\t\t\t\t\tisHookName(node.id.name) &&\n\t\t\t\t\tnode.init &&\n\t\t\t\t\t(node.init.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n\t\t\t\t\t\tnode.init.type === AST_NODE_TYPES.FunctionExpression)\n\t\t\t\t) {\n\t\t\t\t\tanalyzeHookFunction(node);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\n\t\t// Call original rule definition\n\t\tconst ruleInstructions = create(context, optionsWithDefault, helpers);\n\t\tconst enhancedRuleInstructions: TSESLint.RuleListener = {};\n\n\t\tconst allKeys = new Set(\n\t\t\tObject.keys(detectionInstructions).concat(Object.keys(ruleInstructions)),\n\t\t);\n\n\t\t// Iterate over ALL instruction keys so we can override original rule instructions\n\t\t// to prevent their execution if conditions to report errors are not met.\n\t\tallKeys.forEach((instruction) => {\n\t\t\tenhancedRuleInstructions[instruction] = (node) => {\n\t\t\t\tif (instruction in detectionInstructions) {\n\t\t\t\t\tdetectionInstructions[instruction]?.(node);\n\t\t\t\t}\n\n\t\t\t\tconst ruleInstruction = ruleInstructions[instruction];\n\n\t\t\t\tif (ruleInstruction) {\n\t\t\t\t\treturn ruleInstruction(node);\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t};\n\t\t});\n\n\t\treturn enhancedRuleInstructions;\n\t};\n}\n","import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils';\nimport { ASTUtils } from '../../utils/ast-utils';\nimport { detectMemoOnlyHooks } from '../../utils/detect-memo-only-hooks';\nimport { detectReactImports } from '../../utils/detect-react-imports';\nimport { getDocsUrl } from '../../utils/get-docs-url';\nimport type { TSESLint, TSESTree } from '@typescript-eslint/utils';\nimport type { ExtraRuleDocs } from '../../types';\n\nexport const name = 'no-hook-memo';\n\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl);\n\nfunction isUseMemoOrUseCallback(\n\tnode: TSESTree.CallExpression,\n\thelpers: { isReactImport: (node: TSESTree.Identifier) => boolean; }\n): { isHook: boolean; hookName: 'useMemo' | 'useCallback' | null; } {\n\t// Handle React.useMemo() or React.useCallback()\n\tif (\n\t\tnode.callee.type === AST_NODE_TYPES.MemberExpression &&\n\t\tnode.callee.object.type === AST_NODE_TYPES.Identifier &&\n\t\tnode.callee.object.name === 'React' &&\n\t\tnode.callee.property.type === AST_NODE_TYPES.Identifier &&\n\t\t(node.callee.property.name === 'useMemo' || node.callee.property.name === 'useCallback')\n\t) {\n\t\treturn { isHook: true, hookName: node.callee.property.name };\n\t}\n\n\t// Handle useMemo() or useCallback() (imported directly)\n\tif (\n\t\tnode.callee.type === AST_NODE_TYPES.Identifier &&\n\t\t(node.callee.name === 'useMemo' || node.callee.name === 'useCallback') &&\n\t\thelpers.isReactImport(node.callee)\n\t) {\n\t\treturn { isHook: true, hookName: node.callee.name };\n\t}\n\n\treturn { isHook: false, hookName: null };\n}\n\n\n\nfunction isSimpleArrowFunction(func: TSESTree.ArrowFunctionExpression): func is (TSESTree.ArrowFunctionExpression & {expression: true}) | (TSESTree.ArrowFunctionExpression & {body: TSESTree.BlockStatement & {body: {length: 1; 0: TSESTree.ReturnStatement}}}) {\n\t// () => expression\n\tif (func.expression) {\n\t\treturn true;\n\t}\n\n\t// () => { return expression }\n\tif (\n\t\tfunc.body.type === AST_NODE_TYPES.BlockStatement &&\n\t\tfunc.body.body.length === 1 &&\n\t\tfunc.body.body[0]!.type === AST_NODE_TYPES.ReturnStatement\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport const rule = createRule({\n\tname,\n\tmeta: {\n\t\ttype: 'suggestion',\n\t\tdocs: {\n\t\t\tdescription: 'Disallow manual memoization hooks (useMemo, useCallback) in favor of React Compiler',\n\t\t\trecommended: 'warn',\n\t\t},\n\t\tmessages: {\n\t\t\tnoUseMemo: 'Avoid using useMemo directly in components. Let React Compiler handle memoization inside components automatically.',\n\t\t\tnoUseCallback: 'Avoid using useCallback directly in components. Let React Compiler handle memoization inside components automatically.',\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [],\n\t},\n\tdefaultOptions: [],\n\n\tcreate: detectReactImports((context, _, reactHelpers) => {\n\t\t// eslint-disable-next-line no-shadow\n\t\treturn detectMemoOnlyHooks((context, _, memoHelpers) => {\n\t\t\tconst sourceCode = context.sourceCode;\n\n\t\t\tfunction getAutoFix(\n\t\t\t\tnode: TSESTree.CallExpression,\n\t\t\t\thookName: 'useMemo' | 'useCallback'\n\t\t\t): TSESLint.ReportFixFunction | null {\n\t\t\t\tconst [funcArg] = node.arguments;\n\t\t\t\tif (!funcArg) return null;\n\n\t\t\t\tif (hookName === 'useCallback') {\n\t\t\t\t\t// For useCallback, just unwrap the function\n\t\t\t\t\treturn (fixer: TSESLint.RuleFixer) => {\n\t\t\t\t\t\treturn fixer.replaceText(node, sourceCode.getText(funcArg));\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// For useMemo, handle simple cases only\n\t\t\t\tif (funcArg.type === AST_NODE_TYPES.ArrowFunctionExpression && isSimpleArrowFunction(funcArg)) {\n\t\t\t\t\treturn (fixer: TSESLint.RuleFixer) => {\n\t\t\t\t\t\tif (funcArg.expression) {\n\t\t\t\t\t\t\t// () => expression\n\t\t\t\t\t\t\treturn fixer.replaceText(node, sourceCode.getText(funcArg.body));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// () => { return expression }\n\t\t\t\t\t\t\tconst returnStmt = funcArg.body.body[0];\n\t\t\t\t\t\t\treturn fixer.replaceText(node, sourceCode.getText(returnStmt.argument!));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Simple function expressions with single return\n\t\t\t\tif (\n\t\t\t\t\tfuncArg.type === AST_NODE_TYPES.FunctionExpression &&\n\t\t\t\t\tfuncArg.body.body.length === 1 &&\n\t\t\t\t\tfuncArg.body.body[0]?.type === AST_NODE_TYPES.ReturnStatement &&\n\t\t\t\t\tfuncArg.body.body[0].argument\n\t\t\t\t) {\n\t\t\t\t\treturn (fixer: TSESLint.RuleFixer) => {\n\t\t\t\t\t\tconst returnStmt = funcArg.body.body[0] as TSESTree.ReturnStatement;\n\t\t\t\t\t\treturn fixer.replaceText(node, sourceCode.getText(returnStmt.argument!));\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Unwrap the useMemo hook and call the function directly if it's too complex to unwrap any further than that\n\t\t\t\tif (funcArg.type === AST_NODE_TYPES.ArrowFunctionExpression || funcArg.type === AST_NODE_TYPES.FunctionExpression) {\n\t\t\t\t\treturn (fixer: TSESLint.RuleFixer) => {\n\t\t\t\t\t\treturn fixer.replaceText(node, `(${sourceCode.getText(funcArg)})()`);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// For identifiers passed to useMemo, unwrap and call directly\n\t\t\t\tif (funcArg.type === AST_NODE_TYPES.Identifier) {\n\t\t\t\t\treturn (fixer: TSESLint.RuleFixer) => {\n\t\t\t\t\t\treturn fixer.replaceText(node, `${sourceCode.getText(funcArg)}()`);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tCallExpression: (node: TSESTree.CallExpression) => {\n\t\t\t\t\tconst { isHook, hookName } = isUseMemoOrUseCallback(node, reactHelpers);\n\n\t\t\t\t\tif (!isHook || !hookName) return;\n\n\t\t\t\t\tconst fnAncestor = ASTUtils.getFunctionAncestor(sourceCode, node);\n\n\t\t\t\t\t// eslint-disable-next-line eslint-plugin/no-property-in-node\n\t\t\t\t\tconst fnAncestorId = fnAncestor?.id ?? (fnAncestor?.parent && 'id' in fnAncestor.parent && fnAncestor.parent.id && 'name' in fnAncestor.parent.id ? fnAncestor.parent.id : undefined);\n\n\t\t\t\t\t// Only flag hooks inside React components\n\t\t\t\t\tif (!fnAncestor || (fnAncestorId && !ASTUtils.isValidReactComponentOrHookName(fnAncestorId))) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Skip if we're in a custom hook that would be flagged by no-custom-memo-hook\n\t\t\t\t\tif (\n\t\t\t\t\t\tfnAncestorId?.name.startsWith('use') &&\n\t\t\t\t\t\tmemoHelpers.isWithinMemoOnlyCustomHook(node)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst messageId = hookName === 'useMemo' ? 'noUseMemo' : 'noUseCallback';\n\t\t\t\t\tconst fix = getAutoFix(node, hookName);\n\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\tfix,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t})(context, _);\n\t}),\n});\n","import { AST_NODE_TYPES } from '@typescript-eslint/utils';\nimport type { TSESLint, TSESTree } from '@typescript-eslint/utils';\n\nexport const ASTUtils = {\n\tisNodeOfOneOf<T extends AST_NODE_TYPES>(\n\t\tnode: TSESTree.Node,\n\t\ttypes: ReadonlyArray<T>,\n\t): node is TSESTree.Node & { type: T; } {\n\t\treturn types.includes(node.type as T);\n\t},\n\tisValidReactComponentOrHookName(\n\t\tidentifier: TSESTree.Identifier | null | undefined,\n\t): identifier is TSESTree.Identifier & {name: `use${string}` | Capitalize<string>} {\n\t\treturn (\n\t\t\tidentifier !== null &&\n\t\t\tidentifier !== undefined &&\n\t\t\t/^((?:use)?[A-Z])/.test(identifier.name)\n\t\t);\n\t},\n\tgetFunctionAncestor(\n\t\tsourceCode: Readonly<TSESLint.SourceCode>,\n\t\tnode: TSESTree.Node,\n\t) {\n\t\tfor (const ancestor of sourceCode.getAncestors(node)) {\n\t\t\tif (ASTUtils.isNodeOfOneOf(ancestor, [\n\t\t\t\tAST_NODE_TYPES.FunctionDeclaration,\n\t\t\t\tAST_NODE_TYPES.FunctionExpression,\n\t\t\t\tAST_NODE_TYPES.ArrowFunctionExpression,\n\t\t\t])) {\n\t\t\t\treturn ancestor;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t},\n};\n","import * as noComponentMemo from './rules/no-component-memo/no-component-memo.rule';\nimport * as noCustomMemoHook from './rules/no-custom-memo-hook/no-custom-memo-hook.rule';\nimport * as noHookMemo from './rules/no-hook-memo/no-hook-memo.rule';\nimport type { Plugin } from '.';\n\nexport const rules = {\n\t[noComponentMemo.name]: noComponentMemo.rule,\n\t[noCustomMemoHook.name]: noCustomMemoHook.rule,\n\t[noHookMemo.name]: noHookMemo.rule,\n} satisfies Plugin['rules'];\n","import packageJson from '../package.json'\n\n\nfunction stripEslintPluginPrefix<T extends string>(str: T): T extends `eslint-plugin-${infer R}` ? R : T {\n\treturn (str.replace(/^eslint-plugin-/, '') as any) as T extends `eslint-plugin-${infer R}` ? R : T\n}\n\nexport const namespace = stripEslintPluginPrefix(packageJson.name)\n"],"mappings":"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","names":["import_utils","import_utils","import_utils","name","createRule","name","rule","createRule","context","_options","import_utils","import_utils","name","createRule","rule","context","_","name","rule"]}