@colrealpro/react-luau-doctor 0.20.0 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/scan-worker.ts", "../src/file-analysis.ts", "../src/ast/walk.ts", "../src/ast/context.ts", "../src/module-resolution.ts", "../src/ast/react-model.ts", "../src/config.ts", "../src/ast/local-values.ts", "../src/rules/helpers.ts", "../src/rules/binding-rules.ts", "../src/rules/no-call-component-as-function.ts", "../src/rules/parameter-mutations.ts", "../src/rules/no-mutating-state-updater.ts", "../src/rules/usememo-must-return.ts", "../src/rules/examples.ts", "../src/roblox-semantics.ts", "../src/rules/effect-needs-cleanup.ts", "../src/rules/effect-state-rules.ts", "../src/rules/dependency-tables.ts", "../src/rules/exhaustive-deps.ts", "../src/parser-compat.ts", "../src/rules/collection-key-kind.ts", "../src/rules/no-array-index-as-key.ts", "../src/rules/no-create-context-in-render.ts", "../src/rules/no-nested-component-definition.ts", "../src/rules/no-prop-mutation.ts", "../src/rules/no-static-name-prop.ts", "../src/rules/no-random-key.ts", "../src/rules/no-set-state-in-render.ts", "../src/rules/parse-errors.ts", "../src/rules/performance-rules.ts", "../src/rules/prefer-binding-over-state.ts", "../src/rules/react-roblox-lifecycle.ts", "../src/rules/ref-rules.ts", "../src/rules/render-side-effects.ts", "../src/rules/rules-of-hooks.ts", "../src/rules/state-performance.ts", "../src/rules/unstable-context-value.ts", "../src/rules/index.ts", "../src/inline-disables.ts", "../src/parser.ts", "../src/project-effects.ts"],
3
+ "sources": ["../src/scan-worker.ts", "../src/file-analysis.ts", "../src/ast/walk.ts", "../src/ast/context.ts", "../src/module-resolution.ts", "../src/ast/react-model.ts", "../src/config.ts", "../src/ast/local-values.ts", "../src/rules/helpers.ts", "../src/rules/binding-rules.ts", "../src/rules/no-call-component-as-function.ts", "../src/rules/parameter-mutations.ts", "../src/rules/no-mutating-state-updater.ts", "../src/rules/usememo-must-return.ts", "../src/rules/examples.ts", "../src/roblox-semantics.ts", "../src/rules/effect-needs-cleanup.ts", "../src/api-reference.ts", "../src/ast/value-identity.ts", "../src/rules/effect-state-rules.ts", "../src/rules/dependency-tables.ts", "../src/rules/exhaustive-deps.ts", "../src/parser-compat.ts", "../src/rules/collection-key-kind.ts", "../src/rules/no-array-index-as-key.ts", "../src/rules/no-create-context-in-render.ts", "../src/rules/no-nested-component-definition.ts", "../src/rules/no-prop-mutation.ts", "../src/rules/no-static-name-prop.ts", "../src/rules/no-random-key.ts", "../src/rules/no-set-state-in-render.ts", "../src/rules/parse-errors.ts", "../src/rules/performance-rules.ts", "../src/rules/prefer-binding-over-state.ts", "../src/rules/react-roblox-lifecycle.ts", "../src/rules/ref-rules.ts", "../src/rules/render-side-effects.ts", "../src/rules/rules-of-hooks.ts", "../src/rules/state-performance.ts", "../src/rules/unstable-context-value.ts", "../src/rules/index.ts", "../src/inline-disables.ts", "../src/parser.ts", "../src/project-effects.ts"],
4
4
  "sourcesContent": [
5
5
  "import { parentPort } from \"node:worker_threads\";\r\nimport { analyzeReactFile } from \"./file-analysis\";\r\nimport {\r\n analyzeEffectModuleForWorker,\r\n indexEffectModuleForWorker,\r\n type EffectWorkerState,\r\n} from \"./project-effects\";\r\nimport type { AnalysisWorkerRequest, AnalysisWorkerResponse } from \"./parallel\";\r\nimport type { SyntaxTree } from \"./syntax\";\r\n\r\nif (!parentPort) throw new Error(\"Analysis worker requires a parent port\");\r\n\r\nconst effectStates = new Map<string, EffectWorkerState>();\r\nconst treeCache = new Map<string, { source: string; tree: SyntaxTree }>();\r\n\r\nparentPort.on(\"message\", async (request: AnalysisWorkerRequest) => {\r\n try {\r\n if (request.type === \"close\") {\r\n for (const cached of treeCache.values()) cached.tree.delete?.();\r\n treeCache.clear();\r\n effectStates.clear();\r\n parentPort!.close();\r\n return;\r\n }\r\n\r\n if (request.type === \"effect-index\") {\r\n const modules = [];\r\n for (const file of request.files) {\r\n try {\r\n const result = await indexEffectModuleForWorker(file, request.moduleAliases);\r\n effectStates.set(file.id, result.state);\r\n treeCache.set(file.relativePath, { source: file.source, tree: result.tree });\r\n modules.push(result.indexed);\r\n } catch {\r\n // The normal scanner owns parse diagnostics, so failed effect modules\r\n // are omitted here exactly as they are in the sequential effect pass\r\n } finally {\r\n if (request.reportProgress) {\r\n parentPort!.postMessage({ type: \"effect-index-progress\", file: file.relativePath } satisfies AnalysisWorkerResponse);\r\n }\r\n }\r\n }\r\n parentPort!.postMessage({ type: \"effect-index\", modules } satisfies AnalysisWorkerResponse);\r\n return;\r\n }\r\n\r\n if (request.type === \"effect-analyze\") {\r\n const modules = [...effectStates.values()].map((state) =>\r\n analyzeEffectModuleForWorker(state, request.moduleSummaries, request.exportedFunctions)\r\n );\r\n parentPort!.postMessage({ type: \"effect-analyze\", modules } satisfies AnalysisWorkerResponse);\r\n return;\r\n }\r\n\r\n if (request.type === \"react-scan\") {\r\n const results = [];\r\n for (const file of request.files) {\r\n const cached = treeCache.get(file.relativePath);\r\n results.push(await analyzeReactFile(file, cached?.source === file.source ? cached.tree : undefined));\r\n if (request.reportProgress) {\r\n parentPort!.postMessage({ type: \"react-scan-progress\", file: file.relativePath } satisfies AnalysisWorkerResponse);\r\n }\r\n }\r\n parentPort!.postMessage({ type: \"react-scan\", results } satisfies AnalysisWorkerResponse);\r\n return;\r\n }\r\n\r\n throw new Error(`Unknown analysis worker request: ${(request as { type?: string }).type ?? \"unknown\"}`);\r\n } catch (error) {\r\n const value = error instanceof Error ? error : new Error(String(error));\r\n parentPort!.postMessage({ type: \"error\", message: value.message, stack: value.stack } satisfies AnalysisWorkerResponse);\r\n }\r\n});\r\n",
6
- "import crypto from \"node:crypto\";\r\nimport type { SyntaxTree } from \"./syntax\";\r\nimport { createRuleContext } from \"./ast/context\";\r\nimport { buildReactModel } from \"./ast/react-model\";\r\nimport { effectiveSeverity } from \"./config\";\r\nimport { createInlineSuppressionChecker } from \"./inline-disables\";\r\nimport { parseLuau } from \"./parser\";\r\nimport { rules } from \"./rules\";\r\n\r\nimport type {\r\n Category,\r\n Diagnostic,\r\n DiagnosticInput,\r\n DoctorConfig,\r\n ProjectModel,\r\n Severity,\r\n SourceFile,\r\n RuleDefinition,\r\n} from \"./types\";\r\n\r\nconst SEVERITY_RANK: Record<Severity, number> = {\r\n suggestion: 0,\r\n warning: 1,\r\n error: 2,\r\n};\r\n\r\nexport interface ReactFileAnalysisInput {\r\n absolutePath: string;\r\n relativePath: string;\r\n source: string;\r\n forceScan: boolean;\r\n project: ProjectModel;\r\n config: DoctorConfig;\r\n categories?: Category[];\r\n minSeverity: Severity;\r\n respectInlineDisables: boolean;\r\n lsp?: boolean;\r\n}\r\n\r\nexport interface ReactFileAnalysisResult {\r\n relativePath: string;\r\n isReactFile: boolean;\r\n scanned: boolean;\r\n diagnostics: Diagnostic[];\r\n}\r\n\r\nfunction diagnosticId(\r\n file: string,\r\n rule: string,\r\n startIndex: number,\r\n message: string,\r\n): string {\r\n return crypto\r\n .createHash(\"sha256\")\r\n .update(`${file}\\0${rule}\\0${startIndex}\\0${message}`)\r\n .digest(\"hex\")\r\n .slice(0, 16);\r\n}\r\n\r\nfunction nodeLocation(node: DiagnosticInput[\"node\"]): Diagnostic[\"location\"] {\r\n return {\r\n line: node.startPosition.row + 1,\r\n column: node.startPosition.column + 1,\r\n endLine: node.endPosition.row + 1,\r\n endColumn: node.endPosition.column + 1,\r\n };\r\n}\r\n\r\nfunction sameLocation(\r\n left: Diagnostic[\"location\"],\r\n right: Diagnostic[\"location\"],\r\n): boolean {\r\n return (\r\n left.line === right.line &&\r\n left.column === right.column &&\r\n left.endLine === right.endLine &&\r\n left.endColumn === right.endColumn\r\n );\r\n}\r\n\r\nfunction removeSupersededDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] {\r\n return diagnostics.filter((diagnostic) => {\r\n if (diagnostic.rule !== \"react-luau/rerender-high-frequency-state\")\r\n return true;\r\n\r\n return !diagnostics.some(\r\n (candidate) =>\r\n candidate.rule === \"react-luau/prefer-binding-over-state\" &&\r\n sameLocation(candidate.location, diagnostic.location) &&\r\n SEVERITY_RANK[candidate.severity] >= SEVERITY_RANK[diagnostic.severity],\r\n );\r\n });\r\n}\r\n\r\nfunction toDiagnostic(\r\n file: SourceFile,\r\n ruleId: string,\r\n category: Diagnostic[\"category\"],\r\n severity: Severity,\r\n input: DiagnosticInput,\r\n): Diagnostic {\r\n const node = input.node;\r\n const highlights = input.highlights?.map(nodeLocation);\r\n\r\n return {\r\n id: diagnosticId(file.relativePath, ruleId, node.startIndex, input.message),\r\n rule: ruleId,\r\n category,\r\n severity: input.severity ?? severity,\r\n message: input.message,\r\n summary: input.summary,\r\n explanation: input.explanation,\r\n help: input.help,\r\n caveat: input.caveat,\r\n file: file.relativePath,\r\n location: nodeLocation(node),\r\n highlights: highlights && highlights.length > 0 ? highlights : undefined,\r\n fixPreview: input.fixPreview,\r\n\r\n editorRanges: input.editorRanges?.map(({ node, summary }) => ({\r\n location: nodeLocation(node),\r\n summary,\r\n })),\r\n };\r\n}\r\n\r\nexport async function analyzeReactFile(\r\n input: ReactFileAnalysisInput,\r\n tree?: SyntaxTree,\r\n selectedRules: readonly RuleDefinition[] = rules,\r\n): Promise<ReactFileAnalysisResult> {\r\n const parsedTree = tree ?? (await parseLuau(input.source));\r\n\r\n try {\r\n const model = buildReactModel(parsedTree.rootNode, input.project);\r\n\r\n if (!input.forceScan && !model.isReactFile) {\r\n return {\r\n relativePath: input.relativePath,\r\n isReactFile: false,\r\n scanned: false,\r\n diagnostics: [],\r\n };\r\n }\r\n\r\n const file: SourceFile = {\r\n absolutePath: input.absolutePath,\r\n relativePath: input.relativePath,\r\n source: input.source,\r\n tree: parsedTree,\r\n root: parsedTree.rootNode,\r\n model,\r\n project: input.project,\r\n };\r\n\r\n const context = createRuleContext(file);\r\n\r\n const categorySet =\r\n input.categories && input.categories.length > 0\r\n ? new Set(input.categories)\r\n : null;\r\n\r\n const isSuppressed = input.respectInlineDisables\r\n ? createInlineSuppressionChecker(input.source)\r\n : () => false;\r\n\r\n const diagnostics: Diagnostic[] = [];\r\n\r\n for (const rule of selectedRules) {\r\n if (input.lsp && rule.lspEnabled === false) continue;\r\n if (categorySet && !categorySet.has(rule.category)) continue;\r\n\r\n const severity = effectiveSeverity(rule.severity, rule.id, input.config);\r\n\r\n if (!severity) continue;\r\n\r\n const findings = rule.run(context);\r\n\r\n for (const finding of findings) {\r\n const configuredSeverity = input.config.rules?.[rule.id];\r\n\r\n const diagnostic = toDiagnostic(\r\n file,\r\n rule.id,\r\n rule.category,\r\n severity,\r\n {\r\n ...finding,\r\n\r\n severity:\r\n configuredSeverity && configuredSeverity !== \"off\"\r\n ? severity\r\n : finding.severity,\r\n },\r\n );\r\n\r\n if (\r\n SEVERITY_RANK[diagnostic.severity] < SEVERITY_RANK[input.minSeverity]\r\n )\r\n continue;\r\n\r\n if (isSuppressed(diagnostic.rule, diagnostic.location.line)) continue;\r\n\r\n diagnostics.push(diagnostic);\r\n }\r\n\r\n if (rule.id === \"react-luau/parse-error\" && findings.length > 0) break;\r\n }\r\n\r\n const filteredDiagnostics = removeSupersededDiagnostics(diagnostics);\r\n\r\n return {\r\n relativePath: input.relativePath,\r\n isReactFile: model.isReactFile,\r\n scanned: true,\r\n diagnostics: filteredDiagnostics,\r\n };\r\n } finally {\r\n if (!tree) parsedTree.delete?.();\r\n }\r\n}\r\n",
6
+ "import crypto from \"node:crypto\";\r\nimport type { SyntaxTree } from \"./syntax\";\r\nimport { createRuleContext } from \"./ast/context\";\r\nimport { buildReactModel } from \"./ast/react-model\";\r\nimport { effectiveSeverity } from \"./config\";\r\nimport { createInlineSuppressionChecker } from \"./inline-disables\";\r\nimport { parseLuau } from \"./parser\";\r\nimport { rules } from \"./rules\";\r\nimport { parseErrors } from \"./rules/parse-errors\";\r\n\r\nimport type {\r\n Category,\r\n Diagnostic,\r\n DiagnosticInput,\r\n DoctorConfig,\r\n ProjectModel,\r\n Severity,\r\n SourceFile,\r\n RuleDefinition,\r\n} from \"./types\";\r\n\r\nconst SEVERITY_RANK: Record<Severity, number> = {\r\n suggestion: 0,\r\n warning: 1,\r\n error: 2,\r\n};\r\n\r\nexport interface ReactFileAnalysisInput {\r\n absolutePath: string;\r\n relativePath: string;\r\n source: string;\r\n forceScan: boolean;\r\n project: ProjectModel;\r\n config: DoctorConfig;\r\n categories?: Category[];\r\n minSeverity: Severity;\r\n respectInlineDisables: boolean;\r\n lsp?: boolean;\r\n}\r\n\r\nexport interface ReactFileAnalysisResult {\r\n relativePath: string;\r\n isReactFile: boolean;\r\n scanned: boolean;\r\n diagnostics: Diagnostic[];\r\n unverified?: boolean;\r\n}\r\n\r\nfunction diagnosticId(\r\n file: string,\r\n rule: string,\r\n startIndex: number,\r\n message: string,\r\n): string {\r\n return crypto\r\n .createHash(\"sha256\")\r\n .update(`${file}\\0${rule}\\0${startIndex}\\0${message}`)\r\n .digest(\"hex\")\r\n .slice(0, 16);\r\n}\r\n\r\nfunction nodeLocation(node: DiagnosticInput[\"node\"]): Diagnostic[\"location\"] {\r\n return {\r\n line: node.startPosition.row + 1,\r\n column: node.startPosition.column + 1,\r\n endLine: node.endPosition.row + 1,\r\n endColumn: node.endPosition.column + 1,\r\n };\r\n}\r\n\r\nfunction sameLocation(\r\n left: Diagnostic[\"location\"],\r\n right: Diagnostic[\"location\"],\r\n): boolean {\r\n return (\r\n left.line === right.line &&\r\n left.column === right.column &&\r\n left.endLine === right.endLine &&\r\n left.endColumn === right.endColumn\r\n );\r\n}\r\n\r\nfunction removeSupersededDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] {\r\n return diagnostics.filter((diagnostic) => {\r\n if (diagnostic.rule !== \"react-luau/rerender-high-frequency-state\")\r\n return true;\r\n\r\n return !diagnostics.some(\r\n (candidate) =>\r\n candidate.rule === \"react-luau/prefer-binding-over-state\" &&\r\n sameLocation(candidate.location, diagnostic.location) &&\r\n SEVERITY_RANK[candidate.severity] >= SEVERITY_RANK[diagnostic.severity],\r\n );\r\n });\r\n}\r\n\r\nfunction toDiagnostic(\r\n file: SourceFile,\r\n ruleId: string,\r\n category: Diagnostic[\"category\"],\r\n severity: Severity,\r\n input: DiagnosticInput,\r\n): Diagnostic {\r\n const node = input.node;\r\n const highlights = input.highlights?.map(nodeLocation);\r\n\r\n return {\r\n id: diagnosticId(file.relativePath, ruleId, node.startIndex, input.message),\r\n rule: ruleId,\r\n category,\r\n severity: input.severity ?? severity,\r\n message: input.message,\r\n summary: input.summary,\r\n explanation: input.explanation,\r\n help: input.help,\r\n caveat: input.caveat,\r\n file: file.relativePath,\r\n location: nodeLocation(node),\r\n highlights: highlights && highlights.length > 0 ? highlights : undefined,\r\n fixPreview: input.fixPreview,\r\n\r\n editorRanges: input.editorRanges?.map(({ node, summary }) => ({\r\n location: nodeLocation(node),\r\n summary,\r\n })),\r\n };\r\n}\r\n\r\nexport async function analyzeReactFile(\r\n input: ReactFileAnalysisInput,\r\n tree?: SyntaxTree,\r\n selectedRules: readonly RuleDefinition[] = rules,\r\n): Promise<ReactFileAnalysisResult> {\r\n const parsedTree = tree ?? (await parseLuau(input.source));\r\n\r\n try {\r\n const model = buildReactModel(parsedTree.rootNode, input.project);\r\n\r\n if (!input.forceScan && !model.isReactFile) {\r\n return {\r\n relativePath: input.relativePath,\r\n isReactFile: false,\r\n scanned: false,\r\n diagnostics: [],\r\n };\r\n }\r\n\r\n const file: SourceFile = {\r\n absolutePath: input.absolutePath,\r\n relativePath: input.relativePath,\r\n source: input.source,\r\n tree: parsedTree,\r\n root: parsedTree.rootNode,\r\n model,\r\n project: input.project,\r\n };\r\n\r\n const context = createRuleContext(file);\r\n const syntaxFindings = parsedTree.rootNode.hasError ? parseErrors.run(context) : [];\r\n\r\n const categorySet =\r\n input.categories && input.categories.length > 0\r\n ? new Set(input.categories)\r\n : null;\r\n\r\n const isSuppressed = input.respectInlineDisables\r\n ? createInlineSuppressionChecker(input.source)\r\n : () => false;\r\n\r\n const diagnostics: Diagnostic[] = [];\r\n\r\n for (const rule of selectedRules) {\r\n if (input.lsp && rule.lspEnabled === false) continue;\r\n if (categorySet && !categorySet.has(rule.category)) continue;\r\n\r\n const severity = effectiveSeverity(rule.severity, rule.id, input.config);\r\n\r\n if (!severity) continue;\r\n\r\n const findings = rule.id === parseErrors.id ? syntaxFindings : rule.run(context);\r\n\r\n for (const finding of findings) {\r\n const configuredSeverity = input.config.rules?.[rule.id];\r\n\r\n const diagnostic = toDiagnostic(\r\n file,\r\n rule.id,\r\n rule.category,\r\n severity,\r\n {\r\n ...finding,\r\n\r\n severity:\r\n configuredSeverity && configuredSeverity !== \"off\"\r\n ? severity\r\n : finding.severity,\r\n },\r\n );\r\n\r\n if (\r\n SEVERITY_RANK[diagnostic.severity] < SEVERITY_RANK[input.minSeverity]\r\n )\r\n continue;\r\n\r\n if (isSuppressed(diagnostic.rule, diagnostic.location.line)) continue;\r\n\r\n diagnostics.push(diagnostic);\r\n }\r\n\r\n if (rule.id === \"react-luau/parse-error\" && findings.length > 0) break;\r\n }\r\n\r\n const filteredDiagnostics = removeSupersededDiagnostics(diagnostics);\r\n\r\n return {\r\n relativePath: input.relativePath,\r\n isReactFile: model.isReactFile,\r\n scanned: true,\r\n diagnostics: filteredDiagnostics,\r\n unverified: syntaxFindings.length > 0,\r\n };\r\n } finally {\r\n if (!tree) parsedTree.delete?.();\r\n }\r\n}\r\n",
7
7
  "import type { SyntaxNode } from \"../syntax\";\r\n\r\nexport function walk(node: SyntaxNode): SyntaxNode[] {\r\n const result: SyntaxNode[] = [];\r\n const stack = [node];\r\n\r\n while (stack.length > 0) {\r\n const current = stack.pop()!;\r\n result.push(current);\r\n\r\n const children = current.namedChildren;\r\n for (let index = children.length - 1; index >= 0; index -= 1) {\r\n stack.push(children[index]);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function ancestors(node: SyntaxNode): SyntaxNode[] {\r\n const result: SyntaxNode[] = [];\r\n let current = node.parent;\r\n while (current) {\r\n result.push(current);\r\n current = current.parent;\r\n }\r\n return result;\r\n}\r\n\r\nexport function nearestAncestor(node: SyntaxNode, predicate: (candidate: SyntaxNode) => boolean): SyntaxNode | null {\r\n let current = node.parent;\r\n while (current) {\r\n if (predicate(current)) return current;\r\n current = current.parent;\r\n }\r\n return null;\r\n}\r\n\r\nexport function descendantsOfType(node: SyntaxNode, type: string): SyntaxNode[] {\r\n const result: SyntaxNode[] = [];\r\n for (const candidate of walk(node)) {\r\n if (candidate.type === type) result.push(candidate);\r\n }\r\n return result;\r\n}\r\n\r\n\r\nexport function parameterBindingNames(parameters: SyntaxNode | null | undefined): string[] {\r\n if (!parameters) return [];\r\n const result: string[] = [];\r\n for (const parameter of parameters.namedChildren) {\r\n if (parameter.type !== \"parameter\") continue;\r\n const identifier = parameter.namedChildren.find((child) => child.type === \"identifier\");\r\n if (identifier) result.push(identifier.text);\r\n }\r\n return [...new Set(result)];\r\n}\r\n\r\nexport function rootIdentifier(text: string): string | null {\r\n const match = text.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/);\r\n return match?.[1] ?? null;\r\n}\r\n\r\nexport function normalizeExpressionText(text: string): string {\r\n return text.replace(/\\s+/g, \"\").replace(/^\\((.*)\\)$/s, \"$1\");\r\n}\r\n\r\nexport function nodeKey(node: SyntaxNode): number {\r\n return node.id;\r\n}\r\n\r\nexport function sameNode(left: SyntaxNode | null | undefined, right: SyntaxNode | null | undefined): boolean {\r\n return Boolean(left && right && nodeKey(left) === nodeKey(right));\r\n}\r\n",
8
8
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, RuleContext, SourceFile } from \"../types\";\r\nimport { nodeKey, normalizeExpressionText, walk } from \"./walk\";\r\n\r\nexport function createRuleContext(file: SourceFile): RuleContext {\r\n // buildReactModel already materialized the root traversal. Reuse those node\r\n // wrappers here and only materialize subtrees lazily when a rule needs one.\r\n const allNodes = file.model.allNodes;\r\n const calls = allNodes.filter((node) => node.type === \"function_call\");\r\n const traversalCache = new Map<number, SyntaxNode[]>([[file.root.id, allNodes]]);\r\n const callPathCache = new Map<number, string | null>();\r\n const resolvedCallPathCache = new Map<string, string>();\r\n const nearestFunctionCache = new Map<number, FunctionInfo | null>();\r\n const componentCache = new Map<number, FunctionInfo | null>();\r\n\r\n const traversal = (node: SyntaxNode): SyntaxNode[] => {\r\n const key = node.id;\r\n const existing = traversalCache.get(key);\r\n if (existing) return existing;\r\n const result = walk(node);\r\n traversalCache.set(key, result);\r\n return result;\r\n };\r\n\r\n const getCallPath = (node: SyntaxNode): string | null => {\r\n if (node.type !== \"function_call\") return null;\r\n const key = node.id;\r\n if (callPathCache.has(key)) return callPathCache.get(key) ?? null;\r\n const name = node.childForFieldName(\"name\");\r\n const result = name ? normalizeExpressionText(name.text) : null;\r\n callPathCache.set(key, result);\r\n return result;\r\n };\r\n\r\n const resolveCallPath = (value: string): string => {\r\n const normalized = normalizeExpressionText(value);\r\n const cached = resolvedCallPathCache.get(normalized);\r\n if (cached) return cached;\r\n\r\n const direct = file.model.aliases.get(normalized);\r\n if (direct) {\r\n resolvedCallPathCache.set(normalized, direct);\r\n return direct;\r\n }\r\n\r\n const namespaceMatch = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(.+)$/);\r\n let result = normalized;\r\n if (namespaceMatch && file.model.reactNamespaces.has(namespaceMatch[1])) {\r\n result = `React.${namespaceMatch[2]}`;\r\n } else if (namespaceMatch && file.model.reactRobloxNamespaces.has(namespaceMatch[1])) {\r\n result = `ReactRoblox.${namespaceMatch[2]}`;\r\n }\r\n resolvedCallPathCache.set(normalized, result);\r\n return result;\r\n };\r\n\r\n const callArguments = (node: SyntaxNode): SyntaxNode[] => {\r\n return node.childForFieldName(\"arguments\")?.namedChildren ?? [];\r\n };\r\n\r\n const nearestFunction = (node: SyntaxNode): FunctionInfo | null => {\r\n const key = node.id;\r\n if (nearestFunctionCache.has(key)) return nearestFunctionCache.get(key) ?? null;\r\n\r\n const visited: number[] = [key];\r\n let current = node.parent;\r\n let result: FunctionInfo | null = null;\r\n while (current) {\r\n const info = file.model.functionByNode.get(nodeKey(current));\r\n if (info) {\r\n result = info;\r\n break;\r\n }\r\n if (nearestFunctionCache.has(current.id)) {\r\n result = nearestFunctionCache.get(current.id) ?? null;\r\n break;\r\n }\r\n visited.push(current.id);\r\n current = current.parent;\r\n }\r\n\r\n for (const visitedKey of visited) nearestFunctionCache.set(visitedKey, result);\r\n return result;\r\n };\r\n\r\n const containingComponent = (node: SyntaxNode): FunctionInfo | null => {\r\n const key = node.id;\r\n if (componentCache.has(key)) return componentCache.get(key) ?? null;\r\n\r\n const visited: number[] = [key];\r\n let current = node.parent;\r\n let result: FunctionInfo | null = null;\r\n while (current) {\r\n const info = file.model.functionByNode.get(nodeKey(current));\r\n if (info?.isComponent) {\r\n result = info;\r\n break;\r\n }\r\n if (componentCache.has(current.id)) {\r\n result = componentCache.get(current.id) ?? null;\r\n break;\r\n }\r\n visited.push(current.id);\r\n current = current.parent;\r\n }\r\n\r\n for (const visitedKey of visited) componentCache.set(visitedKey, result);\r\n return result;\r\n };\r\n\r\n const isDirectlyExecutedInFunction = (node: SyntaxNode, fn: FunctionInfo): boolean => nearestFunction(node) === fn;\r\n\r\n return {\r\n ...file,\r\n findCalls: () => calls,\r\n getCallPath,\r\n resolveCallPath,\r\n callArguments,\r\n nearestFunction,\r\n containingComponent,\r\n isDirectlyExecutedInFunction,\r\n walk: (node = file.root) => traversal(node),\r\n };\r\n}\r\n",
9
9
  "import path from \"node:path\";\r\n\r\nexport interface ModuleIdentity {\r\n id: string;\r\n keys: string[];\r\n}\r\n\r\nfunction normalizeRelative(value: string): string {\r\n return value.split(path.sep).join(\"/\");\r\n}\r\n\r\nexport function moduleKeys(relativePath: string): string[] {\r\n let normalized = normalizeRelative(relativePath).replace(/\\.(?:lua|luau)$/i, \"\");\r\n if (normalized.endsWith(\"/init\")) normalized = normalized.slice(0, -\"/init\".length);\r\n const segments = normalized.split(\"/\").filter(Boolean);\r\n if (segments[0]?.toLowerCase() === \"src\") segments.shift();\r\n\r\n const keys = new Set<string>();\r\n for (let index = 0; index < segments.length; index += 1) {\r\n const suffix = segments.slice(index).join(\".\").toLowerCase();\r\n if (suffix) keys.add(suffix);\r\n }\r\n return [...keys];\r\n}\r\n\r\nexport function normalizeRequireTarget(text: string): string {\r\n return (text.match(/[A-Za-z_][A-Za-z0-9_]*/g) ?? []).join(\".\").toLowerCase();\r\n}\r\n\r\n/**\r\n * Builds feature aliases only when an alias uniquely identifies one module in\r\n * the entire project. This prevents basename collisions and overlapping names\r\n * when one module name is merely a suffix of another or when multiple\r\n * directories contain modules with the same basename.\r\n */\r\nexport function buildUniqueFeatureAliases<T>(\r\n modules: ModuleIdentity[],\r\n featureByModuleId: Map<string, T>,\r\n): Map<string, T> {\r\n const owners = new Map<string, Set<string>>();\r\n for (const module of modules) {\r\n for (const key of module.keys) {\r\n const ids = owners.get(key) ?? new Set<string>();\r\n ids.add(module.id);\r\n owners.set(key, ids);\r\n }\r\n }\r\n\r\n const aliases = new Map<string, T>();\r\n for (const module of modules) {\r\n const value = featureByModuleId.get(module.id);\r\n if (value === undefined) continue;\r\n for (const key of module.keys) {\r\n const ids = owners.get(key);\r\n if (ids?.size === 1 && ids.has(module.id)) aliases.set(key, value);\r\n }\r\n }\r\n return aliases;\r\n}\r\n\r\nexport function resolveModuleReference<T>(target: string, aliases: Map<string, T>): T | null {\r\n // Module aliases are segment suffixes (for example `foo.bar` and `bar`).\r\n // Walk those suffixes directly instead of scanning every alias in the project\r\n // for every require expression. The first hit is necessarily the longest one.\r\n let candidate = target;\r\n while (true) {\r\n if (aliases.has(candidate)) return aliases.get(candidate)!;\r\n const separator = candidate.indexOf(\".\");\r\n if (separator < 0) return null;\r\n candidate = candidate.slice(separator + 1);\r\n }\r\n}\r\n",
10
10
  "import { normalizeRequireTarget, resolveModuleReference } from \"../module-resolution\";\r\nimport type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, ProjectModel, ReactModel, StateBinding } from \"../types\";\r\nimport { nodeKey, normalizeExpressionText, parameterBindingNames, sameNode, walk } from \"./walk\";\r\n\r\nconst REACT_HOOKS = new Set([\r\n \"useState\",\r\n \"useEffect\",\r\n \"useLayoutEffect\",\r\n \"useMemo\",\r\n \"useCallback\",\r\n \"useContext\",\r\n \"useReducer\",\r\n \"useRef\",\r\n \"useImperativeHandle\",\r\n \"useBinding\",\r\n]);\r\n\r\nconst REACT_MEMBERS = new Set([...REACT_HOOKS, \"createElement\", \"createContext\", \"createBinding\", \"memo\", \"joinBindings\"]);\r\nconst STABLE_CUSTOM_HOOK_RETURN = /^(?:set[A-Z0-9_]|dispatch$|send$|emit$|fire$)/i;\r\nconst INSTANCE_FACTORY_MEMBERS = new Set([\r\n \"Clone\",\r\n \"FindFirstAncestor\",\r\n \"FindFirstAncestorOfClass\",\r\n \"FindFirstAncestorWhichIsA\",\r\n \"FindFirstChild\",\r\n \"FindFirstChildOfClass\",\r\n \"FindFirstChildWhichIsA\",\r\n \"GetButton\",\r\n \"GetMouse\",\r\n \"GetService\",\r\n \"WaitForChild\",\r\n]);\r\nconst STABLE_ENGINE_FACTORY_MEMBERS = new Set([\"GetMouse\", \"GetService\"]);\r\n\r\nfunction identifiersFromParameters(node: SyntaxNode | null): string[] {\r\n return parameterBindingNames(node);\r\n}\r\n\r\nfunction getFunctionName(node: SyntaxNode): string | null {\r\n if (node.type === \"function_declaration\") {\r\n return node.childForFieldName(\"name\")?.text ?? null;\r\n }\r\n\r\n if (node.type !== \"function_definition\") return null;\r\n let owner = node.parent;\r\n while (owner && owner.type !== \"variable_declaration\") {\r\n if (owner.type === \"function_definition\" || owner.type === \"function_declaration\") return null;\r\n owner = owner.parent;\r\n }\r\n if (!owner) return null;\r\n\r\n const prefix = owner.text.slice(0, Math.max(0, node.startIndex - owner.startIndex));\r\n const directMatch = prefix.match(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*$/s);\r\n if (directMatch) return directMatch[1];\r\n\r\n const wrappedMatch = prefix.match(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*[A-Za-z_][A-Za-z0-9_.]*\\s*\\(\\s*$/s);\r\n return wrappedMatch?.[1] ?? null;\r\n}\r\n\r\nfunction requireTargetContainsModule(target: string, moduleName: string): boolean {\r\n return (target.match(/[A-Za-z_][A-Za-z0-9_]*/g) ?? [])\r\n .some((token) => token.toLowerCase() === moduleName.toLowerCase());\r\n}\r\n\r\nfunction resolvePath(\r\n rawPath: string,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): string {\r\n const normalized = normalizeExpressionText(rawPath);\r\n const direct = aliases.get(normalized);\r\n if (direct) return direct;\r\n\r\n const namespaceMatch = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(.+)$/);\r\n if (namespaceMatch && reactNamespaces.has(namespaceMatch[1])) return `React.${namespaceMatch[2]}`;\r\n if (namespaceMatch && reactRobloxNamespaces.has(namespaceMatch[1])) return `ReactRoblox.${namespaceMatch[2]}`;\r\n return normalized;\r\n}\r\n\r\nfunction directCalls(node: SyntaxNode): SyntaxNode[] {\r\n const result: SyntaxNode[] = [];\r\n const pending = [...node.namedChildren];\r\n while (pending.length > 0) {\r\n const child = pending.pop()!;\r\n if (child.type === \"function_definition\" || child.type === \"function_declaration\") continue;\r\n if (child.type === \"function_call\") result.push(child);\r\n pending.push(...child.namedChildren);\r\n }\r\n return result;\r\n}\r\n\r\nfunction hasDirectCreateElementCall(\r\n node: SyntaxNode,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): boolean {\r\n return directCalls(node).some((call) => {\r\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(name, aliases, reactNamespaces, reactRobloxNamespaces);\r\n return path === \"React.createElement\" || path === \"ReactRoblox.createPortal\";\r\n });\r\n}\r\n\r\nfunction hasDirectHookCall(\r\n node: SyntaxNode,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n importedHookKinds: Map<string, boolean>,\r\n): boolean {\r\n return directCalls(node).some((call) => {\r\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(name, aliases, reactNamespaces, reactRobloxNamespaces);\r\n const normalizedName = normalizeExpressionText(name);\r\n const importedKind = importedHookKinds.get(normalizedName);\r\n if (importedKind !== undefined) return importedKind;\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n return /^use[A-Z0-9_]/.test(final);\r\n });\r\n}\r\n\r\nfunction isMemoWrappedFunction(\r\n node: SyntaxNode,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n): boolean {\r\n const argumentsNode = node.parent;\r\n const call = argumentsNode?.type === \"arguments\" ? argumentsNode.parent : null;\r\n if (!call || call.type !== \"function_call\") return false;\r\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\r\n return resolvePath(name, aliases, reactNamespaces, new Set()) === \"React.memo\";\r\n}\r\n\r\nfunction isModuleReturnedFunction(node: SyntaxNode): boolean {\r\n const expressionList = node.parent;\r\n const returnStatement = expressionList?.type === \"expression_list\" ? expressionList.parent : null;\r\n if (!returnStatement || returnStatement.type !== \"return_statement\") return false;\r\n let current = returnStatement.parent;\r\n while (current) {\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\r\n current = current.parent;\r\n }\r\n return true;\r\n}\r\n\r\nfunction collectDirectLocals(body: SyntaxNode | null): Set<string> {\r\n const locals = new Set<string>();\r\n if (!body) return locals;\r\n\r\n for (const child of body.namedChildren) {\r\n if (child.type === \"variable_declaration\") {\r\n const beforeEquals = child.text.split(\"=\")[0] ?? \"\";\r\n const localPart = beforeEquals.replace(/^\\s*local\\s+/, \"\");\r\n for (const piece of localPart.split(\",\")) {\r\n const match = piece.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/);\r\n if (match) locals.add(match[1]);\r\n }\r\n } else if (child.type === \"function_declaration\") {\r\n const name = child.childForFieldName(\"name\")?.text;\r\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) locals.add(name);\r\n }\r\n }\r\n\r\n return locals;\r\n}\r\n\r\nfunction nearestFunctionInfo(node: SyntaxNode, functionByNode: Map<number, FunctionInfo>): FunctionInfo | null {\r\n let current = node.parent;\r\n while (current) {\r\n const info = functionByNode.get(nodeKey(current));\r\n if (info) return info;\r\n current = current.parent;\r\n }\r\n return null;\r\n}\r\n\r\nfunction declarationCall(node: SyntaxNode): SyntaxNode | null {\r\n if (node.type !== \"variable_declaration\") return null;\r\n for (const child of walk(node)) {\r\n if (child.type === \"function_call\") return child;\r\n if (!sameNode(child, node) && (child.type === \"function_definition\" || child.type === \"function_declaration\")) return null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction declarationNames(node: SyntaxNode): string[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const variableList = assignment?.namedChildren.find((child) => child.type === \"variable_list\");\r\n return variableList?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [];\r\n}\r\n\r\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\r\n return expressionList?.namedChildren ?? [];\r\n}\r\n\r\nfunction isSyntacticallyStableInitializer(node: SyntaxNode | undefined): boolean {\r\n if (!node) return false;\r\n return [\"nil\", \"true\", \"false\", \"number\", \"string\", \"string_content\"].includes(node.type)\r\n || /^(?:nil|true|false|-?\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)$/i.test(node.text.trim());\r\n}\r\n\r\n\r\nfunction finalCallMember(path: string): string {\r\n return path.split(/[.:]/).at(-1) ?? path;\r\n}\r\n\r\nfunction expressionCreatesInstance(\r\n node: SyntaxNode | undefined,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): boolean {\r\n if (!node) return false;\r\n const text = node.text.trim();\r\n if (/^(?:workspace|game|script)(?:\\.|:|$)/.test(text)) return true;\r\n\r\n for (const candidate of walk(node)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n const rawPath = candidate.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n if (path === \"Instance.new\" || INSTANCE_FACTORY_MEMBERS.has(finalCallMember(path))) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction expressionIsStableEngineObject(\r\n node: SyntaxNode | undefined,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): boolean {\r\n if (!node) return false;\r\n const calls = [...walk(node)].filter((candidate) => candidate.type === \"function_call\");\r\n if (calls.length !== 1) return false;\r\n const rawPath = calls[0].childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n return STABLE_ENGINE_FACTORY_MEMBERS.has(finalCallMember(path));\r\n}\r\n\r\nfunction memoReturnsInstance(\r\n callback: SyntaxNode | undefined,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): boolean {\r\n if (!callback || callback.type !== \"function_definition\") return false;\r\n for (const candidate of walk(callback)) {\r\n if (candidate.type !== \"return_statement\") continue;\r\n if (expressionCreatesInstance(candidate, aliases, reactNamespaces, reactRobloxNamespaces)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction isEmptyDependencyTable(node: SyntaxNode | undefined): boolean {\r\n return Boolean(node?.type === \"table_constructor\" && node.namedChildren.every((child) => child.type !== \"field\"));\r\n}\r\n\r\n\r\nfunction importedHookKinds(\r\n declarations: SyntaxNode[],\r\n project: ProjectModel | undefined,\r\n): Map<string, boolean> {\r\n const result = new Map<string, boolean>();\r\n if (!project) return result;\r\n\r\n for (const declaration of declarations) {\r\n const match = declaration.text.match(\r\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\r\n );\r\n if (!match || !/^use[A-Z0-9_]/.test(match[1])) continue;\r\n const kind = resolveModuleReference(\r\n normalizeRequireTarget(match[2]),\r\n project.reactHookModules,\r\n );\r\n if (kind !== null) result.set(match[1], kind);\r\n }\r\n return result;\r\n}\r\n\r\nexport function buildReactModel(root: SyntaxNode, project?: ProjectModel): ReactModel {\r\n const reactNamespaces = new Set<string>();\r\n const reactRobloxNamespaces = new Set<string>();\r\n const aliases = new Map<string, string>();\r\n const stateSetters = new Map<string, string>();\r\n const stateValues = new Map<string, string>();\r\n const stateBindings: StateBinding[] = [];\r\n const refVariables = new Set<string>();\r\n const bindingSetters = new Set<string>();\r\n const stableVariables = new Set<string>();\r\n const refVariablesByFunction = new Map<number, Set<string>>();\r\n const stableVariablesByFunction = new Map<number, Set<string>>();\r\n const externalMutableVariablesByFunction = new Map<number, Set<string>>();\r\n const instanceVariablesByFunction = new Map<number, Set<string>>();\r\n\r\n const allNodes = [...walk(root)];\r\n const declarations = allNodes.filter((node) => node.type === \"variable_declaration\");\r\n const projectHookKinds = importedHookKinds(declarations, project);\r\n let isReactFile = false;\r\n\r\n for (const declaration of declarations) {\r\n const text = declaration.text;\r\n const requireMatch = text.match(/^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s);\r\n if (!requireMatch) continue;\r\n const [, localName, target] = requireMatch;\r\n if (requireTargetContainsModule(target, \"ReactRoblox\")) {\r\n reactRobloxNamespaces.add(localName);\r\n isReactFile = true;\r\n } else if (requireTargetContainsModule(target, \"React\")) {\r\n reactNamespaces.add(localName);\r\n isReactFile = true;\r\n }\r\n }\r\n\r\n for (const node of allNodes) {\r\n if (node.type !== \"function_call\") continue;\r\n const rawPath = normalizeExpressionText(node.childForFieldName(\"name\")?.text ?? \"\");\r\n const memberMatch = rawPath.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)$/);\r\n if (!memberMatch) continue;\r\n const [, namespace, member] = memberMatch;\r\n if (namespace === \"React\" && REACT_MEMBERS.has(member)) {\r\n reactNamespaces.add(namespace);\r\n isReactFile = true;\r\n } else if (namespace === \"ReactRoblox\" && [\"createRoot\", \"createPortal\"].includes(member)) {\r\n reactRobloxNamespaces.add(namespace);\r\n isReactFile = true;\r\n }\r\n }\r\n\r\n for (const declaration of declarations) {\r\n const text = declaration.text;\r\n const aliasMatch = text.match(/^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)\\s*$/s);\r\n if (!aliasMatch) continue;\r\n const [, localName, namespace, member] = aliasMatch;\r\n if (reactNamespaces.has(namespace) && REACT_MEMBERS.has(member)) aliases.set(localName, `React.${member}`);\r\n if (reactRobloxNamespaces.has(namespace) && [\"createRoot\", \"createPortal\"].includes(member)) {\r\n aliases.set(localName, `ReactRoblox.${member}`);\r\n }\r\n }\r\n\r\n const functions: FunctionInfo[] = [];\r\n const functionByNode = new Map<number, FunctionInfo>();\r\n\r\n for (const node of allNodes) {\r\n if (node.type !== \"function_declaration\" && node.type !== \"function_definition\") continue;\r\n const name = getFunctionName(node);\r\n const body = node.childForFieldName(\"body\");\r\n const parameters = identifiersFromParameters(node.childForFieldName(\"parameters\"));\r\n const info: FunctionInfo = {\r\n node,\r\n body,\r\n name,\r\n parameters,\r\n isHook: Boolean(isReactFile && name && /^use[A-Z0-9_]/.test(name)),\r\n isComponent: false,\r\n };\r\n functions.push(info);\r\n functionByNode.set(nodeKey(node), info);\r\n }\r\n\r\n const functionsBySimpleName = new Map<string, FunctionInfo[]>();\r\n for (const info of functions) {\r\n if (!info.name || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(info.name)) continue;\r\n const existing = functionsBySimpleName.get(info.name) ?? [];\r\n existing.push(info);\r\n functionsBySimpleName.set(info.name, existing);\r\n }\r\n\r\n for (const info of functions) {\r\n if (!isReactFile || !info.body || info.isHook) continue;\r\n const simplePascalName = Boolean(info.name && /^[A-Z][A-Za-z0-9_]*$/.test(info.name));\r\n const hasHooks = hasDirectHookCall(\r\n info.body,\r\n aliases,\r\n reactNamespaces,\r\n reactRobloxNamespaces,\r\n projectHookKinds,\r\n );\r\n const renders = hasDirectCreateElementCall(info.body, aliases, reactNamespaces, reactRobloxNamespaces);\r\n if (hasHooks || isMemoWrappedFunction(info.node, aliases, reactNamespaces) || (simplePascalName && renders)) {\r\n info.isComponent = true;\r\n } else if (!info.name && isModuleReturnedFunction(info.node) && hasHooks) {\r\n info.isComponent = true;\r\n }\r\n }\r\n\r\n for (const call of allNodes) {\r\n if (call.type !== \"function_call\") continue;\r\n const rawPath = call.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n if (path !== \"React.createElement\") continue;\r\n const element = call.childForFieldName(\"arguments\")?.namedChildren[0]?.text.trim() ?? \"\";\r\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(element)) continue;\r\n for (const info of functionsBySimpleName.get(element) ?? []) info.isComponent = true;\r\n }\r\n\r\n const addScopedVariable = (map: Map<number, Set<string>>, owner: FunctionInfo | null, name: string): void => {\r\n if (!owner) return;\r\n const key = nodeKey(owner.node);\r\n const names = map.get(key) ?? new Set<string>();\r\n names.add(name);\r\n map.set(key, names);\r\n };\r\n\r\n for (const declaration of declarations) {\r\n const names = declarationNames(declaration);\r\n const expressions = declarationExpressions(declaration);\r\n const owner = nearestFunctionInfo(declaration, functionByNode);\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const expression = expressions[index] ?? expressions[0];\r\n if (isSyntacticallyStableInitializer(expression) || expressionIsStableEngineObject(expression, aliases, reactNamespaces, reactRobloxNamespaces)) {\r\n stableVariables.add(names[index]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[index]);\r\n }\r\n if (expressionCreatesInstance(expression, aliases, reactNamespaces, reactRobloxNamespaces)) {\r\n addScopedVariable(externalMutableVariablesByFunction, owner, names[index]);\r\n addScopedVariable(instanceVariablesByFunction, owner, names[index]);\r\n }\r\n }\r\n\r\n const call = declarationCall(declaration);\r\n if (!call) continue;\r\n const rawPath = call.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n const args = call.childForFieldName(\"arguments\")?.namedChildren ?? [];\r\n\r\n if (path === \"React.joinBindings\" && names.length >= 1) {\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\r\n } else if (path === \"React.useState\" && names.length >= 2) {\r\n const [valueName, setterName] = names;\r\n stateSetters.set(setterName, valueName);\r\n stateValues.set(valueName, setterName);\r\n stableVariables.add(setterName);\r\n addScopedVariable(stableVariablesByFunction, owner, setterName);\r\n stateBindings.push({\r\n valueName,\r\n setterName,\r\n declaration,\r\n call,\r\n initializer: args[0] ?? null,\r\n owner,\r\n });\r\n } else if (path === \"React.useReducer\" && names.length >= 2) {\r\n stableVariables.add(names[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\r\n } else if (path === \"React.useBinding\" && names.length >= 1) {\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n if (names.length >= 2) {\r\n stableVariables.add(names[1]);\r\n bindingSetters.add(names[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\r\n }\r\n } else if (path === \"React.useMemo\" && names.length >= 1) {\r\n if (isEmptyDependencyTable(args[1])) {\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n }\r\n if (memoReturnsInstance(args[0], aliases, reactNamespaces, reactRobloxNamespaces)) {\r\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\r\n addScopedVariable(instanceVariablesByFunction, owner, names[0]);\r\n }\r\n } else if (path === \"React.useCallback\" && names.length >= 1 && isEmptyDependencyTable(args[1])) {\r\n // Empty-dependency callbacks keep a stable identity. Their own stale captures are\r\n // diagnosed on the useCallback dependency table instead of cascading into every\r\n // effect that consumes the callback.\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n } else if (path === \"React.useRef\" && names.length >= 1) {\r\n stableVariables.add(names[0]);\r\n refVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n addScopedVariable(refVariablesByFunction, owner, names[0]);\r\n } else {\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n if (/^use[A-Z0-9_]/.test(final)) {\r\n for (const name of names.slice(1)) {\r\n if (!STABLE_CUSTOM_HOOK_RETURN.test(name)) continue;\r\n stableVariables.add(name);\r\n addScopedVariable(stableVariablesByFunction, owner, name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // React state/binding hooks can be assigned into previously declared locals.\r\n // The setter/Binding contracts are still stable even when the declaration and hook\r\n // call are split across statements. Rules-of-hooks separately reports conditional calls.\r\n for (const assignment of allNodes) {\r\n if (assignment.type !== \"assignment_statement\" || assignment.parent?.type === \"variable_declaration\") continue;\r\n const owner = nearestFunctionInfo(assignment, functionByNode);\r\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\r\n const variableList = assignment.namedChildren.find((child) => child.type === \"variable_list\");\r\n const expressionList = assignment.namedChildren.find((child) => child.type === \"expression_list\");\r\n const names = variableList?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [];\r\n const expression = expressionList?.namedChildren[0];\r\n if (!expression || expression.type !== \"function_call\") continue;\r\n const rawPath = expression.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n\r\n if (path === \"React.useState\" && names.length >= 2) {\r\n stableVariables.add(names[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\r\n } else if (path === \"React.useBinding\" && names.length >= 1) {\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\r\n if (names.length >= 2) {\r\n stableVariables.add(names[1]);\r\n bindingSetters.add(names[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\r\n }\r\n }\r\n }\r\n\r\n // Binding-like values are stable mutable handles. Custom React-Luau animation hooks\r\n // often return bindings without the analyzer knowing the hook implementation. Infer\r\n // them from Binding-only APIs instead of requiring them in dependency arrays.\r\n for (const call of allNodes) {\r\n if (call.type !== \"function_call\") continue;\r\n const rawPath = normalizeExpressionText(call.childForFieldName(\"name\")?.text ?? \"\");\r\n const match = rawPath.match(/^([A-Za-z_][A-Za-z0-9_]*):(?:getValue|map)$/);\r\n if (!match) continue;\r\n const owner = nearestFunctionInfo(call, functionByNode);\r\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\r\n stableVariables.add(match[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, match[1]);\r\n addScopedVariable(externalMutableVariablesByFunction, owner, match[1]);\r\n }\r\n\r\n const componentLocals = new Map<number, Set<string>>();\r\n for (const info of functions) {\r\n if (!info.isComponent && !info.isHook) continue;\r\n const names = collectDirectLocals(info.body);\r\n for (const parameter of info.parameters) names.add(parameter);\r\n if (info.name?.includes(\":\")) names.add(\"self\");\r\n componentLocals.set(nodeKey(info.node), names);\r\n }\r\n\r\n return {\r\n allNodes,\r\n isReactFile,\r\n reactNamespaces,\r\n reactRobloxNamespaces,\r\n aliases,\r\n stateSetters,\r\n stateValues,\r\n stateBindings,\r\n refVariables,\r\n bindingSetters,\r\n stableVariables,\r\n refVariablesByFunction,\r\n stableVariablesByFunction,\r\n externalMutableVariablesByFunction,\r\n instanceVariablesByFunction,\r\n componentLocals,\r\n functions,\r\n functionByNode,\r\n };\r\n}\r\n",
11
11
  "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { rulesById } from \"./rules\";\n\nimport type {\n BlockingLevel,\n Category,\n DoctorConfig,\n RuleSetting,\n ScanScope,\n Severity,\n} from \"./types\";\n\nexport const CONFIG_NAME = \"react-luau-doctor.config.json\";\n\nconst SEVERITIES = new Set<RuleSetting>([\n \"off\",\n \"error\",\n \"warning\",\n \"suggestion\",\n]);\n\nconst SCOPES = new Set<ScanScope>([\"full\", \"files\", \"changed\", \"lines\"]);\nconst BLOCKING_LEVELS = new Set<BlockingLevel>([\"error\", \"warning\", \"none\"]);\n\nconst CATEGORIES = new Set<Category>([\n \"Correctness\",\n \"Hooks\",\n \"Effects\",\n \"Performance\",\n \"Roblox\",\n \"Architecture\",\n]);\n\nexport function configSchema() {\n const strings = { type: \"array\", items: { type: \"string\" } };\n\n return {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n title: \"React-Luau Doctor project config\",\n type: \"object\",\n additionalProperties: false,\n\n properties: {\n $schema: {\n type: \"string\",\n description: \"JSON schema used by your editor\",\n },\n\n include: {\n ...strings,\n description: \"File globs to include in project scans\",\n },\n\n ignore: {\n ...strings,\n description: \"File globs and directories to exclude from project scans\",\n },\n\n projects: { ...strings, description: \"Project directories to scan\" },\n\n rules: {\n type: \"object\",\n description: \"Override a rule severity or turn it off for this project\",\n additionalProperties: false,\n\n properties: Object.fromEntries(\n [...rulesById.values()].map((rule) => [\n rule.id,\n {\n type: \"string\",\n enum: [...SEVERITIES],\n default: rule.severity,\n description: rule.description.replace(/\\.$/, \"\"),\n },\n ]),\n ),\n },\n\n categories: {\n type: \"array\",\n items: { type: \"string\", enum: [...CATEGORIES] },\n description: \"Limit findings to these categories\",\n },\n\n scope: {\n type: \"string\",\n enum: [...SCOPES],\n description: \"Choose which files or changed lines to report\",\n },\n\n diff: {\n type: [\"boolean\", \"string\"],\n\n description:\n \"Report introduced findings against HEAD or a specific Git ref\",\n },\n\n base: {\n type: \"string\",\n description: \"Git ref used as the baseline for changed scope\",\n },\n\n verbose: {\n type: \"boolean\",\n description: \"Include detailed findings in CLI output\",\n },\n\n blocking: {\n type: \"string\",\n enum: [...BLOCKING_LEVELS],\n description: \"Minimum severity that fails the CLI exit gate\",\n },\n\n warnings: {\n type: \"boolean\",\n description: \"Include warning findings in CLI output\",\n },\n\n respectInlineDisables: {\n type: \"boolean\",\n description: \"Honor inline suppression comments\",\n },\n },\n };\n}\n\nexport interface LoadedConfig {\n config: DoctorConfig;\n filename: string | null;\n}\n\nexport function loadConfigWithSource(root: string): LoadedConfig {\n const candidate = path.join(root, CONFIG_NAME);\n\n if (!fs.existsSync(candidate)) return { config: {}, filename: null };\n\n const parsed = JSON.parse(fs.readFileSync(candidate, \"utf8\")) as DoctorConfig;\n validateConfig(parsed, candidate);\n\n return { config: parsed, filename: candidate };\n}\n\nexport function loadConfig(root: string): DoctorConfig {\n return loadConfigWithSource(root).config;\n}\n\nexport function validateKnownRules(config: DoctorConfig): void {\n for (const ruleId of Object.keys(config.rules ?? {})) {\n if (!rulesById.has(ruleId))\n throw new Error(`Unknown configured rule: ${ruleId}`);\n }\n}\n\nfunction validateStringArray(\n value: unknown,\n field: string,\n filename: string,\n): void {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\")\n ) {\n throw new Error(`${filename}: ${field} must be an array of strings`);\n }\n}\n\nfunction validateConfig(config: DoctorConfig, filename: string): void {\n if (config.include !== undefined)\n validateStringArray(config.include, \"include\", filename);\n\n if (config.ignore !== undefined)\n validateStringArray(config.ignore, \"ignore\", filename);\n\n if (config.projects !== undefined)\n validateStringArray(config.projects, \"projects\", filename);\n\n if (config.categories !== undefined) {\n if (\n !Array.isArray(config.categories) ||\n config.categories.some((category) => !CATEGORIES.has(category))\n ) {\n throw new Error(\n `${filename}: categories must contain valid React-Luau Doctor categories`,\n );\n }\n }\n\n if (config.rules) {\n for (const [rule, value] of Object.entries(config.rules)) {\n if (!SEVERITIES.has(value))\n throw new Error(\n `${filename}: invalid severity ${String(value)} for ${rule}`,\n );\n }\n }\n\n if (config.scope !== undefined && !SCOPES.has(config.scope)) {\n throw new Error(\n `${filename}: scope must be full, files, changed, or lines`,\n );\n }\n\n if (\n config.diff !== undefined &&\n typeof config.diff !== \"boolean\" &&\n typeof config.diff !== \"string\"\n ) {\n throw new Error(`${filename}: diff must be a boolean or git ref string`);\n }\n\n if (config.base !== undefined && typeof config.base !== \"string\")\n throw new Error(`${filename}: base must be a string`);\n\n if (config.verbose !== undefined && typeof config.verbose !== \"boolean\")\n throw new Error(`${filename}: verbose must be a boolean`);\n\n if (config.warnings !== undefined && typeof config.warnings !== \"boolean\")\n throw new Error(`${filename}: warnings must be a boolean`);\n\n if (\n config.respectInlineDisables !== undefined &&\n typeof config.respectInlineDisables !== \"boolean\"\n ) {\n throw new Error(`${filename}: respectInlineDisables must be a boolean`);\n }\n\n if (config.blocking !== undefined && !BLOCKING_LEVELS.has(config.blocking)) {\n throw new Error(`${filename}: blocking must be error, warning, or none`);\n }\n}\n\nexport function effectiveSeverity(\n defaultSeverity: Severity,\n ruleId: string,\n config: DoctorConfig,\n): Severity | null {\n const configured = config.rules?.[ruleId];\n\n if (!configured) return defaultSeverity;\n\n return configured === \"off\" ? null : configured;\n}\n\nfunction configPathForWrite(root: string): string {\n const loaded = loadConfigWithSource(root);\n\n return loaded.filename ?? path.join(root, CONFIG_NAME);\n}\n\nexport function writeConfig(\n root: string,\n update: (config: DoctorConfig) => DoctorConfig,\n): string {\n const loaded = loadConfigWithSource(root);\n const next = update(structuredClone(loaded.config));\n validateConfig(next, loaded.filename ?? CONFIG_NAME);\n const filename = loaded.filename ?? configPathForWrite(root);\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n fs.writeFileSync(filename, `${JSON.stringify(next, null, 2)}\\n`);\n\n return filename;\n}\n\nexport function normalizeRuleSetting(value: string): RuleSetting | null {\n const normalized = value.toLowerCase();\n\n if (normalized === \"warn\") return \"warning\";\n\n if (\n normalized === \"off\" ||\n normalized === \"error\" ||\n normalized === \"warning\" ||\n normalized === \"suggestion\"\n ) {\n return normalized;\n }\n\n return null;\n}\n\nexport function normalizeCategory(value: string): Category | null {\n const normalized = value.toLowerCase();\n\n for (const category of CATEGORIES) {\n if (category.toLowerCase() === normalized) return category;\n }\n\n return null;\n}\n",
12
- "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, RuleContext } from \"../types\";\r\nimport { normalizeExpressionText, parameterBindingNames } from \"./walk\";\r\n\r\ninterface LocalValue {\r\n value: SyntaxNode;\r\n returnIndex: number;\r\n}\r\n\r\nconst valueCache = new WeakMap<RuleContext, Map<number, LocalValue | null>>();\r\nconst apiCache = new WeakMap<RuleContext, Map<number, string | null>>();\r\n\r\nexport function unwrapExpression(node: SyntaxNode): SyntaxNode {\r\n while (\r\n [\"parenthesized_expression\", \"cast_expression\"].includes(node.type) &&\r\n node.namedChildren[0]\r\n ) {\r\n node = node.namedChildren[0];\r\n }\r\n\r\n return node;\r\n}\r\n\r\nfunction assignedValue(\r\n statement: SyntaxNode,\r\n name: string,\r\n): LocalValue | null | undefined {\r\n const assignment =\r\n statement.type === \"variable_declaration\"\r\n ? statement.namedChildren.find(\r\n (child) => child.type === \"assignment_statement\",\r\n )\r\n : statement;\r\n\r\n const variables = assignment?.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n );\r\n\r\n const expressions =\r\n assignment?.namedChildren.find((child) => child.type === \"expression_list\")\r\n ?.namedChildren ?? [];\r\n\r\n const index =\r\n variables?.namedChildren.findIndex(\r\n (child) => child.type === \"identifier\" && child.text === name,\r\n ) ?? -1;\r\n\r\n if (index < 0) return undefined;\r\n\r\n const value = expressions[index] ?? expressions.at(-1);\r\n\r\n if (!value) return null;\r\n\r\n const returnIndex = Math.max(0, index - expressions.length + 1);\r\n\r\n if (returnIndex > 0 && value.type !== \"function_call\") return null;\r\n\r\n return { value, returnIndex };\r\n}\r\n\r\nfunction visibleValue(\r\n context: RuleContext,\r\n node: SyntaxNode,\r\n): LocalValue | null | undefined {\r\n const name = node.text;\r\n let current = node.parent;\r\n\r\n while (current) {\r\n if (\r\n [\"function_definition\", \"function_declaration\"].includes(current.type) &&\r\n parameterBindingNames(current.childForFieldName(\"parameters\")).includes(\r\n name,\r\n )\r\n )\r\n return null;\r\n\r\n if (current.type === \"for_statement\") {\r\n const header = current.text.split(/\\bdo\\b/, 1)[0];\r\n\r\n const names = header\r\n .match(/^\\s*for\\s+(.+?)\\s*(?:=|\\bin\\b)/s)?.[1]\r\n .split(\",\")\r\n .map((part) => part.trim());\r\n\r\n if (names?.includes(name)) return null;\r\n }\r\n\r\n if (current.type === \"block\" || current.id === context.root.id) {\r\n for (const child of [...current.namedChildren].reverse()) {\r\n if (child.startIndex >= node.startIndex) continue;\r\n\r\n if (\r\n child.type === \"function_declaration\" &&\r\n child.childForFieldName(\"name\")?.text === name\r\n ) {\r\n return { value: child, returnIndex: 0 };\r\n }\r\n\r\n if (\r\n child.type === \"variable_declaration\" ||\r\n child.type === \"assignment_statement\"\r\n ) {\r\n if (child.endIndex > node.startIndex) continue;\r\n\r\n const value = assignedValue(child, name);\r\n\r\n if (value !== undefined) return value;\r\n } else if (\r\n child.endIndex < node.startIndex &&\r\n child.type !== \"function_declaration\"\r\n ) {\r\n // A conditional reassignment makes the earlier value uncertain\r\n for (const nested of context.walk(child)) {\r\n if (\r\n nested.type !== \"assignment_statement\" ||\r\n nested.parent?.type === \"variable_declaration\"\r\n )\r\n continue;\r\n\r\n if (\r\n context.nearestFunction(nested) !== context.nearestFunction(node)\r\n )\r\n continue;\r\n\r\n if (assignedValue(nested, name) !== undefined) return null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function resolveLocalValue(\r\n context: RuleContext,\r\n expression: SyntaxNode,\r\n seen = new Set<number>(),\r\n): LocalValue | null {\r\n const node = unwrapExpression(expression);\r\n\r\n if (seen.has(node.id)) return null;\r\n\r\n let cache = valueCache.get(context);\r\n\r\n if (!cache) {\r\n cache = new Map();\r\n valueCache.set(context, cache);\r\n }\r\n\r\n if (cache.has(node.id)) return cache.get(node.id) ?? null;\r\n\r\n seen.add(node.id);\r\n\r\n const binding =\r\n node.type === \"identifier\"\r\n ? visibleValue(context, node)\r\n : { value: node, returnIndex: 0 };\r\n\r\n const result = !binding\r\n ? null\r\n : binding.returnIndex > 0 || node.type !== \"identifier\"\r\n ? binding\r\n : resolveLocalValue(context, binding.value, seen);\r\n\r\n cache.set(node.id, result);\r\n\r\n return result;\r\n}\r\n\r\nexport function resolveLocalFunction(\r\n context: RuleContext,\r\n expression: SyntaxNode,\r\n): FunctionInfo | null {\r\n const resolved = resolveLocalValue(context, expression);\r\n\r\n if (!resolved || resolved.returnIndex !== 0) return null;\r\n\r\n return context.model.functionByNode.get(resolved.value.id) ?? null;\r\n}\r\n\r\nexport function reactApiPath(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): string | null {\r\n let cache = apiCache.get(context);\r\n\r\n if (!cache) {\r\n cache = new Map();\r\n apiCache.set(context, cache);\r\n }\r\n\r\n if (cache.has(call.id)) return cache.get(call.id) ?? null;\r\n\r\n const result = resolveReactApiPath(context, call);\r\n cache.set(call.id, result);\r\n\r\n return result;\r\n}\r\n\r\nfunction resolveReactApiPath(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): string | null {\r\n const name = call.childForFieldName(\"name\");\r\n\r\n if (!name) return null;\r\n\r\n const resolved = resolveLocalValue(context, name);\r\n\r\n if (!resolved || resolved.returnIndex !== 0) return null;\r\n\r\n const path = normalizeExpressionText(resolved.value.text);\r\n\r\n const match = path.match(\r\n /^([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)$/,\r\n );\r\n\r\n if (!match) return null;\r\n\r\n const namespace = resolved.value.namedChildren[0];\r\n\r\n if (!namespace) return null;\r\n\r\n const visible = visibleValue(context, namespace);\r\n\r\n if (visible === null) return null;\r\n\r\n const binding = resolveLocalValue(context, namespace);\r\n\r\n if (\r\n visible !== undefined &&\r\n (!binding || !/^require\\s*\\(.*\\bReact\\b.*\\)$/s.test(binding.value.text))\r\n )\r\n return null;\r\n\r\n if (visible === undefined && !context.model.reactNamespaces.has(match[1]))\r\n return null;\r\n\r\n // An unbound React namespace is supported by the existing React model\r\n return `React.${match[2]}`;\r\n}\r\n",
12
+ "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext } from \"../types\";\nimport { normalizeExpressionText, parameterBindingNames } from \"./walk\";\n\ninterface LocalValue {\n value: SyntaxNode;\n returnIndex: number;\n}\n\nconst valueCache = new WeakMap<RuleContext, Map<number, LocalValue | null>>();\nconst apiCache = new WeakMap<RuleContext, Map<number, string | null>>();\n\nexport function isUnboundIdentifier(\n context: RuleContext,\n node: SyntaxNode,\n): boolean {\n return (\n node.type === \"identifier\" && visibleValue(context, node) === undefined\n );\n}\n\nexport function localValueBinding(\n context: RuleContext,\n node: SyntaxNode,\n): LocalValue | null | undefined {\n return node.type === \"identifier\" ? visibleValue(context, node) : null;\n}\n\nexport function unwrapExpression(node: SyntaxNode): SyntaxNode {\n while (\n [\"parenthesized_expression\", \"cast_expression\"].includes(node.type) &&\n node.namedChildren[0]\n ) {\n node = node.namedChildren[0];\n }\n\n return node;\n}\n\nfunction assignedValue(\n statement: SyntaxNode,\n name: string,\n): LocalValue | null | undefined {\n const assignment =\n statement.type === \"variable_declaration\"\n ? statement.namedChildren.find(\n (child) => child.type === \"assignment_statement\",\n )\n : statement;\n\n const variables = assignment?.namedChildren.find(\n (child) => child.type === \"variable_list\",\n );\n\n const expressions =\n assignment?.namedChildren.find((child) => child.type === \"expression_list\")\n ?.namedChildren ?? [];\n\n const index =\n variables?.namedChildren.findIndex(\n (child) => child.type === \"identifier\" && child.text === name,\n ) ?? -1;\n\n if (index < 0) return undefined;\n\n const value = expressions[index] ?? expressions.at(-1);\n\n if (!value) return null;\n\n const returnIndex = Math.max(0, index - expressions.length + 1);\n\n if (returnIndex > 0 && value.type !== \"function_call\") return null;\n\n return { value, returnIndex };\n}\n\nfunction visibleValue(\n context: RuleContext,\n node: SyntaxNode,\n): LocalValue | null | undefined {\n const name = node.text;\n let current = node.parent;\n\n while (current) {\n if (\n [\"function_definition\", \"function_declaration\"].includes(current.type) &&\n parameterBindingNames(current.childForFieldName(\"parameters\")).includes(\n name,\n )\n )\n return null;\n\n if (current.type === \"for_statement\") {\n const header = current.text.split(/\\bdo\\b/, 1)[0];\n\n const names = header\n .match(/^\\s*for\\s+(.+?)\\s*(?:=|\\bin\\b)/s)?.[1]\n .split(\",\")\n .map((part) => part.trim());\n\n if (names?.includes(name)) return null;\n }\n\n if (current.type === \"block\" || current.id === context.root.id) {\n for (const child of [...current.namedChildren].reverse()) {\n if (child.startIndex >= node.startIndex) continue;\n\n if (\n child.type === \"function_declaration\" &&\n child.childForFieldName(\"name\")?.text === name\n ) {\n return { value: child, returnIndex: 0 };\n }\n\n if (\n child.type === \"variable_declaration\" ||\n child.type === \"assignment_statement\"\n ) {\n if (child.endIndex > node.startIndex) continue;\n\n const value = assignedValue(child, name);\n\n if (value !== undefined) return value;\n } else if (\n child.endIndex < node.startIndex &&\n child.type !== \"function_declaration\"\n ) {\n // A conditional reassignment makes the earlier value uncertain\n for (const nested of context.walk(child)) {\n if (\n nested.type !== \"assignment_statement\" ||\n nested.parent?.type === \"variable_declaration\"\n )\n continue;\n\n if (\n context.nearestFunction(nested) !== context.nearestFunction(node)\n )\n continue;\n\n if (assignedValue(nested, name) !== undefined) return null;\n }\n }\n }\n }\n\n current = current.parent;\n }\n\n return undefined;\n}\n\nexport function resolveLocalValue(\n context: RuleContext,\n expression: SyntaxNode,\n seen = new Set<number>(),\n): LocalValue | null {\n const node = unwrapExpression(expression);\n\n if (seen.has(node.id)) return null;\n\n let cache = valueCache.get(context);\n\n if (!cache) {\n cache = new Map();\n valueCache.set(context, cache);\n }\n\n if (cache.has(node.id)) return cache.get(node.id) ?? null;\n\n seen.add(node.id);\n\n const binding =\n node.type === \"identifier\"\n ? visibleValue(context, node)\n : { value: node, returnIndex: 0 };\n\n const result = !binding\n ? null\n : binding.returnIndex > 0 || node.type !== \"identifier\"\n ? binding\n : resolveLocalValue(context, binding.value, seen);\n\n cache.set(node.id, result);\n\n return result;\n}\n\nexport function resolveLocalFunction(\n context: RuleContext,\n expression: SyntaxNode,\n): FunctionInfo | null {\n const resolved = resolveLocalValue(context, expression);\n\n if (!resolved || resolved.returnIndex !== 0) return null;\n\n return context.model.functionByNode.get(resolved.value.id) ?? null;\n}\n\nexport function reactApiPath(\n context: RuleContext,\n call: SyntaxNode,\n): string | null {\n let cache = apiCache.get(context);\n\n if (!cache) {\n cache = new Map();\n apiCache.set(context, cache);\n }\n\n if (cache.has(call.id)) return cache.get(call.id) ?? null;\n\n const result = resolveReactApiPath(context, call);\n cache.set(call.id, result);\n\n return result;\n}\n\nfunction resolveReactApiPath(\n context: RuleContext,\n call: SyntaxNode,\n): string | null {\n const name = call.childForFieldName(\"name\");\n\n if (!name) return null;\n\n const resolved = resolveLocalValue(context, name);\n\n if (!resolved || resolved.returnIndex !== 0) return null;\n\n const path = normalizeExpressionText(resolved.value.text);\n\n const match = path.match(\n /^([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)$/,\n );\n\n if (!match) return null;\n\n const namespace = resolved.value.namedChildren[0];\n\n if (!namespace) return null;\n\n const visible = visibleValue(context, namespace);\n\n if (visible === null) return null;\n\n const binding = resolveLocalValue(context, namespace);\n\n if (\n visible !== undefined &&\n (!binding || !/^require\\s*\\(.*\\bReact\\b.*\\)$/s.test(binding.value.text))\n )\n return null;\n\n if (visible === undefined && !context.model.reactNamespaces.has(match[1]))\n return null;\n\n // An unbound React namespace is supported by the existing React model\n return `React.${match[2]}`;\n}\n",
13
13
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, RuleContext } from \"../types\";\r\nimport { rootIdentifier, sameNode } from \"../ast/walk\";\r\n\r\nexport const CONDITIONAL_TYPES = new Set([\r\n \"if_statement\",\r\n \"if_expression\",\r\n \"for_statement\",\r\n \"while_statement\",\r\n \"repeat_statement\",\r\n]);\r\n\r\nexport function isHookPath(path: string): boolean {\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n return /^use[A-Z0-9_]/.test(final);\r\n}\r\n\r\n\r\nexport function assignmentTargetNode(statement: SyntaxNode): SyntaxNode {\r\n return statement.namedChildren[0] ?? statement;\r\n}\r\n\r\nexport function tableStartNode(table: SyntaxNode): SyntaxNode {\r\n return table.children.find((child) => child.type === \"{\") ?? table;\r\n}\r\n\r\nexport function identifierNode(node: SyntaxNode, name: string): SyntaxNode | null {\r\n const stack = [node];\r\n while (stack.length > 0) {\r\n const current = stack.pop()!;\r\n if (current.type === \"identifier\" && current.text === name) return current;\r\n for (let index = current.namedChildren.length - 1; index >= 0; index -= 1) stack.push(current.namedChildren[index]);\r\n }\r\n return null;\r\n}\r\n\r\nexport function callNameNode(call: SyntaxNode): SyntaxNode {\r\n return call.childForFieldName(\"name\") ?? call;\r\n}\r\n\r\nexport function fieldNameNode(field: SyntaxNode): SyntaxNode {\r\n return field.childForFieldName(\"name\") ?? field;\r\n}\r\n\r\nexport function firstFunctionArgument(context: RuleContext, call: SyntaxNode): SyntaxNode | null {\r\n return context.callArguments(call).find((arg) => arg.type === \"function_definition\") ?? null;\r\n}\r\n\r\nexport function directComponentForCall(context: RuleContext, call: SyntaxNode): FunctionInfo | null {\r\n const fn = context.nearestFunction(call);\r\n return fn?.isComponent ? fn : null;\r\n}\r\n\r\nexport function findAncestorBetween(node: SyntaxNode, stop: SyntaxNode, predicate: (node: SyntaxNode) => boolean): SyntaxNode | null {\r\n let current = node.parent;\r\n while (current && !sameNode(current, stop)) {\r\n if (predicate(current)) return current;\r\n current = current.parent;\r\n }\r\n return null;\r\n}\r\n\r\nexport function declarationNames(node: SyntaxNode): string[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const beforeEquals = node.text.split(\"=\")[0] ?? \"\";\r\n return beforeEquals\r\n .replace(/^\\s*local\\s+/, \"\")\r\n .split(\",\")\r\n .map((piece) => piece.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? null)\r\n .filter((name): name is string => Boolean(name));\r\n}\r\n\r\nexport function callRoot(path: string): string | null {\r\n return rootIdentifier(path);\r\n}\r\n\r\nexport function isNestedInsideFunction(node: SyntaxNode, boundary: SyntaxNode): boolean {\r\n let current = node.parent;\r\n while (current && !sameNode(current, boundary)) {\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return true;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nexport function functionHasReturnedBefore(call: SyntaxNode, fn: FunctionInfo, context: RuleContext): boolean {\r\n if (!fn.body) return false;\r\n for (const node of context.walk(fn.body)) {\r\n if (node.endIndex > call.startIndex) continue;\r\n if (node.type !== \"return_statement\") continue;\r\n if (isNestedInsideFunction(node, fn.node)) continue;\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function parseDependencyRoots(node: SyntaxNode | undefined): Set<string> {\r\n const result = new Set<string>();\r\n if (!node || node.type !== \"table_constructor\") return result;\r\n\r\n for (const child of node.namedChildren) {\r\n const root = rootIdentifier(child.text);\r\n if (root) result.add(root);\r\n }\r\n return result;\r\n}\r\n\r\nexport function assignmentLeft(text: string): string {\r\n const match = text.match(/^(.*?)(?:\\+=|-=|\\*=|\\/=|%=|\\^=|\\.\\.=|\\/=|=)/s);\r\n return match?.[1]?.trim() ?? \"\";\r\n}\r\n\r\nexport function functionInfoForNode(context: RuleContext, node: SyntaxNode | null): FunctionInfo | null {\r\n if (!node) return null;\r\n return context.model.functionByNode.get(node.id) ?? null;\r\n}\r\n\r\nexport function stateBindingsFor(context: RuleContext, owner: FunctionInfo): typeof context.model.stateBindings {\r\n return context.model.stateBindings.filter((binding) => binding.owner === owner);\r\n}\r\n\r\nexport function isEffectPath(path: string): boolean {\r\n return path === \"React.useEffect\" || path === \"React.useLayoutEffect\";\r\n}\r\n\r\nexport function dependencyExpressions(node: SyntaxNode | undefined): SyntaxNode[] {\r\n if (!node || node.type !== \"table_constructor\") return [];\r\n return node.namedChildren\r\n .filter((child) => child.type === \"field\")\r\n .map((field) => {\r\n const name = field.childForFieldName(\"name\");\r\n if (name && field.text.trim().startsWith(\"[\")) return name;\r\n return field.namedChildren.find((child) => !sameNode(child, name)) ?? name ?? field;\r\n });\r\n}\r\n\r\nexport function fieldName(node: SyntaxNode): string | null {\r\n if (node.type !== \"field\") return null;\r\n const name = node.childForFieldName(\"name\");\r\n return name?.type === \"identifier\" ? name.text : null;\r\n}\r\n\r\nexport function fieldValue(node: SyntaxNode): SyntaxNode | null {\r\n if (node.type !== \"field\") return null;\r\n const name = node.childForFieldName(\"name\");\r\n if (!name) return node.namedChildren[0] ?? null;\r\n return node.namedChildren.find((child) => child.startIndex > name.endIndex) ?? null;\r\n}\r\n\r\nexport function containsIdentifier(node: SyntaxNode | null | undefined, name: string, context: RuleContext): boolean {\r\n if (!node) return false;\r\n for (const child of context.walk(node)) {\r\n if (child.type !== \"identifier\" || child.text !== name) continue;\r\n const parent = child.parent;\r\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.childForFieldName(\"field\"), child)) continue;\r\n if (parent?.type === \"method_index_expression\" && (sameNode(parent.childForFieldName(\"method\"), child) || sameNode(parent.namedChildren.at(-1), child))) continue;\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function ownerStateSetter(context: RuleContext, owner: FunctionInfo, path: string): string | null {\r\n for (const binding of context.model.stateBindings) {\r\n if (binding.owner === owner && binding.setterName === path) return binding.valueName;\r\n }\r\n return null;\r\n}\r\n\r\n\r\nfunction parameterNames(node: SyntaxNode | null): Set<string> {\r\n const names = new Set<string>();\r\n if (!node) return names;\r\n for (const candidate of node.namedChildren) {\r\n for (const child of [candidate, ...Array.from((function* walkLocal(current: SyntaxNode): Iterable<SyntaxNode> {\r\n for (const nested of current.namedChildren) {\r\n yield nested;\r\n yield* walkLocal(nested);\r\n }\r\n })(candidate))]) {\r\n if (child.type === \"identifier\") names.add(child.text);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nfunction blockBindingsBefore(block: SyntaxNode, beforeIndex: number): Set<string> {\r\n const names = new Set<string>();\r\n for (const child of block.namedChildren) {\r\n if (child.startIndex >= beforeIndex) continue;\r\n if (child.type === \"variable_declaration\") {\r\n for (const name of declarationNames(child)) names.add(name);\r\n } else if (child.type === \"function_declaration\") {\r\n const name = child.childForFieldName(\"name\")?.text;\r\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) names.add(name);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nfunction loopBindings(loop: SyntaxNode): Set<string> {\r\n const names = new Set<string>();\r\n const header = loop.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\r\n const numeric = header.match(/^\\s*for\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=/s);\r\n if (numeric) names.add(numeric[1]);\r\n const generic = header.match(/^\\s*for\\s+(.+?)\\s+in\\b/s);\r\n if (generic) {\r\n for (const part of generic[1].split(\",\")) {\r\n const name = part.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (name) names.add(name);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nexport function isNameShadowedBetween(node: SyntaxNode, boundary: FunctionInfo, name: string): boolean {\r\n let current: SyntaxNode | null = node.parent;\r\n while (current && !sameNode(current, boundary.node)) {\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") {\r\n if (parameterNames(current.childForFieldName(\"parameters\")).has(name)) return true;\r\n }\r\n if (current.type === \"block\" && !sameNode(current.parent, boundary.node) && blockBindingsBefore(current, node.startIndex).has(name)) return true;\r\n if (current.type === \"for_statement\" && loopBindings(current).has(name)) return true;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nconst topLevelBindingsCache = new WeakMap<FunctionInfo, Map<string, SyntaxNode[]>>();\r\n\r\nfunction topLevelBindings(boundary: FunctionInfo): Map<string, SyntaxNode[]> {\r\n const cached = topLevelBindingsCache.get(boundary);\r\n if (cached) return cached;\r\n\r\n const result = new Map<string, SyntaxNode[]>();\r\n const add = (name: string, node: SyntaxNode): void => {\r\n const existing = result.get(name) ?? [];\r\n existing.push(node);\r\n result.set(name, existing);\r\n };\r\n\r\n for (const child of boundary.body?.namedChildren ?? []) {\r\n if (child.type === \"variable_declaration\") {\r\n for (const name of declarationNames(child)) add(name, child);\r\n } else if (child.type === \"function_declaration\") {\r\n const declared = child.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\r\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(declared)) add(declared, child);\r\n }\r\n }\r\n\r\n topLevelBindingsCache.set(boundary, result);\r\n return result;\r\n}\r\n\r\nexport function isBindingShadowedBetween(\r\n node: SyntaxNode,\r\n boundary: FunctionInfo,\r\n name: string,\r\n declaration: SyntaxNode | null = null,\r\n): boolean {\r\n if (isNameShadowedBetween(node, boundary, name)) return true;\r\n if (!boundary.body) return false;\r\n\r\n const afterIndex = declaration?.endIndex ?? boundary.body.startIndex - 1;\r\n return (topLevelBindings(boundary).get(name) ?? []).some((binding) =>\r\n binding.startIndex > afterIndex && binding.startIndex < node.startIndex\r\n );\r\n}\r\n\r\nexport function containsUnshadowedIdentifier(\r\n node: SyntaxNode | null | undefined,\r\n name: string,\r\n context: RuleContext,\r\n boundary: FunctionInfo,\r\n): boolean {\r\n if (!node) return false;\r\n for (const child of context.walk(node)) {\r\n if (child.type !== \"identifier\" || child.text !== name) continue;\r\n const parent = child.parent;\r\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.childForFieldName(\"field\"), child)) continue;\r\n if (parent?.type === \"method_index_expression\" && (sameNode(parent.childForFieldName(\"method\"), child) || sameNode(parent.namedChildren.at(-1), child))) continue;\r\n if (isNameShadowedBetween(child, boundary, name)) continue;\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function directFunctionCalls(context: RuleContext, fn: FunctionInfo): SyntaxNode[] {\r\n if (!fn.body) return [];\r\n return [...context.walk(fn.body)].filter((node) => node.type === \"function_call\" && context.nearestFunction(node) === fn);\r\n}\r\n\r\nexport function isUnconditionallyExecutedInFunction(\n context: RuleContext,\n node: SyntaxNode,\n fn: FunctionInfo,\n): boolean {\n if (\n !context.isDirectlyExecutedInFunction(node, fn) ||\n functionHasReturnedBefore(node, fn, context)\n )\n return false;\n\n let child = node;\n let parent = node.parent;\n\n while (parent && !sameNode(parent, fn.node)) {\n // A break can skip a repeat loop's condition even on its first iteration\r\n if (parent.type === \"repeat_statement\") return false;\r\n\r\n if (CONDITIONAL_TYPES.has(parent.type)) {\n if (!sameNode(parent.childForFieldName(\"condition\"), child)) return false;\n }\n\n if (\n parent.type === \"binary_expression\" &&\n parent.children.some(\n (token) => token.type === \"and\" || token.type === \"or\",\n )\n ) {\n if (!sameNode(parent.childForFieldName(\"left\"), child)) return false;\n }\n\n child = parent;\n parent = parent.parent;\n }\n\n return sameNode(parent, fn.node);\n}\n",
14
- "import { reactApiPath, resolveLocalValue } from \"../ast/local-values\";\r\nimport { normalizeExpressionText } from \"../ast/walk\";\r\nimport type { SyntaxNode } from \"../syntax\";\r\nimport type { RuleContext, RuleDefinition } from \"../types\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\nfunction isBinding(\r\n context: RuleContext,\r\n expression: SyntaxNode,\r\n seen = new Set<number>(),\r\n): boolean {\r\n if (seen.has(expression.id)) return false;\r\n\r\n seen.add(expression.id);\r\n const resolved = resolveLocalValue(context, expression);\r\n\r\n if (\r\n !resolved ||\r\n resolved.returnIndex !== 0 ||\r\n resolved.value.type !== \"function_call\"\r\n )\r\n return false;\r\n\r\n if (\r\n [\"React.useBinding\", \"React.createBinding\", \"React.joinBindings\"].includes(\r\n reactApiPath(context, resolved.value) ?? \"\",\r\n )\r\n )\r\n return true;\r\n\r\n const name = resolved.value.childForFieldName(\"name\");\r\n\r\n return (\r\n name?.type === \"method_index_expression\" &&\r\n name.namedChildren.at(-1)?.text === \"map\" &&\r\n Boolean(\r\n name.namedChildren[0] && isBinding(context, name.namedChildren[0], seen),\r\n )\r\n );\r\n}\r\n\r\nfunction isLazyRefInitialization(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): boolean {\r\n let node = call.parent;\r\n\r\n while (\r\n node &&\r\n ![\"function_definition\", \"function_declaration\"].includes(node.type)\r\n ) {\r\n if (node.type === \"if_statement\") {\r\n const condition = node.childForFieldName(\"condition\");\r\n const text = condition && normalizeExpressionText(condition.text);\r\n\r\n const match = text?.match(\r\n /^(?:([A-Za-z_]\\w*)\\.current==nil|nil==([A-Za-z_]\\w*)\\.current)$/,\r\n );\r\n\r\n if (!match) return false;\r\n\r\n const refName = match[1] ?? match[2];\r\n\r\n const ref =\r\n condition &&\r\n [...context.walk(condition)].find(\r\n (child) => child.type === \"identifier\" && child.text === refName,\r\n );\r\n\r\n const resolved = ref && resolveLocalValue(context, ref);\r\n\r\n if (!resolved || reactApiPath(context, resolved.value) !== \"React.useRef\")\r\n return false;\r\n\r\n let assignment = call.parent;\r\n\r\n while (assignment && assignment.id !== node.id) {\r\n if (assignment.type === \"assignment_statement\") {\r\n const target = assignment.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n )?.namedChildren[0];\r\n\r\n const thenBlock = node.namedChildren.find(\r\n (child) => child.type === \"block\",\r\n );\r\n\r\n return Boolean(\r\n target &&\r\n normalizeExpressionText(target.text) === `${refName}.current` &&\r\n thenBlock &&\r\n call.startIndex >= thenBlock.startIndex &&\r\n call.endIndex <= thenBlock.endIndex,\r\n );\r\n }\r\n\r\n assignment = assignment.parent;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n node = node.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isRefInitializer(context: RuleContext, call: SyntaxNode): boolean {\r\n let node = call;\r\n\r\n while (node.parent) {\r\n const parent = node.parent;\r\n\r\n if ([\"function_definition\", \"function_declaration\"].includes(parent.type))\r\n return false;\r\n\r\n if (parent.type === \"arguments\") {\r\n const hook = parent.parent;\r\n\r\n if (\r\n hook?.type === \"function_call\" &&\r\n reactApiPath(context, hook) === \"React.useRef\" &&\r\n context.callArguments(hook)[0]?.id === node.id\r\n )\r\n return true;\r\n }\r\n\r\n node = parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport const noCreateBindingInRender: RuleDefinition = {\r\n id: \"react-luau/no-create-binding-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description: \"Preserve binding identity across function component renders\",\r\n\r\n guidance: {\r\n explanation:\r\n \"React.createBinding creates a new binding and initial value on every render\",\r\n\r\n help: \"Use React.useBinding to preserve the binding and updater across renders\",\r\n },\r\n\r\n run(context) {\r\n return context.findCalls().flatMap((call) => {\r\n const owner = context.nearestFunction(call);\r\n\r\n if (\r\n !owner ||\r\n (!owner.isComponent && !owner.isHook) ||\r\n reactApiPath(context, call) !== \"React.createBinding\" ||\r\n isLazyRefInitialization(context, call)\r\n )\r\n return [];\r\n\r\n return [\r\n {\r\n node: callNameNode(call),\r\n message: \"React.createBinding creates a new binding on every render\",\r\n help: \"Use React.useBinding so rerenders preserve the binding and its current value\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n\r\nexport const noBindingGetValueInRender: RuleDefinition = {\r\n id: \"react-luau/no-binding-getvalue-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description:\r\n \"Do not read binding snapshots during render except to initialize a ref\",\r\n\r\n guidance: {\r\n explanation:\r\n \"getValue returns a snapshot without subscribing — later binding updates do not rerender the component or update props built from that snapshot\",\r\n\r\n help: \"Pass the binding directly to the prop or use binding:map(function(value) return ... end)\",\r\n caveat:\r\n \"A snapshot used to initialize React.useRef is allowed because the initial value is intentionally preserved\",\r\n },\r\n\r\n run(context) {\r\n return context.findCalls().flatMap((call) => {\r\n const owner = context.nearestFunction(call);\r\n const name = call.childForFieldName(\"name\");\r\n const receiver = name?.namedChildren[0];\r\n\r\n if (\r\n !owner ||\r\n (!owner.isComponent && !owner.isHook) ||\r\n name?.type !== \"method_index_expression\" ||\r\n name.namedChildren.at(-1)?.text !== \"getValue\" ||\r\n !receiver ||\r\n !isBinding(context, receiver) ||\r\n isRefInitializer(context, call)\r\n )\r\n return [];\r\n\r\n return [\r\n {\r\n node: name,\r\n message: `${receiver.text}:getValue() reads a binding snapshot during render`,\r\n help: \"Pass the binding itself or map it so the prop subscribes to binding updates\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n",
14
+ "import { reactApiPath, resolveLocalValue } from \"../ast/local-values\";\r\nimport { normalizeExpressionText } from \"../ast/walk\";\r\nimport type { SyntaxNode } from \"../syntax\";\r\nimport type { RuleContext, RuleDefinition } from \"../types\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\nfunction isBinding(\r\n context: RuleContext,\r\n expression: SyntaxNode,\r\n seen = new Set<number>(),\r\n): boolean {\r\n if (seen.has(expression.id)) return false;\r\n\r\n seen.add(expression.id);\r\n const resolved = resolveLocalValue(context, expression);\r\n\r\n if (\r\n !resolved ||\r\n resolved.returnIndex !== 0 ||\r\n resolved.value.type !== \"function_call\"\r\n )\r\n return false;\r\n\r\n if (\r\n [\"React.useBinding\", \"React.createBinding\", \"React.joinBindings\"].includes(\r\n reactApiPath(context, resolved.value) ?? \"\",\r\n )\r\n )\r\n return true;\r\n\r\n const name = resolved.value.childForFieldName(\"name\");\r\n\r\n return (\r\n name?.type === \"method_index_expression\" &&\r\n name.namedChildren.at(-1)?.text === \"map\" &&\r\n Boolean(\r\n name.namedChildren[0] && isBinding(context, name.namedChildren[0], seen),\r\n )\r\n );\r\n}\r\n\r\nfunction isLazyRefInitialization(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): boolean {\r\n let node = call.parent;\r\n\r\n while (\r\n node &&\r\n ![\"function_definition\", \"function_declaration\"].includes(node.type)\r\n ) {\r\n if (node.type === \"if_statement\") {\r\n const condition = node.childForFieldName(\"condition\");\r\n const text = condition && normalizeExpressionText(condition.text);\r\n\r\n const match = text?.match(\r\n /^(?:([A-Za-z_]\\w*)\\.current==nil|nil==([A-Za-z_]\\w*)\\.current)$/,\r\n );\r\n\r\n if (!match) return false;\r\n\r\n const refName = match[1] ?? match[2];\r\n\r\n const ref =\r\n condition &&\r\n [...context.walk(condition)].find(\r\n (child) => child.type === \"identifier\" && child.text === refName,\r\n );\r\n\r\n const resolved = ref && resolveLocalValue(context, ref);\r\n\r\n if (!resolved || reactApiPath(context, resolved.value) !== \"React.useRef\")\r\n return false;\r\n\r\n let assignment = call.parent;\r\n\r\n while (assignment && assignment.id !== node.id) {\r\n if (assignment.type === \"assignment_statement\") {\r\n const target = assignment.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n )?.namedChildren[0];\r\n\r\n const thenBlock = node.namedChildren.find(\r\n (child) => child.type === \"block\",\r\n );\r\n\r\n return Boolean(\r\n target &&\r\n normalizeExpressionText(target.text) === `${refName}.current` &&\r\n thenBlock &&\r\n call.startIndex >= thenBlock.startIndex &&\r\n call.endIndex <= thenBlock.endIndex,\r\n );\r\n }\r\n\r\n assignment = assignment.parent;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n node = node.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nconst hookInitializerArguments = new Map([\r\n [\"React.useRef\", 0],\r\n [\"React.useState\", 0],\r\n [\"React.useBinding\", 0],\r\n [\"React.useReducer\", 1],\r\n]);\r\n\r\nfunction isHookInitializer(context: RuleContext, call: SyntaxNode): boolean {\r\n let node = call;\r\n\r\n while (node.parent) {\r\n const parent = node.parent;\r\n\r\n if ([\"function_definition\", \"function_declaration\"].includes(parent.type))\r\n return false;\r\n\r\n if (parent.type === \"arguments\") {\r\n const hook = parent.parent;\r\n\r\n if (hook?.type === \"function_call\") {\r\n const argumentIndex = hookInitializerArguments.get(\r\n reactApiPath(context, hook) ?? \"\",\r\n );\r\n\r\n if (\r\n argumentIndex !== undefined &&\r\n context.callArguments(hook)[argumentIndex]?.id === node.id\r\n )\r\n return true;\r\n }\r\n }\r\n\r\n node = parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport const noCreateBindingInRender: RuleDefinition = {\r\n id: \"react-luau/no-create-binding-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description: \"Preserve binding identity across function component renders\",\r\n\r\n guidance: {\r\n explanation:\r\n \"React.createBinding creates a new binding and initial value on every render\",\r\n\r\n help: \"Use React.useBinding to preserve the binding and updater across renders\",\r\n },\r\n\r\n run(context) {\r\n return context.findCalls().flatMap((call) => {\r\n const owner = context.nearestFunction(call);\r\n\r\n if (\r\n !owner ||\r\n (!owner.isComponent && !owner.isHook) ||\r\n reactApiPath(context, call) !== \"React.createBinding\" ||\r\n isLazyRefInitialization(context, call)\r\n )\r\n return [];\r\n\r\n return [\r\n {\r\n node: callNameNode(call),\r\n message: \"React.createBinding creates a new binding on every render\",\r\n help: \"Use React.useBinding so rerenders preserve the binding and its current value\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n\r\nexport const noBindingGetValueInRender: RuleDefinition = {\r\n id: \"react-luau/no-binding-getvalue-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description:\r\n \"Do not read binding snapshots during render except in hook initialization arguments\",\r\n\r\n guidance: {\r\n explanation:\r\n \"getValue returns a snapshot without subscribing — later binding updates do not rerender the component or update props built from that snapshot\",\r\n\r\n help: \"Pass the binding directly to the prop or use binding:map(function(value) return ... end)\",\r\n caveat:\r\n \"Snapshots in the first argument to React.useRef, React.useState, or React.useBinding, or the second argument to React.useReducer, are allowed because those arguments are used only for initialization\",\r\n },\r\n\r\n run(context) {\r\n return context.findCalls().flatMap((call) => {\r\n const owner = context.nearestFunction(call);\r\n const name = call.childForFieldName(\"name\");\r\n const receiver = name?.namedChildren[0];\r\n\r\n if (\r\n !owner ||\r\n (!owner.isComponent && !owner.isHook) ||\r\n name?.type !== \"method_index_expression\" ||\r\n name.namedChildren.at(-1)?.text !== \"getValue\" ||\r\n !receiver ||\r\n !isBinding(context, receiver) ||\r\n isHookInitializer(context, call)\r\n )\r\n return [];\r\n\r\n return [\r\n {\r\n node: name,\r\n message: `${receiver.text}:getValue() reads a binding snapshot during render`,\r\n help: \"Pass the binding itself or map it so the prop subscribes to binding updates\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n",
15
15
  "import {\r\n reactApiPath,\r\n resolveLocalFunction,\r\n resolveLocalValue,\r\n} from \"../ast/local-values\";\r\nimport type { RuleDefinition } from \"../types\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\nexport const noCallComponentAsFunction: RuleDefinition = {\r\n id: \"react-luau/no-call-component-as-function\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Render components with React.createElement instead of calling them directly\",\r\n\r\n guidance: {\r\n explanation:\r\n \"A direct call gives the child no separate component identity and runs its hooks as part of the caller\",\r\n\r\n help: \"Pass the component function and its props to React.createElement\",\r\n },\r\n\r\n run(context) {\r\n const components = new Set<number>();\r\n const returnsElement = new Set<number>();\r\n\r\n for (const node of context.walk()) {\r\n if (node.type !== \"return_statement\") continue;\r\n\r\n const expression = node.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n )?.namedChildren[0];\r\n const returned = expression && resolveLocalValue(context, expression);\r\n const owner = context.nearestFunction(node);\r\n\r\n if (\r\n owner &&\r\n returned?.returnIndex === 0 &&\r\n returned.value.type === \"function_call\" &&\r\n reactApiPath(context, returned.value) === \"React.createElement\"\r\n )\r\n returnsElement.add(owner.node.id);\r\n }\r\n\r\n for (const call of context.findCalls()) {\r\n if (reactApiPath(context, call) === \"React.createElement\") {\r\n const argument = context.callArguments(call)[0];\r\n const component = argument && resolveLocalFunction(context, argument);\r\n\r\n if (component) components.add(component.node.id);\r\n }\r\n\r\n const owner = context.nearestFunction(call);\r\n\r\n if (\r\n owner?.isComponent &&\r\n returnsElement.has(owner.node.id) &&\r\n /^React\\.use[A-Z]/.test(reactApiPath(context, call) ?? \"\")\r\n )\r\n components.add(owner.node.id);\r\n }\r\n\r\n return context.findCalls().flatMap((call) => {\r\n const name = call.childForFieldName(\"name\");\r\n const component = name && resolveLocalFunction(context, name);\r\n\r\n if (!component || !components.has(component.node.id)) return [];\r\n\r\n return [\r\n {\r\n node: callNameNode(call),\r\n message: `${name!.text} is called directly instead of rendered as a component`,\r\n help: \"Use React.createElement(component, props) so React owns the component's hooks and identity\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n",
16
16
  "import type { SyntaxNode } from \"../syntax\";\nimport { resolveLocalValue, unwrapExpression } from \"../ast/local-values\";\nimport { isNameShadowedBetween } from \"./helpers\";\nimport { moduleKeys, normalizeRequireTarget, resolveModuleReference } from \"../module-resolution\";\nimport { normalizeExpressionText, parameterBindingNames, rootIdentifier, sameNode } from \"../ast/walk\";\nimport type { FunctionInfo, RuleContext, SourceEffectModuleSummary, StateBinding } from \"../types\";\n\nexport type MutationValueOrigin =\n | { kind: \"props\"; name: string }\n | { kind: \"state\"; binding: StateBinding }\n | { kind: \"parameter\"; name: string }\n | { kind: \"fresh\" }\n | { kind: \"unknown\" };\n\ninterface ImportBinding {\n declaration: SyntaxNode;\n summary: SourceEffectModuleSummary;\n}\n\ninterface BindingLookup {\n node: SyntaxNode;\n expression: SyntaxNode | null;\n}\n\ninterface MutationAnalysis {\n currentSummary: SourceEffectModuleSummary | null;\n imports: Map<string, ImportBinding>;\n mutatingFactoryMembers: Set<string>;\n callIndexes: Map<number, ReadonlySet<number>>;\n originCache: Map<string, MutationValueOrigin>;\n}\n\nconst analysisCache = new WeakMap<RuleContext, MutationAnalysis>();\nconst EMPTY_INDEXES: ReadonlySet<number> = new Set<number>();\n\nfunction declarationParts(node: SyntaxNode): { names: string[]; expressions: SyntaxNode[] } {\n if (node.type !== \"variable_declaration\") return { names: [], expressions: [] };\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\n const variables = assignment?.namedChildren.find((child) => child.type === \"variable_list\")\n ?? node.namedChildren.find((child) => child.type === \"variable_list\");\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\n return {\n names: variables?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [],\n expressions: expressions?.namedChildren ?? [],\n };\n}\n\nfunction assignmentParts(node: SyntaxNode): { names: string[]; expressions: SyntaxNode[] } {\n if (node.type !== \"assignment_statement\" || node.parent?.type === \"variable_declaration\") {\n return { names: [], expressions: [] };\n }\n const variables = node.namedChildren.find((child) => child.type === \"variable_list\");\n const expressions = node.namedChildren.find((child) => child.type === \"expression_list\");\n return {\n names: variables?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [],\n expressions: expressions?.namedChildren ?? [],\n };\n}\n\nfunction expressionForName(node: SyntaxNode, name: string): SyntaxNode | null | undefined {\n const { names, expressions } = node.type === \"variable_declaration\" ? declarationParts(node) : assignmentParts(node);\n const index = names.indexOf(name);\n if (index < 0) return undefined;\n return expressions[index] ?? expressions[0] ?? null;\n}\n\nfunction currentModuleSummary(context: RuleContext): SourceEffectModuleSummary | null {\n for (const key of moduleKeys(context.relativePath)) {\n const summary = context.project.sourceEffects.get(key);\n if (summary) return summary;\n }\n return null;\n}\n\nfunction topLevelImports(context: RuleContext): Map<string, ImportBinding> {\n const result = new Map<string, ImportBinding>();\n for (const node of context.root.namedChildren) {\n if (node.type !== \"variable_declaration\") continue;\n const { names, expressions } = declarationParts(node);\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n if (expression?.type !== \"function_call\") continue;\n const match = expression.text.match(/^\\s*require\\s*\\((.*?)\\)\\s*$/s);\n if (!match) continue;\n const summary = resolveModuleReference(normalizeRequireTarget(match[1]), context.project.sourceEffects);\n if (summary) result.set(names[index], { declaration: node, summary });\n }\n }\n return result;\n}\n\nfunction analysisFor(context: RuleContext): MutationAnalysis {\n const cached = analysisCache.get(context);\n if (cached) return cached;\n const imports = topLevelImports(context);\n const mutatingFactoryMembers = new Set<string>();\n for (const { summary } of imports.values()) {\n if (summary.instanceFactories.size === 0) continue;\n for (const member of summary.mutatingMemberParameters.keys()) mutatingFactoryMembers.add(member);\n }\n const result: MutationAnalysis = {\n currentSummary: currentModuleSummary(context),\n imports,\n mutatingFactoryMembers,\n callIndexes: new Map(),\n originCache: new Map(),\n };\n analysisCache.set(context, result);\n return result;\n}\n\nfunction directChildContaining(block: SyntaxNode, node: SyntaxNode): SyntaxNode | null {\n for (const child of block.namedChildren) {\n if (child.startIndex <= node.startIndex && child.endIndex >= node.endIndex) return child;\n }\n return null;\n}\n\nfunction visibleBinding(name: string, node: SyntaxNode, owner: FunctionInfo): BindingLookup | null {\n let current: SyntaxNode | null = node;\n while (current && !sameNode(current, owner.node)) {\n if ((current.type === \"function_definition\" || current.type === \"function_declaration\")\n && parameterBindingNames(current.childForFieldName(\"parameters\")).includes(name)) {\n return { node: current, expression: null };\n }\n const parent: SyntaxNode | null = current.parent;\n if (parent?.type === \"block\") {\n const containing = directChildContaining(parent, node);\n const beforeIndex = containing?.startIndex ?? node.startIndex;\n const children = parent.namedChildren;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n const child = children[index];\n if (child.startIndex >= beforeIndex) continue;\n if (child.type !== \"variable_declaration\" && child.type !== \"assignment_statement\") continue;\n const expression = expressionForName(child, name);\n if (expression !== undefined) return { node: child, expression };\n }\n }\n current = parent;\n }\n return null;\n}\n\nfunction isTopLevelFunctionVisible(context: RuleContext, name: string, owner: FunctionInfo): boolean {\n for (const node of context.root.namedChildren) {\n if (node.startIndex >= owner.node.startIndex) break;\n if (node.type === \"function_declaration\") {\n const declared = node.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\n if (declared === name) return true;\n continue;\n }\n if (node.type !== \"variable_declaration\") continue;\n const { names, expressions } = declarationParts(node);\n const index = names.indexOf(name);\n if (index < 0) continue;\n if ((expressions[index] ?? expressions[0])?.type === \"function_definition\") return true;\n }\n return false;\n}\n\nfunction moduleBindingVisible(binding: ImportBinding, name: string, call: SyntaxNode, owner: FunctionInfo): boolean {\n if (binding.declaration.startIndex >= owner.node.startIndex) return false;\n if (owner.parameters.includes(name)) return false;\n return visibleBinding(name, call, owner) === null;\n}\n\nfunction builtinMutatedParameterIndexes(path: string, argumentCount: number): ReadonlySet<number> {\n switch (path) {\n case \"rawset\":\n case \"setmetatable\":\n case \"table.clear\":\n case \"table.freeze\":\n case \"table.insert\":\n case \"table.remove\":\n case \"table.sort\":\n return argumentCount > 0 ? new Set([0]) : EMPTY_INDEXES;\n case \"table.move\":\n return argumentCount >= 5 ? new Set([4]) : argumentCount > 0 ? new Set([0]) : EMPTY_INDEXES;\n default:\n return EMPTY_INDEXES;\n }\n}\n\nfunction importedFactorySummary(\n context: RuleContext,\n receiver: string,\n call: SyntaxNode,\n owner: FunctionInfo,\n analysis: MutationAnalysis,\n): SourceEffectModuleSummary | null {\n const binding = visibleBinding(receiver, call, owner);\n if (!binding?.expression) return null;\n const expression = binding.expression;\n if (expression.type === \"identifier\") {\n return importedFactorySummary(context, expression.text, expression, owner, analysis);\n }\n if (expression.type !== \"function_call\") return null;\n const path = normalizeExpressionText(context.getCallPath(expression) ?? \"\");\n const match = path.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\n if (!match) return null;\n const imported = analysis.imports.get(match[1]);\n if (!imported || !moduleBindingVisible(imported, match[1], expression, owner)) return null;\n return imported.summary.instanceFactories.has(match[2]) ? imported.summary : null;\n}\n\nexport function mightMutateParameters(context: RuleContext, call: SyntaxNode): boolean {\n const path = normalizeExpressionText(context.getCallPath(call) ?? \"\");\n if (builtinMutatedParameterIndexes(path, context.callArguments(call).length).size > 0) return true;\n\n const analysis = analysisFor(context);\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(path)) {\n if ((analysis.currentSummary?.localMutatingParameters.get(path)?.size ?? 0) > 0) return true;\n return (analysis.imports.get(path)?.summary.mutatingExportParameters.size ?? 0) > 0;\n }\n\n const member = path.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\n if (!member) return false;\n if ((analysis.imports.get(member[1])?.summary.mutatingMemberParameters.get(member[2])?.size ?? 0) > 0) return true;\n return analysis.mutatingFactoryMembers.has(member[2]);\n}\n\nexport function mutatedParameterIndexesForCall(\n context: RuleContext,\n call: SyntaxNode,\n owner: FunctionInfo,\n): ReadonlySet<number> {\n const analysis = analysisFor(context);\n const cached = analysis.callIndexes.get(call.id);\n if (cached) return cached;\n\n const path = normalizeExpressionText(context.getCallPath(call) ?? \"\");\n const builtin = builtinMutatedParameterIndexes(path, context.callArguments(call).length);\n if (builtin.size > 0) {\n analysis.callIndexes.set(call.id, builtin);\n return builtin;\n }\n\n let result: ReadonlySet<number> = EMPTY_INDEXES;\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(path)) {\n const importBinding = analysis.imports.get(path);\n if (importBinding && moduleBindingVisible(importBinding, path, call, owner)) {\n result = importBinding.summary.mutatingExportParameters;\n } else if (\n !owner.parameters.includes(path)\n && visibleBinding(path, call, owner) === null\n && isTopLevelFunctionVisible(context, path, owner)\n ) {\n result = analysis.currentSummary?.localMutatingParameters.get(path) ?? EMPTY_INDEXES;\n }\n } else {\n const member = path.match(/^([A-Za-z_][A-Za-z0-9_]*)([.:])([A-Za-z_][A-Za-z0-9_]*)$/);\n if (member) {\n const imported = analysis.imports.get(member[1]);\n if (imported && moduleBindingVisible(imported, member[1], call, owner)) {\n result = imported.summary.mutatingMemberParameters.get(member[3]) ?? EMPTY_INDEXES;\n } else {\n const factory = importedFactorySummary(context, member[1], call, owner, analysis);\n result = factory?.mutatingMemberParameters.get(member[3]) ?? EMPTY_INDEXES;\n }\n }\n }\n\n analysis.callIndexes.set(call.id, result);\n return result;\n}\n\nfunction freshExpression(context: RuleContext, expression: SyntaxNode): boolean {\n if (expression.type === \"table_constructor\" || expression.type === \"function_definition\") return true;\n if (expression.type !== \"function_call\") return false;\n const path = normalizeExpressionText(context.getCallPath(expression) ?? \"\");\n if (path === \"table.clone\" || path === \"table.create\" || path === \"table.pack\") return true;\n if (path === \"setmetatable\") {\n const first = context.callArguments(expression)[0];\n return Boolean(first && freshExpression(context, first));\n }\n return false;\n}\n\nfunction stateBindingForName(context: RuleContext, owner: FunctionInfo, name: string, bindingNode: SyntaxNode): StateBinding | null {\n return context.model.stateBindings.find((binding) =>\n binding.owner === owner && binding.valueName === name && sameNode(binding.declaration, bindingNode)\n ) ?? null;\n}\n\nfunction resolveNameOrigin(\n context: RuleContext,\n name: string,\n atNode: SyntaxNode,\n owner: FunctionInfo,\n seen: Set<string>,\n): MutationValueOrigin {\n const key = `${owner.node.id}:${name}:${atNode.startIndex}`;\n\n if (seen.has(key)) return { kind: \"unknown\" };\n\n seen.add(key);\n\n const binding = visibleBinding(name, atNode, owner);\n\n if (binding) {\n const state = stateBindingForName(context, owner, name, binding.node);\n\n if (state) return { kind: \"state\", binding: state };\n\n if (!binding.expression) return { kind: \"unknown\" };\n\n return resolveExpressionOriginInternal(\n context,\n binding.expression,\n owner,\n seen,\n );\n }\n\n if (owner.isComponent && owner.parameters[0] === name)\n return { kind: \"props\", name };\n\n if (\n owner.parameters.includes(name) &&\n !isNameShadowedBetween(atNode, owner, name)\n )\n return { kind: \"parameter\", name };\n\n return { kind: \"unknown\" };\n}\n\nfunction resolveExpressionOriginInternal(\n context: RuleContext,\n expression: SyntaxNode,\n owner: FunctionInfo,\n seen: Set<string>,\n): MutationValueOrigin {\n expression = unwrapExpression(expression);\n\n if (freshExpression(context, expression)) return { kind: \"fresh\" };\n\n if (\n [\"dot_index_expression\", \"bracket_index_expression\"].includes(\n expression.type,\n )\n ) {\n const base = expression.namedChildren[0];\n\n if (!base) return { kind: \"unknown\" };\n\n const origin = resolveExpressionOriginInternal(\n context,\n base,\n owner,\n new Set(seen),\n );\n\n if (origin.kind !== \"fresh\") return origin;\n\n const resolved = resolveLocalValue(context, base);\n\n if (\n resolved?.value.type === \"function_call\" &&\n context.getCallPath(resolved.value) === \"table.clone\"\n ) {\n // A shallow copy owns its fields but still references the original nested tables\n const path = normalizeExpressionText(expression.text);\n\n const reassigned =\n owner.body &&\n [...context.walk(owner.body)].some(\n (node) =>\n node.type === \"assignment_statement\" &&\n node.startIndex < expression.startIndex &&\n context.nearestFunction(node) === owner &&\n node.namedChildren\n .find((child) => child.type === \"variable_list\")\n ?.namedChildren.some(\n (target) => normalizeExpressionText(target.text) === path,\n ),\n );\n\n if (reassigned) return { kind: \"unknown\" };\n\n const argument = context.callArguments(resolved.value)[0];\n\n if (argument)\n return resolveExpressionOriginInternal(context, argument, owner, seen);\n }\n\n return origin;\n }\n\n const root = rootIdentifier(expression.text);\n\n if (!root) return { kind: \"unknown\" };\n\n return resolveNameOrigin(context, root, expression, owner, seen);\n}\n\nexport function mutationOriginForExpression(\n context: RuleContext,\n expression: SyntaxNode,\n owner: FunctionInfo,\n): MutationValueOrigin {\n const analysis = analysisFor(context);\n const key = `${owner.node.id}:${expression.id}`;\n const cached = analysis.originCache.get(key);\n if (cached) return cached;\n const result = resolveExpressionOriginInternal(context, expression, owner, new Set());\n analysis.originCache.set(key, result);\n return result;\n}\n",
17
17
  "import {\r\n resolveLocalFunction,\r\n resolveLocalValue,\r\n reactApiPath,\r\n} from \"../ast/local-values\";\r\n\r\nimport type { SyntaxNode } from \"../syntax\";\r\nimport type { DiagnosticInput, RuleDefinition } from \"../types\";\r\nimport { assignmentTargetNode, callNameNode } from \"./helpers\";\r\n\r\nimport {\r\n mightMutateParameters,\r\n mutatedParameterIndexesForCall,\r\n mutationOriginForExpression,\r\n} from \"./parameter-mutations\";\r\n\r\nexport const noMutatingStateUpdater: RuleDefinition = {\r\n id: \"react-luau/no-mutating-state-updater\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n description: \"Do not mutate previous state inside a state updater\",\r\n\r\n guidance: {\r\n explanation:\r\n \"An updater receives existing React state, including its nested tables — mutating it changes previous state and returning the same table can prevent an update\",\r\n\r\n help: \"Create a new table and copy any nested table you need to change before returning the new state\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n const seen = new Set<number>();\r\n\r\n for (const call of context.findCalls()) {\r\n const name = call.childForFieldName(\"name\");\r\n const setter = name && resolveLocalValue(context, name);\r\n\r\n if (\r\n !setter ||\r\n setter.returnIndex !== 1 ||\r\n reactApiPath(context, setter.value) !== \"React.useState\"\r\n )\r\n continue;\r\n\r\n const argument = context.callArguments(call)[0];\r\n const updater = argument && resolveLocalFunction(context, argument);\r\n const previous = updater?.parameters[0];\r\n\r\n if (!updater?.body || !previous) continue;\r\n\r\n for (const node of context.walk(updater.body)) {\r\n if (seen.has(node.id)) continue;\r\n\r\n let targets: SyntaxNode[] = [];\r\n\r\n if (\r\n node.type === \"assignment_statement\" ||\r\n node.type === \"update_statement\"\r\n ) {\r\n const left = node.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n );\r\n\r\n targets = (\r\n left?.namedChildren ?? [assignmentTargetNode(node)]\r\n ).filter((target) =>\r\n [\"dot_index_expression\", \"bracket_index_expression\"].includes(\r\n target.type,\r\n ),\r\n );\r\n } else if (\r\n node.type === \"function_call\" &&\r\n mightMutateParameters(context, node)\r\n ) {\r\n const args = context.callArguments(node);\r\n\r\n targets = [\r\n ...mutatedParameterIndexesForCall(context, node, updater),\r\n ].flatMap((index) => (args[index] ? [args[index]] : []));\r\n }\r\n\r\n const mutated = targets.find((target) => {\r\n const value =\r\n node.type === \"function_call\" ? target : target.namedChildren[0];\r\n\r\n if (!value) return false;\r\n\r\n const origin = mutationOriginForExpression(context, value, updater);\r\n\r\n return origin.kind === \"parameter\" && origin.name === previous;\r\n });\r\n\r\n if (!mutated) continue;\r\n\r\n seen.add(node.id);\r\n\r\n diagnostics.push({\r\n node: node.type === \"function_call\" ? callNameNode(node) : mutated,\r\n message: `This updater mutates previous state through ${mutated.text}`,\r\n help: \"Copy the table being changed and return new state — copying only the outer table does not copy nested tables\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
@@ -19,7 +19,9 @@
19
19
  "import type { FixPreview } from \"../types\";\n\nconst examples: Record<string, FixPreview> = {\n \"react-luau/no-mutating-state-updater\": {\n before: `setItems(function(previous)\n\\ttable.insert(previous, item)\n\\treturn previous\nend)`,\n after: `setItems(function(previous)\n\\tlocal nextItems = table.clone(previous)\n\\ttable.insert(nextItems, item)\n\\treturn nextItems\nend)`,\n note: \"Copy any nested table being changed as well\",\n },\n\n \"react-luau/no-call-component-as-function\": {\n before: `local child = Child({ value = value })`,\n after: `local child = React.createElement(Child, { value = value })`,\n note: \"Give the child its own component identity and hook lifecycle\",\n },\n\n \"react-luau/no-create-binding-in-render\": {\n before: `local value, setValue = React.createBinding(0)`,\n after: `local value, setValue = React.useBinding(0)`,\n note: \"Keep the binding and updater stable across renders\",\n },\n\n \"react-luau/no-binding-getvalue-in-render\": {\n before: `Text = tostring(value:getValue())`,\n after: `Text = value:map(function(current)\n\\treturn tostring(current)\nend)`,\n note: \"Map the binding so later updates reach the prop\",\n },\n\n \"react-luau/usememo-must-return\": {\n before: `local result = React.useMemo(function()\n\\tcalculateValue(input)\nend, { input })`,\n after: `local result = React.useMemo(function()\n\\treturn calculateValue(input)\nend, { input })`,\n note: \"Return the calculated value instead of discarding it\",\n },\n\n \"react-luau/parse-error\": {\n before: `return React.createElement(\"Frame\", {\n\\tVisible = true,\n)`,\n after: `return React.createElement(\"Frame\", {\n\\tVisible = true,\n})`,\n note: \"Close the props table before closing the call. Parse errors can also come from unsupported syntax. Inspect the reported location before applying a repair.\",\n },\n\n \"react-luau/rules-of-hooks\": {\n before: `if enabled then\n\\tlocal value = React.useMemo(function()\n\\t\\treturn computeValue()\n\\tend, {})\nend`,\n after: `local value = React.useMemo(function()\n\\treturn computeValue()\nend, {})\n\nif enabled then\n\\t-- use value here\nend`,\n note: \"Keep hook calls at the top level, then branch on their results.\",\n },\n\n \"react-luau/exhaustive-deps\": {\n before: `React.useEffect(function()\n\\tprint(value)\nend, {})`,\n after: `React.useEffect(function()\n\\tprint(value)\nend, { value })`,\n note: \"Make the dependency table match the reactive values captured by the hook callback.\",\n },\n\n \"react-luau/effect-needs-cleanup\": {\n before: `React.useEffect(function()\n\\tlocal connection = signal:Connect(onChanged)\nend, { signal, onChanged })`,\n after: `React.useEffect(function()\n\\tlocal connection = signal:Connect(onChanged)\n\\treturn function()\n\\t\\tconnection:Disconnect()\n\\tend\nend, { signal, onChanged })`,\n note: \"Return cleanup from the same effect that creates the owned resource.\",\n },\n\n \"react-luau/no-derived-state-effect\": {\n before: `local value, setValue = React.useState(0)\n\nReact.useEffect(function()\n\\tsetValue(input * scale)\nend, { input, scale })`,\n after: `local value = input * scale`,\n note: \"Compute render-known derived values during render instead of synchronizing another state cell.\",\n },\n\n \"react-luau/no-self-updating-effect\": {\n before: `React.useEffect(function()\n\\tsetCount(count + 1)\nend, { count })`,\n after: `local function increment()\n\\tsetCount(function(previous)\n\\t\\treturn previous + 1\n\\tend)\nend`,\n note: \"Move the update to the event that owns it, or add a real convergence guard when an effect is required.\",\n },\n\n \"react-luau/no-effect-with-fresh-deps\": {\n before: `local options = { enabled = enabled }\n\nReact.useEffect(function()\n\\tapplyOptions(options)\nend, { options })`,\n after: `React.useEffect(function()\n\\tlocal options = { enabled = enabled }\n\\tapplyOptions(options)\nend, { enabled })`,\n note: \"Depend on stable reactive inputs rather than an object or function recreated every render.\",\n },\n\n \"react-luau/no-mutable-in-deps\": {\n before: `React.useEffect(function()\n\\tuseValue(ref.current)\nend, { ref.current })`,\n after: `React.useEffect(function()\n\\tuseValue(ref.current)\nend, {})`,\n note: \"This effect reads the ref after mount only. A ref mutation cannot schedule another effect. Use state or a subscription if changes must trigger work. Keep other reactive dependencies in the table.\",\n },\n\n \"react-luau/prefer-binding-over-state\": {\n before: `local value, setValue = React.useState(0)`,\n after: `local value, setValue = React.useBinding(0)`,\n note: \"Use a Binding when updates only need to flow into Binding-aware visual consumers.\",\n },\n\n \"react-luau/prefer-binding-over-state-candidate\": {\n before: `local value, setValue = React.useState(0)\nsignal:Connect(setValue)\n-- value is used for presentation`,\n after: `local value, setValue = React.useBinding(0)\nsignal:Connect(setValue)\n-- keep separate React state too if structure depends on it`,\n note: \"Use a Binding when this is really an external presentation stream. Keep or split React state when the event represents semantic UI state or needs reconciliation.\",\n },\n\n \"react-luau/rerender-unstable-memo-props\": {\n before: `return React.createElement(MemoizedButton, {\n\\tonClick = function()\n\\t\\tdoSomething()\n\\tend,\n})`,\n after: `local onClick = React.useCallback(function()\n\\tdoSomething()\nend, {})\n\nreturn React.createElement(MemoizedButton, {\n\\tonClick = onClick,\n})`,\n note: \"Stabilize identity only when the memoized child is worth skipping. Moving construction into the child or removing ineffective memoization can also be better.\",\n },\n\n \"react-luau/rerender-high-frequency-state\": {\n before: `local transparency, setTransparency = React.useState(0)\nReact.useEffect(function()\n\\tlocal connection = RunService.RenderStepped:Connect(function()\n\\t\\tsetTransparency(readTransparency())\n\\tend)\n\\treturn function() connection:Disconnect() end\nend, { readTransparency })\nreturn React.createElement(\"Frame\", {\n\\tBackgroundTransparency = transparency,\n})`,\n after: `local transparency, setTransparency = React.useBinding(0)\nReact.useEffect(function()\n\\tlocal connection = RunService.RenderStepped:Connect(function()\n\\t\\tsetTransparency(readTransparency())\n\\tend)\n\\treturn function() connection:Disconnect() end\nend, { readTransparency })\nreturn React.createElement(\"Frame\", {\n\\tBackgroundTransparency = transparency,\n})`,\n note: \"A Binding updates this host property without scheduling component renders. Keep state for values that control child structure, and keep the subscription cleanup.\",\n },\n\n \"react-luau/rerender-unnecessary-usememo\": {\n before: `local doubled = React.useMemo(function()\n\\treturn value * 2\nend, { value })`,\n after: `local doubled = value * 2`,\n note: \"Compute cheap derived values directly when stable identity is not observed.\",\n },\n\n \"react-luau/rerender-unnecessary-usecallback\": {\n before: `local functionName = React.useCallback(function()\n\\tdoSomething()\nend, {})`,\n after: `local function functionName()\n\\tdoSomething()\nend`,\n note: \"Use a normal local function when nothing observes the callback's identity.\",\n },\n\n \"react-luau/rerender-static-discovery-in-render\": {\n before: `local function Component()\n\\tlocal modules = ReplicatedStorage.Modules:GetChildren()\n\\treturn renderModules(modules)\nend`,\n after: `local modules = ReplicatedStorage.Modules:GetChildren()\n\nlocal function Component()\n\\treturn renderModules(modules)\nend`,\n note: \"Move truly static discovery to module scope. If the source can change, cache or subscribe to the real changing input instead.\",\n },\n\n \"react-luau/rerender-repeated-collection-scan\": {\n before: `for _, item in items do\n\\tbuildRow(item)\nend\n\nfor _, item in items do\n\\tbuildLookup(item)\nend`,\n after: `for _, item in items do\n\\tbuildRow(item)\n\\tbuildLookup(item)\nend`,\n note: \"Combine passes when they iterate the same collection and can safely share one traversal.\",\n },\n\n \"react-luau/rerender-static-state\": {\n before: `local value, setValue = React.useState(computeValue())\n-- setValue is never used`,\n after: `local valueRef = React.useRef(nil)\nif valueRef.current == nil then\n\\tvalueRef.current = computeValue()\nend\nlocal value = valueRef.current`,\n note: \"This preserves a pure, non-nil initial value without a state setter. Derive a local value directly only when recomputing on every render is intended.\",\n },\n\n \"react-luau/prefer-use-ref-for-mutable-cell\": {\n before: `local cell = React.useMemo(function()\n\\treturn { current = initialValue }\nend, {})`,\n after: `local cell = React.useRef(initialValue)`,\n note: \"useRef directly expresses a stable mutable current cell.\",\n },\n\n \"react-luau/rerender-functional-setstate\": {\n before: `setCount(count + 1)`,\n after: `setCount(function(previous)\n\\treturn previous + 1\nend)`,\n note: \"Use the previous value supplied by React when a retained callback computes the next state from old state.\",\n },\n\n \"react-luau/rerender-lazy-state-init\": {\n before: `local value, setValue = React.useState(buildExpensiveValue())`,\n after: `local value, setValue = React.useState(function()\n\\treturn buildExpensiveValue()\nend)`,\n note: \"Pass a lazy initializer function so expensive construction only runs when the state is first created.\",\n },\n\n \"react-luau/rerender-lazy-ref-init\": {\n before: `local valueRef = React.useRef(buildExpensiveValue())`,\n after: `local valueRef = React.useRef(nil)\nif valueRef.current == nil then\n\\tvalueRef.current = buildExpensiveValue()\nend`,\n note: \"Use nil-guarded lazy initialization only for pure construction. Owned resources with cleanup usually belong in an effect.\",\n },\n\n \"react-luau/rerender-state-only-in-handlers\": {\n before: `local value, setValue = React.useState(0)\n\nlocal function onInput()\n\\tprint(value)\nend`,\n after: `local valueRef = React.useRef(0)\n\nlocal function onInput()\n\\tprint(valueRef.current)\nend`,\n note: \"Use a ref when updates do not need to participate in rendering or hook dependencies.\",\n },\n\n \"react-luau/no-set-state-in-render\": {\n before: `local value, setValue = React.useState(0)\nsetValue(nextValue)`,\n after: `local value, setValue = React.useState(0)\n\nReact.useEffect(function()\n\\tsetValue(nextValue)\nend, { nextValue })`,\n note: \"Move the update to the event or effect that owns it. Prefer deriving the value directly when no state synchronization is needed.\",\n },\n\n \"react-luau/no-direct-state-mutation\": {\n before: `items[index] = nextItem\nsetItems(items)`,\n after: `local nextItems = table.clone(items)\nnextItems[index] = nextItem\nsetItems(nextItems)`,\n note: \"Create a new table identity before updating React state.\",\n },\n\n \"react-luau/no-ref-current-in-render\": {\n before: `latest.current = value`,\n after: `React.useEffect(function()\n\\tlatest.current = value\nend, { value })`,\n note: \"When committed-versus-uncommitted values matter, update the latest-value ref after commit.\",\n },\n\n \"react-luau/no-create-context-in-render\": {\n before: `local function Component()\n\\tlocal Context = React.createContext(nil)\n\\treturn React.createElement(Context.Provider)\nend`,\n after: `local Context = React.createContext(nil)\n\nlocal function Component()\n\\treturn React.createElement(Context.Provider)\nend`,\n note: \"Create the Context once at module scope so its identity is stable.\",\n },\n\n \"react-luau/no-nested-component-definition\": {\n before: `local function Parent()\n\\tlocal function Child()\n\\t\\treturn React.createElement(\"Frame\")\n\\tend\n\\treturn React.createElement(Child)\nend`,\n after: `local function Child()\n\\treturn React.createElement(\"Frame\")\nend\n\nlocal function Parent()\n\\treturn React.createElement(Child)\nend`,\n note: \"Move component definitions out of render so React sees a stable component identity.\",\n },\n\n \"react-luau/no-random-key\": {\n before: `React.createElement(Row, {\n\\tkey = HttpService:GenerateGUID(false),\n})`,\n after: `React.createElement(Row, {\n\\tkey = item.id,\n})`,\n note: \"Use identity that remains stable for the lifetime of the logical item.\",\n },\n\n \"react-luau/no-yield-in-render\": {\n before: `local function Component(props)\n\\tlocal result = props.remote:InvokeServer()\n\\treturn React.createElement(\"TextLabel\", { Text = tostring(result) })\nend`,\n after: `local function Component(props)\n\\tlocal result, setResult = React.useState(\"Loading...\")\n\\tReact.useEffect(function()\n\\t\\tlocal active = true\n\\t\\ttask.spawn(function()\n\\t\\t\\tlocal ok, value = pcall(function()\n\\t\\t\\t\\treturn props.remote:InvokeServer()\n\\t\\t\\tend)\n\\t\\t\\tif active then\n\\t\\t\\t\\tsetResult(if ok then tostring(value) else \"Request failed\")\n\\t\\t\\tend\n\\t\\tend)\n\\t\\treturn function() active = false end\n\\tend, { props.remote })\n\\treturn React.createElement(\"TextLabel\", { Text = result })\nend`,\n note: \"Start yielding work after commit and ignore stale results after cleanup. This does not cancel the server request. Production data loading may also need retries or request deduplication.\",\n },\n\n \"react-luau/no-task-spawn-in-render\": {\n before: `local function Component()\n\\ttask.spawn(doWork)\n\\treturn React.createElement(\"Frame\")\nend`,\n after: `local function Component()\n\\tReact.useEffect(function()\n\\t\\tlocal thread = task.spawn(doWork)\n\\t\\treturn function()\n\\t\\t\\tif coroutine.status(thread) ~= \"dead\" then\n\\t\\t\\t\\ttask.cancel(thread)\n\\t\\t\\tend\n\\t\\tend\n\\tend, { doWork })\n\\treturn React.createElement(\"Frame\")\nend`,\n note: \"Schedule work from the effect or event that owns the side effect, not while rendering.\",\n },\n\n \"react-luau/no-side-effects-in-render\": {\n before: `local connection = signal:Connect(onChanged)`,\n after: `React.useEffect(function()\n\\tlocal connection = signal:Connect(onChanged)\n\\treturn function()\n\\t\\tconnection:Disconnect()\n\\tend\nend, { signal, onChanged })`,\n note: \"Move imperative work into an owned effect with cleanup. Disconnect subscriptions, destroy owned Instances, and cancel tweens. Prefer React.createElement for React-owned Instances.\",\n },\n\n \"react-luau/no-create-root-in-render\": {\n before: `local function Component()\n\\tlocal root = ReactRoblox.createRoot(container)\n\\troot:render(element)\nend`,\n after: `local root = ReactRoblox.createRoot(container)\nroot:render(element)`,\n note: \"Create and own roots outside component render. A component should not imperatively create another React root while rendering.\",\n },\n\n \"react-luau/no-static-name-prop\": {\n before: `return React.createElement(\"Frame\", {}, {\n\\tChild = React.createElement(\"TextLabel\", {\n\\t\\tName = \"Label\",\n\\t}),\n})`,\n after: `return React.createElement(\"Frame\", {}, {\n\\tLabel = React.createElement(\"TextLabel\"),\n})`,\n note: \"The child table key names a static instance. Keep Name in props when the name must change dynamically.\",\n },\n\n \"react-luau/no-prop-mutation\": {\n before: `props.value = normalize(props.value)`,\n after: `local value = normalize(props.value)`,\n note: \"Treat props as immutable and derive a local value or update state in the owner.\",\n },\n\n \"react-luau/no-array-index-as-key\": {\n before: `for index, item in items do\n\\tchildren[index] = React.createElement(Row, {\n\\t\\tkey = index,\n\\t})\nend`,\n after: `for _, item in items do\n\\tchildren[item.id] = React.createElement(Row, {\n\\t\\tkey = item.id,\n\\t})\nend`,\n note: \"Use stable item identity when items can move. Keep positional identity only when replacing the occupant of a slot is intentional.\",\n },\n\n \"react-luau/unstable-context-value\": {\n before: `return React.createElement(Context.Provider, {\n\\tvalue = { user = user, theme = theme },\n})`,\n after: `local contextValue = React.useMemo(function()\n\\treturn { user = user, theme = theme }\nend, { user, theme })\n\nreturn React.createElement(Context.Provider, {\n\\tvalue = contextValue,\n})`,\n note: \"Memoize the provider value when consumer updates depend on table identity.\",\n },\n};\n\nexport function fixExampleForRule(ruleId: string): FixPreview | undefined {\n const example = examples[ruleId];\n\n return example ? { ...example, kind: example.kind ?? \"pattern\" } : undefined;\n}\n",
20
20
  "import type { SyntaxNode } from \"./syntax\";\r\nimport type { RuleContext } from \"./types\";\r\n\r\n/**\r\n * Engine members that are documented/known to yield. The analyzer intentionally\r\n * matches exact member names instead of every `*Async` function so custom\r\n * promise-style APIs do not become false positives merely because of naming.\r\n */\r\nconst YIELDING_ENGINE_MEMBERS = new Set([\r\n \"WaitForChild\",\r\n \"Wait\",\r\n \"GetAsync\",\r\n \"SetAsync\",\r\n \"UpdateAsync\",\r\n \"RemoveAsync\",\r\n \"IncrementAsync\",\r\n \"GetSortedAsync\",\r\n \"ListKeysAsync\",\r\n \"ListVersionsAsync\",\r\n \"GetVersionAsync\",\r\n \"PublishAsync\",\r\n \"SubscribeAsync\",\r\n \"RequestAsync\",\r\n \"PostAsync\",\r\n \"PreloadAsync\",\r\n \"ComputeAsync\",\r\n \"FilterStringAsync\",\r\n \"FilterStringForBroadcast\",\r\n \"FilterStringForPlayerAsync\",\r\n \"GetNonChatStringForBroadcastAsync\",\r\n \"GetNonChatStringForUserAsync\",\r\n \"GetChatForUserAsync\",\r\n \"AwardBadgeAsync\",\r\n \"UserHasBadgeAsync\",\r\n \"GetBadgeInfoAsync\",\r\n \"GetPolicyInfoForPlayerAsync\",\r\n \"GetTranslatorForPlayerAsync\",\r\n \"GetUserIdFromNameAsync\",\r\n \"GetNameFromUserIdAsync\",\r\n \"GetHumanoidDescriptionFromUserId\",\r\n \"GetHumanoidDescriptionFromOutfitId\",\r\n \"GetFriendsAsync\",\r\n \"GetUserThumbnailAsync\",\r\n \"GetUserInfosByUserIdsAsync\",\r\n \"GetGroupInfoAsync\",\r\n \"GetAlliesAsync\",\r\n \"GetEnemiesAsync\",\r\n \"GetGroupsAsync\",\r\n \"TeleportAsync\",\r\n \"ReserveServerAsync\",\r\n \"CreatePlaceAsync\",\r\n \"SavePlaceAsync\",\r\n \"LoadAsset\",\r\n \"LoadAssetVersion\",\r\n \"GetProductInfo\",\r\n \"CreateEditableImageAsync\",\r\n \"CreateEditableMeshAsync\",\r\n \"GetBundleDetailsAsync\",\r\n \"GetGamePlacesAsync\",\r\n \"GetDeveloperProductsAsync\",\r\n \"GetInventoryAsync\",\r\n \"GetItemDetailsAsync\",\r\n \"GetBatchItemDetailsAsync\",\r\n \"PromptCreateAssetAsync\",\r\n \"PromptImportAnimationClipFromVideoAsync\",\r\n \"GetAnimationClipAsync\",\r\n]);\r\n\r\nconst ROBLOX_MUTABLE_LEAFS = new Set([\r\n \"AbsolutePosition\",\r\n \"AbsoluteRotation\",\r\n \"AbsoluteSize\",\r\n \"AssemblyAngularVelocity\",\r\n \"AssemblyLinearVelocity\",\r\n \"CFrame\",\r\n \"Changed\",\r\n \"ContentSize\",\r\n \"CurrentCamera\",\r\n \"Enabled\",\r\n \"FocusLost\",\r\n \"Focused\",\r\n \"Heartbeat\",\r\n \"InputBegan\",\r\n \"InputChanged\",\r\n \"InputEnded\",\r\n \"Parent\",\r\n \"Position\",\r\n \"PreRender\",\r\n \"PreSimulation\",\r\n \"RenderStepped\",\r\n \"Rotation\",\r\n \"Size\",\r\n \"Stepped\",\r\n \"TextBounds\",\r\n \"Value\",\r\n \"ViewportSize\",\r\n \"WorldCFrame\",\r\n \"WorldPosition\",\r\n \"X\",\r\n \"Y\",\r\n]);\r\n\r\nconst INSTANCE_FACTORY_MEMBERS = new Set([\r\n \"Clone\",\r\n \"FindFirstAncestor\",\r\n \"FindFirstAncestorOfClass\",\r\n \"FindFirstAncestorWhichIsA\",\r\n \"FindFirstChild\",\r\n \"FindFirstChildOfClass\",\r\n \"FindFirstChildWhichIsA\",\r\n \"GetButton\",\r\n \"GetMouse\",\r\n \"GetService\",\r\n \"WaitForChild\",\r\n]);\r\n\r\nexport function finalCallMember(path: string): string {\r\n return path.split(/[.:]/).at(-1) ?? path;\r\n}\r\n\r\nfunction declarationInitializer(node: SyntaxNode, name: string): SyntaxNode | null | undefined {\r\n if (node.type !== \"variable_declaration\") return undefined;\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const variables = assignment?.namedChildren.find((child) => child.type === \"variable_list\")\r\n ?? node.namedChildren.find((child) => child.type === \"variable_list\");\r\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\r\n const names = variables?.namedChildren.filter((child) => child.type === \"identifier\") ?? [];\r\n const index = names.findIndex((candidate) => candidate.text === name);\r\n if (index < 0) return undefined;\r\n return expressions?.namedChildren[index] ?? expressions?.namedChildren[0] ?? null;\r\n}\r\n\r\nfunction functionBindsName(node: SyntaxNode, name: string): boolean {\r\n if (node.type !== \"function_definition\" && node.type !== \"function_declaration\") return false;\r\n const parameters = node.childForFieldName(\"parameters\");\r\n if (!parameters) return false;\r\n return parameters.namedChildren.some((parameter) =>\r\n parameter.namedChildren.some((child) => child.type === \"identifier\" && child.text === name)\r\n || (parameter.type === \"identifier\" && parameter.text === name)\r\n );\r\n}\r\n\r\nfunction loopBindsName(node: SyntaxNode, name: string): boolean {\r\n if (node.type !== \"for_statement\") return false;\r\n const header = node.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\r\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n return new RegExp(`^\\\\s*for\\\\s+(?:${escaped}\\\\s*=|[^\\\\n]*\\\\b${escaped}\\\\b[^\\\\n]*\\\\bin\\\\b)`, \"s\").test(header);\r\n}\r\n\r\nfunction visibleInitializer(name: string, from: SyntaxNode, context: RuleContext): SyntaxNode | null | undefined {\r\n let current: SyntaxNode | null = from.parent;\r\n while (current) {\r\n if (current.type === \"block\" || current.id === context.root.id) {\r\n const children = current.namedChildren;\r\n for (let index = children.length - 1; index >= 0; index -= 1) {\r\n const child = children[index];\r\n if (child.startIndex >= from.startIndex) continue;\r\n const initializer = declarationInitializer(child, name);\r\n if (initializer !== undefined) return initializer;\r\n if (child.type === \"function_declaration\") {\r\n const declared = child.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\r\n if (declared === name) return null;\r\n }\r\n }\r\n }\r\n if (functionBindsName(current, name) || loopBindsName(current, name)) return null;\r\n current = current.parent;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction expressionHasRobloxOrigin(\r\n expression: SyntaxNode | null | undefined,\r\n from: SyntaxNode,\r\n context: RuleContext,\r\n seen: Set<string>,\r\n): boolean {\r\n if (!expression) return false;\r\n const normalized = expression.text.replace(/\\s+/g, \"\");\r\n if (/^(?:game|workspace|script)(?:[.:]|$)/.test(normalized) || /^Instance\\.new\\(/.test(normalized)) return true;\r\n\r\n const root = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (!root || root === \"require\" || seen.has(root)) return false;\r\n if (expression.type !== \"identifier\" && expression.type !== \"function_call\") return false;\r\n\r\n seen.add(root);\r\n return expressionHasRobloxOrigin(visibleInitializer(root, from, context), from, context, seen);\r\n}\r\n\r\nfunction hasRobloxReceiver(path: string, call: SyntaxNode, context: RuleContext): boolean {\r\n const normalized = path.replace(/\\s+/g, \"\");\r\n if (/^(?:game|workspace|script)(?:[.:]|$)/.test(normalized)) return true;\r\n const root = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (!root) return false;\r\n return expressionHasRobloxOrigin(visibleInitializer(root, call, context), call, context, new Set([root]));\r\n}\r\n\r\nconst runServiceCallCache = new WeakMap<RuleContext, Map<number, boolean>>();\r\nconst runServiceExpressionCache = new WeakMap<RuleContext, Map<number, boolean>>();\r\nconst highFrequencyRobloxCallCache = new WeakMap<RuleContext, Map<number, boolean>>();\r\nconst highFrequencyRobloxExpressionCache = new WeakMap<RuleContext, Map<number, boolean>>();\r\n\r\nfunction cachedNodeBoolean(\r\n cache: WeakMap<RuleContext, Map<number, boolean>>,\r\n context: RuleContext,\r\n node: SyntaxNode,\r\n compute: () => boolean,\r\n): boolean {\r\n let entries = cache.get(context);\r\n if (!entries) {\r\n entries = new Map<number, boolean>();\r\n cache.set(context, entries);\r\n }\r\n const cached = entries.get(node.id);\r\n if (cached !== undefined) return cached;\r\n const value = compute();\r\n entries.set(node.id, value);\r\n return value;\r\n}\r\n\r\nconst RUN_SERVICE_EVENTS = new Set([\r\n \"RenderStepped\",\r\n \"Heartbeat\",\r\n \"Stepped\",\r\n \"PreRender\",\r\n \"PreSimulation\",\r\n \"PostSimulation\",\r\n]);\r\n\r\nfunction expressionIsRunService(\r\n expression: SyntaxNode | null | undefined,\r\n from: SyntaxNode,\r\n context: RuleContext,\r\n seen: Set<string>,\r\n): boolean {\r\n if (!expression) return false;\r\n const normalized = expression.text.replace(/\\s+/g, \"\");\r\n if (/^game:GetService\\([\"']RunService[\"']\\)$/.test(normalized)) return true;\r\n if (expression.type !== \"identifier\") return false;\r\n const name = expression.text;\r\n if (seen.has(name)) return false;\r\n seen.add(name);\r\n return expressionIsRunService(visibleInitializer(name, from, context), from, context, seen);\r\n}\r\n\r\nfunction rootIsRunService(root: string, from: SyntaxNode, context: RuleContext): boolean {\r\n if (root === \"game\") return false;\r\n return expressionIsRunService(visibleInitializer(root, from, context), from, context, new Set([root]));\r\n}\r\n\r\nexport function isHighFrequencyRunServiceExpression(node: SyntaxNode, context: RuleContext): boolean {\r\n return cachedNodeBoolean(runServiceExpressionCache, context, node, () => {\r\n const normalized = node.text.replace(/\\s+/g, \"\");\r\n if (/^game:GetService\\([\"']RunService[\"']\\)\\.(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)$/.test(normalized)) {\r\n return true;\r\n }\r\n const match = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)$/);\r\n return Boolean(match && RUN_SERVICE_EVENTS.has(match[2]) && rootIsRunService(match[1], node, context));\r\n });\r\n}\r\n\r\nexport function isHighFrequencyRunServiceCall(call: SyntaxNode, context: RuleContext): boolean {\r\n return cachedNodeBoolean(runServiceCallCache, context, call, () => {\r\n const normalized = (context.getCallPath(call) ?? \"\").replace(/\\s+/g, \"\");\r\n const direct = call.text.replace(/\\s+/g, \"\");\r\n if (/^game:GetService\\([\"']RunService[\"']\\)(?:\\.(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation):Connect|:BindToRenderStep|:BindToSimulation)\\(/.test(direct)) {\r\n return true;\r\n }\r\n\r\n const event = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation):Connect$/);\r\n if (event) return rootIsRunService(event[1], call, context);\r\n\r\n const bind = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*):(?:BindToRenderStep|BindToSimulation)$/);\r\n return Boolean(bind && rootIsRunService(bind[1], call, context));\r\n });\r\n}\r\n\r\nconst HIGH_FREQUENCY_ROBLOX_EVENTS = new Set([\r\n \"InputChanged\",\r\n \"TouchMoved\",\r\n \"Move\",\r\n]);\r\n\r\nexport function isHighFrequencyRobloxExpression(node: SyntaxNode, context: RuleContext): boolean {\r\n return cachedNodeBoolean(highFrequencyRobloxExpressionCache, context, node, () => {\r\n if (isHighFrequencyRunServiceExpression(node, context)) return true;\r\n const normalized = node.text.replace(/\\s+/g, \"\");\r\n const match = normalized.match(/^(.+)\\.(InputChanged|TouchMoved|Move)$/);\r\n if (!match || !HIGH_FREQUENCY_ROBLOX_EVENTS.has(match[2])) return false;\r\n return hasRobloxReceiver(match[1], node, context);\r\n });\r\n}\r\n\r\nexport function isHighFrequencyRobloxCall(call: SyntaxNode, context: RuleContext): boolean {\r\n return cachedNodeBoolean(highFrequencyRobloxCallCache, context, call, () => {\r\n if (isHighFrequencyRunServiceCall(call, context)) return true;\r\n const normalized = (context.getCallPath(call) ?? \"\").replace(/\\s+/g, \"\");\r\n const event = normalized.match(/^(.+)\\.(InputChanged|TouchMoved|Move):Connect$/);\r\n if (!event || !HIGH_FREQUENCY_ROBLOX_EVENTS.has(event[2])) return false;\r\n return hasRobloxReceiver(event[1], call, context);\r\n });\r\n}\r\n\r\nexport function sourceHasHighFrequencyRunService(source: string): boolean {\r\n if (/game\\s*:\\s*GetService\\s*\\(\\s*[\"']RunService[\"']\\s*\\)\\s*(?:\\.\\s*(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)\\s*:\\s*Connect|:\\s*(?:BindToRenderStep|BindToSimulation))/.test(source)) {\r\n return true;\r\n }\r\n\r\n const aliases = new Set<string>();\r\n for (const match of source.matchAll(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*game\\s*:\\s*GetService\\s*\\(\\s*[\"']RunService[\"']\\s*\\)/g)) {\r\n aliases.add(match[1]);\r\n }\r\n for (const alias of aliases) {\r\n const escaped = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n const pattern = new RegExp(`\\\\b${escaped}\\\\s*(?:\\\\.\\\\s*(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)\\\\s*:\\\\s*Connect|:\\\\s*(?:BindToRenderStep|BindToSimulation))`);\r\n if (pattern.test(source)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function sourceHasHighFrequencyRobloxEvent(source: string): boolean {\r\n if (sourceHasHighFrequencyRunService(source)) return true;\r\n\r\n if (/game\\s*:\\s*GetService\\s*\\(\\s*[\"']UserInputService[\"']\\s*\\)\\s*\\.\\s*(?:InputChanged|TouchMoved)\\s*:\\s*Connect/.test(source)) {\r\n return true;\r\n }\r\n\r\n const serviceAliases = new Set<string>();\r\n for (const match of source.matchAll(\r\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*game\\s*:\\s*GetService\\s*\\(\\s*[\"']UserInputService[\"']\\s*\\)/g,\r\n )) {\r\n serviceAliases.add(match[1]);\r\n }\r\n for (const alias of serviceAliases) {\r\n const escaped = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n if (new RegExp(`\\\\b${escaped}\\\\s*\\\\.\\\\s*(?:InputChanged|TouchMoved)\\\\s*:\\\\s*Connect`).test(source)) {\r\n return true;\r\n }\r\n }\r\n\r\n const playersAliases = new Set<string>();\r\n for (const match of source.matchAll(\r\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*game\\s*:\\s*GetService\\s*\\(\\s*[\"']Players[\"']\\s*\\)/g,\r\n )) {\r\n playersAliases.add(match[1]);\r\n }\r\n for (const players of playersAliases) {\r\n const escapedPlayers = players.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n for (const match of source.matchAll(\r\n new RegExp(`\\\\blocal\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*${escapedPlayers}\\\\s*\\\\.\\\\s*LocalPlayer\\\\s*:\\\\s*GetMouse\\\\s*\\\\(\\\\s*\\\\)`, \"g\"),\r\n )) {\r\n const mouse = match[1].replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n if (new RegExp(`\\\\b${mouse}\\\\s*\\\\.\\\\s*Move\\\\s*:\\\\s*Connect`).test(source)) return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function knownYieldReason(path: string, call?: SyntaxNode, context?: RuleContext): string | null {\r\n const normalized = path.replace(/\\s+/g, \"\");\r\n if (normalized === \"task.wait\") return \"task.wait\";\r\n if (normalized === \"coroutine.yield\") return \"coroutine.yield\";\r\n\r\n const member = finalCallMember(normalized);\r\n if (!YIELDING_ENGINE_MEMBERS.has(member)) return null;\r\n if (!call || !context) return null;\r\n return hasRobloxReceiver(normalized, call, context) ? member : null;\r\n}\r\n\r\nexport function functionYieldPoint(node: SyntaxNode, context: RuleContext): { call: SyntaxNode; reason: string } | null {\r\n for (const candidate of context.walk(node)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n const nearest = context.nearestFunction(candidate);\r\n const owner = context.model.functionByNode.get(node.id);\r\n if (owner && nearest !== owner) continue;\r\n const path = context.resolveCallPath(context.getCallPath(candidate) ?? \"\");\r\n const reason = knownYieldReason(path, candidate, context);\r\n if (reason) return { call: candidate, reason };\r\n }\r\n return null;\r\n}\r\n\r\nexport function isInstanceProducingExpression(node: SyntaxNode | undefined, context: RuleContext): boolean {\r\n if (!node) return false;\r\n\r\n const text = node.text.trim();\r\n if (/^(?:workspace|game|script)(?:\\.|:|$)/.test(text)) return true;\r\n\r\n for (const candidate of context.walk(node)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n const path = context.resolveCallPath(context.getCallPath(candidate) ?? \"\");\r\n if (path === \"Instance.new\") return true;\r\n if (INSTANCE_FACTORY_MEMBERS.has(finalCallMember(path))) return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function mutableDependencyBase(path: string, externallyMutableRoots: Set<string>): string | null {\r\n const normalized = path.replace(/\\s+/g, \"\");\r\n if (/\\.current(?:\\.|$)/.test(normalized)) return \"\";\r\n\r\n const segments = normalized.split(\".\");\r\n if (segments.length < 2) return null;\r\n\r\n if (externallyMutableRoots.has(segments[0])) return segments[0];\r\n\r\n const mutableIndex = segments.findIndex((segment, index) => index > 0 && ROBLOX_MUTABLE_LEAFS.has(segment));\r\n if (mutableIndex <= 0) return null;\r\n\r\n const ownerPath = segments.slice(0, mutableIndex).join(\".\");\r\n const mutableLeaf = segments[mutableIndex];\r\n const signalLike = /(?:Changed|Began|Ended|Focused|Heartbeat|Stepped|PreRender|PreSimulation)$/.test(mutableLeaf);\r\n const objectLike = /(?:instance|attachment|camera|mouse|frame|gui|part|value|humanoid|sound|tween|workspace|root|viewport)/i.test(ownerPath);\r\n return signalLike || objectLike ? ownerPath : null;\r\n}\r\n",
21
21
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FixPreview, FunctionInfo, RuleContext, RuleDefinition, Severity } from \"../types\";\r\nimport { sameNode } from \"../ast/walk\";\r\nimport { functionYieldPoint } from \"../roblox-semantics\";\r\nimport { callNameNode, declarationNames, firstFunctionArgument, functionInfoForNode } from \"./helpers\";\r\n\r\ninterface Resource {\r\n call: SyntaxNode;\r\n label: string;\r\n variable: string | null;\r\n detail?: string;\r\n severity?: Severity;\r\n cleanupMatches(cleanupText: string, variable: string | null, call: SyntaxNode): boolean;\r\n}\r\n\r\nconst ALWAYS_MANAGED_METHOD = /:GiveTask$/;\r\nconst GENERIC_MANAGER_METHOD = /:(?:Add|AddTask|AddObject|Track)$/;\r\nconst MANAGER_ROOT = /(?:maid|trove|janitor|cleaner|cleanup|scope|bin|disposer)(?:$|[._])/i;\r\nconst CONNECTION_RETURNING_METHODS = new Set([\"BindToSimulation\", \"SubscribeAsync\", \"OnUpdate\"]);\r\n\r\nfunction escapeRegExp(value: string): string {\r\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n}\r\n\r\nfunction connectionOwnerExpression(rawPath: string): string | null {\r\n const connected = rawPath.match(/^(.*):Connect$/s)?.[1];\r\n if (!connected) return null;\r\n\r\n const signalMethod = connected.match(/^(.*):(?:GetPropertyChangedSignal|GetAttributeChangedSignal)\\s*\\(.*\\)$/s);\r\n if (signalMethod) return signalMethod[1]?.trim() || null;\r\n\r\n const eventProperty = connected.match(/^(.*)\\.[A-Za-z_][A-Za-z0-9_]*$/s);\r\n return eventProperty?.[1]?.trim() || null;\r\n}\r\n\r\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\r\n return expressionList?.namedChildren ?? [];\r\n}\r\n\r\nfunction initializerCreatesInstance(initializer: SyntaxNode | undefined, context: RuleContext): boolean {\r\n if (!initializer) return false;\r\n for (const candidate of context.walk(initializer)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n if (context.resolveCallPath(context.getCallPath(candidate) ?? \"\") === \"Instance.new\") return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction bodyDeclaresInstanceBefore(\r\n body: SyntaxNode | null,\r\n beforeIndex: number,\r\n expression: string,\r\n context: RuleContext,\r\n): boolean {\r\n if (!body) return false;\r\n for (const child of body.namedChildren) {\r\n if (child.startIndex >= beforeIndex) break;\r\n if (child.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(child);\r\n const index = names.indexOf(expression);\r\n if (index === -1) continue;\r\n if (initializerCreatesInstance(declarationExpressions(child)[index], context)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction isProvenInstanceExpression(\r\n expression: string | null,\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n callback: FunctionInfo,\r\n): boolean {\r\n if (!expression || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(expression)) return false;\r\n const callbackInstances = context.model.instanceVariablesByFunction.get(callback.node.id);\r\n if (callbackInstances?.has(expression)) return true;\r\n if (bodyDeclaresInstanceBefore(callback.body, call.startIndex, expression, context)) return true;\r\n\r\n const effectOwner = context.nearestFunction(callback.node);\r\n if (effectOwner) {\r\n const ownerInstances = context.model.instanceVariablesByFunction.get(effectOwner.node.id);\r\n if (ownerInstances?.has(expression)) return true;\r\n }\r\n return Boolean(effectOwner && bodyDeclaresInstanceBefore(effectOwner.body, callback.node.startIndex, expression, context));\r\n}\r\n\r\nfunction cleanupDestroysExpression(cleanupText: string, expression: string): boolean {\r\n return new RegExp(`(?:^|[^A-Za-z0-9_])${escapeRegExp(expression)}\\\\s*:\\\\s*Destroy\\\\s*\\\\(`, \"s\").test(cleanupText);\r\n}\r\n\r\nfunction assignedVariableName(call: SyntaxNode, callback: FunctionInfo): string | null {\r\n let current = call.parent;\r\n while (current && !sameNode(current, callback.node)) {\r\n if (current.type === \"variable_declaration\") {\r\n const names = declarationNames(current);\r\n const expressions = declarationExpressions(current);\r\n const index = expressions.findIndex((expression) => expression.startIndex <= call.startIndex && expression.endIndex >= call.endIndex);\r\n if (index >= 0) return names[index] ?? names[0] ?? null;\r\n return names[0] ?? null;\r\n }\r\n if (current.type === \"assignment_statement\") {\r\n const beforeCall = current.text.slice(0, Math.max(0, call.startIndex - current.startIndex));\r\n const match = beforeCall.match(/^\\s*([A-Za-z_][A-Za-z0-9_]*(?:\\s*\\[[^\\]]+\\]|\\s*\\.[A-Za-z_][A-Za-z0-9_]*)*)\\s*=\\s*$/s);\r\n const target = match?.[1]?.replace(/\\s+/g, \"\") ?? \"\";\r\n const root = target.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (root) return root;\r\n // A call can be nested inside a conditional/table initializer. In that case\r\n // keep walking so the surrounding variable declaration can own the resource.\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return null;\r\n current = current.parent;\r\n }\r\n return null;\r\n}\r\n\r\nfunction cleanupIteratesAndDisconnects(cleanupText: string, collection: string): boolean {\r\n const escaped = escapeRegExp(collection);\r\n const loops = new RegExp(\r\n `for\\\\s+[^\\\\n]*?([A-Za-z_][A-Za-z0-9_]*)\\\\s+in\\\\s+${escaped}\\\\s+do([\\\\s\\\\S]*?)end`,\r\n \"g\",\r\n );\r\n for (const match of cleanupText.matchAll(loops)) {\r\n const item = match[1];\r\n const body = match[2] ?? \"\";\r\n if (new RegExp(`\\\\b${escapeRegExp(item)}\\\\s*:\\\\s*Disconnect\\\\s*\\\\(`).test(body)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction cleanupCallsDisposer(cleanupText: string, variable: string): boolean {\r\n return new RegExp(`(?:^|[^A-Za-z0-9_.:])${escapeRegExp(variable)}\\\\s*\\\\(`, \"s\").test(cleanupText);\r\n}\r\n\r\nfunction isManagedByCleanupContainer(call: SyntaxNode, context: RuleContext, callback: FunctionInfo): boolean {\r\n let current = call.parent;\r\n while (current && !sameNode(current, callback.node)) {\r\n if (current.type === \"function_call\") {\r\n const path = context.getCallPath(current) ?? \"\";\r\n if (ALWAYS_MANAGED_METHOD.test(path)) return true;\r\n if (GENERIC_MANAGER_METHOD.test(path)) {\r\n const receiver = path.split(\":\", 1)[0] ?? \"\";\r\n if (MANAGER_ROOT.test(receiver)) return true;\r\n }\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nfunction localFunctionByName(callback: FunctionInfo, name: string, context: RuleContext): SyntaxNode | null {\r\n if (!callback.body) return null;\r\n for (const child of callback.body.namedChildren) {\r\n if (child.type === \"function_declaration\" && child.childForFieldName(\"name\")?.text === name) return child;\r\n if (child.type !== \"variable_declaration\") continue;\r\n const match = child.text.match(new RegExp(`^\\\\s*local\\\\s+${escapeRegExp(name)}\\\\s*=\\\\s*function\\\\b`, \"s\"));\r\n if (!match) continue;\r\n return [...context.walk(child)].find((node) => node.type === \"function_definition\") ?? null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction cleanupTexts(callback: FunctionInfo, context: RuleContext): string[] {\r\n if (!callback.body) return [];\r\n const texts: string[] = [];\r\n\r\n for (const node of context.walk(callback.body)) {\r\n if (node.type !== \"return_statement\") continue;\r\n if (context.nearestFunction(node) !== callback) continue;\r\n const expressionList = node.namedChildren.find((child) => child.type === \"expression_list\");\r\n const returned = expressionList?.namedChildren[0];\r\n if (!returned) continue;\r\n if (returned.type === \"function_definition\") {\r\n texts.push(returned.text);\r\n continue;\r\n }\r\n if (returned.type === \"identifier\") {\r\n const localFunction = localFunctionByName(callback, returned.text, context);\r\n if (localFunction) texts.push(localFunction.text);\r\n }\r\n }\r\n\r\n return texts;\r\n}\r\n\r\nfunction taskCallbackNode(call: SyntaxNode, context: RuleContext, callback: FunctionInfo): SyntaxNode | null {\r\n const args = context.callArguments(call);\r\n const candidate = args.find((arg) => arg.type === \"function_definition\");\r\n if (candidate) return candidate;\r\n const named = args[0];\r\n if (named?.type === \"identifier\") return localFunctionByName(callback, named.text, context);\r\n return null;\r\n}\r\n\r\nfunction cancellationFlagMatches(taskCallback: SyntaxNode | null, cleanupText: string, callback: FunctionInfo): boolean {\r\n if (!taskCallback || !callback.body) return false;\r\n const beforeTask = callback.body.text.slice(0, Math.max(0, taskCallback.startIndex - callback.body.startIndex));\r\n const declarations = [...beforeTask.matchAll(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*false\\b/g)].map((match) => match[1]);\r\n\r\n for (const name of declarations) {\r\n const escaped = escapeRegExp(name);\r\n if (!new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*true\\\\b`).test(cleanupText)) continue;\r\n const taskText = taskCallback.text;\r\n const observesCancellation = new RegExp(`(?:if\\\\s+${escaped}\\\\s+then[\\\\s\\\\S]{0,120}?return|if\\\\s+not\\\\s+${escaped}\\\\s+then|while\\\\s+not\\\\s+${escaped}\\\\b|until\\\\s+${escaped}\\\\b)`, \"s\").test(taskText);\r\n if (observesCancellation) return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction connectionResource(call: SyntaxNode, variable: string | null, label = \"RBXScriptConnection\"): Resource {\r\n return {\r\n call,\r\n label,\r\n variable,\r\n cleanupMatches(text, name) {\r\n return Boolean(\r\n name\r\n && (new RegExp(`\\\\b${escapeRegExp(name)}\\\\s*:\\\\s*Disconnect\\\\s*\\\\(`).test(text)\r\n || cleanupIteratesAndDisconnects(text, name)),\r\n );\r\n },\r\n };\r\n}\r\n\r\nfunction numericTaskDelay(call: SyntaxNode, context: RuleContext): number | null {\r\n const first = context.callArguments(call)[0]?.text.trim();\r\n if (!first || !/^-?\\d+(?:\\.\\d+)?$/.test(first)) return null;\r\n const value = Number(first);\r\n return Number.isFinite(value) ? value : null;\r\n}\r\n\r\nfunction isCleanupOnlyTask(callbackNode: SyntaxNode | null, context: RuleContext): boolean {\r\n if (!callbackNode) return false;\r\n const info = functionInfoForNode(context, callbackNode);\r\n if (!info?.body) return false;\r\n const calls = [...context.walk(info.body)].filter((node) => node.type === \"function_call\" && context.nearestFunction(node) === info);\r\n if (calls.length === 0) return false;\r\n return calls.every((call) => /:(?:Destroy|Disconnect)$/.test(context.getCallPath(call) ?? \"\"));\r\n}\r\n\r\nfunction taskSeverity(path: string, call: SyntaxNode, taskCallback: SyntaxNode | null, yieldPoint: unknown, context: RuleContext): Severity {\r\n if (path === \"task.defer\" && !yieldPoint) return \"suggestion\";\r\n if (path === \"task.delay\" && !yieldPoint) {\r\n if (isCleanupOnlyTask(taskCallback, context)) return \"suggestion\";\r\n const delay = numericTaskDelay(call, context);\r\n if (delay !== null && delay <= 0.25) return \"suggestion\";\r\n }\r\n return \"warning\";\r\n}\r\n\r\nfunction cleanupHelp(resources: Resource[], details: string[]): string {\r\n const labels = new Set(resources.map((resource) => resource.label));\r\n let action: string;\r\n\r\n if (resources.every((resource) => resource.label.includes(\"task\"))) {\r\n action = \"Cancel the task in returned cleanup if it must stop with the effect.\";\r\n } else if (labels.size === 1 && labels.has(\"connection/subscription\")) {\r\n action = \"Disconnect the connection in returned cleanup, or hand it to a cleanup manager.\";\r\n } else if (labels.size === 1 && [...labels][0]?.endsWith(\" connection\")) {\r\n action = \"Disconnect the returned connection in cleanup.\";\r\n } else if (labels.size === 1 && labels.has(\"RenderStep binding\")) {\r\n action = \"Call UnbindFromRenderStep with the same binding name in cleanup.\";\r\n } else if (labels.size === 1 && labels.has(\"ContextAction binding\")) {\r\n action = \"Call UnbindAction with the same action name in cleanup.\";\r\n } else if (labels.size === 1 && labels.has(\"ContextAction activation binding\")) {\r\n action = \"Call UnbindActivate with the same input type in cleanup.\";\r\n } else if (labels.size === 1 && labels.has(\"React root\")) {\r\n action = \"Unmount the root in cleanup.\";\r\n } else {\r\n action = \"Release the owned resources in returned cleanup.\";\r\n }\r\n\r\n return `${details.length > 0 ? `${details.join(\" \")} ` : \"\"}${action}`;\r\n}\r\n\r\nfunction cleanupFixPreview(resources: Resource[], context: RuleContext): FixPreview | undefined {\r\n const labels = new Set(resources.map((resource) => resource.label));\r\n const first = resources[0];\r\n if (!first) return undefined;\r\n\r\n if (labels.size === 1 && labels.has(\"RenderStep binding\")) {\r\n const bindingName = context.callArguments(first.call)[0]?.text.trim() ?? '\"RenderStepName\"';\r\n return {\r\n kind: \"pattern\",\r\n before: `RunService:BindToRenderStep(${bindingName}, priority, onStep)`,\r\n after: `RunService:BindToRenderStep(${bindingName}, priority, onStep)\r\n\r\nreturn function()\r\n\tRunService:UnbindFromRenderStep(${bindingName})\r\nend`,\r\n note: \"Unbind the same RenderStep name when the effect reruns or unmounts.\",\r\n };\r\n }\r\n\r\n if ([...labels].every((label) => label.includes(\"task\"))) {\r\n const path = context.resolveCallPath(context.getCallPath(first.call) ?? \"task.delay\");\r\n const taskCall = path === \"task.defer\"\r\n ? `task.defer(function()\r\n\tdoWork()\r\nend)`\r\n : path === \"task.spawn\"\r\n ? `task.spawn(function()\r\n\tdoWork()\r\nend)`\r\n : `task.delay(delaySeconds, function()\r\n\tdoWork()\r\nend)`;\r\n return {\r\n kind: \"pattern\",\r\n before: taskCall,\r\n after: `local thread = ${taskCall}\r\n\r\nreturn function()\r\n\ttask.cancel(thread)\r\nend`,\r\n note: \"Cancel scheduled work only when it must not outlive this effect. Short fire-and-forget work may intentionally remain uncancelled.\",\r\n };\r\n }\r\n\r\n if (labels.size === 1 && labels.has(\"ContextAction binding\")) {\r\n return {\r\n kind: \"pattern\",\r\n before: `ContextActionService:BindAction(actionName, onAction, false, inputType)`,\r\n after: `ContextActionService:BindAction(actionName, onAction, false, inputType)\r\n\r\nreturn function()\r\n\tContextActionService:UnbindAction(actionName)\r\nend`,\r\n note: \"Unbind the same action name in the effect cleanup.\",\r\n };\r\n }\r\n\r\n if (labels.size === 1 && labels.has(\"React root\")) {\r\n return {\r\n kind: \"pattern\",\r\n before: `local root = ReactRoblox.createRoot(container)`,\r\n after: `local root = ReactRoblox.createRoot(container)\r\n\r\nreturn function()\r\n\troot:unmount()\r\nend`,\r\n note: \"Unmount roots created by the effect when ownership ends.\",\r\n };\r\n }\r\n\r\n return {\r\n kind: \"pattern\",\r\n before: `local connection = signal:Connect(onChanged)`,\r\n after: `local connection = signal:Connect(onChanged)\r\n\r\nreturn function()\r\n\tconnection:Disconnect()\r\nend`,\r\n note: \"Return cleanup from the same effect that acquires the resource.\",\r\n };\r\n}\r\n\r\nfunction classifyResource(call: SyntaxNode, context: RuleContext, callback: FunctionInfo): Resource | null {\r\n const rawPath = context.getCallPath(call) ?? \"\";\r\n const path = context.resolveCallPath(rawPath);\r\n const variable = assignedVariableName(call, callback);\r\n const finalMember = path.split(/[.:]/).at(-1) ?? path;\r\n\r\n if (/:Connect$/.test(rawPath)) {\r\n const ownerExpression = connectionOwnerExpression(rawPath);\r\n const ownerIsInstance = isProvenInstanceExpression(ownerExpression, call, context, callback);\r\n return {\r\n call,\r\n label: \"connection/subscription\",\r\n variable,\r\n cleanupMatches(text, name) {\r\n if (name && new RegExp(`\\\\b${escapeRegExp(name)}\\\\s*:\\\\s*Disconnect\\\\s*\\\\(`).test(text)) return true;\r\n if (name && cleanupIteratesAndDisconnects(text, name)) return true;\r\n // Custom Signal/Iris-style Connect APIs may return a disposer function instead of RBXScriptConnection.\r\n if (name && cleanupCallsDisposer(text, name)) return true;\r\n return Boolean(ownerIsInstance && ownerExpression && cleanupDestroysExpression(text, ownerExpression));\r\n },\r\n };\r\n }\r\n\r\n if (CONNECTION_RETURNING_METHODS.has(finalMember)) {\r\n return connectionResource(call, variable, `${finalMember} connection`);\r\n }\r\n\r\n if (/BindToRenderStep$/.test(rawPath)) {\r\n const bindingName = context.callArguments(call)[0]?.text.trim();\r\n return {\r\n call,\r\n label: \"RenderStep binding\",\r\n variable,\r\n cleanupMatches(text) {\r\n if (!/UnbindFromRenderStep\\s*\\(/.test(text)) return false;\r\n if (!bindingName) return true;\r\n return new RegExp(`UnbindFromRenderStep\\\\s*\\\\(\\\\s*${escapeRegExp(bindingName)}\\\\s*\\\\)`).test(text);\r\n },\r\n };\r\n }\r\n\r\n if (/:BindAction(?:AtPriority)?$/.test(rawPath)) {\r\n const actionName = context.callArguments(call)[0]?.text.trim();\r\n return {\r\n call,\r\n label: \"ContextAction binding\",\r\n variable,\r\n cleanupMatches(text) {\r\n if (/:UnbindAllActions\\s*\\(/.test(text)) return true;\r\n if (!/:UnbindAction\\s*\\(/.test(text)) return false;\r\n if (!actionName) return true;\r\n return new RegExp(`:UnbindAction\\\\s*\\\\(\\\\s*${escapeRegExp(actionName)}\\\\s*\\\\)`).test(text);\r\n },\r\n };\r\n }\r\n\r\n if (/:BindActivate$/.test(rawPath)) {\r\n const inputType = context.callArguments(call)[0]?.text.trim();\r\n return {\r\n call,\r\n label: \"ContextAction activation binding\",\r\n variable,\r\n cleanupMatches(text) {\r\n if (!/:UnbindActivate\\s*\\(/.test(text)) return false;\r\n if (!inputType) return true;\r\n return new RegExp(`:UnbindActivate\\\\s*\\\\(\\\\s*${escapeRegExp(inputType)}(?:\\\\s*,|\\\\s*\\\\))`).test(text);\r\n },\r\n };\r\n }\r\n\r\n if (path === \"ReactRoblox.createRoot\") {\r\n return {\r\n call,\r\n label: \"React root\",\r\n variable,\r\n cleanupMatches(text, name) {\r\n return Boolean(name && new RegExp(`\\\\b${escapeRegExp(name)}\\\\s*:\\\\s*unmount\\\\s*\\\\(`, \"i\").test(text));\r\n },\r\n };\r\n }\r\n\r\n if (path === \"task.delay\" || path === \"task.defer\" || path === \"task.spawn\") {\r\n const taskCallback = taskCallbackNode(call, context, callback);\r\n const yieldPoint = taskCallback ? functionYieldPoint(taskCallback, context) : null;\r\n const outlivesEffect = path !== \"task.spawn\" || Boolean(yieldPoint);\r\n if (!outlivesEffect) return null;\r\n\r\n return {\r\n call,\r\n label: path === \"task.spawn\" ? \"yielding spawned task\" : path === \"task.defer\" ? \"deferred task\" : \"delayed task\",\r\n detail: yieldPoint ? `The task can outlive the effect because it yields at ${yieldPoint.reason}.` : \"The task is scheduled to run after the effect callback can finish.\",\r\n severity: taskSeverity(path, call, taskCallback, yieldPoint, context),\r\n variable,\r\n cleanupMatches(text, name) {\r\n if (name) {\r\n const escaped = escapeRegExp(name);\r\n if (new RegExp(`task\\\\.cancel\\\\s*\\\\(\\\\s*${escaped}\\\\s*\\\\)`).test(text)) return true;\r\n if (new RegExp(`p?call\\\\s*\\\\(\\\\s*task\\\\.cancel\\\\s*,\\\\s*${escaped}\\\\s*\\\\)`).test(text)) return true;\r\n }\r\n return cancellationFlagMatches(taskCallback, text, callback);\r\n },\r\n };\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport const effectNeedsCleanup: RuleDefinition = {\r\n id: \"react-luau/effect-needs-cleanup\",\r\n category: \"Effects\",\r\n severity: \"warning\",\r\n description: \"Effects that create owned resources or outliving tasks should return matching cleanup.\",\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const rawPath = context.getCallPath(call);\r\n if (!rawPath) continue;\r\n const path = context.resolveCallPath(rawPath);\r\n if (path !== \"React.useEffect\" && path !== \"React.useLayoutEffect\") continue;\r\n\r\n const callbackNode = firstFunctionArgument(context, call);\r\n const callback = functionInfoForNode(context, callbackNode);\r\n if (!callbackNode || !callback) continue;\r\n const cleanup = cleanupTexts(callback, context);\r\n const missing: Resource[] = [];\r\n\r\n for (const candidate of context.walk(callbackNode)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n if (context.nearestFunction(candidate) !== callback) continue;\r\n if (isManagedByCleanupContainer(candidate, context, callback)) continue;\r\n const resource = classifyResource(candidate, context, callback);\r\n if (!resource) continue;\r\n if (cleanup.some((text) => resource.cleanupMatches(text, resource.variable, resource.call))) continue;\r\n missing.push(resource);\r\n }\r\n\r\n if (missing.length === 0) continue;\r\n const labels = [...new Set(missing.map((resource) => resource.label))];\r\n const details = [...new Set(missing.map((resource) => resource.detail).filter((detail): detail is string => Boolean(detail)))];\r\n const severityRank: Record<Severity, number> = { suggestion: 0, warning: 1, error: 2 };\r\n const severity = missing.reduce<Severity>(\r\n (highest, resource) => severityRank[resource.severity ?? \"warning\"] > severityRank[highest] ? resource.severity ?? \"warning\" : highest,\r\n \"suggestion\",\r\n );\r\n const highlights = missing.map((resource) => callNameNode(resource.call));\r\n diagnostics.push({\r\n node: highlights[0],\r\n highlights,\r\n severity,\r\n message: `Effect creates ${labels.join(\", \")} without matching returned cleanup.`,\r\n help: cleanupHelp(missing, details),\r\n fixPreview: cleanupFixPreview(missing, context),\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
22
- "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\r\nimport { nodeKey, rootIdentifier } from \"../ast/walk\";\r\n\r\nimport {\r\n callNameNode,\r\n containsUnshadowedIdentifier,\r\n dependencyExpressions,\r\n functionInfoForNode,\r\n isEffectPath,\r\n parseDependencyRoots,\r\n stateBindingsFor,\r\n} from \"./helpers\";\r\n\r\nconst HOOKS_WITH_DEPS = new Set([\r\n \"React.useEffect\",\r\n \"React.useLayoutEffect\",\r\n \"React.useMemo\",\r\n \"React.useCallback\",\r\n \"React.useImperativeHandle\",\r\n]);\r\n\r\nfunction ownerForHook(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): FunctionInfo | null {\r\n const owner = context.nearestFunction(call);\r\n\r\n return owner && (owner.isComponent || owner.isHook) ? owner : null;\r\n}\r\n\r\nfunction effectCallbackWithoutDeps(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): SyntaxNode | null {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!isEffectPath(path)) return null;\r\n\r\n const args = context.callArguments(call);\r\n const callback = args[0];\r\n\r\n if (callback?.type !== \"function_definition\") return null;\r\n\r\n if (args.length < 2 || args[1]?.type === \"nil\") return callback;\r\n\r\n return null;\r\n}\r\n\r\nfunction callbackAndDeps(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): { callback: SyntaxNode; deps: SyntaxNode } | null {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n const args = context.callArguments(call);\r\n\r\n if (path === \"React.useImperativeHandle\") {\r\n const callback = args[1];\r\n const deps = args[2];\r\n\r\n if (\r\n callback?.type === \"function_definition\" &&\r\n deps?.type === \"table_constructor\"\r\n )\r\n return { callback, deps };\r\n\r\n return null;\r\n }\r\n\r\n const callback = args[0];\r\n const deps = args[1];\r\n\r\n if (\r\n callback?.type === \"function_definition\" &&\r\n deps?.type === \"table_constructor\"\r\n )\r\n return { callback, deps };\r\n\r\n return null;\r\n}\r\n\r\nfunction directTopLevelCalls(\r\n context: RuleContext,\r\n callback: SyntaxNode,\r\n): SyntaxNode[] {\r\n const info = functionInfoForNode(context, callback);\r\n\r\n if (!info?.body) return [];\r\n\r\n return info.body.namedChildren.filter(\r\n (child) => child.type === \"function_call\",\r\n );\r\n}\r\n\r\nfunction hasCall(node: SyntaxNode, context: RuleContext): boolean {\r\n for (const child of context.walk(node)) {\r\n if (child.type === \"function_call\") return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction hasExternalSubscription(\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n for (const child of context.walk(node)) {\r\n if (child.type !== \"function_call\") continue;\r\n\r\n const path = context.getCallPath(child) ?? \"\";\r\n\r\n if (\r\n /:Connect$/.test(path) ||\r\n /BindToRenderStep$/.test(path) ||\r\n /:BindAction(?:AtPriority)?$/.test(path)\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction directLocalInitializer(\r\n owner: FunctionInfo,\r\n name: string,\r\n): SyntaxNode | null {\r\n if (!owner.body) return null;\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n\r\n const assignment = statement.namedChildren.find(\r\n (child) => child.type === \"assignment_statement\",\r\n );\r\n\r\n const variableList = assignment?.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n );\r\n\r\n const expressionList = assignment?.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n const names =\r\n variableList?.namedChildren.filter(\r\n (child) => child.type === \"identifier\",\r\n ) ?? [];\r\n\r\n const expressions = expressionList?.namedChildren ?? [];\r\n const index = names.findIndex((child) => child.text === name);\r\n\r\n if (index >= 0) return expressions[index] ?? expressions[0] ?? null;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction setterCalledOutsideCallback(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n callback: SyntaxNode,\r\n setterName: string,\r\n): boolean {\r\n if (!owner.body) return false;\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (\r\n node.type !== \"function_call\" ||\r\n context.getCallPath(node) !== setterName\r\n )\r\n continue;\r\n\r\n if (\r\n node.startIndex >= callback.startIndex &&\r\n node.endIndex <= callback.endIndex\r\n )\r\n continue;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction guaranteedRepeatedStateChange(\r\n argument: SyntaxNode,\r\n stateName: string,\r\n context: RuleContext,\r\n): boolean {\r\n if (argument.type === \"table_constructor\") return true;\r\n\r\n if (argument.type === \"function_definition\") {\r\n const updater = functionInfoForNode(context, argument);\r\n const previousName = updater?.parameters[0];\r\n\r\n const returnStatement = updater?.body?.namedChildren.find(\r\n (child) => child.type === \"return_statement\",\r\n );\r\n\r\n const returnValue = returnStatement?.namedChildren[0];\r\n\r\n if (\r\n previousName &&\r\n returnValue &&\r\n guaranteedRepeatedStateChange(returnValue, previousName, context)\r\n )\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n const text = argument.text.trim();\r\n const escaped = stateName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n if (new RegExp(`^not\\\\s+${escaped}$`).test(text)) return true;\r\n\r\n if (\r\n new RegExp(\r\n `^${escaped}\\\\s*[+-]\\\\s*(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)$`,\r\n ).test(text)\r\n )\r\n return true;\r\n\r\n if (\r\n new RegExp(\r\n `^(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)\\\\s*\\\\+\\\\s*${escaped}$`,\r\n ).test(text)\r\n )\r\n return true;\r\n\r\n if (argument.type === \"function_call\") {\r\n const path = context.resolveCallPath(context.getCallPath(argument) ?? \"\");\r\n\r\n if (\r\n path === \"table.clone\" ||\r\n path === \"table.create\" ||\r\n path === \"table.pack\"\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction freshDependencyKind(\r\n node: SyntaxNode,\r\n owner: FunctionInfo,\r\n): string | null {\r\n if (node.type === \"table_constructor\") return \"table\";\r\n\r\n if (node.type === \"function_definition\") return \"function\";\r\n\r\n if (node.type === \"identifier\") {\r\n const initializer = directLocalInitializer(owner, node.text);\r\n\r\n if (initializer?.type === \"table_constructor\") return \"table\";\r\n\r\n if (initializer?.type === \"function_definition\") return \"function\";\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport const noDerivedStateEffect: RuleDefinition = {\r\n id: \"react-luau/no-derived-state-effect\",\r\n category: \"Effects\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Avoid copying render-known derived values into state from an effect.\",\r\n\r\n guidance: {\r\n help: \"Calculate the value during render and remove the state setter. Keep the effect only if it does other work. Keep state if the delay is intentional.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!isEffectPath(path)) continue;\r\n\r\n const owner = ownerForHook(context, call);\r\n const parts = callbackAndDeps(context, call);\r\n\r\n if (!owner || !parts) continue;\r\n\r\n if (hasExternalSubscription(parts.callback, context)) continue;\r\n\r\n const available =\r\n context.model.componentLocals.get(nodeKey(owner.node)) ??\r\n new Set(owner.parameters);\r\n\r\n const bindings = stateBindingsFor(context, owner);\r\n\r\n const setterToValue = new Map(\r\n bindings.map((binding) => [binding.setterName, binding.valueName]),\r\n );\r\n\r\n for (const setterCall of directTopLevelCalls(context, parts.callback)) {\r\n const setter = context.getCallPath(setterCall) ?? \"\";\r\n const targetState = setterToValue.get(setter);\r\n\r\n if (!targetState) continue;\r\n\r\n // If the setter is also used by handlers or other effects, the state has independent\r\n // ownership and is not merely a render-known derived copy.\r\n if (setterCalledOutsideCallback(context, owner, parts.callback, setter))\r\n continue;\r\n\r\n const argument = context.callArguments(setterCall)[0];\r\n\r\n if (\r\n !argument ||\r\n argument.type === \"function_definition\" ||\r\n hasCall(argument, context)\r\n )\r\n continue;\r\n\r\n const sourceNames = [...available].filter(\r\n (name) =>\r\n name !== targetState &&\r\n containsUnshadowedIdentifier(argument, name, context, owner),\r\n );\r\n\r\n if (sourceNames.length === 0) continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(setterCall),\r\n message: `${setter}() stores a value derived from ${sourceNames.slice(0, 3).join(\", \")} inside an effect.`,\r\n summary: `${targetState} can be calculated during render.`,\r\n explanation: `${setter} copies a value derived from ${sourceNames.slice(0, 3).join(\", \")} into state after render.`,\r\n help: \"Compute the value during render when it is fully derived from render-known inputs.\",\r\n\r\n fixPreview: {\r\n kind: \"pattern\" as const,\r\n before: setterCall.text,\r\n after: `local ${targetState} = ${argument.text}`,\r\n note: \"Remove the state pair and the setter call if the effect has no other work. Keep state when the delay is intentional.\",\r\n },\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noSelfUpdatingEffect: RuleDefinition = {\r\n id: \"react-luau/no-self-updating-effect\",\r\n category: \"Effects\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Effects should not unconditionally update state in a way that schedules themselves again.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!isEffectPath(path)) continue;\r\n\r\n const owner = ownerForHook(context, call);\r\n\r\n if (!owner) continue;\r\n\r\n const parts = callbackAndDeps(context, call);\r\n\r\n if (parts) {\r\n const deps = parseDependencyRoots(parts.deps);\r\n\r\n for (const binding of stateBindingsFor(context, owner)) {\r\n if (!deps.has(binding.valueName)) continue;\r\n\r\n for (const setterCall of directTopLevelCalls(\r\n context,\r\n parts.callback,\r\n )) {\r\n if (context.getCallPath(setterCall) !== binding.setterName)\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(setterCall),\r\n message: `${binding.setterName}() updates ${binding.valueName}, which is also in this effect's dependency table.`,\r\n help: \"Guard the update so it converges, move it to the originating event, or derive the value during render.\",\r\n });\r\n }\r\n }\r\n\r\n continue;\r\n }\r\n\r\n const callback = effectCallbackWithoutDeps(context, call);\r\n\r\n if (!callback) continue;\r\n\r\n for (const binding of stateBindingsFor(context, owner)) {\r\n for (const setterCall of directTopLevelCalls(context, callback)) {\r\n if (context.getCallPath(setterCall) !== binding.setterName) continue;\r\n\r\n const argument = context.callArguments(setterCall)[0];\r\n\r\n if (\r\n !argument ||\r\n !guaranteedRepeatedStateChange(argument, binding.valueName, context)\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(setterCall),\r\n message: `${binding.setterName}() unconditionally changes ${binding.valueName} in an effect that runs after every render.`,\r\n help: \"Add a dependency table or convergence guard, move the update to the event that owns it, or derive the value during render.\",\r\n });\r\n }\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noEffectWithFreshDeps: RuleDefinition = {\r\n id: \"react-luau/no-effect-with-fresh-deps\",\r\n category: \"Hooks\",\r\n severity: \"error\",\r\n\r\n description:\r\n \"Dependency tables should not contain tables or functions recreated on every render.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!HOOKS_WITH_DEPS.has(path)) continue;\r\n\r\n const owner = ownerForHook(context, call);\r\n const parts = callbackAndDeps(context, call);\r\n\r\n if (!owner || !parts) continue;\r\n\r\n for (const dependency of dependencyExpressions(parts.deps)) {\r\n const kind = freshDependencyKind(dependency, owner);\r\n\r\n if (!kind) continue;\r\n\r\n const label =\r\n dependency.type === \"identifier\" ? ` ${dependency.text}` : \"\";\r\n\r\n diagnostics.push({\r\n node: dependency,\r\n message: `${path} depends on${label || \" an inline value\"} that is a new ${kind} on every render.`,\r\n help: \"Move the value inside the hook callback and depend on its simple inputs, or intentionally stabilize the value with useMemo/useCallback when identity is part of the contract.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noMutableInDeps: RuleDefinition = {\r\n id: \"react-luau/no-mutable-in-deps\",\r\n category: \"Hooks\",\r\n severity: \"error\",\r\n\r\n description:\r\n \"Mutable ref.current values do not belong in hook dependency tables.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!HOOKS_WITH_DEPS.has(path)) continue;\r\n\r\n const owner = ownerForHook(context, call);\r\n const parts = callbackAndDeps(context, call);\r\n\r\n if (!owner || !parts) continue;\r\n\r\n const refs =\r\n context.model.refVariablesByFunction.get(nodeKey(owner.node)) ??\r\n new Set<string>();\r\n\r\n for (const dependency of dependencyExpressions(parts.deps)) {\r\n const root = rootIdentifier(dependency.text);\r\n\r\n if (!root || !refs.has(root)) continue;\r\n\r\n if (\r\n !new RegExp(\r\n `^${root.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\s*\\\\.\\\\s*current\\\\b`,\r\n ).test(dependency.text.trim())\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: dependency,\r\n message: `${dependency.text.trim()} is mutable ref state and will not itself trigger a React render when it changes.`,\r\n help: \"Read ref.current inside the hook body. Depend on reactive inputs that actually cause renders instead of listing the mutable current value.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
22
+ "import type { SyntaxNode } from \"./syntax\";\nimport type { RuleContext } from \"./types\";\nimport {\n isUnboundIdentifier,\n localValueBinding,\n unwrapExpression,\n} from \"./ast/local-values\";\n\nexport interface ApiFunctionReference {\n returnType: string;\n allocation: \"new\" | \"argument\";\n equality: \"reference\" | \"value\" | \"unknown\";\n argumentIndex?: number;\n}\n\n// Return types alone do not describe equality or allocation\n// Keep these reviewed facts offline so editor diagnostics are deterministic\n// Sources: https://github.com/Roblox/creator-docs/tree/main/content/en-us/reference/engine\n// https://github.com/Roblox/react-luau/blob/main/modules/shared/src/objectIs.lua\nconst functions = new Map<string, ApiFunctionReference>();\n\nfunction register(\n namespace: string,\n members: string[],\n reference: ApiFunctionReference,\n): void {\n for (const member of members)\n functions.set(`${namespace}.${member}`, reference);\n}\n\nfor (const type of [\n \"Instance\",\n \"Random\",\n \"RaycastParams\",\n \"OverlapParams\",\n \"CatalogSearchParams\",\n \"SharedTable\",\n]) {\n register(type, [\"new\"], {\n returnType: type,\n allocation: \"new\",\n equality: \"reference\",\n });\n}\n\nregister(\"table\", [\"clone\", \"create\", \"pack\"], {\n returnType: \"table\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"SharedTable\", [\"clone\", \"cloneAndFreeze\"], {\n returnType: \"SharedTable\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"string\", [\"split\"], {\n returnType: \"table\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"buffer\", [\"create\", \"fromstring\"], {\n returnType: \"buffer\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"coroutine\", [\"create\"], {\n returnType: \"thread\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"coroutine\", [\"wrap\"], {\n returnType: \"function\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"table\", [\"freeze\"], {\n returnType: \"table\",\n allocation: \"argument\",\n equality: \"reference\",\n argumentIndex: 0,\n});\n\nfor (const [type, members] of Object.entries({\n Color3: [\"new\", \"fromRGB\", \"fromHSV\", \"fromHex\"],\n ColorSequence: [\"new\"],\n ColorSequenceKeypoint: [\"new\"],\n NumberSequence: [\"new\"],\n NumberSequenceKeypoint: [\"new\"],\n NumberRange: [\"new\"],\n UDim: [\"new\"],\n UDim2: [\"new\", \"fromScale\", \"fromOffset\"],\n Vector2: [\"new\"],\n Vector3: [\"new\", \"fromNormalId\", \"fromAxis\"],\n CFrame: [\n \"new\",\n \"Angles\",\n \"fromEulerAnglesXYZ\",\n \"fromEulerAnglesYXZ\",\n \"fromOrientation\",\n \"fromAxisAngle\",\n \"fromMatrix\",\n \"lookAt\",\n \"lookAlong\",\n ],\n Rect: [\"new\"],\n BrickColor: [\"new\", \"palette\"],\n})) {\n register(type, members, {\n returnType: type,\n allocation: \"new\",\n equality: \"value\",\n });\n}\n\nconst instanceMethods = new Map<string, ApiFunctionReference>([\n ...[\"GetChildren\", \"GetDescendants\", \"GetAttributes\", \"GetTags\"].map(\n (member): [string, ApiFunctionReference] => [\n member,\n { returnType: \"table\", allocation: \"new\", equality: \"reference\" },\n ],\n ),\n [\n \"Clone\",\n { returnType: \"Instance\", allocation: \"new\", equality: \"reference\" },\n ],\n]);\n\nexport function apiFunctionReference(\n path: string,\n): ApiFunctionReference | null {\n return functions.get(path) ?? null;\n}\n\nfunction globalPath(\n context: RuleContext,\n expression: SyntaxNode,\n seen = new Set<number>(),\n): string | null {\n const node = unwrapExpression(expression);\n\n if (seen.has(node.id)) return null;\n\n seen.add(node.id);\n\n if (node.type === \"identifier\") {\n if (isUnboundIdentifier(context, node)) return node.text;\n\n const binding = localValueBinding(context, node);\n\n return binding?.returnIndex === 0\n ? globalPath(context, binding.value, seen)\n : null;\n }\n\n if (node.type !== \"dot_index_expression\") return null;\n\n const namespace = node.childForFieldName(\"table\");\n const member = node.childForFieldName(\"field\");\n const path = namespace && globalPath(context, namespace, seen);\n\n return path && member ? `${path}.${member.text}` : null;\n}\n\nfunction isInstanceReceiver(\n context: RuleContext,\n expression: SyntaxNode,\n seen = new Set<number>(),\n): boolean {\n const node = unwrapExpression(expression);\n\n if (seen.has(node.id)) return false;\n\n seen.add(node.id);\n\n if (node.type === \"identifier\") {\n if (isUnboundIdentifier(context, node))\n return [\"game\", \"workspace\", \"script\"].includes(node.text);\n\n const binding = localValueBinding(context, node);\n\n return (\n binding?.returnIndex === 0 &&\n isInstanceReceiver(context, binding.value, seen)\n );\n }\n\n if (node.type === \"dot_index_expression\") {\n const receiver = node.childForFieldName(\"table\");\n\n return Boolean(receiver && isInstanceReceiver(context, receiver, seen));\n }\n\n if (node.type !== \"function_call\") return false;\n\n const name = node.childForFieldName(\"name\");\n\n if (!name) return false;\n\n if (globalPath(context, name) === \"Instance.new\") return true;\n\n if (name.type !== \"method_index_expression\") return false;\n\n const receiver = name.childForFieldName(\"table\");\n const member = name.childForFieldName(\"method\")?.text;\n\n return Boolean(\n receiver &&\n member &&\n [\n \"GetService\",\n \"WaitForChild\",\n \"FindFirstChild\",\n \"FindFirstAncestor\",\n \"Clone\",\n ].includes(member) &&\n isInstanceReceiver(context, receiver, seen),\n );\n}\n\nexport function apiReferenceForCall(\n context: RuleContext,\n call: SyntaxNode,\n): ApiFunctionReference | null {\n const name = call.childForFieldName(\"name\");\n\n if (!name) return null;\n\n const path = globalPath(context, name);\n\n if (path) return apiFunctionReference(path);\n\n if (name.type !== \"method_index_expression\") return null;\n\n const receiver = name.childForFieldName(\"table\");\n const member = name.childForFieldName(\"method\")?.text;\n\n return receiver && member && isInstanceReceiver(context, receiver)\n ? (instanceMethods.get(member) ?? null)\n : null;\n}\n",
23
+ "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext } from \"../types\";\nimport { apiReferenceForCall } from \"../api-reference\";\nimport {\n resolveLocalFunction,\n resolveLocalValue,\n unwrapExpression,\n} from \"./local-values\";\n\nexport type FreshValueKind = \"table\" | \"function\" | \"object\";\n\n// Follow result expressions only: a fresh argument does not make its call result fresh\n// The lifetime changes when inspecting a factory, but module values stay stable\nexport function freshValueKind(\n context: RuleContext,\n expression: SyntaxNode | null,\n lifetime: FunctionInfo,\n seen = new Set<number>(),\n returnIndex = 0,\n lifetimes = new Set([lifetime]),\n): FreshValueKind | null {\n if (!expression) return null;\n\n const node = unwrapExpression(expression);\n\n if (seen.has(node.id) || seen.size >= 64) return null;\n\n const visited = new Set(seen).add(node.id);\n\n const analyze = (\n value: SyntaxNode | null,\n owner = lifetime,\n index = 0,\n ): FreshValueKind | null =>\n freshValueKind(\n context,\n value,\n owner,\n visited,\n index,\n new Set(lifetimes).add(owner),\n );\n\n if (node.type === \"identifier\") {\n const binding = resolveLocalValue(context, node);\n const owner = binding && context.nearestFunction(binding.value);\n\n if (!binding || !owner || !lifetimes.has(owner)) return null;\n\n return analyze(binding.value, lifetime, binding.returnIndex);\n }\n\n if (returnIndex === 0) {\n if (node.type === \"table_constructor\") return \"table\";\n\n if (\n node.type === \"function_definition\" ||\n node.type === \"function_declaration\"\n )\n return \"function\";\n\n if (node.type === \"binary_expression\") {\n const operator = node.children.find((child) =>\n [\"and\", \"or\"].includes(child.type),\n )?.type;\n\n if (operator === \"and\") return analyze(node.childForFieldName(\"right\"));\n\n if (operator === \"or\")\n return (\n analyze(node.childForFieldName(\"left\")) ??\n analyze(node.childForFieldName(\"right\"))\n );\n }\n\n if (node.type === \"if_expression\") {\n for (const branch of [\n node,\n ...node.namedChildren.filter((child) =>\n [\"elseif_clause\", \"else_clause\"].includes(child.type),\n ),\n ]) {\n const kind = analyze(branch.childForFieldName(\"consequence\"));\n\n if (kind) return kind;\n }\n }\n }\n\n if (node.type !== \"function_call\") return null;\n\n const api = apiReferenceForCall(context, node);\n\n if (api && returnIndex === 0) {\n if (api.allocation === \"argument\")\n return analyze(\n context.callArguments(node)[api.argumentIndex ?? 0] ?? null,\n );\n\n if (api.equality !== \"reference\") return null;\n\n return api.returnType === \"table\" || api.returnType === \"function\"\n ? api.returnType\n : \"object\";\n }\n\n const name = node.childForFieldName(\"name\");\n const factory = name && resolveLocalFunction(context, name);\n\n if (!factory?.body) return null;\n\n for (const statement of context.walk(factory.body)) {\n if (\n statement.type !== \"return_statement\" ||\n context.nearestFunction(statement) !== factory\n )\n continue;\n\n const values =\n statement.namedChildren.find((child) => child.type === \"expression_list\")\n ?.namedChildren ?? [];\n const value = values[returnIndex] ?? values.at(-1);\n\n if (!value) continue;\n\n const index = Math.max(0, returnIndex - values.length + 1);\n\n if (index > 0 && value.type !== \"function_call\") continue;\n\n const kind = analyze(value, factory, index);\n\n if (kind) return kind;\n }\n\n return null;\n}\n",
24
+ "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\nimport { nodeKey, rootIdentifier } from \"../ast/walk\";\nimport { freshValueKind } from \"../ast/value-identity\";\n\nimport {\n callNameNode,\n containsUnshadowedIdentifier,\n dependencyExpressions,\n functionInfoForNode,\n isEffectPath,\n parseDependencyRoots,\n stateBindingsFor,\n} from \"./helpers\";\n\nconst HOOKS_WITH_DEPS = new Set([\n \"React.useEffect\",\n \"React.useLayoutEffect\",\n \"React.useMemo\",\n \"React.useCallback\",\n \"React.useImperativeHandle\",\n]);\n\nfunction ownerForHook(\n context: RuleContext,\n call: SyntaxNode,\n): FunctionInfo | null {\n const owner = context.nearestFunction(call);\n\n return owner && (owner.isComponent || owner.isHook) ? owner : null;\n}\n\nfunction effectCallbackWithoutDeps(\n context: RuleContext,\n call: SyntaxNode,\n): SyntaxNode | null {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!isEffectPath(path)) return null;\n\n const args = context.callArguments(call);\n const callback = args[0];\n\n if (callback?.type !== \"function_definition\") return null;\n\n if (args.length < 2 || args[1]?.type === \"nil\") return callback;\n\n return null;\n}\n\nfunction callbackAndDeps(\n context: RuleContext,\n call: SyntaxNode,\n): { callback: SyntaxNode; deps: SyntaxNode } | null {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const args = context.callArguments(call);\n\n if (path === \"React.useImperativeHandle\") {\n const callback = args[1];\n const deps = args[2];\n\n if (\n callback?.type === \"function_definition\" &&\n deps?.type === \"table_constructor\"\n )\n return { callback, deps };\n\n return null;\n }\n\n const callback = args[0];\n const deps = args[1];\n\n if (\n callback?.type === \"function_definition\" &&\n deps?.type === \"table_constructor\"\n )\n return { callback, deps };\n\n return null;\n}\n\nfunction directTopLevelCalls(\n context: RuleContext,\n callback: SyntaxNode,\n): SyntaxNode[] {\n const info = functionInfoForNode(context, callback);\n\n if (!info?.body) return [];\n\n return info.body.namedChildren.filter(\n (child) => child.type === \"function_call\",\n );\n}\n\nfunction hasCall(node: SyntaxNode, context: RuleContext): boolean {\n for (const child of context.walk(node)) {\n if (child.type === \"function_call\") return true;\n }\n\n return false;\n}\n\nfunction hasExternalSubscription(\n node: SyntaxNode,\n context: RuleContext,\n): boolean {\n for (const child of context.walk(node)) {\n if (child.type !== \"function_call\") continue;\n\n const path = context.getCallPath(child) ?? \"\";\n\n if (\n /:Connect$/.test(path) ||\n /BindToRenderStep$/.test(path) ||\n /:BindAction(?:AtPriority)?$/.test(path)\n )\n return true;\n }\n\n return false;\n}\n\nfunction setterCalledOutsideCallback(\n context: RuleContext,\n owner: FunctionInfo,\n callback: SyntaxNode,\n setterName: string,\n): boolean {\n if (!owner.body) return false;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type !== \"function_call\" ||\n context.getCallPath(node) !== setterName\n )\n continue;\n\n if (\n node.startIndex >= callback.startIndex &&\n node.endIndex <= callback.endIndex\n )\n continue;\n\n return true;\n }\n\n return false;\n}\n\nfunction guaranteedRepeatedStateChange(\n argument: SyntaxNode,\n stateName: string,\n context: RuleContext,\n): boolean {\n if (argument.type === \"table_constructor\") return true;\n\n if (argument.type === \"function_definition\") {\n const updater = functionInfoForNode(context, argument);\n const previousName = updater?.parameters[0];\n\n const returnStatement = updater?.body?.namedChildren.find(\n (child) => child.type === \"return_statement\",\n );\n\n const returnValue = returnStatement?.namedChildren[0];\n\n if (\n previousName &&\n returnValue &&\n guaranteedRepeatedStateChange(returnValue, previousName, context)\n )\n return true;\n\n return false;\n }\n\n const text = argument.text.trim();\n const escaped = stateName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (new RegExp(`^not\\\\s+${escaped}$`).test(text)) return true;\n\n if (\n new RegExp(\n `^${escaped}\\\\s*[+-]\\\\s*(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)$`,\n ).test(text)\n )\n return true;\n\n if (\n new RegExp(\n `^(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)\\\\s*\\\\+\\\\s*${escaped}$`,\n ).test(text)\n )\n return true;\n\n if (argument.type === \"function_call\") {\n const path = context.resolveCallPath(context.getCallPath(argument) ?? \"\");\n\n if (\n path === \"table.clone\" ||\n path === \"table.create\" ||\n path === \"table.pack\"\n )\n return true;\n }\n\n return false;\n}\n\nexport const noDerivedStateEffect: RuleDefinition = {\n id: \"react-luau/no-derived-state-effect\",\n category: \"Effects\",\n severity: \"warning\",\n\n description:\n \"Avoid copying render-known derived values into state from an effect.\",\n\n guidance: {\n help: \"Calculate the value during render and remove the state setter. Keep the effect only if it does other work. Keep state if the delay is intentional.\",\n },\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!isEffectPath(path)) continue;\n\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n\n if (!owner || !parts) continue;\n\n if (hasExternalSubscription(parts.callback, context)) continue;\n\n const available =\n context.model.componentLocals.get(nodeKey(owner.node)) ??\n new Set(owner.parameters);\n\n const bindings = stateBindingsFor(context, owner);\n\n const setterToValue = new Map(\n bindings.map((binding) => [binding.setterName, binding.valueName]),\n );\n\n for (const setterCall of directTopLevelCalls(context, parts.callback)) {\n const setter = context.getCallPath(setterCall) ?? \"\";\n const targetState = setterToValue.get(setter);\n\n if (!targetState) continue;\n\n // If the setter is also used by handlers or other effects, the state has independent\n // ownership and is not merely a render-known derived copy.\n if (setterCalledOutsideCallback(context, owner, parts.callback, setter))\n continue;\n\n const argument = context.callArguments(setterCall)[0];\n\n if (\n !argument ||\n argument.type === \"function_definition\" ||\n hasCall(argument, context)\n )\n continue;\n\n const sourceNames = [...available].filter(\n (name) =>\n name !== targetState &&\n containsUnshadowedIdentifier(argument, name, context, owner),\n );\n\n if (sourceNames.length === 0) continue;\n\n diagnostics.push({\n node: callNameNode(setterCall),\n message: `${setter}() stores a value derived from ${sourceNames.slice(0, 3).join(\", \")} inside an effect.`,\n summary: `${targetState} can be calculated during render.`,\n explanation: `${setter} copies a value derived from ${sourceNames.slice(0, 3).join(\", \")} into state after render.`,\n help: \"Compute the value during render when it is fully derived from render-known inputs.\",\n\n fixPreview: {\n kind: \"pattern\" as const,\n before: setterCall.text,\n after: `local ${targetState} = ${argument.text}`,\n note: \"Remove the state pair and the setter call if the effect has no other work. Keep state when the delay is intentional.\",\n },\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const noSelfUpdatingEffect: RuleDefinition = {\n id: \"react-luau/no-self-updating-effect\",\n category: \"Effects\",\n severity: \"warning\",\n\n description:\n \"Effects should not unconditionally update state in a way that schedules themselves again.\",\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!isEffectPath(path)) continue;\n\n const owner = ownerForHook(context, call);\n\n if (!owner) continue;\n\n const parts = callbackAndDeps(context, call);\n\n if (parts) {\n const deps = parseDependencyRoots(parts.deps);\n\n for (const binding of stateBindingsFor(context, owner)) {\n if (!deps.has(binding.valueName)) continue;\n\n for (const setterCall of directTopLevelCalls(\n context,\n parts.callback,\n )) {\n if (context.getCallPath(setterCall) !== binding.setterName)\n continue;\n\n diagnostics.push({\n node: callNameNode(setterCall),\n message: `${binding.setterName}() updates ${binding.valueName}, which is also in this effect's dependency table.`,\n help: \"Guard the update so it converges, move it to the originating event, or derive the value during render.\",\n });\n }\n }\n\n continue;\n }\n\n const callback = effectCallbackWithoutDeps(context, call);\n\n if (!callback) continue;\n\n for (const binding of stateBindingsFor(context, owner)) {\n for (const setterCall of directTopLevelCalls(context, callback)) {\n if (context.getCallPath(setterCall) !== binding.setterName) continue;\n\n const argument = context.callArguments(setterCall)[0];\n\n if (\n !argument ||\n !guaranteedRepeatedStateChange(argument, binding.valueName, context)\n )\n continue;\n\n diagnostics.push({\n node: callNameNode(setterCall),\n message: `${binding.setterName}() unconditionally changes ${binding.valueName} in an effect that runs after every render.`,\n help: \"Add a dependency table or convergence guard, move the update to the event that owns it, or derive the value during render.\",\n });\n }\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const noEffectWithFreshDeps: RuleDefinition = {\n id: \"react-luau/no-effect-with-fresh-deps\",\n category: \"Hooks\",\n severity: \"error\",\n\n description:\n \"Dependency tables should not contain reference values recreated during render\",\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!HOOKS_WITH_DEPS.has(path)) continue;\n\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n\n if (!owner || !parts) continue;\n\n for (const dependency of dependencyExpressions(parts.deps)) {\n const kind = freshValueKind(context, dependency, owner);\n\n if (!kind) continue;\n\n const label =\n dependency.type === \"identifier\" ? ` ${dependency.text}` : \"\";\n\n diagnostics.push({\n node: dependency,\n message: `${path} depends on${label || \" an inline value\"} that can be a new ${kind} when the component renders`,\n help: \"Move the value inside the hook callback and depend on its simple inputs, or intentionally stabilize the value with useMemo/useCallback when identity is part of the contract\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const noMutableInDeps: RuleDefinition = {\n id: \"react-luau/no-mutable-in-deps\",\n category: \"Hooks\",\n severity: \"error\",\n\n description:\n \"Mutable ref.current values do not belong in hook dependency tables.\",\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!HOOKS_WITH_DEPS.has(path)) continue;\n\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n\n if (!owner || !parts) continue;\n\n const refs =\n context.model.refVariablesByFunction.get(nodeKey(owner.node)) ??\n new Set<string>();\n\n for (const dependency of dependencyExpressions(parts.deps)) {\n const root = rootIdentifier(dependency.text);\n\n if (!root || !refs.has(root)) continue;\n\n if (\n !new RegExp(\n `^${root.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\s*\\\\.\\\\s*current\\\\b`,\n ).test(dependency.text.trim())\n )\n continue;\n\n diagnostics.push({\n node: dependency,\n message: `${dependency.text.trim()} is mutable ref state and will not itself trigger a React render when it changes.`,\n help: \"Read ref.current inside the hook body. Depend on reactive inputs that actually cause renders instead of listing the mutable current value.\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n",
23
25
  "import {\n reactApiPath,\n resolveLocalValue,\n unwrapExpression,\n} from \"../ast/local-values\";\nimport type { SyntaxNode } from \"../syntax\";\nimport type { RuleContext } from \"../types\";\n\nexport const HOOK_ARGUMENTS = new Map<\n string,\n { callbackIndex: number; depsIndex: number }\n>([\n [\"React.useEffect\", { callbackIndex: 0, depsIndex: 1 }],\n [\"React.useLayoutEffect\", { callbackIndex: 0, depsIndex: 1 }],\n [\"React.useMemo\", { callbackIndex: 0, depsIndex: 1 }],\n [\"React.useCallback\", { callbackIndex: 0, depsIndex: 1 }],\n [\"React.useImperativeHandle\", { callbackIndex: 1, depsIndex: 2 }],\n]);\n\nconst tableCache = new WeakMap<RuleContext, Map<number, SyntaxNode | null>>();\n\nexport function resolveDependencyTable(\n context: RuleContext,\n expression: SyntaxNode | undefined,\n): SyntaxNode | null {\n if (!expression) return null;\n\n const resolved = resolveLocalValue(context, expression);\n\n if (\n !resolved ||\n resolved.returnIndex !== 0 ||\n resolved.value.type !== \"table_constructor\"\n )\n return null;\n\n const table = resolved.value;\n\n if (unwrapExpression(expression).id === table.id) return table;\n\n let cache = tableCache.get(context);\n\n if (!cache) {\n cache = new Map();\n tableCache.set(context, cache);\n }\n\n if (cache.has(expression.id)) return cache.get(expression.id) ?? null;\n\n const refersToTable = (node: SyntaxNode) =>\n resolveLocalValue(context, node)?.value.id === table.id;\n let result: SyntaxNode | null = table;\n\n // Resolving a local proves its initial value, not that its contents stayed unchanged\n for (const node of context.walk()) {\n if (\n node.startIndex <= table.endIndex ||\n node.startIndex >= expression.startIndex\n )\n continue;\n\n if (\n node.type === \"assignment_statement\" ||\n node.type === \"update_statement\"\n ) {\n const targets =\n node.namedChildren.find((child) => child.type === \"variable_list\")\n ?.namedChildren ?? [];\n\n if (\n targets.some(\n (target) =>\n [\"dot_index_expression\", \"bracket_index_expression\"].includes(\n target.type,\n ) &&\n target.namedChildren[0] &&\n refersToTable(target.namedChildren[0]),\n )\n ) {\n result = null;\n break;\n }\n }\n\n if (node.type !== \"function_call\") continue;\n\n const name = node.childForFieldName(\"name\");\n const receiver =\n name?.type === \"method_index_expression\" ? name.namedChildren[0] : null;\n const shape = HOOK_ARGUMENTS.get(reactApiPath(context, node) ?? \"\");\n const args = context.callArguments(node);\n\n if (\n (receiver && refersToTable(receiver)) ||\n args.some(\n (arg, index) => refersToTable(arg) && index !== shape?.depsIndex,\n )\n ) {\n result = null;\n break;\n }\n }\n\n cache.set(expression.id, result);\n\n return result;\n}\n",
24
26
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { DiagnosticInput, FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\r\nimport { nodeKey, normalizeExpressionText, parameterBindingNames, rootIdentifier, sameNode } from \"../ast/walk\";\r\nimport { mutableDependencyBase } from \"../roblox-semantics\";\r\nimport { declarationNames, dependencyExpressions, tableStartNode } from \"./helpers\";\r\nimport { HOOK_ARGUMENTS, resolveDependencyTable } from \"./dependency-tables\";\r\nimport { resolveLocalValue } from \"../ast/local-values\";\r\n\r\nconst GLOBALS = new Set([\r\n \"game\", \"workspace\", \"script\", \"shared\", \"Enum\", \"Instance\", \"task\", \"coroutine\", \"debug\", \"os\", \"utf8\", \"buffer\", \"bit32\",\r\n \"math\", \"string\", \"table\", \"pairs\", \"ipairs\", \"next\", \"pcall\", \"xpcall\", \"print\", \"warn\", \"error\", \"assert\", \"type\", \"typeof\",\r\n \"tonumber\", \"tostring\", \"select\", \"unpack\", \"rawget\", \"rawset\", \"rawequal\", \"setmetatable\", \"getmetatable\", \"Vector2\", \"Vector3\", \"UDim\",\r\n \"UDim2\", \"CFrame\", \"Color3\", \"BrickColor\", \"Rect\", \"Region3\", \"Ray\", \"TweenInfo\", \"NumberRange\", \"NumberSequence\", \"ColorSequence\",\r\n \"DateTime\", \"Random\", \"Axes\", \"Faces\", \"PhysicalProperties\", \"RaycastParams\", \"OverlapParams\", \"DockWidgetPluginGuiInfo\",\r\n]);\r\n\r\nfunction parameterNames(functionNode: SyntaxNode): Set<string> {\r\n return new Set(parameterBindingNames(functionNode.childForFieldName(\"parameters\")));\r\n}\r\n\r\nfunction* descendants(node: SyntaxNode): Iterable<SyntaxNode> {\r\n yield node;\r\n for (const child of node.namedChildren) yield* descendants(child);\r\n}\r\n\r\nconst TYPE_ONLY_NODES = new Set([\r\n \"type_definition\",\r\n \"type_annotation\",\r\n \"type_parameters\",\r\n \"generic_type_list\",\r\n \"generic_type\",\r\n \"function_type\",\r\n \"optional_type\",\r\n \"object_type\",\r\n \"union_type\",\r\n \"intersection_type\",\r\n \"tuple_type\",\r\n \"singleton_type\",\r\n \"variadic_type\",\r\n \"variadic_type_pack\",\r\n]);\r\n\r\nfunction isTypeOnlyChild(parent: SyntaxNode, child: SyntaxNode): boolean {\r\n if (TYPE_ONLY_NODES.has(child.type)) return true;\r\n if (TYPE_ONLY_NODES.has(parent.type)) return true;\r\n\r\n if (parent.type === \"parameter\") {\r\n return !sameNode(parent.namedChildren.find((candidate) => candidate.type === \"identifier\"), child);\r\n }\r\n\r\n if (parent.type === \"cast_expression\" || parent.type === \"type_cast_expression\") {\r\n return !sameNode(parent.namedChildren[0], child);\r\n }\r\n\r\n if (parent.type === \"function_definition\" || parent.type === \"function_declaration\") {\r\n const name = parent.childForFieldName(\"name\");\r\n const parameters = parent.childForFieldName(\"parameters\");\r\n const body = parent.childForFieldName(\"body\");\r\n if (sameNode(child, name) || sameNode(child, parameters) || sameNode(child, body)) return false;\r\n return true;\r\n }\r\n\r\n if (parent.type === \"variable_list\" && parent.parent?.parent?.type === \"variable_declaration\") {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction* runtimeDescendants(node: SyntaxNode): Iterable<SyntaxNode> {\r\n yield node;\r\n for (const child of node.namedChildren) {\r\n if (isTypeOnlyChild(node, child)) continue;\r\n yield* runtimeDescendants(child);\r\n }\r\n}\r\n\r\nfunction directBlockBindingNames(block: SyntaxNode, beforeIndex: number): Set<string> {\r\n const names = new Set<string>();\r\n for (const child of block.namedChildren) {\r\n if (child.startIndex >= beforeIndex) continue;\r\n if (child.type === \"variable_declaration\") {\r\n for (const name of declarationNames(child)) names.add(name);\r\n } else if (child.type === \"function_declaration\") {\r\n const name = child.childForFieldName(\"name\")?.text;\r\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) names.add(name);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nfunction loopBindingNames(loop: SyntaxNode): Set<string> {\r\n const names = new Set<string>();\r\n const header = loop.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\r\n const numeric = header.match(/^\\s*for\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=/s);\r\n if (numeric) names.add(numeric[1]);\r\n const generic = header.match(/^\\s*for\\s+(.+?)\\s+in\\b/s);\r\n if (generic) {\r\n for (const part of generic[1].split(\",\")) {\r\n const name = part.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (name) names.add(name);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nfunction isLocallyBoundOccurrence(identifier: SyntaxNode, callback: SyntaxNode, name: string): boolean {\r\n if (parameterNames(callback).has(name)) return true;\r\n\r\n let current = identifier.parent;\r\n while (current && !sameNode(current, callback)) {\r\n if ((current.type === \"function_definition\" || current.type === \"function_declaration\") && parameterNames(current).has(name)) {\r\n return true;\r\n }\r\n if (current.type === \"block\" && directBlockBindingNames(current, identifier.startIndex).has(name)) return true;\r\n if (current.type === \"for_statement\" && loopBindingNames(current).has(name)) return true;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nfunction isPropertyName(node: SyntaxNode): boolean {\r\n const parent = node.parent;\r\n if (!parent) return false;\r\n if (parent.type === \"dot_index_expression\") return sameNode(parent.childForFieldName(\"field\"), node);\r\n if (parent.type === \"method_index_expression\") return sameNode(parent.childForFieldName(\"method\"), node) || sameNode(parent.namedChildren.at(-1), node);\r\n // `fieldName = value` uses fieldName as a table key, not as a captured value.\r\n // Without this, a coincidentally named component local can create a fake dep.\r\n if (parent.type === \"field\" && !parent.text.trim().startsWith(\"[\")) {\r\n return sameNode(parent.childForFieldName(\"name\"), node);\r\n }\r\n return false;\r\n}\r\n\r\nfunction outermostDotPath(node: SyntaxNode): boolean {\r\n const parent = node.parent;\r\n return !(parent?.type === \"dot_index_expression\" && sameNode(parent.namedChildren[0], node));\r\n}\r\n\r\nfunction rootIdentifierNode(node: SyntaxNode, root: string): SyntaxNode | null {\r\n for (const candidate of descendants(node)) {\r\n if (candidate.type !== \"identifier\" || candidate.text !== root) continue;\r\n if (isPropertyName(candidate)) continue;\r\n return candidate;\r\n }\r\n return null;\r\n}\r\n\r\nfunction normalizeCapturedPath(\r\n path: string,\r\n stableVariables: Set<string>,\r\n externallyMutableRoots: Set<string>,\r\n): string | null {\r\n const normalized = normalizeExpressionText(path);\r\n const root = rootIdentifier(normalized);\r\n if (!root) return normalized;\r\n\r\n const mutableBase = mutableDependencyBase(normalized, externallyMutableRoots);\r\n if (mutableBase === \"\") return null;\r\n if (mutableBase) {\r\n const baseRoot = rootIdentifier(mutableBase);\r\n if (baseRoot && stableVariables.has(baseRoot)) return null;\r\n return mutableBase;\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction capturedDependencyPaths(\r\n callback: SyntaxNode,\r\n available: Set<string>,\r\n stableVariables: Set<string>,\r\n externallyMutableRoots: Set<string>,\r\n context: RuleContext,\r\n): Set<string> {\r\n const captured = new Set<string>();\r\n const owner = context.nearestFunction(callback);\r\n\r\n const isRenderBinding = (identifier: SyntaxNode): boolean => {\r\n const resolved = resolveLocalValue(context, identifier);\r\n\r\n return !resolved || context.nearestFunction(resolved.value) === owner;\r\n };\r\n\r\n for (const node of runtimeDescendants(callback)) {\r\n if (node.type === \"dot_index_expression\" && outermostDotPath(node)) {\r\n const root = rootIdentifier(node.text);\r\n if (!root || !available.has(root) || GLOBALS.has(root) || stableVariables.has(root)) continue;\r\n const rootNode = rootIdentifierNode(node, root);\r\n if (!rootNode || isLocallyBoundOccurrence(rootNode, callback, root)) continue;\r\n if (!isRenderBinding(rootNode)) continue;\r\n const capture = normalizeCapturedPath(node.text, stableVariables, externallyMutableRoots);\r\n if (capture) captured.add(capture);\r\n continue;\r\n }\r\n\r\n if (node.type !== \"identifier\" || isPropertyName(node)) continue;\r\n const parent = node.parent;\r\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.namedChildren[0], node)) continue;\r\n const name = node.text;\r\n if (!available.has(name) || GLOBALS.has(name) || stableVariables.has(name)) continue;\r\n if (isLocallyBoundOccurrence(node, callback, name)) continue;\r\n if (!isRenderBinding(node)) continue;\r\n captured.add(name);\r\n }\r\n\r\n return captured;\r\n}\r\n\r\nfunction localFunctionNode(owner: FunctionInfo, name: string, context: RuleContext): SyntaxNode | null {\r\n if (!owner.body) return null;\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type === \"function_declaration\" && statement.childForFieldName(\"name\")?.text === name) return statement;\r\n if (statement.type !== \"variable_declaration\" || !declarationNames(statement).includes(name)) continue;\r\n const prefix = statement.text.split(\"=\", 1)[0] ?? \"\";\r\n if (!new RegExp(`\\b${name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\b`).test(prefix)) continue;\r\n const fn = [...context.walk(statement)].find((node) => node.type === \"function_definition\");\r\n if (fn) return fn;\r\n }\r\n return null;\r\n}\r\n\r\nfunction expandLocalFunctionCaptures(\r\n captured: Set<string>,\r\n owner: FunctionInfo,\r\n available: Set<string>,\r\n stableVariables: Set<string>,\r\n externallyMutableRoots: Set<string>,\r\n context: RuleContext,\r\n): Set<string> {\r\n const result = new Set<string>();\r\n const visiting = new Set<string>();\r\n\r\n const addCapture = (capture: string): void => {\r\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(capture)) {\r\n result.add(capture);\r\n return;\r\n }\r\n const fn = localFunctionNode(owner, capture, context);\r\n if (visiting.has(capture)) return;\r\n if (!fn) {\r\n result.add(capture);\r\n return;\r\n }\r\n\r\n visiting.add(capture);\r\n const inner = capturedDependencyPaths(fn, available, stableVariables, externallyMutableRoots, context);\r\n for (const dependency of inner) addCapture(dependency);\r\n visiting.delete(capture);\r\n };\r\n\r\n for (const capture of captured) addCapture(capture);\r\n return result;\r\n}\r\n\r\nfunction dependencyCoveragePath(node: SyntaxNode): string {\r\n if (node.type === \"cast_expression\" || node.type === \"type_cast_expression\" || node.type === \"parenthesized_expression\") {\r\n const expression = node.namedChildren[0];\r\n if (expression) return dependencyCoveragePath(expression);\r\n }\r\n\r\n if (node.type === \"binary_expression\") {\r\n const left = node.childForFieldName(\"left\") ?? node.namedChildren[0];\r\n const right = node.childForFieldName(\"right\") ?? node.namedChildren[1];\r\n const isOr = node.children.some((child) => child.type === \"or\");\r\n if (isOr && left && right?.type === \"false\") return dependencyCoveragePath(left);\r\n }\r\n\r\n return normalizeExpressionText(node.text);\r\n}\r\n\r\nfunction dependencyPaths(node: SyntaxNode): Set<string> {\r\n return new Set(dependencyExpressions(node).map(dependencyCoveragePath));\r\n}\r\n\r\nfunction transparentAliasPath(node: SyntaxNode): string | null {\r\n if (node.type === \"cast_expression\" || node.type === \"type_cast_expression\" || node.type === \"parenthesized_expression\") {\r\n const expression = node.namedChildren[0];\r\n return expression ? transparentAliasPath(expression) : null;\r\n }\r\n\r\n if (node.type !== \"identifier\" && node.type !== \"dot_index_expression\") return null;\r\n return normalizeExpressionText(node.text);\r\n}\r\n\r\nfunction immutableTransparentAliases(owner: FunctionInfo, context: RuleContext): Map<string, string> {\r\n const aliases = new Map<string, string>();\r\n if (!owner.body) return aliases;\r\n const mutated = mutatedOwnerLocals(owner, context);\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const expressions = declarationExpressions(statement);\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const name = names[index];\r\n const expression = expressions[index];\r\n if (!expression || mutated.has(name)) continue;\r\n const source = transparentAliasPath(expression);\r\n if (!source || source === name) continue;\r\n const sourceRoot = rootIdentifier(source);\r\n if (!sourceRoot || mutated.has(sourceRoot)) continue;\r\n aliases.set(name, source);\r\n }\r\n }\r\n\r\n return aliases;\r\n}\r\n\r\nfunction resolveAliasPath(path: string, aliases: Map<string, string>): string {\r\n let current = path;\r\n const visiting = new Set<string>();\r\n\r\n while (true) {\r\n const root = rootIdentifier(current);\r\n if (!root || visiting.has(root)) return current;\r\n const source = aliases.get(root);\r\n if (!source) return current;\r\n visiting.add(root);\r\n current = `${source}${current.slice(root.length)}`;\r\n }\r\n}\r\n\r\nfunction dependencyPathsWithAliases(\r\n node: SyntaxNode,\r\n aliases: Map<string, string>,\r\n): Set<string> {\r\n const dependencies = dependencyPaths(node);\r\n for (const dependency of [...dependencies]) {\r\n const resolved = resolveAliasPath(dependency, aliases);\r\n if (resolved !== dependency) dependencies.add(resolved);\r\n }\r\n return dependencies;\r\n}\r\n\r\nconst PURE_DERIVED_CALL = /^(?:math\\.(?!random(?:seed)?$)[A-Za-z_][A-Za-z0-9_]*|string\\.[A-Za-z_][A-Za-z0-9_]*|table\\.(?:find|concat|clone|create|isfrozen)|(?:Color3|Vector2|Vector3|UDim|UDim2|CFrame|BrickColor|Rect|NumberRange|NumberSequence|ColorSequence|TweenInfo|Font|Ray|Region3|PhysicalProperties)\\.[A-Za-z_][A-Za-z0-9_]*|[^:]+:(?:ToHSV|Lerp|Dot|Cross|FuzzyEq|Inverse|ToObjectSpace|ToWorldSpace))$/;\r\n\r\nfunction isPureDerivedExpression(node: SyntaxNode, context: RuleContext): boolean {\r\n for (const candidate of context.walk(node)) {\r\n if (candidate !== node && (candidate.type === \"function_definition\" || candidate.type === \"function_declaration\")) return false;\r\n if (candidate.type !== \"function_call\") continue;\r\n const rawPath = context.getCallPath(candidate);\r\n if (!rawPath) return false;\r\n const path = normalizeExpressionText(context.resolveCallPath(rawPath));\r\n if (!PURE_DERIVED_CALL.test(path)) return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction mutatedOwnerLocals(owner: FunctionInfo, context: RuleContext): Set<string> {\r\n const mutated = new Set<string>();\r\n if (!owner.body) return mutated;\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (node.type !== \"assignment_statement\" && node.type !== \"update_statement\") continue;\r\n if (node.parent?.type === \"variable_declaration\") continue;\r\n const variables = node.namedChildren.find((child) => child.type === \"variable_list\");\r\n if (!variables) continue;\r\n for (const variable of variables.namedChildren) {\r\n const root = rootIdentifier(normalizeExpressionText(variable.text));\r\n if (root) mutated.add(root);\r\n }\r\n }\r\n\r\n return mutated;\r\n}\r\n\r\nfunction derivedLocalDependencies(\r\n owner: FunctionInfo,\r\n available: Set<string>,\r\n stableVariables: Set<string>,\r\n externallyMutableRoots: Set<string>,\r\n context: RuleContext,\r\n): Map<string, Set<string>> {\r\n const derived = new Map<string, Set<string>>();\r\n if (!owner.body) return derived;\r\n const mutated = mutatedOwnerLocals(owner, context);\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const expressions = declarationExpressions(statement);\r\n if (names.length === 0 || expressions.length === 0) continue;\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const name = names[index];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression || mutated.has(name) || !isPureDerivedExpression(expression, context)) continue;\r\n derived.set(name, capturedDependencyPaths(expression, available, stableVariables, externallyMutableRoots, context));\r\n }\r\n }\r\n\r\n return derived;\r\n}\r\n\r\nfunction expandDerivedLocalCaptures(\r\n captured: Set<string>,\r\n derived: Map<string, Set<string>>,\r\n dependencies: Set<string>,\r\n): Set<string> {\r\n const result = new Set<string>();\r\n const visiting = new Set<string>();\r\n\r\n const addCapture = (capture: string): void => {\r\n if (dependencySatisfies(capture, dependencies)) {\r\n result.add(capture);\r\n return;\r\n }\r\n const root = rootIdentifier(capture);\r\n if (!root || !derived.has(root)) {\r\n result.add(capture);\r\n return;\r\n }\r\n if (visiting.has(root)) return;\r\n\r\n visiting.add(root);\r\n for (const dependency of derived.get(root) ?? []) addCapture(dependency);\r\n visiting.delete(root);\r\n };\r\n\r\n for (const capture of captured) addCapture(capture);\r\n return result;\r\n}\r\n\r\nfunction hasDynamicUnpackDependencies(node: SyntaxNode, context: RuleContext): boolean {\r\n for (const dependency of dependencyExpressions(node)) {\r\n for (const candidate of context.walk(dependency)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n const rawPath = context.getCallPath(candidate);\r\n if (!rawPath) continue;\r\n const path = normalizeExpressionText(context.resolveCallPath(rawPath));\r\n if (path === \"unpack\" || path === \"table.unpack\") return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction memoizedProducerDependencies(owner: FunctionInfo, context: RuleContext): Map<string, Set<string>> {\r\n const producers = new Map<string, Set<string>>();\r\n if (!owner.body) return producers;\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const expressions = declarationExpressions(statement);\r\n if (names.length === 0 || expressions.length === 0) continue;\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const name = names[index];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression || expression.type !== \"function_call\") continue;\r\n const rawPath = context.getCallPath(expression);\r\n if (!rawPath) continue;\r\n const path = context.resolveCallPath(rawPath);\r\n if (path !== \"React.useMemo\" && path !== \"React.useCallback\") continue;\r\n const args = context.callArguments(expression);\r\n const deps = resolveDependencyTable(context, args[1]);\r\n if (!deps || hasDynamicUnpackDependencies(deps, context)) continue;\r\n producers.set(name, dependencyPaths(deps));\r\n }\r\n }\r\n\r\n return producers;\r\n}\r\n\r\nfunction isTransitivelyCoveredMemoizedValue(\r\n dependency: string,\r\n producers: Map<string, Set<string>>,\r\n dependencies: Set<string>,\r\n): boolean {\r\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(dependency)) return false;\r\n const producerDependencies = producers.get(dependency);\r\n if (!producerDependencies) return false;\r\n return [...producerDependencies].every((producerDependency) => dependencySatisfies(producerDependency, dependencies));\r\n}\r\n\r\nfunction dependencySatisfies(captured: string, dependencies: Set<string>): boolean {\r\n for (const dependency of dependencies) {\r\n if (captured === dependency) return true;\r\n if (captured.startsWith(`${dependency}.`) || captured.startsWith(`${dependency}[`)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction minimalMissingDependencies(captured: Set<string>, dependencies: Set<string>): string[] {\r\n const missing = [...captured]\r\n .filter((name) => !dependencySatisfies(name, dependencies))\r\n .sort((left, right) => left.length - right.length || left.localeCompare(right));\r\n const result: string[] = [];\r\n for (const candidate of missing) {\r\n if (dependencySatisfies(candidate, new Set(result))) continue;\r\n result.push(candidate);\r\n }\r\n return result.sort();\r\n}\r\n\r\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\r\n return expressionList?.namedChildren ?? [];\r\n}\r\n\r\nfunction directCallsInExpression(node: SyntaxNode): SyntaxNode[] {\r\n const calls: SyntaxNode[] = [];\r\n const pending = [node];\r\n while (pending.length > 0) {\r\n const current = pending.pop()!;\r\n if (current !== node && (current.type === \"function_definition\" || current.type === \"function_declaration\")) continue;\r\n if (current.type === \"function_call\") calls.push(current);\r\n pending.push(...current.namedChildren);\r\n }\r\n return calls;\r\n}\r\n\r\nfunction isCustomHookCall(call: SyntaxNode, context: RuleContext): boolean {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n return !path.startsWith(\"React.\") && /^use[A-Z0-9_]/.test(final);\r\n}\r\n\r\ninterface CustomHookDependencyHints {\r\n memberHandleRoots: Set<string>;\r\n likelyHandleRoots: Set<string>;\r\n compositeHandleRoots: Set<string>;\r\n}\r\n\r\nconst HANDLE_VALUE_NAME = /(?:ref|binding|tween|spring|motion|animation|controller|handle|connection|signal)$/i;\r\nconst HANDLE_HOOK_NAME = /(?:Tween|Spring|Binding|Motion|Animated|Animation|Sound)$/i;\r\n\r\nfunction isCalledAsFunction(owner: FunctionInfo, name: string, context: RuleContext): boolean {\r\n if (!owner.body) return false;\r\n for (const call of context.walk(owner.body)) {\r\n if (call.type !== \"function_call\") continue;\r\n const path = normalizeExpressionText(context.getCallPath(call) ?? \"\");\r\n if (path === name) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction customHookDependencyHints(owner: FunctionInfo, context: RuleContext): CustomHookDependencyHints {\r\n const hints: CustomHookDependencyHints = {\r\n memberHandleRoots: new Set<string>(),\r\n likelyHandleRoots: new Set<string>(),\r\n compositeHandleRoots: new Set<string>(),\r\n };\r\n if (!owner.body) return hints;\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const expressions = declarationExpressions(statement);\r\n if (names.length === 0 || expressions.length === 0) continue;\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const name = names[index];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression) continue;\r\n const calls = directCallsInExpression(expression);\r\n if (calls.length === 0) continue;\r\n\r\n const directHook = calls.find((call) => isCustomHookCall(call, context));\r\n if (directHook && expression.type === \"function_call\") {\r\n const path = context.resolveCallPath(context.getCallPath(directHook) ?? \"\");\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n const likelyHandle = HANDLE_VALUE_NAME.test(name) || HANDLE_HOOK_NAME.test(final) || isCalledAsFunction(owner, name, context);\r\n if (likelyHandle) {\r\n hints.memberHandleRoots.add(name);\r\n hints.likelyHandleRoots.add(name);\r\n }\r\n continue;\r\n }\r\n\r\n if (expression.type === \"table_constructor\") {\r\n const meaningfulCalls = calls.filter((call) => {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n return !/^(?:Color3|Vector2|Vector3|UDim|UDim2|CFrame|TweenInfo|NumberSequence|ColorSequence)\\./.test(path);\r\n });\r\n const allHandleHooks = meaningfulCalls.length > 0 && meaningfulCalls.every((call) => {\r\n if (!isCustomHookCall(call, context)) return false;\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n return HANDLE_HOOK_NAME.test(final);\r\n });\r\n if (allHandleHooks) hints.compositeHandleRoots.add(name);\r\n }\r\n }\r\n }\r\n\r\n return hints;\r\n}\r\n\r\nfunction isAmbiguousCustomHookHandle(dependency: string, hints: CustomHookDependencyHints): boolean {\r\n const root = rootIdentifier(dependency);\r\n if (!root) return false;\r\n if (hints.compositeHandleRoots.has(root)) return true;\r\n if (hints.likelyHandleRoots.has(root)) return true;\r\n return hints.memberHandleRoots.has(root) && dependency !== root;\r\n}\r\n\r\n\r\nexport const exhaustiveDeps: RuleDefinition = {\r\n id: \"react-luau/exhaustive-deps\",\r\n category: \"Hooks\",\r\n severity: \"warning\",\r\n description: \"React hook dependency tables should include captured reactive render values.\",\r\n run(context: RuleContext) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n const derivedDependenciesByOwner = new Map<number, Map<string, Set<string>>>();\r\n const dependencyHintsByOwner = new Map<number, CustomHookDependencyHints>();\r\n const memoizedProducersByOwner = new Map<number, Map<string, Set<string>>>();\r\n const transparentAliasesByOwner = new Map<number, Map<string, string>>();\r\n\r\n for (const call of context.findCalls()) {\r\n const rawPath = context.getCallPath(call);\r\n if (!rawPath) continue;\r\n const path = context.resolveCallPath(rawPath);\r\n const shape = HOOK_ARGUMENTS.get(path);\r\n if (!shape) continue;\r\n\r\n const args = context.callArguments(call);\r\n const callback = args[shape.callbackIndex];\r\n const depsArgument = args[shape.depsIndex];\r\n const deps = resolveDependencyTable(context, depsArgument);\r\n if (!callback || callback.type !== \"function_definition\" || !deps || !depsArgument) continue;\r\n const depsNode = tableStartNode(depsArgument);\r\n\r\n const owner = context.nearestFunction(call);\r\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\r\n const ownerKey = nodeKey(owner.node);\r\n const available = context.model.componentLocals.get(ownerKey) ?? new Set<string>();\r\n const stableVariables = context.model.stableVariablesByFunction.get(ownerKey) ?? new Set<string>();\r\n const externallyMutableRoots = context.model.externalMutableVariablesByFunction.get(ownerKey) ?? new Set<string>();\r\n const functionExpandedCaptures = expandLocalFunctionCaptures(\r\n capturedDependencyPaths(callback, available, stableVariables, externallyMutableRoots, context),\r\n owner,\r\n available,\r\n stableVariables,\r\n externallyMutableRoots,\r\n context,\r\n );\r\n let transparentAliases = transparentAliasesByOwner.get(ownerKey);\r\n if (!transparentAliases) {\r\n transparentAliases = immutableTransparentAliases(owner, context);\r\n transparentAliasesByOwner.set(ownerKey, transparentAliases);\r\n }\r\n const dependencies = dependencyPathsWithAliases(deps, transparentAliases);\r\n let derivedDependencies = derivedDependenciesByOwner.get(ownerKey);\r\n if (!derivedDependencies) {\r\n derivedDependencies = derivedLocalDependencies(owner, available, stableVariables, externallyMutableRoots, context);\r\n derivedDependenciesByOwner.set(ownerKey, derivedDependencies);\r\n }\r\n const captured = expandDerivedLocalCaptures(\r\n functionExpandedCaptures,\r\n derivedDependencies,\r\n dependencies,\r\n );\r\n const missing = minimalMissingDependencies(captured, dependencies);\r\n if (missing.length === 0) continue;\r\n\r\n if (hasDynamicUnpackDependencies(deps, context)) {\r\n diagnostics.push({\r\n node: depsNode,\r\n severity: \"suggestion\",\r\n message: `${path} uses dynamic unpack(...) dependencies, so exhaustive dependency analysis is partial.`,\r\n help: \"The analyzer cannot prove which values unpack(...) contributes. Review the explicit dependencies and the custom hook contract.\",\r\n });\r\n continue;\r\n }\r\n\r\n let hints = dependencyHintsByOwner.get(ownerKey);\r\n if (!hints) {\r\n hints = customHookDependencyHints(owner, context);\r\n dependencyHintsByOwner.set(ownerKey, hints);\r\n }\r\n let memoizedProducers = memoizedProducersByOwner.get(ownerKey);\r\n if (!memoizedProducers) {\r\n memoizedProducers = memoizedProducerDependencies(owner, context);\r\n memoizedProducersByOwner.set(ownerKey, memoizedProducers);\r\n }\r\n const uncertainHandles = missing.filter((dependency) => isAmbiguousCustomHookHandle(dependency, hints));\r\n const transitivelyCoveredMemoized = missing.filter((dependency) =>\r\n !isAmbiguousCustomHookHandle(dependency, hints)\r\n && isTransitivelyCoveredMemoizedValue(dependency, memoizedProducers, dependencies)\r\n );\r\n const reactiveMissing = missing.filter((dependency) =>\r\n !isAmbiguousCustomHookHandle(dependency, hints)\r\n && !isTransitivelyCoveredMemoizedValue(dependency, memoizedProducers, dependencies)\r\n );\r\n\r\n if (reactiveMissing.length > 0) {\r\n diagnostics.push({\r\n node: depsNode,\r\n message: `${path} dependency table is missing ${reactiveMissing.join(\", \")}.`,\r\n help: `Add ${reactiveMissing.join(\", \")} to the dependency table, or stop capturing ${reactiveMissing.length === 1 ? \"that value\" : \"those values\"} in the callback.`,\r\n });\r\n }\r\n\r\n if (transitivelyCoveredMemoized.length > 0) {\r\n diagnostics.push({\r\n node: depsNode,\r\n severity: \"suggestion\",\r\n message: `${path} captures memoized value ${transitivelyCoveredMemoized.join(\", \")} without listing ${transitivelyCoveredMemoized.length === 1 ? \"it directly\" : \"them directly\"}, but ${transitivelyCoveredMemoized.length === 1 ? \"its memo dependencies are\" : \"their memo dependencies are\"} already covered.`,\r\n help: \"The producing memo dependencies are already covered. Listing the memoized value directly can make the dependency relationship clearer.\",\r\n });\r\n }\r\n\r\n if (uncertainHandles.length > 0) {\r\n diagnostics.push({\r\n node: depsNode,\r\n severity: \"suggestion\",\r\n message: `${path} captures custom-hook handle ${uncertainHandles.join(\", \")} without listing ${uncertainHandles.length === 1 ? \"it as a dependency\" : \"them as dependencies\"}.`,\r\n help: \"The analyzer cannot prove this custom-hook return is stable. Check the hook contract before changing the dependency table.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
25
27
  "interface BracketDepth {\n parentheses: number;\n brackets: number;\n braces: number;\n}\n\ninterface Range {\n start: number;\n end: number;\n}\n\nfunction scanTypeLine(text: string, depth: BracketDepth): void {\n let quote: string | null = null;\n let escaped = false;\n\n for (let index = 0; index < text.length; index += 1) {\n const char = text[index];\n const next = text[index + 1];\n\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n\n if (char === \"-\" && next === \"-\") break;\n\n if (char === \"(\") depth.parentheses += 1;\n else if (char === \")\")\n depth.parentheses = Math.max(0, depth.parentheses - 1);\n else if (char === \"[\") depth.brackets += 1;\n else if (char === \"]\") depth.brackets = Math.max(0, depth.brackets - 1);\n else if (char === \"{\") depth.braces += 1;\n else if (char === \"}\") depth.braces = Math.max(0, depth.braces - 1);\n }\n}\n\nfunction depthIsZero(depth: BracketDepth): boolean {\n return depth.parentheses === 0 && depth.brackets === 0 && depth.braces === 0;\n}\n\nfunction lineData(source: string): { lines: string[]; offsets: number[] } {\n const lines = source\n .match(/[^\\n]*(?:\\n|$)/g)\n ?.filter(\n (line, index, all) => line.length > 0 || index < all.length - 1,\n ) ?? [source];\n const offsets: number[] = [];\n let offset = 0;\n\n for (const line of lines) {\n offsets.push(offset);\n offset += line.length;\n }\n\n return { lines, offsets };\n}\n\nfunction longBracketEquals(source: string, start: number): number | null {\n if (source[start] !== \"[\") return null;\n\n let index = start + 1;\n\n while (source[index] === \"=\") index += 1;\n\n return source[index] === \"[\" ? index - start - 1 : null;\n}\n\nfunction longBracketEnd(source: string, start: number, equals: number): number {\n const closer = `]${\"=\".repeat(equals)}]`;\n const end = source.indexOf(closer, start + equals + 2);\n\n return end < 0 ? source.length : end + closer.length;\n}\n\n/**\n * Masks comments and optionally strings so syntax compatibility rewrites\n * never alter text that merely contains a keyword\n */\nfunction codeMask(source: string, maskStrings = true): Uint8Array {\n const mask = new Uint8Array(source.length);\n mask.fill(1);\n\n let index = 0;\n\n while (index < source.length) {\n const char = source[index];\n\n if (char === \"'\" || char === '\"') {\n const quote = char;\n let cursor = index;\n let escaped = false;\n\n while (cursor < source.length) {\n if (maskStrings) mask[cursor] = 0;\n\n const current = source[cursor];\n cursor += 1;\n\n if (cursor - 1 === index) continue;\n\n if (escaped) escaped = false;\n else if (current === \"\\\\\") escaped = true;\n else if (current === quote) break;\n }\n\n index = cursor;\n continue;\n }\n\n if (char === \"`\") {\n let cursor = index;\n let escaped = false;\n\n while (cursor < source.length) {\n if (maskStrings) mask[cursor] = 0;\n\n const current = source[cursor];\n cursor += 1;\n\n if (cursor - 1 === index) continue;\n\n if (escaped) escaped = false;\n else if (current === \"\\\\\") escaped = true;\n else if (current === \"`\") break;\n }\n\n index = cursor;\n continue;\n }\n\n if (char === \"-\" && source[index + 1] === \"-\") {\n const longEquals = longBracketEquals(source, index + 2);\n const end =\n longEquals === null\n ? source.indexOf(\"\\n\", index + 2)\n : longBracketEnd(source, index + 2, longEquals);\n const stop = end < 0 ? source.length : end;\n mask.fill(0, index, stop);\n index = stop;\n continue;\n }\n\n if (char === \"[\") {\n const equals = longBracketEquals(source, index);\n\n if (equals !== null) {\n const end = longBracketEnd(source, index, equals);\n\n if (maskStrings) mask.fill(0, index, end);\n\n index = end;\n continue;\n }\n }\n\n index += 1;\n }\n\n return mask;\n}\n\nexport function sourceWithoutComments(source: string): string {\n const mask = codeMask(source, false);\n const parts: string[] = [];\n let start = 0;\n\n for (\n let comment = mask.indexOf(0);\n comment !== -1;\n comment = mask.indexOf(0, start)\n ) {\n parts.push(source.slice(start, comment));\n const nextCode = mask.indexOf(1, comment);\n start = nextCode === -1 ? source.length : nextCode;\n parts.push(source.slice(comment, start).replace(/[^\\r\\n]/g, \" \"));\n }\n\n return parts.length === 0 ? source : parts.join(\"\") + source.slice(start);\n}\n\nfunction isCode(mask: Uint8Array, start: number, end = start + 1): boolean {\n for (let index = start; index < end; index += 1) {\n if (mask[index] !== 1) return false;\n }\n\n return true;\n}\n\nfunction matchingCodeDelimiterEnd(\n source: string,\n mask: Uint8Array,\n start: number,\n opener: string,\n closer: string,\n): number | null {\n if (source[start] !== opener || !isCode(mask, start)) return null;\n\n let depth = 0;\n\n for (let cursor = start; cursor < source.length; cursor += 1) {\n if (!isCode(mask, cursor)) continue;\n\n if (source[cursor] === opener) depth += 1;\n else if (source[cursor] === closer) {\n depth -= 1;\n\n if (depth === 0) return cursor + 1;\n }\n }\n\n return null;\n}\n\nfunction maskTypeAliases(source: string, mask: Uint8Array): Range[] {\n const { lines, offsets } = lineData(source);\n const ranges: Range[] = [];\n const typeStart =\n /^(\\s*)(?:export\\s+)?type\\s+[A-Za-z_][A-Za-z0-9_]*(?:<[^>]*>)?\\s*=/;\n\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {\n const line = lines[lineIndex].replace(/\\r?\\n$/, \"\");\n const match = line.match(typeStart);\n\n if (\n !match ||\n !isCode(\n mask,\n offsets[lineIndex] + match.index!,\n offsets[lineIndex] + match.index! + match[0].trimStart().length,\n )\n )\n continue;\n\n const depth: BracketDepth = { parentheses: 0, brackets: 0, braces: 0 };\n let sawExpression = false;\n let endLine = lineIndex;\n\n for (let current = lineIndex; current < lines.length; current += 1) {\n const currentLine = lines[current].replace(/\\r?\\n$/, \"\");\n const segment =\n current === lineIndex\n ? currentLine.slice(match[0].length)\n : currentLine;\n\n if (segment.trim().length > 0) sawExpression = true;\n\n scanTypeLine(segment, depth);\n endLine = current;\n\n if (!sawExpression || !depthIsZero(depth)) continue;\n\n const trimmed = segment.trimEnd();\n\n if (/[|&=,]$/.test(trimmed)) continue;\n\n let nextNonEmpty = \"\";\n\n for (\n let lookahead = current + 1;\n lookahead < lines.length;\n lookahead += 1\n ) {\n nextNonEmpty = lines[lookahead].trim();\n\n if (nextNonEmpty.length > 0) break;\n }\n\n if (/^[|&]/.test(nextNonEmpty)) continue;\n\n break;\n }\n\n ranges.push({\n start: offsets[lineIndex],\n end: offsets[endLine] + lines[endLine].length,\n });\n\n lineIndex = endLine;\n }\n\n return ranges;\n}\n\n/** Simple aliases retained for conservative syntax-based type hints. */\nexport function simpleTypeAliases(\n source: string,\n): Array<{ name: string; type: string; startIndex: number }> {\n const mask = codeMask(source);\n const result = [];\n\n for (const range of maskTypeAliases(source, mask)) {\n // Ignore comments and string contents when interpreting type syntax.\n const text = source\n .slice(range.start, range.end)\n .split(\"\")\n .map((char, index) => (mask[range.start + index] ? char : \" \"))\n .join(\"\");\n\n const match = text.match(\n /^\\s*(?:export\\s+)?type\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*([\\s\\S]*?)\\s*;?\\s*$/,\n );\n\n if (match)\n result.push({\n name: match[1],\n type: match[2],\n startIndex: Buffer.byteLength(source.slice(0, range.start)),\n });\n }\n\n return result;\n}\n\nfunction maskTypeLevelBlocks(source: string, mask: Uint8Array): Range[] {\n const { lines, offsets } = lineData(source);\n const ranges: Range[] = [];\n const declarationStart =\n /^(\\s*)(?:(?:export\\s+)?type\\s+function\\b|declare\\s+(?:extern\\s+type|class|global)\\b)/;\n\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {\n const line = lines[lineIndex].replace(/\\r?\\n$/, \"\");\n const match = line.match(declarationStart);\n\n if (!match) continue;\n\n const firstToken = offsets[lineIndex] + match[1].length;\n\n if (!isCode(mask, firstToken)) continue;\n\n const indentation = match[1].replace(/\\t/g, \" \").length;\n let endLine = lineIndex;\n const afterStart = line.slice(match[0].length);\n\n if (!/\\bend\\b/.test(afterStart)) {\n for (let current = lineIndex + 1; current < lines.length; current += 1) {\n const currentLine = lines[current].replace(/\\r?\\n$/, \"\");\n const trimmed = currentLine.trim();\n\n if (!trimmed) continue;\n\n const currentIndent =\n currentLine.match(/^\\s*/)?.[0].replace(/\\t/g, \" \").length ?? 0;\n\n if (\n trimmed === \"end\" &&\n currentIndent <= indentation &&\n isCode(\n mask,\n offsets[current] + currentLine.indexOf(\"end\"),\n offsets[current] + currentLine.indexOf(\"end\") + 3,\n )\n ) {\n endLine = current;\n break;\n }\n }\n }\n\n ranges.push({\n start: offsets[lineIndex],\n end: offsets[endLine] + lines[endLine].length,\n });\n lineIndex = endLine;\n }\n\n return ranges;\n}\n\nfunction attributeRanges(source: string, mask: Uint8Array): Range[] {\n const ranges: Range[] = [];\n\n for (let index = 0; index < source.length; index += 1) {\n if (source[index] !== \"@\" || !isCode(mask, index)) continue;\n\n if (source[index + 1] === \"[\") {\n let depth = 0;\n let cursor = index + 1;\n\n while (cursor < source.length) {\n if (isCode(mask, cursor)) {\n if (source[cursor] === \"[\") depth += 1;\n else if (source[cursor] === \"]\") {\n depth -= 1;\n\n if (depth === 0) {\n cursor += 1;\n break;\n }\n }\n }\n\n cursor += 1;\n }\n\n ranges.push({ start: index, end: cursor });\n index = cursor - 1;\n continue;\n }\n\n const match = source.slice(index + 1).match(/^[A-Za-z_][A-Za-z0-9_]*/);\n\n if (match && isCode(mask, index + 1, index + 1 + match[0].length)) {\n ranges.push({ start: index, end: index + 1 + match[0].length });\n index += match[0].length;\n }\n }\n\n return ranges;\n}\n\nfunction explicitTypeArgumentRanges(source: string, mask: Uint8Array): Range[] {\n const ranges: Range[] = [];\n\n for (let index = 0; index < source.length - 1; index += 1) {\n if (\n source[index] !== \"<\" ||\n source[index + 1] !== \"<\" ||\n !isCode(mask, index, index + 2)\n )\n continue;\n\n let depth = 2;\n let cursor = index + 2;\n\n while (cursor < source.length && depth > 0) {\n if (isCode(mask, cursor)) {\n if (source[cursor] === \"<\") depth += 1;\n else if (source[cursor] === \">\") depth -= 1;\n }\n\n cursor += 1;\n }\n\n if (depth === 0) {\n ranges.push({ start: index, end: cursor });\n index = cursor - 1;\n }\n }\n\n return ranges;\n}\n\nfunction mergeRanges(ranges: Range[]): Range[] {\n const sorted = ranges\n .filter((range) => range.end > range.start)\n .sort((a, b) => a.start - b.start || a.end - b.end);\n const merged: Range[] = [];\n\n for (const range of sorted) {\n const previous = merged.at(-1);\n\n if (previous && range.start <= previous.end)\n previous.end = Math.max(previous.end, range.end);\n else merged.push({ ...range });\n }\n\n return merged;\n}\n\nfunction blankPreservingUtf8Bytes(value: string): string {\n let result = \"\";\n\n for (const char of value) {\n if (char === \"\\n\" || char === \"\\r\") result += char;\n else result += \" \".repeat(new TextEncoder().encode(char).length);\n }\n\n return result;\n}\n\nfunction applyMasks(source: string, ranges: Range[]): string {\n let output = source;\n\n for (const range of mergeRanges(ranges).sort((a, b) => b.start - a.start)) {\n output = `${output.slice(0, range.start)}${blankPreservingUtf8Bytes(output.slice(range.start, range.end))}${output.slice(range.end)}`;\n }\n\n return output;\n}\n\nfunction genericFunctionParameterRanges(\n source: string,\n mask: Uint8Array,\n): Range[] {\n const ranges: Range[] = [];\n const functionPattern = /\\bfunction\\b/g;\n\n for (const match of source.matchAll(functionPattern)) {\n const start = match.index;\n\n if (!isCode(mask, start, start + match[0].length)) continue;\n\n let cursor = start + match[0].length;\n\n while (cursor < source.length) {\n const char = source[cursor];\n\n if (/\\s/.test(char)) {\n cursor += 1;\n continue;\n }\n\n if (char === \"(\") break;\n\n if (char === \"<\") {\n let depth = 0;\n const rangeStart = cursor;\n\n while (cursor < source.length) {\n if (isCode(mask, cursor)) {\n if (source[cursor] === \"<\") depth += 1;\n else if (source[cursor] === \">\") {\n depth -= 1;\n\n if (depth === 0) {\n cursor += 1;\n ranges.push({ start: rangeStart, end: cursor });\n break;\n }\n }\n }\n\n cursor += 1;\n }\n\n break;\n }\n\n if (/[A-Za-z0-9_.:]/.test(char)) {\n cursor += 1;\n continue;\n }\n\n break;\n }\n }\n\n return ranges;\n}\n\nfunction genericFunctionReturnPrefixRanges(\n source: string,\n mask: Uint8Array,\n): Range[] {\n const ranges: Range[] = [];\n const functionPattern = /\\bfunction\\b/g;\n\n for (const match of source.matchAll(functionPattern)) {\n const start = match.index;\n\n if (!isCode(mask, start, start + match[0].length)) continue;\n\n let cursor = start + match[0].length;\n let genericDepth = 0;\n\n while (cursor < source.length) {\n if (!isCode(mask, cursor)) {\n cursor += 1;\n continue;\n }\n\n if (source[cursor] === \"<\") genericDepth += 1;\n else if (source[cursor] === \">\" && genericDepth > 0) genericDepth -= 1;\n else if (source[cursor] === \"(\" && genericDepth === 0) break;\n\n cursor += 1;\n }\n\n if (source[cursor] !== \"(\") continue;\n\n const parameterEnd = matchingCodeDelimiterEnd(\n source,\n mask,\n cursor,\n \"(\",\n \")\",\n );\n\n if (parameterEnd === null) continue;\n\n cursor = parameterEnd;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n\n if (source[cursor] !== \":\" || !isCode(mask, cursor)) continue;\n\n cursor += 1;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n\n if (source[cursor] !== \"<\") continue;\n\n const rangeStart = cursor;\n const genericEnd = matchingCodeDelimiterEnd(source, mask, cursor, \"<\", \">\");\n\n if (genericEnd === null) continue;\n\n cursor = genericEnd;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n\n const typeParametersEnd = matchingCodeDelimiterEnd(\n source,\n mask,\n cursor,\n \"(\",\n \")\",\n );\n\n if (typeParametersEnd === null) continue;\n\n cursor = typeParametersEnd;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n\n if (\n source.slice(cursor, cursor + 2) !== \"->\" ||\n !isCode(mask, cursor, cursor + 2)\n )\n continue;\n\n cursor += 2;\n\n while (cursor < source.length && /[ \\t]/.test(source[cursor])) cursor += 1;\n\n ranges.push({ start: rangeStart, end: cursor });\n }\n\n return ranges;\n}\n\nfunction normalizeLocalTypeofAnnotations(\n source: string,\n mask: Uint8Array,\n): string {\n const replacements: Array<{ start: number; end: number; value: string }> = [];\n const pattern = /\\blocal\\s+[A-Za-z_][A-Za-z0-9_]*\\s*:\\s*typeof\\s*\\(/g;\n\n for (const match of source.matchAll(pattern)) {\n const matchStart = match.index;\n\n if (!isCode(mask, matchStart, matchStart + match[0].length)) continue;\n\n const typeofStart = matchStart + match[0].lastIndexOf(\"typeof\");\n const open = source.indexOf(\"(\", typeofStart + 6);\n\n if (open < 0) continue;\n\n const end = matchingCodeDelimiterEnd(source, mask, open, \"(\", \")\");\n\n if (end === null) continue;\n\n const original = source.slice(typeofStart, end);\n const padding = blankPreservingUtf8Bytes(original).slice(3);\n replacements.push({ start: typeofStart, end, value: `any${padding}` });\n }\n\n let output = source;\n\n for (const replacement of replacements.sort((a, b) => b.start - a.start)) {\n output = `${output.slice(0, replacement.start)}${replacement.value}${output.slice(replacement.end)}`;\n }\n\n return output;\n}\n\n// The bundled grammar understands variadic types (`...T`) but not generic\n// type-pack references (`T...`). Reorder only pack uses outside a function's\n// generic declaration so Tree-sitter sees an equal-width type node.\nfunction normalizeGenericTypePackUses(\n source: string,\n mask: Uint8Array,\n): string {\n const declarationRanges = genericFunctionParameterRanges(source, mask);\n const replacements: Array<{ start: number; end: number; value: string }> = [];\n const packPattern = /\\b[A-Za-z_][A-Za-z0-9_]*\\.\\.\\./g;\n\n for (const match of source.matchAll(packPattern)) {\n const start = match.index;\n const end = start + match[0].length;\n\n if (!isCode(mask, start, end)) continue;\n\n if (\n declarationRanges.some(\n (range) => start >= range.start && end <= range.end,\n )\n )\n continue;\n\n const name = match[0].slice(0, -3);\n replacements.push({ start, end, value: `...${name}` });\n }\n\n let output = source;\n\n for (const replacement of replacements.sort((a, b) => b.start - a.start)) {\n output = `${output.slice(0, replacement.start)}${replacement.value}${output.slice(replacement.end)}`;\n }\n\n return output;\n}\n\nfunction normalizeIntegerLiteralSuffixes(\n source: string,\n mask: Uint8Array,\n): string {\n const suffixes: number[] = [];\n const integerPattern =\n /\\b(?:0[xX][0-9A-Fa-f_]+|0[bB][01_]+|[0-9][0-9_]*)i\\b/g;\n\n for (const match of source.matchAll(integerPattern)) {\n const start = match.index;\n const suffix = start + match[0].length - 1;\n\n if (isCode(mask, start, suffix + 1)) suffixes.push(suffix);\n }\n\n let output = source;\n\n for (const suffix of suffixes.sort((a, b) => b - a)) {\n output = `${output.slice(0, suffix)} ${output.slice(suffix + 1)}`;\n }\n\n return output;\n}\n\nfunction replaceContextualKeywords(source: string, mask: Uint8Array): string {\n const replacements: Array<{ start: number; end: number; value: string }> = [];\n\n const constPattern =\n /\\bconst\\b(?=\\s+(?:function\\b|[A-Za-z_][A-Za-z0-9_]*\\s*(?::|,|=)))/g;\n\n for (const match of source.matchAll(constPattern)) {\n const start = match.index;\n\n if (isCode(mask, start, start + 5))\n replacements.push({ start, end: start + 5, value: \"local\" });\n }\n\n const exportPattern = /\\bexport\\b(?=\\s+(?:local\\b|const\\b|function\\b))/g;\n\n for (const match of source.matchAll(exportPattern)) {\n const start = match.index;\n\n if (isCode(mask, start, start + 6))\n replacements.push({ start, end: start + 6, value: \" \" });\n }\n\n let output = source;\n\n for (const replacement of replacements.sort((a, b) => b.start - a.start)) {\n output = `${output.slice(0, replacement.start)}${replacement.value}${output.slice(replacement.end)}`;\n }\n\n return output;\n}\n\n/**\n * Adapts syntax added after the bundled Tree-sitter grammar without moving any\n * UTF-8 byte offsets. Runtime declarations are normalized to older equivalent\n * syntax; type-only syntax and attributes are blanked because React analysis\n * does not need their AST nodes.\n */\nexport function parserCompatibleSource(source: string): string {\n const mask = codeMask(source);\n const keywordCompatible = replaceContextualKeywords(source, mask);\n const literalCompatible = normalizeIntegerLiteralSuffixes(\n keywordCompatible,\n mask,\n );\n const packCompatible = normalizeGenericTypePackUses(literalCompatible, mask);\n const typeofCompatible = normalizeLocalTypeofAnnotations(\n packCompatible,\n mask,\n );\n\n const ranges = [\n ...maskTypeAliases(source, mask),\n ...maskTypeLevelBlocks(source, mask),\n ...attributeRanges(source, mask),\n ...explicitTypeArgumentRanges(source, mask),\n ...genericFunctionReturnPrefixRanges(source, mask),\n ];\n\n const masked = applyMasks(typeofCompatible, ranges);\n\n // tree-sitter-luau 1.2.0 treats a statement-level assignment to the valid\n // Luau identifier `type` as a malformed type alias. Replace only that token\n // with an equal-width identifier so syntax locations remain aligned.\n return masked.replace(\n /^(\\s*)type(?=\\s*(?:\\+=|-=|\\*=|\\/=|%=|\\^=|\\.\\.=|=(?!=)))/gm,\n \"$1_typ\",\n );\n}\n",
@@ -32,20 +34,20 @@
32
34
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { RuleContext, RuleDefinition } from \"../types\";\r\nimport { fieldName, fieldValue } from \"./helpers\";\r\n\r\nconst FRESH_CALLS = [\r\n /^math\\.random$/,\r\n /^Random\\.new$/,\r\n /:GenerateGUID$/,\r\n /^DateTime\\.now$/,\r\n /^os\\.clock$/,\r\n /^tick$/,\r\n /^time$/,\r\n /:GetServerTimeNow$/,\r\n /:NextInteger$/,\r\n /:NextNumber$/,\r\n];\r\n\r\nfunction freshDescription(node: SyntaxNode, context: RuleContext): string | null {\r\n for (const child of context.walk(node)) {\r\n if (child.type !== \"function_call\") continue;\r\n const path = context.getCallPath(child) ?? \"\";\r\n if (FRESH_CALLS.some((pattern) => pattern.test(path)) || /Random\\.new\\s*\\([^)]*\\)\\s*:\\s*Next(?:Integer|Number)/s.test(child.text)) {\r\n return `${path || \"fresh-value call\"}()`;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction isCreateElementCall(node: SyntaxNode | undefined, context: RuleContext): boolean {\r\n if (!node || node.type !== \"function_call\") return false;\r\n return context.resolveCallPath(context.getCallPath(node) ?? \"\") === \"React.createElement\";\r\n}\r\n\r\nexport const noRandomKey: RuleDefinition = {\r\n id: \"react-luau/no-random-key\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n description: \"React child keys must not be regenerated on each render.\",\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const field of context.walk()) {\r\n if (field.type !== \"field\") continue;\r\n const name = field.childForFieldName(\"name\");\r\n let keyExpression: SyntaxNode | null = null;\r\n\r\n if (fieldName(field) === \"key\") {\r\n keyExpression = fieldValue(field);\r\n } else if (field.text.trim().startsWith(\"[\") && name) {\r\n const value = field.namedChildren.find((child) => child.startIndex > name.endIndex);\r\n if (isCreateElementCall(value, context)) keyExpression = name;\r\n }\r\n\r\n if (!keyExpression) continue;\r\n const description = freshDescription(keyExpression, context);\r\n if (!description) continue;\r\n\r\n diagnostics.push({\r\n node: keyExpression,\r\n message: `React key is created from ${description}, so its identity can change every render.`,\r\n help: \"Use stable identity from the item itself, such as UserId, an immutable record ID, or another persistent key. Changing keys remounts children and breaks preserved state or exit-animation identity.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
33
35
  "import type { RuleDefinition } from \"../types\";\r\nimport { reactApiPath, resolveLocalValue } from \"../ast/local-values\";\r\n\r\nimport { callNameNode, isUnconditionallyExecutedInFunction } from \"./helpers\";\r\n\r\nexport const noSetStateInRender: RuleDefinition = {\r\n id: \"react-luau/no-set-state-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Do not call a component's state setter unconditionally during render\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.nearestFunction(call);\r\n\r\n if (!component?.isComponent) continue;\r\n\r\n const name = call.childForFieldName(\"name\");\r\n const setter = name && resolveLocalValue(context, name);\r\n\r\n if (\r\n !setter ||\r\n setter.returnIndex !== 1 ||\r\n reactApiPath(context, setter.value) !== \"React.useState\" ||\r\n context.nearestFunction(setter.value) !== component ||\r\n !isUnconditionallyExecutedInFunction(context, call, component)\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${name!.text}() is called unconditionally during component render`,\r\n summary: `${name!.text} runs during render and can loop`,\r\n help: \"Move the update to the event or effect that owns it, or derive the value during render — an unconditional render-phase state update can continuously trigger new renders\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
34
36
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { RuleDefinition } from \"../types\";\r\n\r\nconst REQUIRED_CLOSERS = new Map<string, string>([\r\n [\"parameters\", \")\"],\r\n [\"arguments\", \")\"],\r\n [\"table_constructor\", \"}\"],\r\n]);\r\n\r\nconst TYPE_SYNTAX_ANCESTORS = new Set([\r\n \"type_definition\",\r\n \"type_annotation\",\r\n \"type_parameters\",\r\n \"generic_type\",\r\n \"function_type\",\r\n \"optional_type\",\r\n \"object_type\",\r\n \"union_type\",\r\n \"intersection_type\",\r\n \"tuple_type\",\r\n \"singleton_type\",\r\n \"variadic_type\",\r\n \"variadic_type_pack\",\r\n]);\r\n\r\nfunction incompleteDelimitedNode(node: SyntaxNode): string | null {\r\n const closer = REQUIRED_CLOSERS.get(node.type);\r\n if (!closer) return null;\r\n return node.text.trimEnd().endsWith(closer) ? null : closer;\r\n}\r\n\r\nfunction isBundledGrammarTypeGap(node: SyntaxNode): boolean {\r\n let current: SyntaxNode | null = node;\r\n while (current) {\r\n if (TYPE_SYNTAX_ANCESTORS.has(current.type)) {\r\n if (current.type !== \"type_definition\") return true;\r\n if (/^\\s*(?:export\\s+)?type\\s+[A-Za-z_][A-Za-z0-9_]*/s.test(current.text)) return true;\r\n }\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nexport const parseErrors: RuleDefinition = {\r\n id: \"react-luau/parse-error\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n lspEnabled: false,\r\n description: \"Report executable Luau syntax that the bundled parser cannot form into a complete syntax tree.\",\r\n run(context) {\r\n const diagnostics = [];\r\n const covered: Array<{ start: number; end: number }> = [];\r\n\r\n for (const node of context.walk()) {\r\n const missingCloser = incompleteDelimitedNode(node);\r\n if (!node.isError && !node.isMissing && !missingCloser) continue;\r\n if (isBundledGrammarTypeGap(node)) continue;\r\n if (covered.some((range) => node.startIndex >= range.start && node.endIndex <= range.end)) continue;\r\n covered.push({ start: node.startIndex, end: node.endIndex });\r\n\r\n let message = \"Luau syntax could not be parsed cleanly at this location.\";\r\n if (node.isMissing) message = `Luau syntax is missing ${node.type}.`;\r\n else if (missingCloser) message = `Luau syntax is missing closing ${missingCloser}.`;\r\n\r\n diagnostics.push({\r\n node,\r\n message,\r\n help: \"Fix the syntax error before relying on downstream React-Luau diagnostics in this file.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
35
- "import {\r\n normalizeRequireTarget,\r\n resolveModuleReference,\r\n} from \"../module-resolution\";\r\n\r\nimport type { SyntaxNode } from \"../syntax\";\r\n\r\nimport type {\r\n DiagnosticInput,\r\n FunctionInfo,\r\n RuleContext,\r\n RuleDefinition,\r\n StateBinding,\r\n} from \"../types\";\r\n\r\nimport { normalizeExpressionText, sameNode } from \"../ast/walk\";\r\nimport { isHighFrequencyRunServiceCall } from \"../roblox-semantics\";\r\n\r\nimport {\r\n callNameNode,\r\n declarationNames,\r\n identifierNode,\r\n fieldName,\r\n fieldNameNode,\r\n fieldValue,\r\n isBindingShadowedBetween,\r\n stateBindingsFor,\r\n} from \"./helpers\";\r\n\r\nconst STATIC_DISCOVERY = /(?::|\\.)(GetChildren|GetDescendants)$/;\r\n\r\nconst PURE_TRIVIAL_CALLS =\r\n /^(?:tostring|tonumber|type|typeof|math\\.[A-Za-z_][A-Za-z0-9_]*|string\\.(?:lower|upper|format|len)|Color3\\.(?:new|fromRGB|fromHSV)|Vector[23]\\.new|UDim2?\\.(?:new|fromOffset|fromScale)|CFrame\\.new)$/;\r\n\r\nfunction declarationForCall(call: SyntaxNode): SyntaxNode | null {\r\n let current: SyntaxNode | null = call.parent;\r\n\r\n while (current) {\r\n if (current.type === \"variable_declaration\") return current;\r\n\r\n if (\r\n current.type === \"function_definition\" ||\r\n current.type === \"function_declaration\"\r\n )\r\n return null;\r\n\r\n current = current.parent;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction declaredNameForCall(call: SyntaxNode): string | null {\r\n const declaration = declarationForCall(call);\r\n\r\n return declaration ? (declarationNames(declaration)[0] ?? null) : null;\r\n}\r\n\r\nfunction isIdentifierPropertyName(node: SyntaxNode): boolean {\r\n const parent = node.parent;\r\n\r\n if (parent?.type === \"dot_index_expression\")\r\n return sameNode(parent.childForFieldName(\"field\"), node);\r\n\r\n if (parent?.type === \"method_index_expression\") {\r\n return (\r\n sameNode(parent.childForFieldName(\"method\"), node) ||\r\n sameNode(parent.namedChildren.at(-1), node)\r\n );\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction identifierReferences(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n name: string,\r\n declaration: SyntaxNode | null,\r\n): SyntaxNode[] {\r\n if (!owner.body) return [];\r\n\r\n const result: SyntaxNode[] = [];\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (node.type !== \"identifier\" || node.text !== name) continue;\r\n\r\n if (\r\n declaration &&\r\n node.startIndex >= declaration.startIndex &&\r\n node.endIndex <= declaration.endIndex\r\n )\r\n continue;\r\n\r\n if (isIdentifierPropertyName(node)) continue;\r\n\r\n if (isBindingShadowedBetween(node, owner, name, declaration)) continue;\r\n\r\n result.push(node);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction nearestAncestor(\r\n node: SyntaxNode,\r\n stop: SyntaxNode,\r\n type: string,\r\n): SyntaxNode | null {\r\n let current = node.parent;\r\n\r\n while (current && !sameNode(current, stop)) {\r\n if (current.type === type) return current;\r\n\r\n current = current.parent;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction highFrequencyCallback(\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): SyntaxNode | null {\r\n let current = node.parent;\r\n\r\n while (current) {\r\n if (current.type === \"function_definition\") {\r\n const argumentsNode = current.parent;\r\n\r\n const call =\r\n argumentsNode?.type === \"arguments\" ? argumentsNode.parent : null;\r\n\r\n if (\r\n call?.type === \"function_call\" &&\r\n isHighFrequencyRunServiceCall(call, context)\r\n )\r\n return current;\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction setterIsNoChangeGuarded(\r\n call: SyntaxNode,\r\n callback: SyntaxNode,\r\n binding: StateBinding,\r\n): boolean {\r\n let current = call.parent;\r\n\r\n while (current && !sameNode(current, callback)) {\r\n if (current.type === \"if_statement\" || current.type === \"if_expression\") {\r\n const header = current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\";\r\n const escaped = binding.valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n if (\r\n new RegExp(\r\n `\\\\b${escaped}\\\\b[^\\\\n]*(?:~=|==)|(?:~=|==)[^\\\\n]*\\\\b${escaped}\\\\b`,\r\n ).test(header)\r\n )\r\n return true;\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction setterIsOneShotGuarded(\r\n call: SyntaxNode,\r\n callback: SyntaxNode,\r\n): boolean {\r\n let current = call.parent;\r\n\r\n while (current && !sameNode(current, callback)) {\r\n if (current.type === \"if_statement\") {\r\n const header = current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\";\r\n\r\n const candidates = [\r\n ...header.matchAll(/\\bnot\\s+([A-Za-z_][A-Za-z0-9_]*)\\b/g),\r\n ...header.matchAll(/\\b([A-Za-z_][A-Za-z0-9_]*)\\s*==\\s*false\\b/g),\r\n ].map((match) => match[1]);\r\n\r\n for (const guard of candidates) {\r\n const escaped = guard.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n if (!new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*true\\\\b`).test(current.text))\r\n continue;\r\n\r\n if (new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*false\\\\b`).test(callback.text))\r\n continue;\r\n\r\n return true;\r\n }\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction componentRenderCost(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n): string[] {\r\n if (!owner.body) return [];\r\n\r\n let clones = 0;\r\n let loops = 0;\r\n let discovery = 0;\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (context.nearestFunction(node) !== owner) continue;\r\n\r\n if (\r\n node.type === \"for_statement\" ||\r\n node.type === \"while_statement\" ||\r\n node.type === \"repeat_statement\"\r\n )\r\n loops += 1;\r\n\r\n if (node.type !== \"function_call\") continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\r\n\r\n if (path === \"table.clone\") clones += 1;\r\n\r\n if (STATIC_DISCOVERY.test(path) || /:GetTagged$/.test(path)) discovery += 1;\r\n }\r\n\r\n const parts: string[] = [];\r\n\r\n if (clones > 0) parts.push(`${clones} table clone${clones === 1 ? \"\" : \"s\"}`);\r\n\r\n if (loops > 1) parts.push(`${loops} collection/loop passes`);\r\n\r\n if (discovery > 0)\r\n parts.push(\r\n `${discovery} Instance discovery call${discovery === 1 ? \"\" : \"s\"}`,\r\n );\r\n\r\n return parts;\r\n}\r\n\r\nfunction memoizedImports(\r\n context: RuleContext,\r\n): Map<string, \"shallow\" | \"custom\"> {\r\n const result = new Map<string, \"shallow\" | \"custom\">();\r\n\r\n for (const node of context.walk(context.root)) {\r\n if (node.type !== \"variable_declaration\") continue;\r\n\r\n const match = node.text.match(\r\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\r\n );\r\n\r\n if (!match) continue;\r\n\r\n const localName = match[1];\r\n\r\n const memoKind = resolveModuleReference(\r\n normalizeRequireTarget(match[2]),\r\n context.project.memoizedModules,\r\n );\r\n\r\n if (memoKind) result.set(localName, memoKind);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction fieldLabel(field: SyntaxNode): string {\r\n return fieldName(field) ?? field.childForFieldName(\"name\")?.text ?? \"prop\";\r\n}\r\n\r\nfunction isInlineFreshValue(node: SyntaxNode | null): boolean {\r\n return (\r\n node?.type === \"table_constructor\" || node?.type === \"function_definition\"\r\n );\r\n}\r\n\r\nexport const rerenderUnstableMemoProps: RuleDefinition = {\r\n id: \"react-luau/rerender-unstable-memo-props\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Warn when fresh table or function props defeat shallow React.memo comparisons.\",\r\n\r\n guidance: {\r\n explanation:\r\n \"A new function or table has a new identity, so a shallow memo comparison cannot skip this child.\",\r\n\r\n help: \"Stabilize props that change each render if this child is expensive, move construction into the child, or remove ineffective memoization.\",\r\n },\r\n\r\n run(context) {\r\n const imports = memoizedImports(context);\r\n\r\n if (imports.size === 0) return [];\r\n\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n if (\r\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\r\n \"React.createElement\"\r\n )\r\n continue;\r\n\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || context.nearestFunction(call) !== component) continue;\r\n\r\n const args = context.callArguments(call);\r\n const childName = args[0]?.text.trim() ?? \"\";\r\n\r\n if (imports.get(childName) !== \"shallow\") continue;\r\n\r\n const props = args[1];\r\n\r\n if (!props || props.type !== \"table_constructor\") continue;\r\n\r\n const unstableFields = props.namedChildren\r\n .filter((node) => node.type === \"field\")\r\n .filter((field) => isInlineFreshValue(fieldValue(field)));\r\n\r\n if (unstableFields.length === 0) continue;\r\n\r\n const unstable = unstableFields.map(fieldLabel);\r\n const highlights = unstableFields.map(fieldNameNode);\r\n\r\n diagnostics.push({\r\n node: highlights[0],\r\n highlights,\r\n severity: \"warning\",\r\n message: `Memoized ${childName} receives fresh ${unstable.join(\", \")} prop${unstable.length === 1 ? \"\" : \"s\"} on every parent render.`,\r\n summary: `${childName} gets ${unstable.length} fresh ${unstable.length === 1 ? \"prop\" : \"props\"} each render. Memoization cannot skip it.`,\r\n\r\n editorRanges: highlights.map((node, index) => ({\r\n node,\r\n summary: `${childName} gets a fresh ${unstable[index]} prop each render. Memoization cannot skip it.`,\r\n })),\r\n\r\n help: \"Fresh table or function identity prevents the shallow memo comparison from skipping this child. Stabilize the prop only when the parent rerenders frequently, move construction into the child, or remove ineffective memoization.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderHighFrequencyState: RuleDefinition = {\r\n id: \"react-luau/rerender-high-frequency-state\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find state updates from frame callbacks that can rerender expensive component trees continuously.\",\r\n\r\n guidance: {\r\n explanation:\r\n \"Doctor found a state setter on a high-frequency callback path. Calling a setter every frame still has overhead, and any changed value can schedule React reconciliation. This rule now suppresses simple one-shot guards it can prove.\",\r\n\r\n caveat:\r\n \"A same-value state update can be bailed out by React, so this finding does not prove that the component actually rerenders every frame. It flags the per-frame setter path and is suppressed when Doctor can prove a simple one-shot or direct no-change guard.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n const seen = new Set<string>();\r\n\r\n for (const call of context.findCalls()) {\r\n const callback = highFrequencyCallback(call, context);\r\n\r\n if (!callback) continue;\r\n\r\n const component = context.containingComponent(call);\r\n\r\n if (!component) continue;\r\n\r\n const setter = context.getCallPath(call) ?? \"\";\r\n\r\n const binding = context.model.stateBindings.find(\r\n (candidate) =>\r\n candidate.owner === component && candidate.setterName === setter,\r\n );\r\n\r\n if (\r\n !binding ||\r\n setterIsNoChangeGuarded(call, callback, binding) ||\r\n setterIsOneShotGuarded(call, callback)\r\n )\r\n continue;\r\n\r\n const key = `${callback.startIndex}:${setter}`;\r\n\r\n if (seen.has(key)) continue;\r\n\r\n seen.add(key);\r\n\r\n const renderCost = componentRenderCost(context, component);\r\n\r\n diagnostics.push({\r\n node: callNameNode(binding.call),\r\n severity: \"warning\",\r\n message: `${binding.valueName} has a state setter called from a per-frame callback and may cause frequent rerenders when its value changes.`,\r\n\r\n help:\r\n renderCost.length > 0\r\n ? `This render also performs ${renderCost.join(\" and \")}. Isolate or throttle the high-frequency state, or use Bindings for host-property-only updates.`\r\n : \"Isolate or throttle the high-frequency state. Use React.useBinding when the value only drives host Instance properties.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction singleReturnExpression(\r\n callback: SyntaxNode | undefined,\r\n): SyntaxNode | null {\r\n if (!callback || callback.type !== \"function_definition\") return null;\r\n\r\n const body = callback.childForFieldName(\"body\");\r\n\r\n if (!body || body.namedChildren.length !== 1) return null;\r\n\r\n const statement = body.namedChildren[0];\r\n\r\n if (statement.type !== \"return_statement\") return null;\r\n\r\n const expressionList = statement.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n if (!expressionList || expressionList.namedChildren.length !== 1) return null;\r\n\r\n return expressionList.namedChildren[0] ?? null;\r\n}\r\n\r\nfunction isTrivialMemoExpression(\r\n expression: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n if (\r\n expression.type === \"table_constructor\" ||\r\n expression.type === \"function_definition\"\r\n )\r\n return false;\r\n\r\n let calls = 0;\r\n\r\n for (const node of context.walk(expression)) {\r\n if (\r\n node.type === \"for_statement\" ||\r\n node.type === \"while_statement\" ||\r\n node.type === \"repeat_statement\"\r\n )\r\n return false;\r\n\r\n if (node.type !== \"function_call\") continue;\r\n\r\n calls += 1;\r\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\r\n\r\n if (/random|GenerateGUID|GetServerTimeNow|tick|time|clock/i.test(path))\r\n return false;\r\n\r\n if (!PURE_TRIVIAL_CALLS.test(path)) return false;\r\n }\r\n\r\n return calls <= 2 && expression.text.length <= 180;\r\n}\r\n\r\nfunction valueIdentityIsObservedByHook(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n name: string,\r\n declaration: SyntaxNode,\r\n): boolean {\r\n if (!owner.body) return false;\r\n\r\n for (const call of context.walk(owner.body)) {\r\n if (call.type !== \"function_call\") continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!/^React\\.use(?:Effect|LayoutEffect|Memo|Callback)$/.test(path))\r\n continue;\r\n\r\n const dependencies = context.callArguments(call)[1];\r\n\r\n if (!dependencies) continue;\r\n\r\n for (const reference of identifierReferences(\r\n context,\r\n owner,\r\n name,\r\n declaration,\r\n )) {\r\n if (\r\n reference.startIndex >= dependencies.startIndex &&\r\n reference.endIndex <= dependencies.endIndex\r\n )\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isEmptyDependencyTable(node: SyntaxNode | undefined): boolean {\r\n return Boolean(\r\n node &&\r\n node.type === \"table_constructor\" &&\r\n node.namedChildren.length === 0,\r\n );\r\n}\r\n\r\nexport const rerenderUnnecessaryUseMemo: RuleDefinition = {\r\n id: \"react-luau/rerender-unnecessary-usememo\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find trivial derived values that cost more to memoize than to compute directly.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n if (\r\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\r\n \"React.useMemo\"\r\n )\r\n continue;\r\n\r\n const owner =\r\n context.containingComponent(call) ?? context.nearestFunction(call);\r\n\r\n const declaration = declarationForCall(call);\r\n const name = declaredNameForCall(call);\r\n const argumentsList = context.callArguments(call);\r\n const expression = singleReturnExpression(argumentsList[0]);\r\n\r\n if (isEmptyDependencyTable(argumentsList[1])) continue;\r\n\r\n if (\r\n !owner ||\r\n !declaration ||\r\n !name ||\r\n !expression ||\r\n !isTrivialMemoExpression(expression, context)\r\n )\r\n continue;\r\n\r\n if (valueIdentityIsObservedByHook(context, owner, name, declaration))\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: \"useMemo caches a trivial derived value.\",\r\n help: \"Compute the value directly unless stable identity or a genuinely expensive calculation is required.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction isOnlyDirectFunctionCallReference(\r\n node: SyntaxNode,\r\n name: string,\r\n): boolean {\r\n const parent = node.parent;\r\n\r\n return (\r\n parent?.type === \"function_call\" &&\r\n sameNode(parent.childForFieldName(\"name\"), node) &&\r\n (parent.childForFieldName(\"name\")?.text.trim() ?? \"\") === name\r\n );\r\n}\r\n\r\nexport const rerenderUnnecessaryUseCallback: RuleDefinition = {\r\n id: \"react-luau/rerender-unnecessary-usecallback\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find useCallback values whose stable function identity is never observed.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n if (\r\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\r\n \"React.useCallback\"\r\n )\r\n continue;\r\n\r\n const owner =\r\n context.containingComponent(call) ?? context.nearestFunction(call);\r\n\r\n const declaration = declarationForCall(call);\r\n const name = declaredNameForCall(call);\r\n\r\n if (!owner || !declaration || !name) continue;\r\n\r\n const references = identifierReferences(\r\n context,\r\n owner,\r\n name,\r\n declaration,\r\n );\r\n\r\n if (\r\n references.length === 0 ||\r\n references.some(\r\n (node) => !isOnlyDirectFunctionCallReference(node, name),\r\n )\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${name} is wrapped in useCallback, but its identity is never observed.`,\r\n help: \"Use a normal local function. Keep useCallback when the function is passed to a memoized child, retained by another hook, or otherwise compared by identity.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction staticDiscoveryPath(path: string): boolean {\r\n if (/:GetTagged$/.test(path)) return true;\r\n\r\n if (!STATIC_DISCOVERY.test(path)) return false;\r\n\r\n const receiver = path.replace(/(?::|\\.)(?:GetChildren|GetDescendants)$/, \"\");\r\n\r\n return /^(?:ReplicatedStorage|ServerStorage|ServerScriptService|StarterGui|StarterPlayer|script)(?:\\.|:|$)/.test(\r\n receiver,\r\n );\r\n}\r\n\r\nexport const rerenderStaticDiscoveryInRender: RuleDefinition = {\r\n id: \"react-luau/rerender-static-discovery-in-render\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find static Instance/module discovery repeated during component render.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || context.nearestFunction(call) !== component) continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!staticDiscoveryPath(path)) continue;\r\n\r\n const loop = nearestAncestor(call, component.node, \"for_statement\");\r\n const body = loop?.childForFieldName(\"body\");\r\n\r\n const requiresModules = Boolean(\r\n body &&\r\n [...context.walk(body)].some(\r\n (node) =>\r\n node.type === \"function_call\" &&\r\n context.getCallPath(node) === \"require\",\r\n ),\r\n );\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n severity: \"warning\",\r\n message: `${path} runs during component render${requiresModules ? \" and feeds module requires\" : \"\"}.`,\r\n\r\n help: requiresModules\r\n ? \"Discover and require static modules once outside the component, or cache the derived catalog by the inputs that can actually change.\"\r\n : \"Move static discovery outside the component or memoize the derived result when the source can change.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction genericLoopCollection(loop: SyntaxNode): string | null {\r\n const clause = loop.namedChildren.find(\r\n (child) => child.type === \"for_generic_clause\",\r\n );\r\n\r\n if (!clause) return null;\r\n\r\n const match = clause.text.match(/\\bin\\s+(.+)$/s);\r\n\r\n if (!match) return null;\r\n\r\n const expression = normalizeExpressionText(match[1]);\r\n\r\n if (!expression || expression.length > 160) return null;\r\n\r\n return expression;\r\n}\r\n\r\nexport const rerenderRepeatedCollectionScan: RuleDefinition = {\r\n id: \"react-luau/rerender-repeated-collection-scan\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find repeated direct render passes over the same collection expression.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const component of context.model.functions) {\r\n if (!component.isComponent || !component.body) continue;\r\n\r\n const groups = new Map<\r\n string,\r\n { display: string; loops: SyntaxNode[] }\r\n >();\r\n\r\n for (const node of context.walk(component.body)) {\r\n if (\r\n node.type !== \"for_statement\" ||\r\n context.nearestFunction(node) !== component\r\n )\r\n continue;\r\n\r\n const collection = genericLoopCollection(node);\r\n\r\n if (!collection || collection === \"{}\") continue;\r\n\r\n const clause = node.namedChildren.find(\r\n (child) => child.type === \"for_generic_clause\",\r\n );\r\n\r\n const display =\r\n clause?.text\r\n .match(/\\bin\\s+(.+)$/s)?.[1]\r\n ?.trim()\r\n .replace(/\\s+/g, \" \") ?? collection;\r\n\r\n const group = groups.get(collection) ?? { display, loops: [] };\r\n group.loops.push(node);\r\n groups.set(collection, group);\r\n }\r\n\r\n for (const { display, loops } of groups.values()) {\r\n if (loops.length < 2) continue;\r\n\r\n const repeatedCollections = loops.map((loop) => {\r\n const clause = loop.namedChildren.find(\r\n (child) => child.type === \"for_generic_clause\",\r\n );\r\n\r\n return clause?.namedChildren.at(-1) ?? clause ?? loop;\r\n });\r\n\r\n diagnostics.push({\r\n node: repeatedCollections[1],\r\n highlights: repeatedCollections,\r\n message: `${display} is scanned ${loops.length} times during this render.`,\r\n help: \"Consider combining the passes or deriving a lookup when the collection is large or the component rerenders frequently.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderStaticState: RuleDefinition = {\r\n id: \"react-luau/rerender-static-state\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find React state whose setter is never used and therefore cannot change.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const component of context.model.functions) {\r\n if (!component.isComponent || !component.body) continue;\r\n\r\n for (const binding of stateBindingsFor(context, component)) {\r\n if (binding.setterName === \"_\" || binding.setterName.startsWith(\"_\"))\r\n continue;\r\n\r\n const setterRefs = identifierReferences(\r\n context,\r\n component,\r\n binding.setterName,\r\n binding.declaration,\r\n );\r\n\r\n if (setterRefs.length > 0) continue;\r\n\r\n const valueRefs = identifierReferences(\r\n context,\r\n component,\r\n binding.valueName,\r\n binding.declaration,\r\n );\r\n\r\n if (valueRefs.length === 0) continue;\r\n\r\n diagnostics.push({\r\n node:\r\n identifierNode(binding.declaration, binding.setterName) ??\r\n binding.declaration,\r\n\r\n message: `${binding.valueName} cannot change because ${binding.setterName} is never used.`,\r\n help: \"Use a normal derived value. If the initial value must be captured once for the component lifetime, use a ref.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction memoReturnsCurrentCell(\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n const args = context.callArguments(call);\r\n const callback = args[0];\r\n const deps = args[1];\r\n\r\n if (\r\n !callback ||\r\n callback.type !== \"function_definition\" ||\r\n deps?.type !== \"table_constructor\" ||\r\n deps.namedChildren.length > 0\r\n )\r\n return false;\r\n\r\n const expression = singleReturnExpression(callback);\r\n\r\n if (!expression || expression.type !== \"table_constructor\") return false;\r\n\r\n const fields = expression.namedChildren.filter(\r\n (node) => node.type === \"field\",\r\n );\r\n\r\n return fields.length === 1 && fieldName(fields[0]) === \"current\";\r\n}\r\n\r\nexport const preferUseRefForMutableCell: RuleDefinition = {\r\n id: \"react-luau/prefer-use-ref-for-mutable-cell\",\r\n category: \"Hooks\",\r\n severity: \"suggestion\",\r\n\r\n description:\r\n \"Prefer useRef over useMemo-created tables that only emulate a mutable current cell.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n if (\r\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\r\n \"React.useMemo\"\r\n )\r\n continue;\r\n\r\n if (!memoReturnsCurrentCell(call, context)) continue;\r\n\r\n const name = declaredNameForCall(call) ?? \"This value\";\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${name} uses useMemo to create a { current = ... } mutable cell.`,\r\n help: \"Use React.useRef(initialValue) to express the same lifetime and mutable-cell intent directly.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
37
+ "import {\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\n\nimport type { SyntaxNode } from \"../syntax\";\n\nimport type {\n DiagnosticInput,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n StateBinding,\n} from \"../types\";\n\nimport { normalizeExpressionText, sameNode } from \"../ast/walk\";\nimport { reactApiPath, resolveLocalValue } from \"../ast/local-values\";\nimport { freshValueKind } from \"../ast/value-identity\";\nimport { isHighFrequencyRunServiceCall } from \"../roblox-semantics\";\n\nimport {\n callNameNode,\n declarationNames,\n identifierNode,\n fieldName,\n fieldNameNode,\n fieldValue,\n isBindingShadowedBetween,\n stateBindingsFor,\n} from \"./helpers\";\n\nconst STATIC_DISCOVERY = /(?::|\\.)(GetChildren|GetDescendants)$/;\n\nconst PURE_TRIVIAL_CALLS =\n /^(?:tostring|tonumber|type|typeof|math\\.[A-Za-z_][A-Za-z0-9_]*|string\\.(?:lower|upper|format|len)|Color3\\.(?:new|fromRGB|fromHSV)|Vector[23]\\.new|UDim2?\\.(?:new|fromOffset|fromScale)|CFrame\\.new)$/;\n\nfunction declarationForCall(call: SyntaxNode): SyntaxNode | null {\n let current: SyntaxNode | null = call.parent;\n\n while (current) {\n if (current.type === \"variable_declaration\") return current;\n\n if (\n current.type === \"function_definition\" ||\n current.type === \"function_declaration\"\n )\n return null;\n\n current = current.parent;\n }\n\n return null;\n}\n\nfunction declaredNameForCall(call: SyntaxNode): string | null {\n const declaration = declarationForCall(call);\n\n return declaration ? (declarationNames(declaration)[0] ?? null) : null;\n}\n\nfunction isIdentifierPropertyName(node: SyntaxNode): boolean {\n const parent = node.parent;\n\n if (parent?.type === \"dot_index_expression\")\n return sameNode(parent.childForFieldName(\"field\"), node);\n\n if (parent?.type === \"method_index_expression\") {\n return (\n sameNode(parent.childForFieldName(\"method\"), node) ||\n sameNode(parent.namedChildren.at(-1), node)\n );\n }\n\n return false;\n}\n\nfunction identifierReferences(\n context: RuleContext,\n owner: FunctionInfo,\n name: string,\n declaration: SyntaxNode | null,\n): SyntaxNode[] {\n if (!owner.body) return [];\n\n const result: SyntaxNode[] = [];\n\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"identifier\" || node.text !== name) continue;\n\n if (\n declaration &&\n node.startIndex >= declaration.startIndex &&\n node.endIndex <= declaration.endIndex\n )\n continue;\n\n if (isIdentifierPropertyName(node)) continue;\n\n if (isBindingShadowedBetween(node, owner, name, declaration)) continue;\n\n result.push(node);\n }\n\n return result;\n}\n\nfunction nearestAncestor(\n node: SyntaxNode,\n stop: SyntaxNode,\n type: string,\n): SyntaxNode | null {\n let current = node.parent;\n\n while (current && !sameNode(current, stop)) {\n if (current.type === type) return current;\n\n current = current.parent;\n }\n\n return null;\n}\n\nfunction highFrequencyCallback(\n node: SyntaxNode,\n context: RuleContext,\n): SyntaxNode | null {\n let current = node.parent;\n\n while (current) {\n if (current.type === \"function_definition\") {\n const argumentsNode = current.parent;\n\n const call =\n argumentsNode?.type === \"arguments\" ? argumentsNode.parent : null;\n\n if (\n call?.type === \"function_call\" &&\n isHighFrequencyRunServiceCall(call, context)\n )\n return current;\n }\n\n current = current.parent;\n }\n\n return null;\n}\n\nfunction setterIsNoChangeGuarded(\n call: SyntaxNode,\n callback: SyntaxNode,\n binding: StateBinding,\n): boolean {\n let current = call.parent;\n\n while (current && !sameNode(current, callback)) {\n if (current.type === \"if_statement\" || current.type === \"if_expression\") {\n const header = current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\";\n const escaped = binding.valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (\n new RegExp(\n `\\\\b${escaped}\\\\b[^\\\\n]*(?:~=|==)|(?:~=|==)[^\\\\n]*\\\\b${escaped}\\\\b`,\n ).test(header)\n )\n return true;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction setterIsOneShotGuarded(\n call: SyntaxNode,\n callback: SyntaxNode,\n): boolean {\n let current = call.parent;\n\n while (current && !sameNode(current, callback)) {\n if (current.type === \"if_statement\") {\n const header = current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\";\n\n const candidates = [\n ...header.matchAll(/\\bnot\\s+([A-Za-z_][A-Za-z0-9_]*)\\b/g),\n ...header.matchAll(/\\b([A-Za-z_][A-Za-z0-9_]*)\\s*==\\s*false\\b/g),\n ].map((match) => match[1]);\n\n for (const guard of candidates) {\n const escaped = guard.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (!new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*true\\\\b`).test(current.text))\n continue;\n\n if (new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*false\\\\b`).test(callback.text))\n continue;\n\n return true;\n }\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction componentRenderCost(\n context: RuleContext,\n owner: FunctionInfo,\n): string[] {\n if (!owner.body) return [];\n\n let clones = 0;\n let loops = 0;\n let discovery = 0;\n\n for (const node of context.walk(owner.body)) {\n if (context.nearestFunction(node) !== owner) continue;\n\n if (\n node.type === \"for_statement\" ||\n node.type === \"while_statement\" ||\n node.type === \"repeat_statement\"\n )\n loops += 1;\n\n if (node.type !== \"function_call\") continue;\n\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\n\n if (path === \"table.clone\") clones += 1;\n\n if (STATIC_DISCOVERY.test(path) || /:GetTagged$/.test(path)) discovery += 1;\n }\n\n const parts: string[] = [];\n\n if (clones > 0) parts.push(`${clones} table clone${clones === 1 ? \"\" : \"s\"}`);\n\n if (loops > 1) parts.push(`${loops} collection/loop passes`);\n\n if (discovery > 0)\n parts.push(\n `${discovery} Instance discovery call${discovery === 1 ? \"\" : \"s\"}`,\n );\n\n return parts;\n}\n\nfunction memoizedComponentKind(\n context: RuleContext,\n expression: SyntaxNode,\n): \"shallow\" | \"custom\" | null {\n const binding = resolveLocalValue(context, expression);\n\n if (\n !binding ||\n binding.returnIndex !== 0 ||\n binding.value.type !== \"function_call\"\n )\n return null;\n\n const call = binding.value;\n\n if (reactApiPath(context, call) === \"React.memo\") {\n return context.callArguments(call).length > 1 ? \"custom\" : \"shallow\";\n }\n\n const target = context.callArguments(call)[0];\n\n if (context.getCallPath(call) !== \"require\" || !target) return null;\n\n return (\n resolveModuleReference(\n normalizeRequireTarget(target.text),\n context.project.memoizedModules,\n ) ?? null\n );\n}\n\nfunction fieldLabel(field: SyntaxNode): string {\n return fieldName(field) ?? field.childForFieldName(\"name\")?.text ?? \"prop\";\n}\n\nexport const rerenderUnstableMemoProps: RuleDefinition = {\n id: \"react-luau/rerender-unstable-memo-props\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Warn when props created during render can defeat shallow React.memo comparisons\",\n\n guidance: {\n explanation:\n \"New tables, functions, and reference objects compare unequal even when their contents match\",\n\n help: \"Stabilize props that change each render if this child is expensive, move construction into the child, or remove ineffective memoization\",\n },\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n if (\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\n \"React.createElement\"\n )\n continue;\n\n const component = context.containingComponent(call);\n\n if (!component || context.nearestFunction(call) !== component) continue;\n\n const args = context.callArguments(call);\n const childName = args[0]?.text.trim() ?? \"\";\n\n if (!args[0] || memoizedComponentKind(context, args[0]) !== \"shallow\")\n continue;\n\n const propsBinding = args[1] && resolveLocalValue(context, args[1]);\n const props = propsBinding?.returnIndex === 0 ? propsBinding.value : null;\n\n if (\n !props ||\n props.type !== \"table_constructor\" ||\n context.nearestFunction(props) !== component\n )\n continue;\n\n const unstableFields = props.namedChildren\n .filter((node) => node.type === \"field\")\n .filter((field) =>\n freshValueKind(context, fieldValue(field), component),\n );\n\n if (unstableFields.length === 0) continue;\n\n const unstable = unstableFields.map(fieldLabel);\n const highlights = unstableFields.map(fieldNameNode);\n\n diagnostics.push({\n node: highlights[0],\n highlights,\n severity: \"warning\",\n message: `Memoized ${childName} can receive fresh ${unstable.join(\", \")} prop${unstable.length === 1 ? \"\" : \"s\"} when its parent renders`,\n summary: `${childName} gets ${unstable.length} ${unstable.length === 1 ? \"prop\" : \"props\"} created during render that can prevent memoization from skipping it`,\n\n editorRanges: highlights.map((node, index) => ({\n node,\n summary: `${childName} gets a ${unstable[index]} prop created during render that can prevent memoization from skipping it`,\n })),\n\n help: \"Fresh reference identity can prevent the shallow memo comparison from skipping this child. Stabilize the prop when the parent rerenders frequently, move construction into the child, or remove ineffective memoization\",\n });\n }\n\n return diagnostics;\n },\n};\n\nexport const rerenderHighFrequencyState: RuleDefinition = {\n id: \"react-luau/rerender-high-frequency-state\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find state updates from frame callbacks that can rerender expensive component trees continuously.\",\n\n guidance: {\n explanation:\n \"Doctor found a state setter on a high-frequency callback path. Calling a setter every frame still has overhead, and any changed value can schedule React reconciliation. This rule now suppresses simple one-shot guards it can prove.\",\n\n caveat:\n \"A same-value state update can be bailed out by React, so this finding does not prove that the component actually rerenders every frame. It flags the per-frame setter path and is suppressed when Doctor can prove a simple one-shot or direct no-change guard.\",\n },\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n const seen = new Set<string>();\n\n for (const call of context.findCalls()) {\n const callback = highFrequencyCallback(call, context);\n\n if (!callback) continue;\n\n const component = context.containingComponent(call);\n\n if (!component) continue;\n\n const setter = context.getCallPath(call) ?? \"\";\n\n const binding = context.model.stateBindings.find(\n (candidate) =>\n candidate.owner === component && candidate.setterName === setter,\n );\n\n if (\n !binding ||\n setterIsNoChangeGuarded(call, callback, binding) ||\n setterIsOneShotGuarded(call, callback)\n )\n continue;\n\n const key = `${callback.startIndex}:${setter}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n const renderCost = componentRenderCost(context, component);\n\n diagnostics.push({\n node: callNameNode(binding.call),\n severity: \"warning\",\n message: `${binding.valueName} has a state setter called from a per-frame callback and may cause frequent rerenders when its value changes.`,\n\n help:\n renderCost.length > 0\n ? `This render also performs ${renderCost.join(\" and \")}. Isolate or throttle the high-frequency state, or use Bindings for host-property-only updates.`\n : \"Isolate or throttle the high-frequency state. Use React.useBinding when the value only drives host Instance properties.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nfunction singleReturnExpression(\n callback: SyntaxNode | undefined,\n): SyntaxNode | null {\n if (!callback || callback.type !== \"function_definition\") return null;\n\n const body = callback.childForFieldName(\"body\");\n\n if (!body || body.namedChildren.length !== 1) return null;\n\n const statement = body.namedChildren[0];\n\n if (statement.type !== \"return_statement\") return null;\n\n const expressionList = statement.namedChildren.find(\n (child) => child.type === \"expression_list\",\n );\n\n if (!expressionList || expressionList.namedChildren.length !== 1) return null;\n\n return expressionList.namedChildren[0] ?? null;\n}\n\nfunction isTrivialMemoExpression(\n expression: SyntaxNode,\n context: RuleContext,\n): boolean {\n if (\n expression.type === \"table_constructor\" ||\n expression.type === \"function_definition\"\n )\n return false;\n\n let calls = 0;\n\n for (const node of context.walk(expression)) {\n if (\n node.type === \"for_statement\" ||\n node.type === \"while_statement\" ||\n node.type === \"repeat_statement\"\n )\n return false;\n\n if (node.type !== \"function_call\") continue;\n\n calls += 1;\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\n\n if (/random|GenerateGUID|GetServerTimeNow|tick|time|clock/i.test(path))\n return false;\n\n if (!PURE_TRIVIAL_CALLS.test(path)) return false;\n }\n\n return calls <= 2 && expression.text.length <= 180;\n}\n\nfunction valueIdentityIsObservedByHook(\n context: RuleContext,\n owner: FunctionInfo,\n name: string,\n declaration: SyntaxNode,\n): boolean {\n if (!owner.body) return false;\n\n for (const call of context.walk(owner.body)) {\n if (call.type !== \"function_call\") continue;\n\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!/^React\\.use(?:Effect|LayoutEffect|Memo|Callback)$/.test(path))\n continue;\n\n const dependencies = context.callArguments(call)[1];\n\n if (!dependencies) continue;\n\n for (const reference of identifierReferences(\n context,\n owner,\n name,\n declaration,\n )) {\n if (\n reference.startIndex >= dependencies.startIndex &&\n reference.endIndex <= dependencies.endIndex\n )\n return true;\n }\n }\n\n return false;\n}\n\nfunction isEmptyDependencyTable(node: SyntaxNode | undefined): boolean {\n return Boolean(\n node &&\n node.type === \"table_constructor\" &&\n node.namedChildren.length === 0,\n );\n}\n\nexport const rerenderUnnecessaryUseMemo: RuleDefinition = {\n id: \"react-luau/rerender-unnecessary-usememo\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find trivial derived values that cost more to memoize than to compute directly.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n if (\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\n \"React.useMemo\"\n )\n continue;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n const declaration = declarationForCall(call);\n const name = declaredNameForCall(call);\n const argumentsList = context.callArguments(call);\n const expression = singleReturnExpression(argumentsList[0]);\n\n if (isEmptyDependencyTable(argumentsList[1])) continue;\n\n if (\n !owner ||\n !declaration ||\n !name ||\n !expression ||\n !isTrivialMemoExpression(expression, context)\n )\n continue;\n\n if (valueIdentityIsObservedByHook(context, owner, name, declaration))\n continue;\n\n diagnostics.push({\n node: callNameNode(call),\n message: \"useMemo caches a trivial derived value.\",\n help: \"Compute the value directly unless stable identity or a genuinely expensive calculation is required.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nfunction isOnlyDirectFunctionCallReference(\n node: SyntaxNode,\n name: string,\n): boolean {\n const parent = node.parent;\n\n return (\n parent?.type === \"function_call\" &&\n sameNode(parent.childForFieldName(\"name\"), node) &&\n (parent.childForFieldName(\"name\")?.text.trim() ?? \"\") === name\n );\n}\n\nexport const rerenderUnnecessaryUseCallback: RuleDefinition = {\n id: \"react-luau/rerender-unnecessary-usecallback\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find useCallback values whose stable function identity is never observed.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n if (\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\n \"React.useCallback\"\n )\n continue;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n const declaration = declarationForCall(call);\n const name = declaredNameForCall(call);\n\n if (!owner || !declaration || !name) continue;\n\n const references = identifierReferences(\n context,\n owner,\n name,\n declaration,\n );\n\n if (\n references.length === 0 ||\n references.some(\n (node) => !isOnlyDirectFunctionCallReference(node, name),\n )\n )\n continue;\n\n diagnostics.push({\n node: callNameNode(call),\n message: `${name} is wrapped in useCallback, but its identity is never observed.`,\n help: \"Use a normal local function. Keep useCallback when the function is passed to a memoized child, retained by another hook, or otherwise compared by identity.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nfunction staticDiscoveryPath(path: string): boolean {\n if (/:GetTagged$/.test(path)) return true;\n\n if (!STATIC_DISCOVERY.test(path)) return false;\n\n const receiver = path.replace(/(?::|\\.)(?:GetChildren|GetDescendants)$/, \"\");\n\n return /^(?:ReplicatedStorage|ServerStorage|ServerScriptService|StarterGui|StarterPlayer|script)(?:\\.|:|$)/.test(\n receiver,\n );\n}\n\nexport const rerenderStaticDiscoveryInRender: RuleDefinition = {\n id: \"react-luau/rerender-static-discovery-in-render\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find static Instance/module discovery repeated during component render.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n const component = context.containingComponent(call);\n\n if (!component || context.nearestFunction(call) !== component) continue;\n\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!staticDiscoveryPath(path)) continue;\n\n const loop = nearestAncestor(call, component.node, \"for_statement\");\n const body = loop?.childForFieldName(\"body\");\n\n const requiresModules = Boolean(\n body &&\n [...context.walk(body)].some(\n (node) =>\n node.type === \"function_call\" &&\n context.getCallPath(node) === \"require\",\n ),\n );\n\n diagnostics.push({\n node: callNameNode(call),\n severity: \"warning\",\n message: `${path} runs during component render${requiresModules ? \" and feeds module requires\" : \"\"}.`,\n\n help: requiresModules\n ? \"Discover and require static modules once outside the component, or cache the derived catalog by the inputs that can actually change.\"\n : \"Move static discovery outside the component or memoize the derived result when the source can change.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nfunction genericLoopCollection(loop: SyntaxNode): string | null {\n const clause = loop.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n if (!clause) return null;\n\n const match = clause.text.match(/\\bin\\s+(.+)$/s);\n\n if (!match) return null;\n\n const expression = normalizeExpressionText(match[1]);\n\n if (!expression || expression.length > 160) return null;\n\n return expression;\n}\n\nexport const rerenderRepeatedCollectionScan: RuleDefinition = {\n id: \"react-luau/rerender-repeated-collection-scan\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find repeated direct render passes over the same collection expression.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const component of context.model.functions) {\n if (!component.isComponent || !component.body) continue;\n\n const groups = new Map<\n string,\n { display: string; loops: SyntaxNode[] }\n >();\n\n for (const node of context.walk(component.body)) {\n if (\n node.type !== \"for_statement\" ||\n context.nearestFunction(node) !== component\n )\n continue;\n\n const collection = genericLoopCollection(node);\n\n if (!collection || collection === \"{}\") continue;\n\n const clause = node.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n const display =\n clause?.text\n .match(/\\bin\\s+(.+)$/s)?.[1]\n ?.trim()\n .replace(/\\s+/g, \" \") ?? collection;\n\n const group = groups.get(collection) ?? { display, loops: [] };\n group.loops.push(node);\n groups.set(collection, group);\n }\n\n for (const { display, loops } of groups.values()) {\n if (loops.length < 2) continue;\n\n const repeatedCollections = loops.map((loop) => {\n const clause = loop.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n return clause?.namedChildren.at(-1) ?? clause ?? loop;\n });\n\n diagnostics.push({\n node: repeatedCollections[1],\n highlights: repeatedCollections,\n message: `${display} is scanned ${loops.length} times during this render.`,\n help: \"Consider combining the passes or deriving a lookup when the collection is large or the component rerenders frequently.\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const rerenderStaticState: RuleDefinition = {\n id: \"react-luau/rerender-static-state\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find React state whose setter is never used and therefore cannot change.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const component of context.model.functions) {\n if (!component.isComponent || !component.body) continue;\n\n for (const binding of stateBindingsFor(context, component)) {\n if (binding.setterName === \"_\" || binding.setterName.startsWith(\"_\"))\n continue;\n\n const setterRefs = identifierReferences(\n context,\n component,\n binding.setterName,\n binding.declaration,\n );\n\n if (setterRefs.length > 0) continue;\n\n const valueRefs = identifierReferences(\n context,\n component,\n binding.valueName,\n binding.declaration,\n );\n\n if (valueRefs.length === 0) continue;\n\n diagnostics.push({\n node:\n identifierNode(binding.declaration, binding.setterName) ??\n binding.declaration,\n\n message: `${binding.valueName} cannot change because ${binding.setterName} is never used.`,\n help: \"Use a normal derived value. If the initial value must be captured once for the component lifetime, use a ref.\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nfunction memoReturnsCurrentCell(\n call: SyntaxNode,\n context: RuleContext,\n): boolean {\n const args = context.callArguments(call);\n const callback = args[0];\n const deps = args[1];\n\n if (\n !callback ||\n callback.type !== \"function_definition\" ||\n deps?.type !== \"table_constructor\" ||\n deps.namedChildren.length > 0\n )\n return false;\n\n const expression = singleReturnExpression(callback);\n\n if (!expression || expression.type !== \"table_constructor\") return false;\n\n const fields = expression.namedChildren.filter(\n (node) => node.type === \"field\",\n );\n\n return fields.length === 1 && fieldName(fields[0]) === \"current\";\n}\n\nexport const preferUseRefForMutableCell: RuleDefinition = {\n id: \"react-luau/prefer-use-ref-for-mutable-cell\",\n category: \"Hooks\",\n severity: \"suggestion\",\n\n description:\n \"Prefer useRef over useMemo-created tables that only emulate a mutable current cell.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n if (\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\n \"React.useMemo\"\n )\n continue;\n\n if (!memoReturnsCurrentCell(call, context)) continue;\n\n const name = declaredNameForCall(call) ?? \"This value\";\n\n diagnostics.push({\n node: callNameNode(call),\n message: `${name} uses useMemo to create a { current = ... } mutable cell.`,\n help: \"Use React.useRef(initialValue) to express the same lifetime and mutable-cell intent directly.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
36
38
  "import type { SyntaxNode } from \"../syntax\";\n\nimport {\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\n\nimport type {\n BindingCandidateHookSummary,\n ExternalCallbackFunctionSummary,\n FixPreview,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n StateBinding,\n} from \"../types\";\n\nimport { sameNode } from \"../ast/walk\";\n\nimport {\n isHighFrequencyRobloxCall,\n isHighFrequencyRobloxExpression,\n} from \"../roblox-semantics\";\n\nimport {\n callNameNode,\n declarationNames,\n fieldName,\n fieldValue,\n isBindingShadowedBetween,\n} from \"./helpers\";\n\nconst EXTERNAL_CALLBACK =\n /(?:^|[.:])(?:Connect|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)$/i;\n\nconst PERSISTENT_MIRROR_CALLBACK =\n /(?:^|[.:])(?:Connect|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)$/i;\n\nconst LIKELY_CONTINUOUS_CALLBACK = /(?:^|[.:])onStep$/i;\nconst NON_BINDABLE_HOST_FIELDS = new Set([\"ref\", \"key\", \"children\"]);\n\nfunction replaceWithinNode(\n container: SyntaxNode,\n target: SyntaxNode,\n replacement: string,\n): string | null {\n const start = target.startIndex - container.startIndex;\n const end = target.endIndex - container.startIndex;\n\n if (start < 0 || end < start || end > container.text.length) return null;\n\n return `${container.text.slice(0, start)}${replacement}${container.text.slice(end)}`;\n}\n\nfunction bindingModeFixPreview(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n context: RuleContext,\n directlySubstitutable: boolean,\n): FixPreview | undefined {\n const parameterIndex = summary.bindingModeParameterIndex;\n\n if (parameterIndex === undefined || summary.bindingWhenTruthy === undefined)\n return undefined;\n\n const desired = summary.bindingWhenTruthy ? \"true\" : \"false\";\n const args = context.callArguments(call);\n\n const derivationNote = directlySubstitutable\n ? \"\"\n : \" Also convert visual derivations of the returned value to Binding:map (or React.joinBindings for multiple Bindings); changing this argument alone is not a complete fix.\";\n\n if (parameterIndex < args.length) {\n const after = replaceWithinNode(call, args[parameterIndex], desired);\n\n if (!after || after === call.text) return undefined;\n\n return {\n kind: directlySubstitutable ? \"exact\" : \"pattern\",\n before: call.text,\n after,\n\n note:\n (summary.bindingModeParameterName\n ? `Switch the ${summary.bindingModeParameterName} parameter to the hook's Binding mode.`\n : \"Switch this call to the hook's Binding mode.\") + derivationNote,\n };\n }\n\n if (parameterIndex >= args.length) {\n const close = call.text.lastIndexOf(\")\");\n\n if (close < 0) return undefined;\n\n // Omitted Lua/Luau arguments are nil. Fill any skipped optional parameters\n // explicitly so the inferred Binding-mode argument lands in the right slot.\n const skipped = Array.from(\n { length: parameterIndex - args.length },\n () => \"nil\",\n );\n\n const appended = [...skipped, desired].join(\", \");\n const insertion = `${args.length > 0 ? \", \" : \"\"}${appended}`;\n\n return {\n kind: directlySubstitutable ? \"exact\" : \"pattern\",\n before: call.text,\n after: `${call.text.slice(0, close)}${insertion}${call.text.slice(close)}`,\n\n note:\n (summary.bindingModeParameterName\n ? `Enable the hook's Binding mode through the ${summary.bindingModeParameterName} parameter without changing omitted optional arguments.`\n : \"Enable the hook's Binding mode without changing omitted optional arguments.\") +\n derivationNote,\n };\n }\n\n return undefined;\n}\n\nfunction callMemberFixPreview(\n call: SyntaxNode,\n replacement: string,\n): FixPreview | undefined {\n const name = callNameNode(call);\n const path = name.text;\n const separator = Math.max(path.lastIndexOf(\".\"), path.lastIndexOf(\":\"));\n const member = separator >= 0 ? path.slice(separator + 1) : path;\n\n const replacementName =\n separator >= 0\n ? `${path.slice(0, separator + 1)}${replacement}`\n : replacement;\n\n const after = replaceWithinNode(call, name, replacementName);\n\n if (!after || member === replacement) return undefined;\n\n return { kind: \"exact\", before: call.text, after };\n}\n\nfunction useBindingFixPreview(call: SyntaxNode): FixPreview | undefined {\n const name = callNameNode(call);\n const current = name.text;\n\n const afterName = current.replace(/(?:^|\\.)useState$/, (match) =>\n match.replace(\"useState\", \"useBinding\"),\n );\n\n if (afterName === current) return undefined;\n\n const after = replaceWithinNode(call, name, afterName);\n\n return after ? { kind: \"exact\", before: call.text, after } : undefined;\n}\n\ninterface ImportedBindingSummaries {\n hooks: Map<string, BindingCandidateHookSummary>;\n callbacks: Map<string, ExternalCallbackFunctionSummary>;\n compatibleProps: Map<string, Set<string>>;\n}\n\nconst importedBindingSummariesCache = new WeakMap<\n RuleContext,\n ImportedBindingSummaries\n>();\n\nfunction importedBindingSummaries(\n context: RuleContext,\n): ImportedBindingSummaries {\n const cached = importedBindingSummariesCache.get(context);\n\n if (cached) return cached;\n\n const result: ImportedBindingSummaries = {\n hooks: new Map(),\n callbacks: new Map(),\n compatibleProps: new Map(),\n };\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const [, localName, target] = match;\n const normalizedTarget = normalizeRequireTarget(target);\n\n const hook = resolveModuleReference(\n normalizedTarget,\n context.project.bindingCandidateHooks,\n );\n\n if (hook) result.hooks.set(localName, hook);\n\n const callback = resolveModuleReference(\n normalizedTarget,\n context.project.externalCallbackModules,\n );\n\n if (callback) result.callbacks.set(localName, callback);\n\n const compatibleProps = resolveModuleReference(\n normalizedTarget,\n context.project.bindingCompatibleComponentProps,\n );\n\n if (compatibleProps) result.compatibleProps.set(localName, compatibleProps);\n }\n\n importedBindingSummariesCache.set(context, result);\n\n return result;\n}\n\nfunction importedBindingCandidateHooks(\n context: RuleContext,\n): Map<string, BindingCandidateHookSummary> {\n return importedBindingSummaries(context).hooks;\n}\n\nfunction importedExternalCallbackFunctions(\n context: RuleContext,\n): Map<string, ExternalCallbackFunctionSummary> {\n return importedBindingSummaries(context).callbacks;\n}\n\nfunction importedBindingCompatibleComponentProps(\n context: RuleContext,\n): Map<string, Set<string>> {\n return importedBindingSummaries(context).compatibleProps;\n}\n\nfunction declarationForCall(call: SyntaxNode): SyntaxNode | null {\n let current: SyntaxNode | null = call.parent;\n\n while (current) {\n if (current.type === \"variable_declaration\") return current;\n\n if (\n current.type === \"function_definition\" ||\n current.type === \"function_declaration\"\n )\n return null;\n\n current = current.parent;\n }\n\n return null;\n}\n\nconst TRANSPARENT_PARENTS = new Set([\n \"binary_expression\",\n \"unary_expression\",\n \"parenthesized_expression\",\n \"cast_expression\",\n \"type_cast_expression\",\n \"interpolated_string\",\n \"string_interpolation\",\n \"expression_list\",\n \"assignment_statement\",\n \"dot_index_expression\",\n \"method_index_expression\",\n \"table_constructor\",\n \"field\",\n]);\n\nconst PURE_BINDING_DERIVATION_CALL =\n /^(?:tostring|tonumber|type|typeof|math\\.[A-Za-z_][A-Za-z0-9_]*|string\\.[A-Za-z_][A-Za-z0-9_]*|utf8\\.[A-Za-z_][A-Za-z0-9_]*|bit32\\.[A-Za-z_][A-Za-z0-9_]*|(?:UDim|UDim2|Vector2|Vector3|Color3|CFrame|Rect|NumberRange|NumberSequence|ColorSequence|BrickColor|Font)\\.[A-Za-z_][A-Za-z0-9_]*)$/;\n\nconst HOST_FEEDBACK_PROPERTIES = new Set([\n \"AbsoluteSize\",\n \"AbsolutePosition\",\n \"AbsoluteRotation\",\n \"AbsoluteContentSize\",\n \"AbsoluteCanvasSize\",\n \"AbsoluteCellSize\",\n \"AbsoluteCellCount\",\n \"TextBounds\",\n \"CanvasPosition\",\n]);\n\nconst LIKELY_CONTINUOUS_PROPERTIES = new Set([\n \"CFrame\",\n \"WorldCFrame\",\n \"Position\",\n \"WorldPosition\",\n \"Rotation\",\n \"Orientation\",\n \"CanvasPosition\",\n \"PlaybackLoudness\",\n \"TimePosition\",\n]);\n\nconst SEMANTIC_SNAPSHOT_EXPRESSION =\n /\\b(?:getState|getSnapshot|snapshot|selector|select|table\\s*\\.\\s*(?:clone|freeze|move))\\b|(?:\\.|\\[\\s*[\"'])State(?:\\b|[\"']\\s*\\])/i;\n\nfunction isBindingMapSafeCall(call: SyntaxNode, context: RuleContext): boolean {\n if (call.type !== \"function_call\") return false;\n\n const path = context\n .resolveCallPath(context.getCallPath(call) ?? \"\")\n .replace(/\\s+/g, \"\");\n\n return PURE_BINDING_DERIVATION_CALL.test(path);\n}\n\nfunction isTransparentParent(\n parent: SyntaxNode,\n context: RuleContext,\n): boolean {\n if (parent.type === \"function_call\")\n return isBindingMapSafeCall(parent, context);\n\n if (parent.type === \"arguments\") {\n return (\n parent.parent?.type === \"function_call\" &&\n isBindingMapSafeCall(parent.parent, context)\n );\n }\n\n return TRANSPARENT_PARENTS.has(parent.type);\n}\n\nfunction stringLiteralValue(node: SyntaxNode | undefined): string | null {\n if (!node) return null;\n\n return node.text.trim().match(/^[\"']([^\"']+)[\"']$/)?.[1] ?? null;\n}\n\nfunction observedPropertyForCall(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n context: RuleContext,\n): string | null {\n if (summary.observedPropertyName) return summary.observedPropertyName;\n\n if (summary.observedPropertyParameterIndex === undefined) return null;\n\n return stringLiteralValue(\n context.callArguments(call)[summary.observedPropertyParameterIndex],\n );\n}\n\nfunction isStrongHostFeedbackProperty(\n property: string | null | undefined,\n): boolean {\n return Boolean(property && HOST_FEEDBACK_PROPERTIES.has(property));\n}\n\nfunction isInside(node: SyntaxNode, ancestor: SyntaxNode): boolean {\n let current: SyntaxNode | null = node;\n\n while (current) {\n if (sameNode(current, ancestor)) return true;\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction isIdentifierPropertyName(node: SyntaxNode): boolean {\n const parent = node.parent;\n\n if (parent?.type === \"dot_index_expression\")\n return sameNode(parent.childForFieldName(\"field\"), node);\n\n if (parent?.type === \"method_index_expression\")\n return (\n sameNode(parent.childForFieldName(\"method\"), node) ||\n sameNode(parent.namedChildren.at(-1), node)\n );\n\n return false;\n}\n\nfunction isReadNode(\n node: SyntaxNode,\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n): boolean {\n if (node.type !== \"identifier\" || node.text !== valueName) return false;\n\n if (isInside(node, declaration)) return false;\n\n if (isIdentifierPropertyName(node)) return false;\n\n if (isBindingShadowedBetween(node, owner, valueName, declaration))\n return false;\n\n const parent = node.parent;\n\n if (parent?.type === \"variable_list\" || parent?.type === \"typed_identifier\")\n return false;\n\n if (\n parent?.type === \"field\" &&\n !sameNode(fieldValue(parent), node) &&\n /^[A-Za-z_][A-Za-z0-9_]*\\s*=/.test(parent.text.trim())\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction hasAnyRead(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n): boolean {\n if (!owner.body) return false;\n\n return [...context.walk(owner.body)].some((node) =>\n isReadNode(node, valueName, owner, declaration),\n );\n}\n\nfunction isCreateElementCall(call: SyntaxNode, context: RuleContext): boolean {\n return (\n call.type === \"function_call\" &&\n context.resolveCallPath(context.getCallPath(call) ?? \"\") ===\n \"React.createElement\"\n );\n}\n\nfunction isHostCreateElementCall(\n call: SyntaxNode,\n context: RuleContext,\n): boolean {\n if (!isCreateElementCall(call, context)) return false;\n\n const args = context.callArguments(call);\n const host = args[0]?.text.trim() ?? \"\";\n\n return /^(?:\"[^\"]+\"|'[^']+')$/.test(host);\n}\n\nfunction isTransparentUsage(\n node: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return false;\n\n if (parent.type === \"field\") {\n const value = fieldValue(parent);\n\n if (!value || !sameNode(value, current)) return false;\n\n const property = fieldName(parent);\n\n if (!property || NON_BINDABLE_HOST_FIELDS.has(property)) return false;\n\n const table = parent.parent;\n\n if (table?.type !== \"table_constructor\") return false;\n\n const args = table.parent;\n\n if (args?.type !== \"arguments\") return false;\n\n const call = args.parent;\n\n if (!call || !isCreateElementCall(call, context)) return false;\n\n if (!sameNode(context.callArguments(call)[1], table)) return false;\n\n if (isHostCreateElementCall(call, context)) return true;\n\n const component = context.callArguments(call)[0]?.text.trim() ?? \"\";\n\n return compatibleComponentProps.get(component)?.has(property) ?? false;\n }\n\n if (\n parent.type === \"if_statement\" ||\n parent.type === \"elseif_clause\" ||\n parent.type === \"while_statement\" ||\n parent.type === \"repeat_statement\" ||\n parent.type === \"return_statement\"\n ) {\n return false;\n }\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return false;\n\n if (!isTransparentParent(parent, context)) return false;\n\n current = parent;\n }\n\n return false;\n}\n\nfunction isDirectBindingValueUsage(\n node: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return false;\n\n if (\n parent.type === \"parenthesized_expression\" ||\n parent.type === \"cast_expression\" ||\n parent.type === \"type_cast_expression\"\n ) {\n current = parent;\n continue;\n }\n\n if (parent.type !== \"field\") return false;\n\n const value = fieldValue(parent);\n\n if (!value || !sameNode(value, current)) return false;\n\n const property = fieldName(parent);\n\n if (!property || NON_BINDABLE_HOST_FIELDS.has(property)) return false;\n\n const table = parent.parent;\n const args = table?.parent;\n const call = args?.parent;\n\n if (\n table?.type !== \"table_constructor\" ||\n args?.type !== \"arguments\" ||\n !call ||\n !isCreateElementCall(call, context)\n ) {\n return false;\n }\n\n if (!sameNode(context.callArguments(call)[1], table)) return false;\n\n if (isHostCreateElementCall(call, context)) return true;\n\n const component = context.callArguments(call)[0]?.text.trim() ?? \"\";\n\n return compatibleComponentProps.get(component)?.has(property) ?? false;\n }\n\n return false;\n}\n\nfunction allReadsDirectlyBindingSubstitutable(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n if (!owner.body) return false;\n\n let reads = 0;\n\n for (const node of context.walk(owner.body)) {\n if (!isReadNode(node, valueName, owner, declaration)) continue;\n\n reads += 1;\n\n if (!isDirectBindingValueUsage(node, context, compatibleComponentProps))\n return false;\n }\n\n return reads > 0;\n}\n\nfunction isSimpleBindingDerivation(\n node: SyntaxNode,\n valueName: string,\n context: RuleContext,\n): boolean {\n if (node.type === \"identifier\") return node.text === valueName;\n\n if ([\"number\", \"string\", \"true\", \"false\", \"nil\"].includes(node.type))\n return true;\n\n if (node.type === \"dot_index_expression\") {\n const base = node.namedChildren[0];\n\n return Boolean(base && isSimpleBindingDerivation(base, valueName, context));\n }\n\n if (node.type === \"function_call\") {\n const path = context.getCallPath(node);\n\n if (path === \"math.random\" || path === \"math.randomseed\") return false;\n\n const root = path?.split(/[.:]/)[0];\n\n if (\n !root ||\n context.model.functions.some(\n (fn) => fn.parameters.includes(root) || fn.name === root,\n ) ||\n context.model.allNodes.some(\n (candidate) =>\n candidate.type === \"variable_declaration\" &&\n declarationNames(candidate).includes(root),\n )\n )\n return false;\n\n return (\n isBindingMapSafeCall(node, context) &&\n context\n .callArguments(node)\n .every((arg) => isSimpleBindingDerivation(arg, valueName, context))\n );\n }\n\n if (\n [\n \"binary_expression\",\n \"unary_expression\",\n \"parenthesized_expression\",\n ].includes(node.type)\n ) {\n return node.namedChildren.every((child) =>\n isSimpleBindingDerivation(child, valueName, context),\n );\n }\n\n return false;\n}\n\nfunction importedHookFixPreview(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): FixPreview | undefined {\n const directlySubstitutable = allReadsDirectlyBindingSubstitutable(\n valueName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n const preview = bindingModeFixPreview(\n summary,\n call,\n context,\n directlySubstitutable,\n );\n\n if (!preview || directlySubstitutable || !owner.body) return preview;\n\n if ((declaration.text.split(\"=\")[0] ?? \"\").includes(\":\")) return preview;\n\n const edits = new Map<number, { node: SyntaxNode; after: string }>();\n const sourceLines = context.source.split(/\\r?\\n/);\n\n edits.set(call.startIndex, { node: call, after: preview.after });\n\n for (const read of context.walk(owner.body)) {\n if (!isReadNode(read, valueName, owner, declaration)) continue;\n\n if (isDirectBindingValueUsage(read, context, compatibleComponentProps))\n continue;\n\n if (!isTransparentUsage(read, context, compatibleComponentProps))\n return preview;\n\n let field: SyntaxNode | null = read.parent;\n\n while (field && field.type !== \"field\") field = field.parent;\n\n if (!field) return preview;\n\n const expression = fieldValue(field);\n\n if (\n !expression ||\n !isSimpleBindingDerivation(expression, valueName, context)\n )\n return preview;\n\n if (edits.has(expression.startIndex)) continue;\n\n let mapped = expression.text;\n\n const reads = [...context.walk(expression)].filter((node) =>\n isReadNode(node, valueName, owner, declaration),\n );\n\n for (const node of reads.sort((a, b) => b.startIndex - a.startIndex)) {\n const start = node.startIndex - expression.startIndex;\n const end = node.endIndex - expression.startIndex;\n\n mapped = `${mapped.slice(0, start)}value${mapped.slice(end)}`;\n }\n\n const line = sourceLines[field.startPosition.row] ?? \"\";\n const indent = line.match(/^\\s*/)?.[0] ?? \"\";\n const unit = indent.includes(\"\\t\") ? \"\\t\" : \" \";\n\n edits.set(expression.startIndex, {\n node: expression,\n after: `${valueName}:map(function(value)\\n${indent}${unit}return ${mapped}\\n${indent}end)`,\n });\n }\n\n if (edits.size === 1) return preview;\n\n let after = owner.node.text;\n\n for (const edit of [...edits.values()].sort(\n (a, b) => b.node.startIndex - a.node.startIndex,\n )) {\n const start = edit.node.startIndex - owner.node.startIndex;\n const end = edit.node.endIndex - owner.node.startIndex;\n\n if (start < 0 || after.slice(start, end) !== edit.node.text) return preview;\n\n after = `${after.slice(0, start)}${edit.after}${after.slice(end)}`;\n }\n\n return {\n kind: \"exact\",\n before: owner.node.text,\n after,\n note: \"Enable the hook's Binding mode and map the derived visual properties from the returned Binding.\",\n };\n}\n\nfunction derivedLocalDeclarationForRead(\n node: SyntaxNode,\n context: RuleContext,\n): SyntaxNode | null {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return null;\n\n if (parent.type === \"variable_declaration\") return parent;\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return null;\n\n if (!isTransparentParent(parent, context)) return null;\n\n current = parent;\n }\n\n return null;\n}\n\nfunction opaqueDerivedLocalDeclarationForRead(\n node: SyntaxNode,\n context: RuleContext,\n): SyntaxNode | null {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return null;\n\n if (parent.type === \"variable_declaration\") return parent;\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return null;\n\n if (\n parent.type === \"if_statement\" ||\n parent.type === \"elseif_clause\" ||\n parent.type === \"while_statement\" ||\n parent.type === \"repeat_statement\" ||\n parent.type === \"for_statement\" ||\n parent.type === \"for_in_statement\" ||\n parent.type === \"return_statement\"\n )\n return null;\n\n if (parent.type === \"function_call\") {\n const path = context.resolveCallPath(context.getCallPath(parent) ?? \"\");\n\n // Values captured by React memo/effect hooks still rely on reconciliation\n // to recompute or re-run that hook. Do not treat the hook's result as an\n // opaque Binding derivation just because its dependency table mentions\n // the value.\n if (/^React\\.use(?:Memo|Callback|Effect|LayoutEffect)$/.test(path))\n return null;\n }\n\n if (\n !TRANSPARENT_PARENTS.has(parent.type) &&\n parent.type !== \"arguments\" &&\n parent.type !== \"function_call\"\n )\n return null;\n\n current = parent;\n }\n\n return null;\n}\n\nfunction stateReadsAreBindingCompatible(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n visited = new Set<string>(),\n): boolean {\n if (!owner.body) return false;\n\n const visitKey = `${declaration.startIndex}:${valueName}`;\n\n if (visited.has(visitKey)) return false;\n\n visited.add(visitKey);\n\n let reads = 0;\n\n for (const node of context.walk(owner.body)) {\n if (!isReadNode(node, valueName, owner, declaration)) continue;\n\n reads += 1;\n\n if (isTransparentUsage(node, context, compatibleComponentProps)) continue;\n\n const derivedDeclaration = derivedLocalDeclarationForRead(node, context);\n\n const derivedNames = derivedDeclaration\n ? declarationNames(derivedDeclaration)\n : [];\n\n if (derivedDeclaration && derivedNames.length === 1) {\n if (\n stateReadsAreBindingCompatible(\n derivedNames[0],\n owner,\n derivedDeclaration,\n context,\n compatibleComponentProps,\n new Set(visited),\n )\n )\n continue;\n }\n\n return false;\n }\n\n return reads > 0;\n}\n\ninterface CallbackSourceEvidence {\n highFrequency: boolean;\n external: boolean;\n hostFeedbackProperties: Set<string>;\n genericExternal: boolean;\n}\n\ntype MirrorConfidence = \"strong\" | \"possible\" | \"none\";\n\ninterface BindingUpdateEvidence extends CallbackSourceEvidence {\n mirrorConfidence: MirrorConfidence;\n}\n\nfunction propertyChangedSignalProperty(text: string): string | null {\n return (\n text.match(/GetPropertyChangedSignal\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/)?.[1] ??\n null\n );\n}\n\nfunction reactChangePropertyForCallback(node: SyntaxNode): string | null {\n let current: SyntaxNode | null = node.parent;\n\n while (\n current &&\n current.type !== \"function_definition\" &&\n current.type !== \"function_declaration\"\n ) {\n if (current.type === \"field\") {\n return (\n current.text.match(\n /React\\s*\\.\\s*Change\\s*\\.\\s*([A-Za-z_][A-Za-z0-9_]*)/,\n )?.[1] ?? null\n );\n }\n\n current = current.parent;\n }\n\n return null;\n}\n\nfunction evidenceForExternalSource(\n highFrequency: boolean,\n hostFeedbackProperty?: string | null,\n): CallbackSourceEvidence {\n const hostFeedbackProperties = new Set<string>();\n\n if (hostFeedbackProperty) hostFeedbackProperties.add(hostFeedbackProperty);\n\n return {\n highFrequency,\n external: true,\n hostFeedbackProperties,\n genericExternal: !highFrequency && !hostFeedbackProperty,\n };\n}\n\nfunction mergeSourceEvidence(\n target: CallbackSourceEvidence,\n source: CallbackSourceEvidence,\n): void {\n target.highFrequency ||= source.highFrequency;\n target.external ||= source.external;\n target.genericExternal ||= source.genericExternal;\n\n for (const property of source.hostFeedbackProperties)\n target.hostFeedbackProperties.add(property);\n}\n\nfunction callbackSource(\n call: SyntaxNode,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n const normalized = (context.getCallPath(call) ?? \"\").replace(/\\s+/g, \"\");\n\n const highFrequency =\n isHighFrequencyRobloxCall(call, context) ||\n LIKELY_CONTINUOUS_CALLBACK.test(normalized);\n\n const hostFeedbackProperty = propertyChangedSignalProperty(call.text);\n const final = normalized.split(/[.:]/).at(-1) ?? normalized;\n\n const external =\n highFrequency ||\n Boolean(hostFeedbackProperty) ||\n EXTERNAL_CALLBACK.test(normalized) ||\n EXTERNAL_CALLBACK.test(final);\n\n if (!external) return null;\n\n return evidenceForExternalSource(highFrequency, hostFeedbackProperty);\n}\n\nfunction importedCallbackSource(\n call: SyntaxNode,\n callbackArgument: SyntaxNode,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n const path = context.getCallPath(call) ?? \"\";\n const summary = importedCallbacks.get(path);\n\n if (!summary) return null;\n\n const args = context.callArguments(call);\n\n const callbackIndex = args.findIndex((arg) =>\n sameNode(arg, callbackArgument),\n );\n\n if (\n callbackIndex < 0 ||\n !summary.callbackParameterIndexes.includes(callbackIndex)\n )\n return null;\n\n const highFrequency =\n summary.highFrequency ||\n args.some((arg) => isHighFrequencyRobloxExpression(arg, context));\n\n const hostFeedbackProperty = args\n .map((arg) => propertyChangedSignalProperty(arg.text))\n .find((property): property is string => Boolean(property));\n\n return evidenceForExternalSource(highFrequency, hostFeedbackProperty);\n}\n\nfunction directCallbackSource(\n node: SyntaxNode,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n const reactChangeProperty = reactChangePropertyForCallback(node);\n\n if (reactChangeProperty)\n return evidenceForExternalSource(false, reactChangeProperty);\n\n const parent = node.parent;\n\n if (parent?.type !== \"arguments\" || parent.parent?.type !== \"function_call\")\n return null;\n\n const call = parent.parent;\n\n const imported = importedCallbackSource(\n call,\n node,\n importedCallbacks,\n context,\n );\n\n if (imported) return imported;\n\n return callbackSource(call, context);\n}\n\nfunction namedFunctionCallbackSource(\n fn: FunctionInfo,\n owner: FunctionInfo,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n if (!fn.name || !owner.body) return null;\n\n const result: CallbackSourceEvidence = {\n highFrequency: false,\n external: false,\n hostFeedbackProperties: new Set(),\n genericExternal: false,\n };\n\n for (const call of context.walk(owner.body)) {\n if (call.type !== \"function_call\") continue;\n\n const args = context.callArguments(call);\n\n const callbackArg = args.find(\n (arg) => arg.type === \"identifier\" && arg.text === fn.name,\n );\n\n if (!callbackArg) continue;\n\n const source =\n importedCallbackSource(call, callbackArg, importedCallbacks, context) ??\n callbackSource(call, context);\n\n if (!source) continue;\n\n mergeSourceEvidence(result, source);\n }\n\n return result.external ? result : null;\n}\n\nfunction setterCallbackSource(\n call: SyntaxNode,\n binding: StateBinding,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n const owner = binding.owner;\n\n if (!owner) return null;\n\n const nearest = context.nearestFunction(call);\n\n if (!nearest || nearest === owner) return null;\n\n const direct = directCallbackSource(nearest.node, importedCallbacks, context);\n\n if (direct) return direct;\n\n return namedFunctionCallbackSource(\n nearest,\n owner,\n importedCallbacks,\n context,\n );\n}\n\nfunction mirrorConfidenceRank(confidence: MirrorConfidence): number {\n if (confidence === \"strong\") return 2;\n\n if (confidence === \"possible\") return 1;\n\n return 0;\n}\n\nfunction mergeMirrorConfidence(\n a: MirrorConfidence,\n b: MirrorConfidence,\n): MirrorConfidence {\n return mirrorConfidenceRank(b) > mirrorConfidenceRank(a) ? b : a;\n}\n\nfunction isLiteralStateTransition(node: SyntaxNode | undefined): boolean {\n if (!node) return true;\n\n const text = node.text.trim();\n\n return /^(?:true|false|nil|[-+]?\\d+(?:\\.\\d+)?|[\"'][^\"']*[\"'])$/.test(text);\n}\n\nfunction isSemanticSnapshotExpression(node: SyntaxNode | undefined): boolean {\n return Boolean(node && SEMANTIC_SNAPSHOT_EXPRESSION.test(node.text));\n}\n\nfunction expressionReferencesCallbackParameter(\n expression: SyntaxNode,\n callback: FunctionInfo,\n context: RuleContext,\n): boolean {\n if (callback.parameters.length === 0) return false;\n\n const parameters = new Set(callback.parameters);\n\n return [...context.walk(expression)].some(\n (node) => node.type === \"identifier\" && parameters.has(node.text),\n );\n}\n\nconst PURE_EXPRESSION_ROOTS = new Set([\n \"math\",\n \"string\",\n \"utf8\",\n \"bit32\",\n \"UDim\",\n \"UDim2\",\n \"Vector2\",\n \"Vector3\",\n \"Color3\",\n \"CFrame\",\n \"Rect\",\n \"NumberRange\",\n \"NumberSequence\",\n \"ColorSequence\",\n \"BrickColor\",\n \"Font\",\n \"Enum\",\n \"tostring\",\n \"tonumber\",\n \"type\",\n \"typeof\",\n]);\n\nfunction callbackLocalNamesBefore(\n callback: FunctionInfo,\n before: SyntaxNode,\n context: RuleContext,\n): Set<string> {\n const names = new Set<string>();\n\n if (!callback.body) return names;\n\n for (const node of context.walk(callback.body)) {\n if (node.startIndex >= before.startIndex) continue;\n\n if (\n context.nearestFunction(node) !== callback ||\n node.type !== \"variable_declaration\"\n )\n continue;\n\n for (const name of declarationNames(node)) names.add(name);\n }\n\n return names;\n}\n\nfunction expressionHasExternalInput(\n expression: SyntaxNode,\n callback: FunctionInfo,\n setterCall: SyntaxNode,\n context: RuleContext,\n): boolean {\n const callbackLocals = callbackLocalNamesBefore(\n callback,\n setterCall,\n context,\n );\n\n const callbackParameters = new Set(callback.parameters);\n\n for (const node of context.walk(expression)) {\n if (node.type !== \"identifier\" || isIdentifierPropertyName(node)) continue;\n\n const name = node.text;\n\n if (callbackParameters.has(name)) return true;\n\n if (callbackLocals.has(name)) continue;\n\n if (context.model.stateValues.has(name)) continue;\n\n if (PURE_EXPRESSION_ROOTS.has(name)) continue;\n\n return true;\n }\n\n return false;\n}\n\nfunction setterHasDistinctValuesInCallback(\n call: SyntaxNode,\n callback: FunctionInfo,\n context: RuleContext,\n): boolean {\n if (!callback.body) return false;\n\n const setterPath = context.getCallPath(call);\n const distinctValues = new Set<string>();\n\n for (const sibling of context.walk(callback.body)) {\n if (\n sibling.type !== \"function_call\" ||\n context.nearestFunction(sibling) !== callback\n )\n continue;\n\n if (context.getCallPath(sibling) !== setterPath) continue;\n\n const argument = context.callArguments(sibling)[0];\n\n if (argument) distinctValues.add(argument.text.trim());\n }\n\n return distinctValues.size > 1;\n}\n\nfunction setterCallMirrorConfidence(\n call: SyntaxNode,\n callback: FunctionInfo,\n source: CallbackSourceEvidence,\n context: RuleContext,\n): MirrorConfidence {\n const value = context.callArguments(call)[0];\n\n if (!value || value.type === \"function_definition\") return \"none\";\n\n if (isLiteralStateTransition(value)) {\n return source.highFrequency &&\n setterHasDistinctValuesInCallback(call, callback, context)\n ? \"strong\"\n : \"none\";\n }\n\n if (isSemanticSnapshotExpression(value)) return \"none\";\n\n if (expressionReferencesCallbackParameter(value, callback, context))\n return \"strong\";\n\n if (source.hostFeedbackProperties.size > 0) {\n const text = value.text;\n\n if (\n [...source.hostFeedbackProperties].some((property) =>\n new RegExp(\n `(?:\\\\.|[\"'])${property.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\b`,\n ).test(text),\n )\n ) {\n return \"strong\";\n }\n }\n\n if (!expressionHasExternalInput(value, callback, call, context)) {\n return source.highFrequency &&\n setterHasDistinctValuesInCallback(call, callback, context)\n ? \"strong\"\n : \"none\";\n }\n\n // Some subscriptions do not provide the changing value as a callback\n // parameter (mouse.Move and many custom signals are common examples). A\n // non-semantic expression read inside a proven hot callback is still strong\n // mirror evidence; for an unknown-rate callback keep it as a candidate only.\n if (source.highFrequency) return \"strong\";\n\n return source.genericExternal ? \"possible\" : \"strong\";\n}\n\nfunction mergeBindingUpdateEvidence(\n target: BindingUpdateEvidence,\n source: CallbackSourceEvidence,\n mirrorConfidence: MirrorConfidence,\n): void {\n if (mirrorConfidence === \"none\") return;\n\n mergeSourceEvidence(target, source);\n\n target.mirrorConfidence = mergeMirrorConfidence(\n target.mirrorConfidence,\n mirrorConfidence,\n );\n}\n\nfunction bindingUpdateEvidence(\n binding: StateBinding,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): BindingUpdateEvidence | null {\n const owner = binding.owner;\n\n if (!owner?.body) return null;\n\n const result: BindingUpdateEvidence = {\n highFrequency: false,\n external: false,\n hostFeedbackProperties: new Set(),\n genericExternal: false,\n mirrorConfidence: \"none\",\n };\n\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"function_call\") continue;\n\n const path = context.getCallPath(node);\n\n if (path === binding.setterName) {\n const source = setterCallbackSource(\n node,\n binding,\n importedCallbacks,\n context,\n );\n\n const callback = context.nearestFunction(node);\n\n if (!source || !callback || callback === owner) continue;\n\n mergeBindingUpdateEvidence(\n result,\n source,\n setterCallMirrorConfidence(node, callback, source, context),\n );\n\n continue;\n }\n\n // Also catch the very common `signal:Connect(setValue)` shape, where the\n // setter itself is the subscription callback and therefore never appears\n // as a function_call node.\n const args = context.callArguments(node);\n\n const setterArg = args.find(\n (arg) => arg.type === \"identifier\" && arg.text === binding.setterName,\n );\n\n if (!setterArg) continue;\n\n const normalized = (context.getCallPath(node) ?? \"\").replace(/\\s+/g, \"\");\n\n const imported = importedCallbackSource(\n node,\n setterArg,\n importedCallbacks,\n context,\n );\n\n const source =\n imported ??\n (PERSISTENT_MIRROR_CALLBACK.test(normalized)\n ? callbackSource(node, context)\n : null);\n\n if (!source) continue;\n\n mergeBindingUpdateEvidence(result, source, \"strong\");\n }\n\n return result.external && result.mirrorConfidence !== \"none\" ? result : null;\n}\n\nfunction hasStrongHostFeedbackEvidence(\n source: CallbackSourceEvidence,\n): boolean {\n if (source.genericExternal || source.hostFeedbackProperties.size === 0)\n return false;\n\n return [...source.hostFeedbackProperties].every((property) =>\n isStrongHostFeedbackProperty(property),\n );\n}\n\nfunction hasLikelyContinuousPropertyEvidence(\n source: CallbackSourceEvidence,\n): boolean {\n if (source.hostFeedbackProperties.size === 0) return false;\n\n return [...source.hostFeedbackProperties].every((property) =>\n LIKELY_CONTINUOUS_PROPERTIES.has(property),\n );\n}\n\nfunction returnedHookValues(\n binding: StateBinding,\n context: RuleContext,\n): Array<{ exportName: string; node: SyntaxNode }> {\n const owner = binding.owner;\n\n if (!owner?.body || !owner.isHook) return [];\n\n const results: Array<{ exportName: string; node: SyntaxNode }> = [];\n\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"return_statement\") continue;\n\n if (context.nearestFunction(node) !== owner) continue;\n\n for (const returned of node.namedChildren.flatMap((child) =>\n child.type === \"expression_list\" ? child.namedChildren : [child],\n )) {\n if (\n returned.type === \"identifier\" &&\n returned.text === binding.valueName\n ) {\n results.push({ exportName: binding.valueName, node: returned });\n } else if (returned.type === \"table_constructor\") {\n for (const field of returned.namedChildren.filter(\n (child) => child.type === \"field\",\n )) {\n const value = fieldValue(field);\n const name = fieldName(field);\n\n if (\n value?.type === \"identifier\" &&\n value.text === binding.valueName &&\n name\n ) {\n results.push({ exportName: name, node: value });\n }\n }\n }\n }\n }\n\n return results;\n}\n\nfunction hookCallSitesAreBindingCompatible(\n binding: StateBinding,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n const owner = binding.owner;\n\n if (!owner?.isHook || !owner.name) return false;\n\n const returned = returnedHookValues(binding, context);\n\n if (returned.length === 0) return false;\n\n let callSites = 0;\n\n for (const call of context.findCalls()) {\n const path = context.getCallPath(call);\n\n if (path !== owner.name) continue;\n\n const declaration = declarationForCall(call);\n\n if (!declaration) continue;\n\n const localName = declarationNames(declaration)[0] ?? null;\n\n const caller =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n if (!localName || !caller) continue;\n\n if (returned.length === 1 && returned[0].exportName === binding.valueName) {\n if (\n !stateReadsAreBindingCompatible(\n localName,\n caller,\n declaration,\n context,\n compatibleComponentProps,\n )\n )\n return false;\n\n callSites += 1;\n continue;\n }\n }\n\n return callSites > 0;\n}\n\nfunction selectorFieldName(\n call: SyntaxNode,\n context: RuleContext,\n): string | null {\n const selector = context.callArguments(call)[0];\n\n if (!selector || selector.type !== \"function_definition\") return null;\n\n const text = selector.text;\n\n return (\n text.match(\n /\\breturn\\s+[A-Za-z_][A-Za-z0-9_]*\\.([A-Za-z_][A-Za-z0-9_]*)\\b/,\n )?.[1] ??\n text.match(\n /\\breturn\\s+[A-Za-z_][A-Za-z0-9_]*\\[\\s*[\"']([^\"']+)[\"']\\s*\\]/,\n )?.[1] ??\n null\n );\n}\n\nfunction callDefinitelyUsesBindingMode(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n context: RuleContext,\n): boolean {\n const parameterIndex = summary.bindingModeParameterIndex;\n\n if (parameterIndex === undefined || summary.bindingWhenTruthy === undefined)\n return false;\n\n const argument = context.callArguments(call)[parameterIndex];\n const value = argument?.text.trim() ?? \"nil\";\n let truthy: boolean | null = null;\n\n if (value === \"true\") truthy = true;\n else if (value === \"false\" || value === \"nil\") truthy = false;\n\n if (truthy === null) return false;\n\n return truthy === summary.bindingWhenTruthy;\n}\n\ntype BindingRecommendation = \"warning\" | \"candidate\" | null;\n\nfunction hasExplicitBindingMode(summary: BindingCandidateHookSummary): boolean {\n return (\n summary.bindingModeParameterIndex !== undefined &&\n summary.bindingWhenTruthy !== undefined\n );\n}\n\ntype BindingUsageKind =\n \"compatible\" | \"custom-component\" | \"effect\" | \"structural\" | \"unknown\";\n\ninterface BindingUsageSummary {\n reads: number;\n compatible: number;\n customComponent: number;\n visualCustomComponent: number;\n effect: number;\n structural: number;\n unknown: number;\n}\n\nconst LIKELY_VISUAL_PROP =\n /(?:position|size|rotation|transparency|opacity|color|image|text|anchor|visible|enabled|layout|scale|offset|zindex|canvas|viewport|cframe|width|height|radius|stroke|padding|spacing|angle|alpha|progress)/i;\n\nfunction createElementPropUsage(\n node: SyntaxNode,\n context: RuleContext,\n): { component: string; property: string } | null {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return null;\n\n if (parent.type === \"field\") {\n const value = fieldValue(parent);\n\n if (!value || !sameNode(value, current)) return null;\n\n const property = fieldName(parent);\n const table = parent.parent;\n const args = table?.parent;\n const call = args?.parent;\n\n if (\n !property ||\n table?.type !== \"table_constructor\" ||\n args?.type !== \"arguments\" ||\n !call ||\n !isCreateElementCall(call, context)\n ) {\n return null;\n }\n\n if (!sameNode(context.callArguments(call)[1], table)) return null;\n\n const component = context.callArguments(call)[0]?.text.trim() ?? \"\";\n\n if (!component || /^(?:\"[^\"]+\"|'[^']+')$/.test(component)) return null;\n\n return { component, property };\n }\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return null;\n\n if (!isTransparentParent(parent, context)) return null;\n\n current = parent;\n }\n\n return null;\n}\n\nfunction isEffectUsage(node: SyntaxNode, context: RuleContext): boolean {\n const nearest = context.nearestFunction(node);\n\n if (nearest) {\n const parent = nearest.node.parent;\n\n if (\n parent?.type === \"arguments\" &&\n parent.parent?.type === \"function_call\"\n ) {\n const path = context.resolveCallPath(\n context.getCallPath(parent.parent) ?? \"\",\n );\n\n if (/^React\\.use(?:Effect|LayoutEffect)$/.test(path)) return true;\n }\n }\n\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) break;\n\n if (\n parent.type === \"arguments\" &&\n parent.parent?.type === \"function_call\"\n ) {\n const path = context.resolveCallPath(\n context.getCallPath(parent.parent) ?? \"\",\n );\n\n if (/^React\\.use(?:Effect|LayoutEffect)$/.test(path)) return true;\n }\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n break;\n\n current = parent;\n }\n\n return false;\n}\n\nfunction isStructuralUsage(node: SyntaxNode, context: RuleContext): boolean {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return false;\n\n if (\n parent.type === \"if_statement\" ||\n parent.type === \"elseif_clause\" ||\n parent.type === \"while_statement\" ||\n parent.type === \"repeat_statement\" ||\n parent.type === \"for_statement\" ||\n parent.type === \"for_in_statement\" ||\n parent.type === \"return_statement\"\n )\n return true;\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return false;\n\n if (!isTransparentParent(parent, context)) return false;\n\n current = parent;\n }\n\n return false;\n}\n\nfunction classifyBindingUsage(\n node: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): BindingUsageKind {\n if (isTransparentUsage(node, context, compatibleComponentProps))\n return \"compatible\";\n\n if (createElementPropUsage(node, context)) return \"custom-component\";\n\n if (isEffectUsage(node, context)) return \"effect\";\n\n if (isStructuralUsage(node, context)) return \"structural\";\n\n return \"unknown\";\n}\n\nfunction bindingUsageSummary(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n visited = new Set<string>(),\n): BindingUsageSummary {\n const summary: BindingUsageSummary = {\n reads: 0,\n compatible: 0,\n customComponent: 0,\n visualCustomComponent: 0,\n effect: 0,\n structural: 0,\n unknown: 0,\n };\n\n if (!owner.body) return summary;\n\n const visitKey = `${declaration.startIndex}:${valueName}`;\n\n if (visited.has(visitKey)) return summary;\n\n visited.add(visitKey);\n\n for (const node of context.walk(owner.body)) {\n if (!isReadNode(node, valueName, owner, declaration)) continue;\n\n if (!isTransparentUsage(node, context, compatibleComponentProps)) {\n const derivedDeclaration = derivedLocalDeclarationForRead(node, context);\n\n const derivedNames = derivedDeclaration\n ? declarationNames(derivedDeclaration)\n : [];\n\n if (derivedDeclaration && derivedNames.length === 1) {\n const derived = bindingUsageSummary(\n derivedNames[0],\n owner,\n derivedDeclaration,\n context,\n compatibleComponentProps,\n new Set(visited),\n );\n\n if (derived.reads > 0) {\n summary.reads += derived.reads;\n summary.compatible += derived.compatible;\n summary.customComponent += derived.customComponent;\n summary.visualCustomComponent += derived.visualCustomComponent;\n summary.effect += derived.effect;\n summary.structural += derived.structural;\n summary.unknown += derived.unknown;\n continue;\n }\n }\n\n const opaqueDeclaration = opaqueDerivedLocalDeclarationForRead(\n node,\n context,\n );\n\n const opaqueNames = opaqueDeclaration\n ? declarationNames(opaqueDeclaration)\n : [];\n\n if (opaqueDeclaration && opaqueNames.length === 1) {\n const derived = bindingUsageSummary(\n opaqueNames[0],\n owner,\n opaqueDeclaration,\n context,\n compatibleComponentProps,\n new Set(visited),\n );\n\n if (derived.reads > 0) {\n summary.reads += derived.reads + 1;\n summary.compatible += derived.compatible;\n summary.customComponent += derived.customComponent;\n summary.visualCustomComponent += derived.visualCustomComponent;\n summary.effect += derived.effect;\n summary.structural += derived.structural;\n summary.unknown += derived.unknown + 1;\n continue;\n }\n }\n }\n\n summary.reads += 1;\n const customComponentUsage = createElementPropUsage(node, context);\n const kind = classifyBindingUsage(node, context, compatibleComponentProps);\n\n if (kind === \"compatible\") summary.compatible += 1;\n else if (kind === \"custom-component\") {\n summary.customComponent += 1;\n\n if (\n customComponentUsage &&\n !compatibleComponentProps.has(customComponentUsage.component) &&\n LIKELY_VISUAL_PROP.test(customComponentUsage.property)\n ) {\n summary.visualCustomComponent += 1;\n }\n } else if (kind === \"effect\") summary.effect += 1;\n else if (kind === \"structural\") summary.structural += 1;\n else summary.unknown += 1;\n }\n\n return summary;\n}\n\nfunction hasCandidatePresentationEvidence(\n summary: BindingUsageSummary,\n): boolean {\n return summary.compatible > 0 || summary.visualCustomComponent > 0;\n}\n\nfunction isPresentationOnly(summary: BindingUsageSummary): boolean {\n return summary.reads > 0 && summary.compatible === summary.reads;\n}\n\nfunction stateBindingForSetter(\n setterName: string,\n context: RuleContext,\n): StateBinding | null {\n const valueName = context.model.stateSetters.get(setterName);\n\n if (!valueName) return null;\n\n return (\n context.model.stateBindings.find(\n (binding) =>\n binding.setterName === setterName && binding.valueName === valueName,\n ) ?? null\n );\n}\n\nfunction effectOnlyDerivesPresentation(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n if (!owner.body) return false;\n\n let foundRelevantEffect = false;\n\n for (const call of context.walk(owner.body)) {\n if (\n call.type !== \"function_call\" ||\n context.nearestFunction(call) !== owner\n )\n continue;\n\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (path !== \"React.useEffect\" && path !== \"React.useLayoutEffect\")\n continue;\n\n const callbackNode = context.callArguments(call)[0];\n\n if (callbackNode?.type !== \"function_definition\") continue;\n\n const callback = context.model.functionByNode.get(callbackNode.id);\n\n if (!callback?.body) continue;\n\n const usesValue = [...context.walk(callback.body)].some(\n (node) =>\n context.nearestFunction(node) === callback &&\n isReadNode(node, valueName, owner, declaration),\n );\n\n if (!usesValue) continue;\n\n foundRelevantEffect = true;\n\n let presentationSetter = false;\n\n for (const nested of context.walk(callback.body)) {\n if (\n nested.type !== \"function_call\" ||\n context.nearestFunction(nested) !== callback\n )\n continue;\n\n if (isBindingMapSafeCall(nested, context)) continue;\n\n const nestedPath = context.resolveCallPath(\n context.getCallPath(nested) ?? \"\",\n );\n\n if (\n nestedPath === \"debug.profilebegin\" ||\n nestedPath === \"debug.profileend\"\n )\n continue;\n\n if (context.model.bindingSetters.has(nestedPath)) {\n presentationSetter = true;\n continue;\n }\n\n const target = stateBindingForSetter(nestedPath, context);\n\n if (\n target?.owner &&\n stateReadsAreBindingCompatible(\n target.valueName,\n target.owner,\n target.declaration,\n context,\n compatibleComponentProps,\n )\n ) {\n presentationSetter = true;\n continue;\n }\n\n // An effect that performs any other call is doing behavior Doctor cannot\n // safely reproduce with Binding:map/joinBindings. Keep normal React state.\n return false;\n }\n\n if (!presentationSetter) return false;\n }\n\n return foundRelevantEffect;\n}\n\nfunction importedHookRecommendation(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n localName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): BindingRecommendation {\n if (\n !summary.external ||\n callDefinitelyUsesBindingMode(summary, call, context)\n )\n return null;\n\n const usage = bindingUsageSummary(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n if (usage.reads === 0) return null;\n\n const presentationOnly = isPresentationOnly(usage);\n const explicitBindingMode = hasExplicitBindingMode(summary);\n const observedProperty = observedPropertyForCall(summary, call, context);\n\n const strongHostFeedback =\n summary.sourceKind === \"instance-property\" &&\n isStrongHostFeedbackProperty(observedProperty);\n\n const likelyContinuousProperty =\n summary.sourceKind === \"instance-property\" &&\n Boolean(\n observedProperty && LIKELY_CONTINUOUS_PROPERTIES.has(observedProperty),\n );\n\n const mirrorsExternalValue = summary.mirrorConfidence !== \"none\";\n\n if (presentationOnly && (summary.highFrequency || likelyContinuousProperty))\n return \"warning\";\n\n if (presentationOnly && strongHostFeedback && explicitBindingMode)\n return \"warning\";\n\n if (\n presentationOnly &&\n (explicitBindingMode || strongHostFeedback || mirrorsExternalValue)\n )\n return \"candidate\";\n\n if (\n strongHostFeedback &&\n usage.effect > 0 &&\n effectOnlyDerivesPresentation(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n )\n ) {\n return \"candidate\";\n }\n\n if (!hasCandidatePresentationEvidence(usage)) return null;\n\n if (summary.highFrequency || likelyContinuousProperty) return \"candidate\";\n\n if (strongHostFeedback && explicitBindingMode && usage.effect === 0)\n return \"candidate\";\n\n return null;\n}\n\nexport const preferBindingOverState: RuleDefinition = {\n id: \"react-luau/prefer-binding-over-state\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Prefer React.useBinding when proven external presentation streams do not need React reconciliation.\",\n\n guidance: {\n explanation:\n \"A Binding can update these values without rerendering the component, and every use of the value only needs that kind of update. React state is therefore doing extra reconciliation work here.\",\n\n caveat:\n \"Keep React state if changing the value must rebuild component structure rather than only update Roblox Instance properties or other Binding-aware consumers.\",\n },\n\n run(context) {\n const diagnostics = [];\n const seen = new Set<string>();\n\n const importedHooks = importedBindingCandidateHooks(context);\n const importedCallbacks = importedExternalCallbackFunctions(context);\n\n const compatibleComponentProps =\n importedBindingCompatibleComponentProps(context);\n\n for (const call of context.findCalls()) {\n const path = context.getCallPath(call) ?? \"\";\n const summary = importedHooks.get(path);\n\n if (!summary) continue;\n\n const declaration = declarationForCall(call);\n\n const localName = declaration\n ? (declarationNames(declaration)[0] ?? null)\n : null;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n if (!declaration || !localName || !owner) continue;\n\n if (\n importedHookRecommendation(\n summary,\n call,\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n ) !== \"warning\"\n )\n continue;\n\n const key = `imported:${call.startIndex}:${call.endIndex}:${localName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n const hasBindingMode = hasExplicitBindingMode(summary);\n const observedProperty = observedPropertyForCall(summary, call, context);\n\n const hostFeedback =\n summary.sourceKind === \"instance-property\" &&\n isStrongHostFeedbackProperty(observedProperty);\n\n const likelyContinuousProperty =\n summary.sourceKind === \"instance-property\" &&\n Boolean(\n observedProperty &&\n LIKELY_CONTINUOUS_PROPERTIES.has(observedProperty),\n );\n\n const message = hostFeedback\n ? `${path} mirrors ${observedProperty} through React state even though every analyzed use is presentation-only, so the measurement rerenders this consumer without needing reconciliation.`\n : likelyContinuousProperty\n ? `${path} mirrors continuously mutable ${observedProperty} through React state, and ${localName} only feeds presentation updates that do not need reconciliation.`\n : `${path} returns state updated from a high-frequency source, and ${localName} only feeds presentation updates that do not need React reconciliation.`;\n\n const help = hasBindingMode\n ? `Use the hook's Binding-returning mode${summary.bindingModeParameterName ? ` by passing ${summary.bindingWhenTruthy ? \"true\" : \"false\"} for ${summary.bindingModeParameterName}` : \"\"}. Binding:map can keep pure visual derivations outside the render cycle.`\n : \"Prefer a Binding-returning hook API so continuous presentation updates can reach host properties without rerendering the consumer.\";\n\n diagnostics.push({\n node: callNameNode(call),\n message,\n help,\n\n fixPreview: hasBindingMode\n ? importedHookFixPreview(\n summary,\n call,\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n )\n : undefined,\n });\n }\n\n for (const binding of context.model.stateBindings) {\n const owner = binding.owner;\n\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n\n const update = bindingUpdateEvidence(binding, importedCallbacks, context);\n\n if (!update) continue;\n\n const localCompatible = stateReadsAreBindingCompatible(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n );\n\n const hookCompatible = owner.isHook\n ? hookCallSitesAreBindingCompatible(\n binding,\n context,\n compatibleComponentProps,\n )\n : false;\n\n const strongHostFeedback = hasStrongHostFeedbackEvidence(update);\n\n const likelyContinuousProperty =\n hasLikelyContinuousPropertyEvidence(update);\n\n const shouldWarn = owner.isHook\n ? hookCompatible && (update.highFrequency || likelyContinuousProperty)\n : localCompatible &&\n (update.highFrequency ||\n strongHostFeedback ||\n likelyContinuousProperty);\n\n if (!shouldWarn) continue;\n\n const key = `${binding.call.startIndex}:${binding.call.endIndex}:${binding.valueName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n if (owner.isHook && hookCompatible) {\n const properties = likelyContinuousProperty\n ? [...update.hostFeedbackProperties].sort().join(\", \")\n : \"\";\n\n diagnostics.push({\n node: callNameNode(binding.call),\n\n message:\n likelyContinuousProperty && !update.highFrequency\n ? `Hook state ${binding.valueName} mirrors continuously mutable ${properties} and is only consumed by presentation properties at analyzed call sites.`\n : `Hook state ${binding.valueName} is updated from a high-frequency source and is only consumed by presentation properties at analyzed call sites.`,\n\n help: \"Consider returning a Binding, or adding a Binding-returning variant of this hook, so continuous presentation updates do not rerender every consumer.\",\n });\n } else if (strongHostFeedback && !update.highFrequency) {\n const properties = [...update.hostFeedbackProperties].sort().join(\", \");\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} mirrors ${properties} and only feeds presentation updates, so React reconciliation is acting as an unnecessary host-property feedback step.`,\n help: \"Prefer React.useBinding for this host feedback path. Use Binding:map for pure visual derivations and keep React state only when a change needs to affect component structure or React effects.\",\n\n fixPreview: allReadsDirectlyBindingSubstitutable(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n )\n ? useBindingFixPreview(binding.call)\n : undefined,\n });\n } else if (likelyContinuousProperty && !update.highFrequency) {\n const properties = [...update.hostFeedbackProperties].sort().join(\", \");\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} mirrors continuously mutable ${properties} and only feeds presentation updates that do not need React reconciliation.`,\n help: \"Prefer React.useBinding so external visual property changes can reach presentation without routing every update through component state.\",\n\n fixPreview: allReadsDirectlyBindingSubstitutable(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n )\n ? useBindingFixPreview(binding.call)\n : undefined,\n });\n } else {\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} is updated from a high-frequency callback and only feeds presentation updates that do not need React reconciliation.`,\n help: \"Prefer React.useBinding so continuous visual updates can reach host properties without rerendering the component.\",\n\n fixPreview: allReadsDirectlyBindingSubstitutable(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n )\n ? useBindingFixPreview(binding.call)\n : undefined,\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const preferBindingOverStateCandidate: RuleDefinition = {\n id: \"react-luau/prefer-binding-over-state-candidate\",\n category: \"Performance\",\n severity: \"suggestion\",\n\n description:\n \"Surface lower-confidence state-to-Binding opportunities that need developer review.\",\n\n guidance: {\n explanation:\n \"A Binding can update visual values without rerendering the component. Doctor found an external reactive mirror or presentation branch, but it cannot fully prove the source's update pressure, conversion safety, or that every consumer can leave React state.\",\n\n caveat:\n \"Keep React state when the external event represents semantic UI state, changes component structure, drives hook/effect behavior, or is infrequent enough that a Binding would only make the code harder to follow. Mixed cases can split visual Binding updates from the smaller value that truly needs reconciliation.\",\n },\n\n run(context) {\n const diagnostics = [];\n const seen = new Set<string>();\n const importedHooks = importedBindingCandidateHooks(context);\n const importedCallbacks = importedExternalCallbackFunctions(context);\n\n const compatibleComponentProps =\n importedBindingCompatibleComponentProps(context);\n\n for (const call of context.findCalls()) {\n const path = context.getCallPath(call) ?? \"\";\n const summary = importedHooks.get(path);\n\n if (!summary) continue;\n\n const declaration = declarationForCall(call);\n\n const localName = declaration\n ? (declarationNames(declaration)[0] ?? null)\n : null;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n if (!declaration || !localName || !owner) continue;\n\n if (\n importedHookRecommendation(\n summary,\n call,\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n ) !== \"candidate\"\n )\n continue;\n\n const usage = bindingUsageSummary(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n const presentationOnly = isPresentationOnly(usage);\n const observedProperty = observedPropertyForCall(summary, call, context);\n\n const strongHostFeedback =\n summary.sourceKind === \"instance-property\" &&\n isStrongHostFeedbackProperty(observedProperty);\n\n const hasBindingMode = hasExplicitBindingMode(summary);\n const mirrorsExternalValue = summary.mirrorConfidence !== \"none\";\n\n const visualEffectBridge =\n strongHostFeedback &&\n usage.effect > 0 &&\n effectOnlyDerivesPresentation(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n const key = `imported:${call.startIndex}:${call.endIndex}:${localName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n let message: string;\n let help: string;\n\n if (presentationOnly && hasBindingMode) {\n message = `${path} has a Binding-returning mode and ${localName} is only used for presentation, but Doctor cannot prove the updates are frequent enough to make the Binding version clearly preferable.`;\n\n help =\n \"Consider the Binding mode when this value changes often enough that avoiding reconciliation matters. Ordinary React state may be clearer for infrequent semantic updates.\";\n } else if (presentationOnly && strongHostFeedback) {\n message = `${path} mirrors ${observedProperty} through React state only for presentation, but the hook does not expose a proven low-friction Binding mode.`;\n\n help =\n \"Consider a Binding-returning variant if this host feedback path is performance-sensitive. Keep state when the simpler API is more valuable than avoiding occasional rerenders.\";\n } else if (presentationOnly && mirrorsExternalValue) {\n message = `${path} mirrors an external reactive value through React state, and ${localName} is only used for presentation.`;\n\n help =\n \"Consider a Binding-returning hook API if this source changes often enough that rerendering is unnecessary. Doctor cannot prove the source's update pressure, so ordinary state may still be the clearer choice.\";\n } else if (visualEffectBridge) {\n message = `${path} mirrors ${observedProperty} through React state, and the dependent React effect only derives presentation state or Bindings from ${localName}.`;\n\n help = hasBindingMode\n ? \"Consider the hook's Binding mode and move the visual derivation into Binding:map/joinBindings so the measurement does not need an intermediate React rerender.\"\n : \"Consider a Binding-returning hook variant if this visual feedback path is performance-sensitive; the current effect appears to use React state only as an intermediate presentation step.\";\n } else {\n message = `${path} updates ${localName} through React state and some consumers are presentation-only, but other consumers may still require React reconciliation.`;\n\n help =\n \"Inspect whether the presentation branch can move to a Binding while structural or effect-driven consumers keep React state. Avoid replacing the value wholesale when React still needs to react to it.\";\n }\n\n diagnostics.push({\n node: callNameNode(call),\n message,\n help,\n\n fixPreview:\n presentationOnly && hasBindingMode\n ? importedHookFixPreview(\n summary,\n call,\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n )\n : undefined,\n });\n }\n\n for (const call of context.findCalls()) {\n const path = context.getCallPath(call) ?? \"\";\n const member = path.split(/[.:]/).at(-1) ?? path;\n\n const bindingAlternative =\n context.project.bindingApiAlternatives.get(member);\n\n if (!bindingAlternative) continue;\n\n const declaration = declarationForCall(call);\n\n const localName = declaration\n ? (declarationNames(declaration)[0] ?? null)\n : null;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n if (\n !declaration ||\n !localName ||\n !owner ||\n !hasAnyRead(localName, owner, declaration, context)\n )\n continue;\n\n const usage = bindingUsageSummary(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n const presentationOnly = isPresentationOnly(usage);\n\n // A sibling Binding API is not enough to justify suggesting a split for\n // ordinary semantic/store state. Without independent high-frequency\n // evidence, only surface this when every analyzed consumer can stay on\n // the presentation path.\n if (!presentationOnly) continue;\n\n const field = selectorFieldName(call, context);\n const key = `state-api:${call.startIndex}:${call.endIndex}:${localName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n diagnostics.push({\n node: callNameNode(call),\n message: `${path} subscribes ${localName} through React state${field ? ` for ${field}` : \"\"}, while ${bindingAlternative} is also available and every analyzed consumer is presentation-only.`,\n help: `Consider ${bindingAlternative} when this value updates frequently enough that avoiding reconciliation matters; state remains reasonable for ordinary semantic store updates.`,\n\n fixPreview: allReadsDirectlyBindingSubstitutable(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n )\n ? callMemberFixPreview(call, bindingAlternative)\n : undefined,\n });\n }\n\n for (const binding of context.model.stateBindings) {\n const owner = binding.owner;\n\n if (!owner || (!owner.isComponent && !owner.isHook) || !owner.body)\n continue;\n\n const update = bindingUpdateEvidence(binding, importedCallbacks, context);\n\n if (!update) continue;\n\n const localCompatible = stateReadsAreBindingCompatible(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n );\n\n const hookCompatible = owner.isHook\n ? hookCallSitesAreBindingCompatible(\n binding,\n context,\n compatibleComponentProps,\n )\n : false;\n\n const strongHostFeedback = hasStrongHostFeedbackEvidence(update);\n\n const likelyContinuousProperty =\n hasLikelyContinuousPropertyEvidence(update);\n\n const mirrorsExternalValue = update.mirrorConfidence !== \"none\";\n\n if (owner.isHook) {\n if (\n hookCompatible &&\n (update.highFrequency || likelyContinuousProperty)\n )\n continue;\n\n if (!(hookCompatible && (strongHostFeedback || mirrorsExternalValue)))\n continue;\n\n const key = `hook-state:${binding.call.startIndex}:${binding.call.endIndex}:${binding.valueName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n const measurement = strongHostFeedback\n ? \"a presentation measurement\"\n : \"an external reactive value\";\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `Hook state ${binding.valueName} mirrors ${measurement} and is only consumed by presentation properties at analyzed call sites, but converting it requires changing the hook API.`,\n help: \"Consider adding a Binding-returning variant when this reactive path updates often enough that avoiding reconciliation matters; keeping the state API is reasonable when ordinary React state is simpler.\",\n });\n\n continue;\n }\n\n const usage = bindingUsageSummary(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n );\n\n if (!hasCandidatePresentationEvidence(usage)) continue;\n\n if (\n localCompatible &&\n (update.highFrequency || strongHostFeedback || likelyContinuousProperty)\n )\n continue;\n\n if (localCompatible && mirrorsExternalValue) {\n const key = `state:${binding.call.startIndex}:${binding.call.endIndex}:${binding.valueName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} mirrors an external reactive value and only feeds presentation updates, but Doctor cannot prove the source changes frequently enough for Binding to be clearly preferable.`,\n help: \"Consider React.useBinding when this source is a stream of presentation values rather than semantic React state. Keep useState when the external event represents an infrequent UI state transition.\",\n });\n\n continue;\n }\n\n const mixedHighFrequency =\n update.highFrequency || likelyContinuousProperty;\n\n const mixedHostFeedback =\n strongHostFeedback && usage.structural > 0 && usage.effect === 0;\n\n if (!mixedHighFrequency && !mixedHostFeedback) continue;\n\n const key = `state:${binding.call.startIndex}:${binding.call.endIndex}:${binding.valueName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} has presentation-oriented consumers, but other uses still appear to need React reconciliation.`,\n help: \"Inspect whether the presentation branch can move to React.useBinding while structural consumers keep a smaller semantic state value. Splitting the responsibilities can remove hot-path rerenders without forcing Binding semantics onto the whole value.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
37
39
  "import type { RuleDefinition } from \"../types\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\nexport const noCreateRootInRender: RuleDefinition = {\r\n id: \"react-luau/no-create-root-in-render\",\r\n category: \"Roblox\",\r\n severity: \"error\",\r\n description: \"Do not create ReactRoblox roots during component render.\",\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n if (path !== \"ReactRoblox.createRoot\") continue;\r\n const owner = context.containingComponent(call);\r\n if (!owner || !context.isDirectlyExecutedInFunction(call, owner)) continue;\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: \"ReactRoblox.createRoot() is called during component render.\",\r\n help: \"Own top-level roots outside component render. When a component intentionally creates a separate root, create it in an effect and unmount that exact root in cleanup.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
38
40
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { DiagnosticInput, FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\r\nimport { normalizeExpressionText, sameNode } from \"../ast/walk\";\r\nimport { assignmentLeft, assignmentTargetNode, declarationNames, isBindingShadowedBetween } from \"./helpers\";\r\n\r\nfunction refRootFromTarget(target: string, refs: Set<string>): string | null {\r\n const match = target.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*\\.\\s*current\\b/);\r\n if (!match || !refs.has(match[1])) return null;\r\n return match[1];\r\n}\r\n\r\nfunction isNilGuardedLazyInit(node: SyntaxNode, refName: string): boolean {\r\n let current = node.parent;\r\n while (current) {\r\n if (current.type === \"if_statement\") {\r\n const condition = current.childForFieldName(\"condition\")?.text.replace(/\\s+/g, \"\") ?? \"\";\r\n const escaped = refName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n if (new RegExp(`^(?:${escaped}\\.current==nil|nil==${escaped}\\.current)$`).test(condition)) return true;\r\n return false;\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nfunction assignmentRight(text: string): string | null {\r\n const match = text.match(/^(?:.*?)(?:\\+=|-=|\\*=|\\/=|%=|\\^=|\\.\\.=|=)\\s*(.+)$/s);\r\n return match?.[1]?.trim() ?? null;\r\n}\r\n\r\nfunction refDeclaration(owner: FunctionInfo, refName: string, context: RuleContext): SyntaxNode | null {\r\n if (!owner.body) return null;\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const index = names.indexOf(refName);\r\n if (index === -1) continue;\r\n const assignment = statement.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\")?.namedChildren ?? [];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression || expression.type !== \"function_call\") continue;\r\n if (context.resolveCallPath(context.getCallPath(expression) ?? \"\") === \"React.useRef\") return statement;\r\n }\r\n return null;\r\n}\r\n\r\nfunction refInitializer(owner: FunctionInfo, refName: string, context: RuleContext): string | null {\r\n if (!owner.body) return null;\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const index = names.indexOf(refName);\r\n if (index === -1) continue;\r\n const assignment = statement.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\")?.namedChildren ?? [];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression || expression.type !== \"function_call\") return null;\r\n const path = context.resolveCallPath(context.getCallPath(expression) ?? \"\");\r\n if (path !== \"React.useRef\") return null;\r\n return context.callArguments(expression)[0]?.text.trim() ?? \"nil\";\r\n }\r\n return null;\r\n}\r\n\r\nfunction isTopLevelOwnerStatement(node: SyntaxNode, owner: FunctionInfo): boolean {\r\n let current = node.parent;\r\n while (current && !sameNode(current, owner.node)) {\r\n if (current.type === \"if_statement\" || current.type === \"for_statement\" || current.type === \"while_statement\" || current.type === \"repeat_statement\") {\r\n return false;\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\r\n current = current.parent;\r\n }\r\n return Boolean(current);\r\n}\r\n\r\n\r\nfunction exactRefCurrentTarget(node: SyntaxNode, refName: string): boolean {\r\n return normalizeExpressionText(assignmentLeft(node.text)) === `${refName}.current`;\r\n}\r\n\r\nfunction hasDirectRenderRead(owner: FunctionInfo, refName: string, context: RuleContext): boolean {\r\n if (!owner.body) return false;\r\n const target = `${refName}.current`;\r\n\r\n for (const candidate of context.walk(owner.body)) {\r\n if (candidate.type !== \"dot_index_expression\" || normalizeExpressionText(candidate.text) !== target) continue;\r\n if (!context.isDirectlyExecutedInFunction(candidate, owner)) continue;\r\n\r\n let current: SyntaxNode | null = candidate.parent;\r\n let isWrite = false;\r\n while (current && !sameNode(current, owner.node)) {\r\n if (current.type === \"assignment_statement\" || current.type === \"update_statement\") {\r\n isWrite = exactRefCurrentTarget(current, refName);\r\n break;\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") break;\r\n current = current.parent;\r\n }\r\n if (!isWrite) return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isLatestValueMirror(node: SyntaxNode, owner: FunctionInfo, refName: string, context: RuleContext): boolean {\r\n if (node.type !== \"assignment_statement\" || !exactRefCurrentTarget(node, refName)) return false;\r\n const right = assignmentRight(node.text);\r\n if (!right) return false;\r\n\r\n const initializer = refInitializer(owner, refName, context);\r\n if (initializer !== null && normalizeExpressionText(right) === normalizeExpressionText(initializer)) return true;\r\n\r\n // A direct top-level `ref.current = renderValue` is the common use-latest\r\n // mirror pattern even when the ref used a neutral initial value such as false.\r\n // Nested writes remain warnings because they are usually imperative render work.\r\n if (isTopLevelOwnerStatement(node, owner)) {\r\n return /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/.test(normalizeExpressionText(right));\r\n }\r\n\r\n // A render-computed ref that is only written during render and read later by\r\n // effects/events is another use-latest mirror shape. The conditional/looped\r\n // write can still observe a pre-commit render, so keep it visible as a\r\n // suggestion rather than treating it as fully safe.\r\n return !hasDirectRenderRead(owner, refName, context);\r\n}\r\n\r\nexport const noRefCurrentInRender: RuleDefinition = {\r\n id: \"react-luau/no-ref-current-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description: \"Avoid mutating ref.current during render except for predictable initialization or deliberate latest-value mirrors.\",\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const node of context.walk()) {\r\n if (node.type !== \"assignment_statement\" && node.type !== \"update_statement\") continue;\r\n const owner = context.nearestFunction(node);\r\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\r\n if (!context.isDirectlyExecutedInFunction(node, owner)) continue;\r\n const refs = context.model.refVariablesByFunction.get(owner.node.id) ?? new Set<string>();\r\n const target = assignmentLeft(node.text);\r\n const refName = refRootFromTarget(target, refs);\r\n if (!refName || isNilGuardedLazyInit(node, refName)) continue;\r\n const declaration = refDeclaration(owner, refName, context);\r\n if (isBindingShadowedBetween(node, owner, refName, declaration)) continue;\r\n\r\n const latestValueMirror = isLatestValueMirror(node, owner, refName, context);\r\n diagnostics.push({\r\n node: assignmentTargetNode(node),\r\n severity: latestValueMirror ? \"suggestion\" : \"warning\",\r\n message: latestValueMirror\r\n ? `${refName}.current mirrors its latest render value during render.`\r\n : `${refName}.current is mutated during ${owner.isHook ? \"hook\" : \"component\"} render.`,\r\n help: latestValueMirror\r\n ? \"A latest-value ref can expose an uncommitted render value to imperative callbacks. Update it after commit when that distinction matters.\"\r\n : \"Move ref writes into the event, effect, or ref callback that owns the mutation. A nil-guarded one-time lazy initialization pattern remains allowed for pure construction.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
39
41
  "import type { SyntaxNode } from \"../syntax\";\r\n\r\nimport type {\r\n RuleContext,\r\n RuleDefinition,\r\n SourceEffectModuleSummary,\r\n} from \"../types\";\r\n\r\nimport {\r\n normalizeRequireTarget,\r\n resolveModuleReference,\r\n} from \"../module-resolution\";\r\n\r\nimport { knownYieldReason } from \"../roblox-semantics\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\ninterface SourceBinding<T> {\r\n declaration: SyntaxNode;\r\n value: T | null;\r\n}\r\n\r\ntype SourceBindings<T> = Map<string, SourceBinding<T>[]>;\r\n\r\ninterface EffectInstance {\r\n summary: SourceEffectModuleSummary;\r\n persistent: boolean;\r\n}\r\n\r\nfunction declarationParts(node: SyntaxNode): {\r\n names: string[];\r\n expressions: SyntaxNode[];\r\n} {\r\n if (node.type !== \"variable_declaration\")\r\n return { names: [], expressions: [] };\r\n\r\n const assignment = node.namedChildren.find(\r\n (child) => child.type === \"assignment_statement\",\r\n );\r\n\r\n const variables =\r\n assignment?.namedChildren.find((child) => child.type === \"variable_list\") ??\r\n node.namedChildren.find((child) => child.type === \"variable_list\");\r\n\r\n const expressions = assignment?.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n return {\r\n names:\r\n variables?.namedChildren\r\n .filter((child) => child.type === \"identifier\")\r\n .map((child) => child.text) ?? [],\r\n\r\n expressions: expressions?.namedChildren ?? [],\r\n };\r\n}\r\n\r\nfunction assignmentParts(node: SyntaxNode): {\r\n names: string[];\r\n expressions: SyntaxNode[];\r\n} {\r\n if (\r\n node.type !== \"assignment_statement\" ||\r\n node.parent?.type === \"variable_declaration\"\r\n )\r\n return { names: [], expressions: [] };\r\n\r\n const variables = node.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n );\r\n\r\n const expressions = node.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n return {\r\n names:\r\n variables?.namedChildren\r\n .filter((child) => child.type === \"identifier\")\r\n .map((child) => child.text) ?? [],\r\n\r\n expressions: expressions?.namedChildren ?? [],\r\n };\r\n}\r\n\r\nfunction bindingParts(node: SyntaxNode): {\r\n names: string[];\r\n expressions: SyntaxNode[];\r\n} {\r\n return node.type === \"variable_declaration\"\r\n ? declarationParts(node)\r\n : assignmentParts(node);\r\n}\r\n\r\nfunction addSourceBinding<T>(\r\n bindings: SourceBindings<T>,\r\n name: string,\r\n declaration: SyntaxNode,\r\n value: T | null,\r\n): void {\r\n const existing = bindings.get(name) ?? [];\r\n existing.push({ declaration, value });\r\n bindings.set(name, existing);\r\n}\r\n\r\nfunction nearestScopeContainer(\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): SyntaxNode {\r\n const owner = context.nearestFunction(node);\r\n let current = node.parent;\r\n\r\n while (current) {\r\n if (current.type === \"block\") return current;\r\n\r\n if (owner && current.id === owner.node.id) return owner.body ?? owner.node;\r\n\r\n current = current.parent;\r\n }\r\n\r\n return context.root;\r\n}\r\n\r\nfunction declarationVisibleAt(\r\n declaration: SyntaxNode,\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n if (declaration.startIndex >= node.startIndex) return false;\r\n\r\n const container = nearestScopeContainer(declaration, context);\r\n\r\n return (\r\n node.startIndex >= container.startIndex &&\r\n node.endIndex <= container.endIndex\r\n );\r\n}\r\n\r\nfunction functionParameterNames(node: SyntaxNode): Set<string> {\r\n const result = new Set<string>();\r\n\r\n const parameters =\r\n node.childForFieldName(\"parameters\") ??\r\n node.namedChildren.find((child) => child.type === \"parameters\");\r\n\r\n for (const parameter of parameters?.namedChildren ?? []) {\r\n if (parameter.type === \"identifier\") result.add(parameter.text);\r\n\r\n for (const child of parameter.namedChildren) {\r\n if (child.type === \"identifier\") result.add(child.text);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction loopBindsName(node: SyntaxNode, name: string): boolean {\r\n if (node.type !== \"for_statement\") return false;\r\n\r\n const header = node.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\r\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n return new RegExp(\r\n `^\\\\s*for\\\\s+(?:${escaped}\\\\s*=|[^\\\\n]*\\\\b${escaped}\\\\b[^\\\\n]*\\\\bin\\\\b)`,\r\n \"s\",\r\n ).test(header);\r\n}\r\n\r\nfunction bindingShadowedAfterDeclaration(\r\n declaration: SyntaxNode,\r\n node: SyntaxNode,\r\n name: string,\r\n): boolean {\r\n let current = node.parent;\r\n\r\n while (current) {\r\n // Once we reach a scope that already contains the source binding, binders\r\n // outside that scope cannot shadow the binding at this use site.\r\n if (\r\n declaration.startIndex >= current.startIndex &&\r\n declaration.endIndex <= current.endIndex\r\n )\r\n return false;\r\n\r\n if (\r\n (current.type === \"function_definition\" ||\r\n current.type === \"function_declaration\") &&\r\n functionParameterNames(current).has(name)\r\n )\r\n return true;\r\n\r\n if (loopBindsName(current, name)) return true;\r\n\r\n current = current.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction resolveSourceBinding<T>(\r\n bindings: SourceBindings<T>,\r\n name: string,\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): T | null {\r\n const candidates = bindings.get(name);\r\n\r\n if (!candidates) return null;\r\n\r\n for (let index = candidates.length - 1; index >= 0; index -= 1) {\r\n const candidate = candidates[index];\r\n\r\n if (!declarationVisibleAt(candidate.declaration, node, context)) continue;\r\n\r\n if (bindingShadowedAfterDeclaration(candidate.declaration, node, name))\r\n return null;\r\n\r\n return candidate.value;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction sourceEffectImports(\r\n context: RuleContext,\r\n): SourceBindings<SourceEffectModuleSummary> {\r\n const result: SourceBindings<SourceEffectModuleSummary> = new Map();\r\n\r\n for (const node of context.walk(context.root)) {\r\n if (\r\n node.type !== \"variable_declaration\" &&\r\n node.type !== \"assignment_statement\"\r\n )\r\n continue;\r\n\r\n if (\r\n node.type === \"assignment_statement\" &&\r\n node.parent?.type === \"variable_declaration\"\r\n )\r\n continue;\r\n\r\n const { names, expressions } = bindingParts(node);\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const expression = expressions[index] ?? expressions[0];\r\n\r\n const requireMatch =\r\n expression?.type === \"function_call\"\r\n ? expression.text.match(/^\\s*require\\s*\\((.*?)\\)\\s*$/s)\r\n : null;\r\n\r\n const summary = requireMatch\r\n ? resolveModuleReference(\r\n normalizeRequireTarget(requireMatch[1]),\r\n context.project.sourceEffects,\r\n )\r\n : null;\r\n\r\n addSourceBinding(result, names[index], node, summary);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction factorySummaryFromCall(\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n imports: SourceBindings<SourceEffectModuleSummary>,\r\n): SourceEffectModuleSummary | null {\r\n const path = context.getCallPath(call)?.replace(/\\s+/g, \"\") ?? \"\";\r\n\r\n const match = path.match(\r\n /^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/,\r\n );\r\n\r\n if (!match) return null;\r\n\r\n const summary = resolveSourceBinding(imports, match[1], call, context);\r\n\r\n if (!summary?.instanceFactories.has(match[2])) return null;\r\n\r\n return summary;\r\n}\r\n\r\nfunction returnedFactorySummary(\r\n callback: SyntaxNode,\r\n context: RuleContext,\r\n imports: SourceBindings<SourceEffectModuleSummary>,\r\n): SourceEffectModuleSummary | null {\r\n for (const node of context.walk(callback)) {\r\n if (\r\n node !== callback &&\r\n (node.type === \"function_definition\" ||\r\n node.type === \"function_declaration\")\r\n )\r\n continue;\r\n\r\n if (node.type !== \"return_statement\") continue;\r\n\r\n const expressions = node.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n const value = expressions?.namedChildren[0];\r\n\r\n if (value?.type === \"function_call\")\r\n return factorySummaryFromCall(value, context, imports);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction sourceEffectInstances(\r\n context: RuleContext,\r\n imports: SourceBindings<SourceEffectModuleSummary>,\r\n): SourceBindings<EffectInstance> {\r\n const result: SourceBindings<EffectInstance> = new Map();\r\n\r\n for (const node of context.walk(context.root)) {\r\n if (\r\n node.type !== \"variable_declaration\" &&\r\n node.type !== \"assignment_statement\"\r\n )\r\n continue;\r\n\r\n if (\r\n node.type === \"assignment_statement\" &&\r\n node.parent?.type === \"variable_declaration\"\r\n )\r\n continue;\r\n\r\n const { names, expressions } = bindingParts(node);\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const expression = expressions[index] ?? expressions[0];\r\n let instance: EffectInstance | null = null;\r\n\r\n if (expression?.type === \"function_call\") {\r\n const directFactory = factorySummaryFromCall(\r\n expression,\r\n context,\r\n imports,\r\n );\r\n\r\n if (directFactory) {\r\n // An instance created at module scope persists across renders. A fresh\r\n // factory result created inside render is local to that render and\r\n // receiver-only mutation is not externally observable by itself.\r\n instance = {\r\n summary: directFactory,\r\n persistent: context.nearestFunction(node) === null,\r\n };\r\n } else if (\r\n context.resolveCallPath(context.getCallPath(expression) ?? \"\") ===\r\n \"React.useMemo\"\r\n ) {\r\n const callback = context.callArguments(expression)[0];\r\n\r\n if (callback?.type === \"function_definition\") {\r\n const memoizedFactory = returnedFactorySummary(\r\n callback,\r\n context,\r\n imports,\r\n );\r\n\r\n if (memoizedFactory)\r\n instance = { summary: memoizedFactory, persistent: true };\r\n }\r\n }\r\n } else if (expression?.type === \"identifier\") {\r\n instance = resolveSourceBinding(\r\n result,\r\n expression.text,\r\n expression,\r\n context,\r\n );\r\n }\r\n\r\n addSourceBinding(result, names[index], node, instance);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction sourceInferredEffectCall(\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n imports: SourceBindings<SourceEffectModuleSummary>,\r\n instances: SourceBindings<EffectInstance>,\r\n): boolean {\r\n const path = context.getCallPath(call)?.replace(/\\s+/g, \"\") ?? \"\";\r\n\r\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(path)) {\r\n const direct = resolveSourceBinding(imports, path, call, context);\r\n\r\n if (direct?.effectfulExport) return true;\r\n }\r\n\r\n const member = path.match(\r\n /^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/,\r\n );\r\n\r\n if (!member) return false;\r\n\r\n const instance = resolveSourceBinding(instances, member[1], call, context);\r\n\r\n if (instance) {\r\n if (instance.summary.effectfulMembers.has(member[2])) return true;\r\n\r\n return (\r\n instance.persistent && instance.summary.mutatingMembers.has(member[2])\r\n );\r\n }\r\n\r\n const imported = resolveSourceBinding(imports, member[1], call, context);\r\n\r\n if (!imported) return false;\r\n\r\n // The imported module table is itself persistent project state, so a method\r\n // that mutates its receiver is observable even if it has no other effects.\r\n return (\r\n imported.effectfulMembers.has(member[2]) ||\r\n imported.mutatingMembers.has(member[2])\r\n );\r\n}\r\n\r\nconst RENDER_EFFECT_PATTERNS = [\r\n /^Instance\\.new$/,\r\n /tween[^:]*:(?:Create|Play)$/i,\r\n /:Connect$/,\r\n /:BindAction$/,\r\n /:BindActionAtPriority$/,\r\n /:BindActivate$/,\r\n /BindToRenderStep$/,\r\n /BindToSimulation$/,\r\n /:Destroy$/,\r\n /:unmount$/,\r\n];\r\n\r\nfunction hasNestedKnownRenderSideEffect(\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n for (const node of context.walk(call)) {\r\n if (node.startIndex === call.startIndex && node.endIndex === call.endIndex)\r\n continue;\r\n\r\n if (node.type !== \"function_call\") continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\r\n\r\n if (path === \"task.spawn\" || path === \"task.defer\" || path === \"task.delay\")\r\n return true;\r\n\r\n if (\r\n knownYieldReason(path, node, context) ||\r\n RENDER_EFFECT_PATTERNS.some((pattern) => pattern.test(path))\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport const noYieldInRender: RuleDefinition = {\r\n id: \"react-luau/no-yield-in-render\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n description: \"React render functions must not yield.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || !context.isDirectlyExecutedInFunction(call, component))\r\n continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n const reason = knownYieldReason(path, call, context);\r\n\r\n if (!reason) continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${path} can yield during component render.`,\r\n help: `Move yielding work outside render, usually into an effect or an external data-loading boundary. The bundled Roblox yield metadata recognizes ${reason} as a yielding API.`,\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noTaskSpawnInRender: RuleDefinition = {\r\n id: \"react-luau/no-task-spawn-in-render\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n description: \"Do not schedule asynchronous work during render.\",\r\n\r\n guidance: {\r\n explanation:\r\n \"Work started during render can continue even if React abandons that render.\",\r\n\r\n help: \"Start the task from the event that requests it, or from an effect if it belongs to the mounted component. Cancel effect-owned work in cleanup.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || !context.isDirectlyExecutedInFunction(call, component))\r\n continue;\r\n\r\n const path = context.getCallPath(call);\r\n\r\n if (\r\n path !== \"task.spawn\" &&\r\n path !== \"task.defer\" &&\r\n path !== \"task.delay\"\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${path} schedules work during component render.`,\r\n summary: `${path} schedules work during render.`,\r\n help: \"Move the scheduled work into an effect or the event that actually owns the side effect.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noSideEffectsInRender: RuleDefinition = {\r\n id: \"react-luau/no-side-effects-in-render\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n\r\n description:\r\n \"Do not create Instances, start tweens, subscribe, or perform other externally observable side effects during component render.\",\r\n\r\n guidance: {\r\n help: \"Move this work to an event handler or an effect. Clean up resources started by an effect.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n const effectImports = sourceEffectImports(context);\r\n const effectInstances = sourceEffectInstances(context, effectImports);\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || !context.isDirectlyExecutedInFunction(call, component))\r\n continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n const knownPattern = RENDER_EFFECT_PATTERNS.some((pattern) =>\r\n pattern.test(path),\r\n );\r\n\r\n let inferredFromSource = sourceInferredEffectCall(\r\n call,\r\n context,\r\n effectImports,\r\n effectInstances,\r\n );\r\n\r\n // Report the inner operation rather than duplicating it on an inferred wrapper.\r\n if (inferredFromSource && hasNestedKnownRenderSideEffect(call, context))\r\n inferredFromSource = false;\r\n\r\n if (!knownPattern && !inferredFromSource) continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n\r\n message:\r\n inferredFromSource && !knownPattern\r\n ? `${path} runs during render, and code it calls eventually changes state outside the current render.`\r\n : `${path} performs a side effect directly during component render.`,\r\n\r\n summary: `${path} has side effects during render.`,\r\n\r\n explanation:\r\n inferredFromSource && !knownPattern\r\n ? \"Doctor is not judging this call by its name. It followed the code behind the call and found a mutation that can affect existing state outside this render. That means the call can change the app even if React later abandons this render.\"\r\n : `${path} performs work outside React's render calculation.`,\r\n\r\n help:\r\n inferredFromSource && !knownPattern\r\n ? \"Move this call into an effect, event handler, or another committed lifecycle boundary so an abandoned render cannot still change application state.\"\r\n : \"Move imperative work into an effect or event handler with explicit ownership and cleanup. Use React.createElement for React-owned Instances. Destroy imperative Instances, cancel tweens, and disconnect subscriptions when their owner is cleaned up.\",\r\n\r\n fixPreview:\r\n inferredFromSource && !knownPattern\r\n ? {\r\n kind: \"pattern\" as const,\r\n before: call.text,\r\n after: `local function handleChange()\\n\\t${call.text}\\nend`,\r\n note: \"Connect this handler to the event that causes the change. Use an effect instead when a prop or state change should trigger it.\",\r\n }\r\n : undefined,\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
40
- "import {\n moduleKeys,\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\n\nimport type { SyntaxNode } from \"../syntax\";\n\nimport type {\n ConditionalHookModeSummary,\n DiagnosticInput,\n FixPreview,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n} from \"../types\";\n\nimport { nodeKey } from \"../ast/walk\";\n\nimport {\n callNameNode,\n CONDITIONAL_TYPES,\n declarationNames,\n findAncestorBetween,\n isHookPath,\n isNestedInsideFunction,\n} from \"./helpers\";\n\ntype HookModeStability = \"stable\" | \"unknown\" | \"unstable\";\n\nfunction staticIterationImports(\n context: RuleContext,\n): Map<string, Set<string>> {\n const result = new Map<string, Set<string>>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.staticIterationTables,\n );\n\n if (summary) result.set(match[1], summary);\n }\n\n return result;\n}\n\nfunction nonReactHookImports(context: RuleContext): Set<string> {\n const result = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match || !/^use[A-Z0-9_]/.test(match[1])) continue;\n\n const kind = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.reactHookModules,\n );\n\n if (kind === false) result.add(match[1]);\n }\n\n return result;\n}\n\nfunction conditionalHookModeImports(\n context: RuleContext,\n): Map<string, ConditionalHookModeSummary> {\n const result = new Map<string, ConditionalHookModeSummary>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.conditionalHookModes,\n );\n\n if (summary) result.set(match[1], summary);\n }\n\n return result;\n}\n\nfunction currentConditionalHookMode(\n context: RuleContext,\n): ConditionalHookModeSummary | null {\n for (const key of moduleKeys(context.relativePath)) {\n const summary = context.project.conditionalHookModes.get(key);\n\n if (summary) return summary;\n }\n\n return null;\n}\n\nfunction controlledParameterIndex(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n summary: ConditionalHookModeSummary,\n): number | null {\n if (controlFlow.type !== \"if_statement\") return null;\n\n const header = (controlFlow.text.split(/\\bthen\\b/s, 1)[0] ?? \"\").trim();\n\n for (const [conditionName, index] of Object.entries(\n summary.conditionVariables,\n )) {\n const escaped = conditionName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n const patterns = [\n new RegExp(`^if\\\\s+${escaped}\\\\s*$`),\n new RegExp(`^if\\\\s+not\\\\s+${escaped}\\\\s*$`),\n new RegExp(`^if\\\\s+${escaped}\\\\s*(?:==|~=)\\\\s*(?:true|false|nil)\\\\s*$`),\n new RegExp(`^if\\\\s+(?:true|false|nil)\\\\s*(?:==|~=)\\\\s*${escaped}\\\\s*$`),\n ];\n\n if (patterns.some((pattern) => pattern.test(header))) return index;\n }\n\n // Keep a direct parameter fallback for older or externally constructed summaries.\n for (const index of summary.parameterIndexes) {\n const name = fn.parameters[index];\n\n if (!name) continue;\n\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (new RegExp(`^if\\\\s+(?:not\\\\s+)?${escaped}\\\\s*$`).test(header))\n return index;\n }\n\n return null;\n}\n\nfunction dynamicHookModeFixPreview(\n hookName: string,\n argumentText: string,\n): FixPreview {\n return {\n kind: \"pattern\",\n before: `local value = ${hookName}(${argumentText})`,\n after: `local value = ${hookName}(${argumentText}) -- keep the hook-topology mode stable for this instance`,\n note: \"A custom hook may choose different internal hooks only when the value controlling that choice stays stable for the lifetime of the component instance.\",\n };\n}\n\nfunction unwrapIteratorExpression(text: string): string {\n let current = text.trim();\n const wrapper = current.match(/^(?:pairs|ipairs)\\s*\\((.*)\\)$/s);\n\n if (wrapper) current = wrapper[1].trim();\n\n return current;\n}\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n\n const assignment = node.namedChildren.find(\n (child) => child.type === \"assignment_statement\",\n );\n\n const expressionList = assignment?.namedChildren.find(\n (child) => child.type === \"expression_list\",\n );\n\n return expressionList?.namedChildren ?? [];\n}\n\nfunction isEmptyTable(node: SyntaxNode | undefined): boolean {\n return Boolean(\n node?.type === \"table_constructor\" &&\n node.namedChildren.every((child) => child.type !== \"field\"),\n );\n}\n\nfunction tableConstructorHasStableArity(node: SyntaxNode): boolean {\n if (node.type !== \"table_constructor\") return false;\n\n const fields = node.namedChildren.filter((child) => child.type === \"field\");\n\n if (fields.length === 0) return true;\n\n // Luau varargs, and a function call in the final list field, can contribute a\n // render-varying number of array entries. `{...}` is the real-world Jecs case\n // that motivated this distinction.\n if (\n fields.some((field) =>\n [...field.namedChildren].some(\n (child) => child.type === \"vararg_expression\",\n ),\n )\n )\n return false;\n\n const last = fields.at(-1);\n\n return !last?.namedChildren.some((child) => child.type === \"function_call\");\n}\n\nfunction stableShapeVariablesByFunction(\n context: RuleContext,\n): Map<number, Set<string>> {\n const stable = new Map<number, Set<string>>();\n const functionsByName = new Map<string, FunctionInfo>();\n\n for (const fn of context.model.functions) {\n stable.set(nodeKey(fn.node), new Set<string>());\n\n if (fn.name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(fn.name))\n functionsByName.set(fn.name, fn);\n }\n\n const namesFor = (fn: FunctionInfo): Set<string> => {\n const key = nodeKey(fn.node);\n const names = stable.get(key) ?? new Set<string>();\n stable.set(key, names);\n\n return names;\n };\n\n // A table constructed in the function has a fixed literal shape. More importantly for\n // React code, an empty-dependency useMemo explicitly captures one value for the entire\n // component lifetime. If that captured value is later iterated to create hooks, the\n // iteration source itself does not change between renders unless user code mutates it.\n for (const declaration of context.walk(context.root)) {\n if (declaration.type !== \"variable_declaration\") continue;\n\n const owner = context.nearestFunction(declaration);\n\n if (!owner) continue;\n\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n\n if (!expression) continue;\n\n if (\n expression.type === \"table_constructor\" &&\n tableConstructorHasStableArity(expression)\n ) {\n namesFor(owner).add(names[index]);\n continue;\n }\n\n if (expression.type !== \"function_call\") continue;\n\n const rawPath = context.getCallPath(expression);\n\n if (!rawPath || context.resolveCallPath(rawPath) !== \"React.useMemo\")\n continue;\n\n const args = context.callArguments(expression);\n\n if (isEmptyTable(args[1])) namesFor(owner).add(names[index]);\n }\n }\n\n const callsByLocalFunction = new Map<string, SyntaxNode[]>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n\n if (!rawPath || !functionsByName.has(rawPath)) continue;\n\n const calls = callsByLocalFunction.get(rawPath) ?? [];\n calls.push(call);\n callsByLocalFunction.set(rawPath, calls);\n }\n\n const expressionIsStableShape = (\n expression: SyntaxNode | undefined,\n owner: FunctionInfo | null,\n ): boolean => {\n if (!expression) return false;\n\n if (expression.type === \"table_constructor\")\n return tableConstructorHasStableArity(expression);\n\n const text = expression.text.trim();\n\n if (!owner || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(text)) return false;\n\n return namesFor(owner).has(text);\n };\n\n let changed = true;\n\n while (changed) {\n changed = false;\n\n // Preserve stable-shape aliases such as `local copy = capturedDefaults`.\n for (const declaration of context.walk(context.root)) {\n if (declaration.type !== \"variable_declaration\") continue;\n\n const owner = context.nearestFunction(declaration);\n\n if (!owner) continue;\n\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n\n if (!expressionIsStableShape(expression, owner)) continue;\n\n const target = names[index];\n const ownerNames = namesFor(owner);\n\n if (!ownerNames.has(target)) {\n ownerNames.add(target);\n changed = true;\n }\n }\n }\n\n // Propagate the guarantee through local helpers only when every known call to that\n // helper supplies a stable-shape argument for the parameter. This is what makes a\n // pattern such as `getStateContainer(capturedDefaults)` safe without exempting all\n // parameter-driven loops.\n for (const [name, fn] of functionsByName) {\n const calls = callsByLocalFunction.get(name) ?? [];\n\n if (calls.length === 0) continue;\n\n for (let index = 0; index < fn.parameters.length; index += 1) {\n const allStable = calls.every((call) => {\n const caller = context.nearestFunction(call);\n\n return expressionIsStableShape(\n context.callArguments(call)[index],\n caller,\n );\n });\n\n if (!allStable) continue;\n\n const parameter = fn.parameters[index];\n\n if (!parameter) continue;\n\n const fnNames = namesFor(fn);\n\n if (!fnNames.has(parameter)) {\n fnNames.add(parameter);\n changed = true;\n }\n }\n }\n }\n\n return stable;\n}\n\nfunction moduleInvariantVariables(context: RuleContext): Set<string> {\n const declarations = new Map<string, SyntaxNode>();\n const reassigned = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (\n node.type === \"variable_declaration\" &&\n !context.nearestFunction(node)\n ) {\n for (const name of declarationNames(node)) declarations.set(name, node);\n\n continue;\n }\n\n if (\n node.type !== \"assignment_statement\" ||\n node.parent?.type === \"variable_declaration\"\n )\n continue;\n\n const variableList = node.namedChildren.find(\n (child) => child.type === \"variable_list\",\n );\n\n for (const target of variableList?.namedChildren ?? []) {\n if (target.type === \"identifier\") reassigned.add(target.text);\n }\n }\n\n return new Set(\n [...declarations.keys()].filter((name) => !reassigned.has(name)),\n );\n}\n\nfunction staticModuleTables(context: RuleContext): Set<string> {\n const candidates = new Set<string>();\n const declarations = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\" || context.nearestFunction(node))\n continue;\n\n const names = declarationNames(node);\n const expressions = declarationExpressions(node);\n names.forEach((name, index) => {\n if (declarations.has(name)) {\n candidates.delete(name);\n return;\n }\n declarations.add(name);\n const expression = expressions[index];\n if (expression && tableConstructorHasStableArity(expression))\n candidates.add(name);\n });\n }\n\n // Only accept private literals whose uses cannot mutate or leak the table.\n // Aliases, writes, unknown calls, and shadowing conservatively invalidate it.\n for (const node of context.walk(context.root)) {\n if (node.type !== \"identifier\" || !candidates.has(node.text)) continue;\n const parent = node.parent;\n if (\n parent?.type === \"variable_list\" &&\n parent.parent?.parent?.type === \"variable_declaration\" &&\n !context.nearestFunction(node)\n ) continue;\n if (parent?.type === \"unary_expression\" && parent.text.trim().startsWith(\"#\"))\n continue;\n if (\n parent?.type === \"expression_list\" &&\n parent.parent?.type === \"for_generic_clause\"\n ) continue;\n if (parent?.type === \"arguments\" && parent.namedChildren.length === 1) {\n const call = parent.parent;\n const path = call && context.getCallPath(call);\n if (path === \"pairs\" || path === \"ipairs\") continue;\n }\n candidates.delete(node.text);\n }\n\n return candidates;\n}\n\nfunction simpleConditionRoot(controlFlow: SyntaxNode): string | null {\n if (\n controlFlow.type !== \"if_statement\" &&\n controlFlow.type !== \"if_expression\"\n )\n return null;\n\n const condition = controlFlow.namedChildren[0];\n\n if (!condition) return null;\n\n const text = condition.text.trim();\n\n const match = text.match(\n /^(?:not\\s+)?([A-Za-z_][A-Za-z0-9_]*)(?:\\s*(?:==|~=)\\s*(?:true|false|nil))?$/,\n );\n\n return match?.[1] ?? null;\n}\n\nfunction conditionIsProvablyInvariant(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n moduleInvariants: Set<string>,\n): boolean {\n const condition = controlFlow.namedChildren[0];\n\n if (!condition) return false;\n\n if ([\"true\", \"false\", \"nil\", \"number\", \"string\"].includes(condition.type))\n return true;\n\n const root = simpleConditionRoot(controlFlow);\n\n if (!root) return false;\n\n if (moduleInvariants.has(root)) return true;\n\n return Boolean(\n context.model.stableVariablesByFunction.get(nodeKey(fn.node))?.has(root),\n );\n}\n\nfunction branchHookSequence(\n branch: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): string[] | null {\n const hooks: string[] = [];\n\n for (const node of context.walk(branch)) {\n if (node.type !== \"function_call\") continue;\n\n if (context.nearestFunction(node) !== fn) continue;\n\n const rawPath = context.getCallPath(node);\n\n if (!rawPath) continue;\n\n const path = context.resolveCallPath(rawPath);\n\n if (!isHookPath(path)) continue;\n\n // Nested control flow inside a branch needs its own stability proof, so do\n // not call the outer branches equivalent merely because their flattened\n // hook names happen to match.\n const nestedControl = findAncestorBetween(node, branch, (ancestor) =>\n CONDITIONAL_TYPES.has(ancestor.type),\n );\n\n if (nestedControl) return null;\n\n hooks.push(path);\n }\n\n return hooks;\n}\n\nfunction ifBranchesHaveEquivalentBuiltInTopology(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): boolean {\n if (controlFlow.type !== \"if_statement\") return false;\n\n const thenBlock = controlFlow.namedChildren.find(\n (child) => child.type === \"block\",\n );\n\n const elseStatement = controlFlow.namedChildren.find(\n (child) => child.type === \"else_statement\",\n );\n\n const elseBlock = elseStatement?.namedChildren.find(\n (child) => child.type === \"block\",\n );\n\n if (!thenBlock || !elseBlock) return false;\n\n const thenHooks = branchHookSequence(thenBlock, fn, context);\n const elseHooks = branchHookSequence(elseBlock, fn, context);\n\n if (!thenHooks || !elseHooks || thenHooks.length !== elseHooks.length)\n return false;\n\n if (!thenHooks.every((path, index) => path === elseHooks[index]))\n return false;\n\n // Built-in React hooks have topology that is independent of their arguments.\n // For custom hooks, identical call names can still select different internal\n // hooks based on different arguments, so keep those conservative.\n return thenHooks.every((path) => path.startsWith(\"React.\"));\n}\n\nfunction stateModeStability(\n name: string,\n owner: FunctionInfo,\n context: RuleContext,\n): HookModeStability | null {\n const binding = context.model.stateBindings.find(\n (candidate) => candidate.owner === owner && candidate.valueName === name,\n );\n\n if (!binding || !owner.body) return null;\n\n const initializerText = binding.initializer?.text.trim() ?? \"nil\";\n\n const stableLiteral =\n /^(?:true|false|nil|-?\\d+(?:\\.\\d+)?|\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')$/;\n\n let sawIndirectSetterReference = false;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type === \"function_call\" &&\n context.getCallPath(node) === binding.setterName\n ) {\n const argument = context.callArguments(node)[0];\n\n if (\n !argument ||\n !stableLiteral.test(initializerText) ||\n argument.text.trim() !== initializerText\n )\n return \"unstable\";\n\n continue;\n }\n\n if (node.type !== \"identifier\" || node.text !== binding.setterName)\n continue;\n\n if (\n node.startIndex >= binding.declaration.startIndex &&\n node.endIndex <= binding.declaration.endIndex\n )\n continue;\n\n if (node.parent?.type === \"function_call\") continue;\n\n sawIndirectSetterReference = true;\n }\n\n if (sawIndirectSetterReference) return \"unknown\";\n\n return \"stable\";\n}\n\nfunction localAliasExpression(\n name: string,\n owner: FunctionInfo,\n context: RuleContext,\n): SyntaxNode | null {\n if (!owner.body) return null;\n\n let result: SyntaxNode | null = null;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type !== \"variable_declaration\" ||\n context.nearestFunction(node) !== owner\n )\n continue;\n\n const names = declarationNames(node);\n const index = names.indexOf(name);\n\n if (index < 0) continue;\n\n const expressions = declarationExpressions(node);\n const expression = expressions[index] ?? expressions[0] ?? null;\n\n if (result) return null;\n\n result = expression;\n }\n\n return result;\n}\n\nfunction modeValueStability(\n node: SyntaxNode | undefined,\n owner: FunctionInfo,\n context: RuleContext,\n moduleInvariants: Set<string>,\n depth = 0,\n): HookModeStability {\n if (!node) return \"stable\";\n\n if (depth > 4) return \"unknown\";\n\n const text = node.text.trim();\n\n if ([\"true\", \"false\", \"nil\"].includes(text)) return \"stable\";\n\n if (\n [\"number\", \"string\", \"string_content\", \"function_definition\"].includes(\n node.type,\n )\n )\n return \"stable\";\n\n const root = text.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n\n if (!root) return \"unknown\";\n\n const stateStability = stateModeStability(root, owner, context);\n\n if (stateStability) return stateStability;\n\n if (moduleInvariants.has(root)) return \"stable\";\n\n if (\n context.model.stableVariablesByFunction.get(nodeKey(owner.node))?.has(root)\n )\n return \"stable\";\n\n if (text === root) {\n const alias = localAliasExpression(root, owner, context);\n\n if (alias && alias.text.trim() !== root)\n return modeValueStability(\n alias,\n owner,\n context,\n moduleInvariants,\n depth + 1,\n );\n }\n\n return \"unknown\";\n}\n\nfunction tableFieldValue(\n table: SyntaxNode | undefined,\n accessPath: string,\n): SyntaxNode | undefined {\n if (!table || accessPath === \"\") return table;\n\n if (table.type !== \"table_constructor\") return undefined;\n\n let current: SyntaxNode | undefined = table;\n\n for (const part of accessPath.split(\".\")) {\n if (!current || current.type !== \"table_constructor\") return undefined;\n\n const field: SyntaxNode | undefined = current.namedChildren.find(\n (child) => {\n if (child.type !== \"field\") return false;\n\n return (\n child.namedChildren[0]?.type === \"identifier\" &&\n child.namedChildren[0]?.text === part\n );\n },\n );\n\n if (!field) return undefined;\n\n current = field.namedChildren[1];\n }\n\n return current;\n}\n\nfunction controlledAccessPaths(\n summary: ConditionalHookModeSummary,\n parameterIndex: number,\n): string[] {\n const paths = new Set<string>();\n\n for (const [conditionName, index] of Object.entries(\n summary.conditionVariables,\n )) {\n if (index !== parameterIndex) continue;\n\n paths.add(summary.conditionAccessPaths?.[conditionName] ?? \"\");\n }\n\n if (paths.size === 0) paths.add(\"\");\n\n return [...paths];\n}\n\nfunction loopIterationIsProvablyStable(\n loop: SyntaxNode,\n imports: Map<string, Set<string>>,\n owner: FunctionInfo,\n stableShapes: Map<number, Set<string>>,\n moduleTables: Set<string>,\n): boolean {\n const numeric = loop.namedChildren.find(\n (child) => child.type === \"for_numeric_clause\",\n );\n\n if (numeric) {\n const text = numeric.text;\n\n const bounds = text.match(\n /^\\s*[A-Za-z_][A-Za-z0-9_]*\\s*=\\s*([^,]+)\\s*,\\s*([^,]+)(?:\\s*,\\s*([^,]+))?\\s*$/s,\n );\n\n if (\n bounds &&\n bounds\n .slice(1)\n .filter(Boolean)\n .every((value) => /^-?\\d+(?:\\.\\d+)?$/.test(value!.trim()))\n )\n return true;\n }\n\n const clause = loop.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n const match = clause?.text.match(/\\bin\\s+(.+)$/s);\n\n if (!match) return false;\n\n const expression = unwrapIteratorExpression(match[1]);\n\n const path = expression.match(\n /^([A-Za-z_][A-Za-z0-9_]*)(?:\\.([A-Za-z_][A-Za-z0-9_.]*))?$/,\n );\n\n if (!path) return false;\n\n if (!path[2] && stableShapes.get(nodeKey(owner.node))?.has(path[1]))\n return true;\n\n if (!path[2] && moduleTables.has(path[1])) return true;\n\n const fields = imports.get(path[1]);\n\n if (!fields) return false;\n\n const propertyPath = path[2] ?? \"\";\n\n return fields.has(propertyPath);\n}\n\nfunction functionParameterTypes(fn: FunctionInfo): Map<string, string> {\n if (!fn.body) return new Map();\n\n const headerLength = Math.max(0, fn.body.startIndex - fn.node.startIndex);\n const header = fn.node.text.slice(0, headerLength);\n const result = new Map<string, string>();\n\n for (const match of header.matchAll(\n /\\b([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([^,\\n)]+)/g,\n )) {\n result.set(match[1], match[2].trim());\n }\n\n return result;\n}\n\nfunction isNonOptionalParameterType(typeText: string | undefined): boolean {\n if (!typeText) return false;\n\n return !typeText.includes(\"?\") && !/(?:^|[| ])nil(?:$|[| ])/i.test(typeText);\n}\n\nfunction impossibleNilGuardReturn(\n node: SyntaxNode,\n fn: FunctionInfo,\n parameterTypes: Map<string, string>,\n): boolean {\n let current = node.parent;\n\n while (current && current !== fn.node) {\n if (current.type === \"if_statement\") {\n const header = (current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\").trim();\n\n const patterns = [\n /\\bif\\s+not\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*$/,\n /\\bif\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*==\\s*nil\\s*$/,\n /\\bif\\s+nil\\s*==\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*$/,\n ];\n\n for (const pattern of patterns) {\n const match = header.match(pattern);\n\n if (match && isNonOptionalParameterType(parameterTypes.get(match[1])))\n return true;\n }\n\n return false;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction reachableReturnsBefore(\n call: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n cache: Map<number, SyntaxNode[]>,\n): SyntaxNode[] {\n if (!fn.body) return [];\n\n const key = nodeKey(fn.node);\n let returns = cache.get(key);\n\n if (!returns) {\n const parameterTypes = functionParameterTypes(fn);\n\n returns = [...context.walk(fn.body)].filter(\n (node) =>\n node.type === \"return_statement\" &&\n !isNestedInsideFunction(node, fn.node) &&\n !impossibleNilGuardReturn(node, fn, parameterTypes),\n );\n\n cache.set(key, returns);\n }\n\n return returns.filter((node) => node.endIndex <= call.startIndex);\n}\n\nfunction returnIsControlledByStableTopologyMode(\n node: SyntaxNode,\n fn: FunctionInfo,\n summary: ConditionalHookModeSummary | null,\n context: RuleContext,\n moduleInvariants: Set<string>,\n): boolean {\n let current = node.parent;\n\n while (current && current !== fn.node) {\n if (current.type === \"if_statement\" || current.type === \"if_expression\") {\n if (summary && controlledParameterIndex(current, fn, summary) !== null)\n return true;\n\n if (conditionIsProvablyInvariant(current, fn, context, moduleInvariants))\n return true;\n\n return false;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction conditionalFixPreview(kind: string, hookName: string): FixPreview {\n if (hookName === \"React.useEffect\" && kind === \"if statement\") {\n return {\n kind: \"pattern\",\n before: `if enabled then\\n\\tReact.useEffect(function()\\n\\t\\tperformWork()\\n\\tend, {})\\nend`,\n after: `React.useEffect(function()\\n\\tif enabled then\\n\\t\\tperformWork()\\n\\tend\\nend, { enabled })`,\n note: \"Call the hook every render and put the condition inside its callback.\",\n };\n }\n\n if (kind === \"for statement\") {\n return {\n kind: \"pattern\",\n before: `for _, item in items do\\n\\tlocal value = ${hookName}(item)\\nend`,\n after: `local function Item(props)\\n\\tlocal value = ${hookName}(props.item)\\n\\treturn renderItem(value)\\nend\\n\\nfor _, item in items do\\n\\tchildren[item.id] = React.createElement(Item, {\\n\\t\\titem = item,\\n\\t})\\nend`,\n note: \"When collection size can change, move the hook into a child component so each component instance owns a fixed hook sequence.\",\n };\n }\n\n if (kind === \"while statement\" || kind === \"repeat statement\") {\n return {\n kind: \"pattern\",\n before: `while condition do\\n\\tlocal value = ${hookName}()\\nend`,\n after: `local value = ${hookName}()\\n\\nwhile condition do\\n\\t-- use value without creating another hook call\\nend`,\n note: \"Hook count must not depend on how many times a runtime loop executes.\",\n };\n }\n\n return {\n kind: \"pattern\",\n before: `if enabled then\\n\\tlocal value = ${hookName}()\\nend`,\n after: `local value = ${hookName}()\\n\\nif enabled then\\n\\t-- use value here\\nend`,\n note: \"Keep the hook call unconditional, then branch on its result.\",\n };\n}\n\nfunction earlyReturnFixPreview(hookName: string): FixPreview {\n return {\n kind: \"pattern\",\n before: `if not ready then\\n\\treturn nil\\nend\\n\\nlocal value = ${hookName}()`,\n after: `local value = ${hookName}()\\n\\nif not ready then\\n\\treturn nil\\nend`,\n note: \"Call hooks before any reachable early return so every render executes the same hook sequence.\",\n };\n}\n\nexport const rulesOfHooks: RuleDefinition = {\n id: \"react-luau/rules-of-hooks\",\n category: \"Hooks\",\n severity: \"error\",\n\n description:\n \"Hooks must run in the same order on every render of a React component or custom hook.\",\n\n guidance: {\n summary: \"Hook calls must stay in the same order between renders.\",\n help: \"Call hooks at the top level of a component or custom hook, before conditional returns.\",\n },\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n if (!context.model.isReactFile) return diagnostics;\n\n const staticImports = staticIterationImports(context);\n const stableShapes = stableShapeVariablesByFunction(context);\n const moduleTables = staticModuleTables(context);\n const moduleInvariants = moduleInvariantVariables(context);\n const modeImports = conditionalHookModeImports(context);\n const ignoredHookImports = nonReactHookImports(context);\n const currentModeSummary = currentConditionalHookMode(context);\n const reachableReturns = new Map<number, SyntaxNode[]>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n\n if (!rawPath) continue;\n\n if (ignoredHookImports.has(rawPath)) continue;\n\n const path = context.resolveCallPath(rawPath);\n\n if (!isHookPath(path)) continue;\n\n const fn = context.nearestFunction(call);\n\n if (!fn || (!fn.isComponent && !fn.isHook)) {\n diagnostics.push({\n node: callNameNode(call),\n message: `Hook ${path} is called outside a React component or custom hook.`,\n help: \"Move the hook into a component or a custom hook whose name starts with use.\",\n\n fixPreview: {\n kind: \"pattern\",\n before: `local value = ${path}()\\n\\nlocal function helper()\\n\\treturn value\\nend`,\n after: `local function useHelper()\\n\\tlocal value = ${path}()\\n\\treturn value\\nend`,\n note: \"Hooks need a React-owned component or custom-hook call stack.\",\n },\n });\n\n continue;\n }\n\n const importedMode = modeImports.get(rawPath);\n\n if (importedMode) {\n const args = context.callArguments(call);\n\n const unstableControls = importedMode.parameterIndexes.flatMap(\n (index) =>\n controlledAccessPaths(importedMode, index)\n .map((accessPath) => {\n const argument = args[index];\n const value = tableFieldValue(argument, accessPath);\n\n const stability =\n accessPath !== \"\"\n ? argument?.type === \"table_constructor\"\n ? value\n ? modeValueStability(\n value,\n fn,\n context,\n moduleInvariants,\n )\n : \"stable\"\n : \"unknown\"\n : modeValueStability(\n argument,\n fn,\n context,\n moduleInvariants,\n );\n\n return { index, accessPath, argument, value, stability };\n })\n .filter((control) => control.stability === \"unstable\"),\n );\n\n if (unstableControls.length > 0) {\n const first = unstableControls[0];\n const firstIndex = first.index;\n const argument = first.argument;\n\n const parameterOffset =\n importedMode.parameterIndexes.indexOf(firstIndex);\n\n const baseParameterName =\n importedMode.parameterNames[parameterOffset] ??\n `argument ${firstIndex + 1}`;\n\n const parameterName = first.accessPath\n ? `${baseParameterName}.${first.accessPath}`\n : baseParameterName;\n\n const argumentText =\n first.value?.text.trim() || argument?.text.trim() || \"<omitted>\";\n\n diagnostics.push({\n node: first.value ?? argument ?? callNameNode(call),\n\n highlights: unstableControls\n .map((control) => control.value ?? control.argument)\n .filter((node): node is SyntaxNode => Boolean(node)),\n\n message: `Hook ${rawPath} receives hook-topology mode ${parameterName} from ${argumentText}, which is updated between renders and can make the custom hook execute a different hook sequence.`,\n help: `Keep ${parameterName} stable for this hook instance, or refactor ${rawPath} so it always calls the same hooks regardless of that mode.`,\n fixPreview: dynamicHookModeFixPreview(rawPath, argumentText),\n });\n }\n }\n\n const controlFlow = findAncestorBetween(call, fn.node, (node) =>\n CONDITIONAL_TYPES.has(node.type),\n );\n\n if (controlFlow) {\n if (\n currentModeSummary &&\n controlledParameterIndex(controlFlow, fn, currentModeSummary) !== null\n )\n continue;\n\n if (\n conditionIsProvablyInvariant(\n controlFlow,\n fn,\n context,\n moduleInvariants,\n )\n )\n continue;\n\n if (ifBranchesHaveEquivalentBuiltInTopology(controlFlow, fn, context))\n continue;\n\n if (\n controlFlow.type === \"for_statement\" &&\n loopIterationIsProvablyStable(\n controlFlow,\n staticImports,\n fn,\n stableShapes,\n moduleTables,\n )\n )\n continue;\n\n const kind = controlFlow.type.replaceAll(\"_\", \" \");\n\n const loopLike =\n controlFlow.type === \"for_statement\" ||\n controlFlow.type === \"while_statement\" ||\n controlFlow.type === \"repeat_statement\";\n\n diagnostics.push({\n node: callNameNode(call),\n\n message: loopLike\n ? `Hook ${path} is called inside ${kind} whose size or iteration order may change between renders. If that happens, React will see a different hook sequence.`\n : `Hook ${path} is called inside ${kind}, so the hook may be skipped on some renders.`,\n\n summary: loopLike\n ? `${path} may run a different number of times between renders.`\n : `${path} may be skipped on some renders.`,\n\n explanation: loopLike\n ? `This ${kind} may change how many times ${path} is called.`\n : `This ${kind} can skip ${path} on some renders.`,\n\n help: loopLike\n ? \"Keep hook count independent of runtime collection size or loop iterations. A common fix is to render a child component per item and call the hook inside that child.\"\n : \"Call the hook unconditionally at the top level, then branch on the returned value.\",\n\n fixPreview: conditionalFixPreview(kind, path),\n });\n\n continue;\n }\n\n const earlierReturns = reachableReturnsBefore(\n call,\n fn,\n context,\n reachableReturns,\n );\n\n if (\n earlierReturns.length > 0 &&\n !earlierReturns.every((node) =>\n returnIsControlledByStableTopologyMode(\n node,\n fn,\n currentModeSummary,\n context,\n moduleInvariants,\n ),\n )\n ) {\n diagnostics.push({\n node: callNameNode(call),\n message: `Hook ${path} may run after an earlier reachable return, so some renders can execute fewer hooks.`,\n help: \"Move the hook before reachable early returns so hook order cannot change between renders.\",\n fixPreview: earlyReturnFixPreview(path),\n });\n }\n }\n\n return diagnostics;\n },\n};\n",
42
+ "import {\n moduleKeys,\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\n\nimport type { SyntaxNode } from \"../syntax\";\n\nimport type {\n ConditionalHookModeSummary,\n DiagnosticInput,\n FixPreview,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n} from \"../types\";\n\nimport { nodeKey } from \"../ast/walk\";\nimport { reactApiPath, resolveLocalFunction, unwrapExpression } from \"../ast/local-values\";\n\nimport {\n callNameNode,\n CONDITIONAL_TYPES,\n declarationNames,\n findAncestorBetween,\n isBindingShadowedBetween,\n isHookPath,\n isNameShadowedBetween,\n isNestedInsideFunction,\n} from \"./helpers\";\n\ntype HookModeStability = \"stable\" | \"unknown\" | \"unstable\";\n\nfunction staticIterationImports(\n context: RuleContext,\n): Map<string, Set<string>> {\n const result = new Map<string, Set<string>>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.staticIterationTables,\n );\n\n if (summary) result.set(match[1], summary);\n }\n\n return result;\n}\n\nfunction nonReactHookImports(context: RuleContext): Set<string> {\n const result = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match || !/^use[A-Z0-9_]/.test(match[1])) continue;\n\n const kind = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.reactHookModules,\n );\n\n if (kind === false) result.add(match[1]);\n }\n\n return result;\n}\n\nfunction conditionalHookModeImports(\n context: RuleContext,\n): Map<string, ConditionalHookModeSummary> {\n const result = new Map<string, ConditionalHookModeSummary>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.conditionalHookModes,\n );\n\n if (summary) result.set(match[1], summary);\n }\n\n return result;\n}\n\nfunction currentConditionalHookMode(\n context: RuleContext,\n): ConditionalHookModeSummary | null {\n for (const key of moduleKeys(context.relativePath)) {\n const summary = context.project.conditionalHookModes.get(key);\n\n if (summary) return summary;\n }\n\n return null;\n}\n\nfunction controlledParameterIndex(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n summary: ConditionalHookModeSummary,\n node: SyntaxNode,\n): number | null {\n if (controlFlow.type !== \"if_statement\") return null;\n\n const conditions = guardConditions(controlFlow, node);\n if (conditions.length === 0) return null;\n\n const variables = { ...summary.conditionVariables };\n // Keep a direct parameter fallback for older or externally constructed summaries\n for (const index of summary.parameterIndexes) {\n const name = fn.parameters[index];\n if (name) variables[name] ??= index;\n }\n\n const indexes = conditions.map((condition) => {\n for (const [name, index] of Object.entries(variables)) {\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const patterns = [\n new RegExp(`^(?:not\\\\s+)?${escaped}\\\\s*$`),\n new RegExp(`^${escaped}\\\\s*(?:==|~=)\\\\s*(?:true|false|nil)\\\\s*$`),\n new RegExp(`^(?:true|false|nil)\\\\s*(?:==|~=)\\\\s*${escaped}\\\\s*$`),\n ];\n if (patterns.some((pattern) => pattern.test(condition.text.trim())))\n return index;\n }\n return null;\n });\n\n return indexes.every((index) => index !== null) ? indexes[0] : null;\n}\n\nfunction dynamicHookModeFixPreview(\n hookName: string,\n argumentText: string,\n): FixPreview {\n return {\n kind: \"pattern\",\n before: `local value = ${hookName}(${argumentText})`,\n after: `local value = ${hookName}(${argumentText}) -- keep the hook-topology mode stable for this instance`,\n note: \"A custom hook may choose different internal hooks only when the value controlling that choice stays stable for the lifetime of the component instance.\",\n };\n}\n\nfunction unwrapIteratorExpression(text: string): string {\n let current = text.trim();\n const wrapper = current.match(/^(?:pairs|ipairs)\\s*\\((.*)\\)$/s);\n\n if (wrapper) current = wrapper[1].trim();\n\n return current;\n}\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n\n const assignment = node.namedChildren.find(\n (child) => child.type === \"assignment_statement\",\n );\n\n const expressionList = assignment?.namedChildren.find(\n (child) => child.type === \"expression_list\",\n );\n\n return expressionList?.namedChildren ?? [];\n}\n\nfunction isEmptyTable(node: SyntaxNode | undefined): boolean {\n return Boolean(\n node?.type === \"table_constructor\" &&\n node.namedChildren.every((child) => child.type !== \"field\"),\n );\n}\n\nfunction tableConstructorHasStableArity(node: SyntaxNode): boolean {\n if (node.type !== \"table_constructor\") return false;\n\n const fields = node.namedChildren.filter((child) => child.type === \"field\");\n\n if (fields.length === 0) return true;\n\n // Luau varargs, and a function call in the final list field, can contribute a\n // render-varying number of array entries. `{...}` is the real-world Jecs case\n // that motivated this distinction.\n if (\n fields.some((field) =>\n [...field.namedChildren].some(\n (child) => child.type === \"vararg_expression\",\n ),\n )\n )\n return false;\n\n const last = fields.at(-1);\n\n return !last?.namedChildren.some((child) => child.type === \"function_call\");\n}\n\nfunction stableShapeVariablesByFunction(\n context: RuleContext,\n): Map<number, Set<string>> {\n const stable = new Map<number, Set<string>>();\n const functionsByName = new Map<string, FunctionInfo>();\n\n for (const fn of context.model.functions) {\n stable.set(nodeKey(fn.node), new Set<string>());\n\n if (fn.name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(fn.name))\n functionsByName.set(fn.name, fn);\n }\n\n const namesFor = (fn: FunctionInfo): Set<string> => {\n const key = nodeKey(fn.node);\n const names = stable.get(key) ?? new Set<string>();\n stable.set(key, names);\n\n return names;\n };\n\n // A table constructed in the function has a fixed literal shape. More importantly for\n // React code, an empty-dependency useMemo explicitly captures one value for the entire\n // component lifetime. If that captured value is later iterated to create hooks, the\n // iteration source itself does not change between renders unless user code mutates it.\n for (const declaration of context.walk(context.root)) {\n if (declaration.type !== \"variable_declaration\") continue;\n\n const owner = context.nearestFunction(declaration);\n\n if (!owner) continue;\n\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n\n if (!expression) continue;\n\n if (\n expression.type === \"table_constructor\" &&\n tableConstructorHasStableArity(expression)\n ) {\n namesFor(owner).add(names[index]);\n continue;\n }\n\n if (expression.type !== \"function_call\") continue;\n\n const rawPath = context.getCallPath(expression);\n\n if (!rawPath || context.resolveCallPath(rawPath) !== \"React.useMemo\")\n continue;\n\n const args = context.callArguments(expression);\n\n if (isEmptyTable(args[1])) namesFor(owner).add(names[index]);\n }\n }\n\n const callsByLocalFunction = new Map<string, SyntaxNode[]>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n\n if (!rawPath || !functionsByName.has(rawPath)) continue;\n\n const calls = callsByLocalFunction.get(rawPath) ?? [];\n calls.push(call);\n callsByLocalFunction.set(rawPath, calls);\n }\n\n const expressionIsStableShape = (\n expression: SyntaxNode | undefined,\n owner: FunctionInfo | null,\n ): boolean => {\n if (!expression) return false;\n\n if (expression.type === \"table_constructor\")\n return tableConstructorHasStableArity(expression);\n\n const text = expression.text.trim();\n\n if (!owner || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(text)) return false;\n\n return namesFor(owner).has(text);\n };\n\n let changed = true;\n\n while (changed) {\n changed = false;\n\n // Preserve stable-shape aliases such as `local copy = capturedDefaults`.\n for (const declaration of context.walk(context.root)) {\n if (declaration.type !== \"variable_declaration\") continue;\n\n const owner = context.nearestFunction(declaration);\n\n if (!owner) continue;\n\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n\n if (!expressionIsStableShape(expression, owner)) continue;\n\n const target = names[index];\n const ownerNames = namesFor(owner);\n\n if (!ownerNames.has(target)) {\n ownerNames.add(target);\n changed = true;\n }\n }\n }\n\n // Propagate the guarantee through local helpers only when every known call to that\n // helper supplies a stable-shape argument for the parameter. This is what makes a\n // pattern such as `getStateContainer(capturedDefaults)` safe without exempting all\n // parameter-driven loops.\n for (const [name, fn] of functionsByName) {\n const calls = callsByLocalFunction.get(name) ?? [];\n\n if (calls.length === 0) continue;\n\n for (let index = 0; index < fn.parameters.length; index += 1) {\n const allStable = calls.every((call) => {\n const caller = context.nearestFunction(call);\n\n return expressionIsStableShape(\n context.callArguments(call)[index],\n caller,\n );\n });\n\n if (!allStable) continue;\n\n const parameter = fn.parameters[index];\n\n if (!parameter) continue;\n\n const fnNames = namesFor(fn);\n\n if (!fnNames.has(parameter)) {\n fnNames.add(parameter);\n changed = true;\n }\n }\n }\n }\n\n return stable;\n}\n\nfunction moduleInvariantVariables(context: RuleContext): Set<string> {\n const declarations = new Map<string, SyntaxNode>();\n const reassigned = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (\n node.type === \"variable_declaration\" &&\n !context.nearestFunction(node)\n ) {\n for (const name of declarationNames(node)) declarations.set(name, node);\n\n continue;\n }\n\n if (\n node.type !== \"assignment_statement\" ||\n node.parent?.type === \"variable_declaration\"\n )\n continue;\n\n const variableList = node.namedChildren.find(\n (child) => child.type === \"variable_list\",\n );\n\n for (const target of variableList?.namedChildren ?? []) {\n if (target.type === \"identifier\") reassigned.add(target.text);\n }\n }\n\n return new Set(\n [...declarations.keys()].filter((name) => !reassigned.has(name)),\n );\n}\n\nfunction staticModuleTables(context: RuleContext): Set<string> {\n const candidates = new Set<string>();\n const declarations = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\" || context.nearestFunction(node))\n continue;\n\n const names = declarationNames(node);\n const expressions = declarationExpressions(node);\n names.forEach((name, index) => {\n if (declarations.has(name)) {\n candidates.delete(name);\n return;\n }\n declarations.add(name);\n const expression = expressions[index];\n if (expression && tableConstructorHasStableArity(expression))\n candidates.add(name);\n });\n }\n\n // Only accept private literals whose uses cannot mutate or leak the table.\n // Aliases, writes, unknown calls, and shadowing conservatively invalidate it.\n for (const node of context.walk(context.root)) {\n if (node.type !== \"identifier\" || !candidates.has(node.text)) continue;\n const parent = node.parent;\n if (\n parent?.type === \"variable_list\" &&\n parent.parent?.parent?.type === \"variable_declaration\" &&\n !context.nearestFunction(node)\n ) continue;\n if (parent?.type === \"unary_expression\" && parent.text.trim().startsWith(\"#\"))\n continue;\n if (\n parent?.type === \"expression_list\" &&\n parent.parent?.type === \"for_generic_clause\"\n ) continue;\n if (parent?.type === \"arguments\" && parent.namedChildren.length === 1) {\n const call = parent.parent;\n const path = call && context.getCallPath(call);\n if (path === \"pairs\" || path === \"ipairs\") continue;\n }\n candidates.delete(node.text);\n }\n\n return candidates;\n}\n\nfunction containsNode(container: SyntaxNode, node: SyntaxNode): boolean {\n return (\n node.startIndex >= container.startIndex &&\n node.endIndex <= container.endIndex\n );\n}\n\nfunction branchContaining(\n controlFlow: SyntaxNode,\n node: SyntaxNode,\n): SyntaxNode | null {\n return controlFlow.namedChildren.find((child) => containsNode(child, node)) ?? null;\n}\n\nfunction guardConditions(controlFlow: SyntaxNode, node: SyntaxNode): SyntaxNode[] {\n const condition = controlFlow.namedChildren[0];\n if (!condition) return [];\n\n if (controlFlow.type !== \"if_statement\" && controlFlow.type !== \"if_expression\")\n return [condition];\n\n if (containsNode(condition, node)) return [];\n\n const conditions = [condition];\n for (const clause of controlFlow.namedChildren.slice(1)) {\n if (clause.startIndex > node.startIndex) break;\n if (clause.type !== \"elseif_statement\" && clause.type !== \"elseif_clause\")\n continue;\n const clauseCondition = clause.namedChildren[0];\n if (clauseCondition && !containsNode(clauseCondition, node))\n conditions.push(clauseCondition);\n }\n return conditions;\n}\n\nfunction conditionallyContains(controlFlow: SyntaxNode, node: SyntaxNode): boolean {\n if (\n controlFlow.type === \"if_statement\" ||\n controlFlow.type === \"if_expression\"\n )\n return guardConditions(controlFlow, node).length > 0;\n\n if (controlFlow.type === \"for_statement\")\n return controlFlow.namedChildren.some(\n (child) => child.type === \"block\" && containsNode(child, node),\n );\n\n if (CONDITIONAL_TYPES.has(controlFlow.type)) return true;\n\n if (\n controlFlow.type !== \"binary_expression\" ||\n !controlFlow.children.some(\n (child) => child.type === \"and\" || child.type === \"or\",\n )\n )\n return false;\n\n const right =\n controlFlow.childForFieldName(\"right\") ?? controlFlow.namedChildren[1];\n\n return Boolean(right && containsNode(right, node));\n}\n\nfunction simpleConditionRoot(condition: SyntaxNode): string | null {\n const text = condition.text.trim();\n\n const match = text.match(\n /^(?:not\\s+)?([A-Za-z_][A-Za-z0-9_]*)(?:\\s*(?:==|~=)\\s*(?:true|false|nil))?$/,\n );\n\n return match?.[1] ?? null;\n}\n\nconst unstableLocalNamesCache = new WeakMap<FunctionInfo, Set<string>>();\n\nfunction unstableLocalNames(fn: FunctionInfo, context: RuleContext): Set<string> {\n const cached = unstableLocalNamesCache.get(fn);\n if (cached) return cached;\n\n // The model stores stability by name, so redeclarations and writes invalidate that proof\n const declared = new Set<string>();\n const unstable = new Set<string>();\n for (const node of context.walk(fn.node)) {\n if (\n node.type === \"variable_declaration\" &&\n context.nearestFunction(node) === fn\n ) {\n for (const name of declarationNames(node)) {\n if (declared.has(name)) unstable.add(name);\n declared.add(name);\n }\n }\n if (\n node.type !== \"assignment_statement\" ||\n node.parent?.type === \"variable_declaration\"\n )\n continue;\n const variables = node.namedChildren.find(\n (child) => child.type === \"variable_list\",\n );\n for (const target of variables?.namedChildren ?? []) {\n if (target.type === \"identifier\") unstable.add(target.text);\n }\n }\n unstableLocalNamesCache.set(fn, unstable);\n return unstable;\n}\n\nfunction moduleNameIsUnshadowed(\n name: string,\n node: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): boolean {\n let owner: FunctionInfo | null = fn;\n while (owner) {\n if (\n owner.parameters.includes(name) ||\n isBindingShadowedBetween(node, owner, name)\n )\n return false;\n owner = context.nearestFunction(owner.node);\n }\n return true;\n}\n\nfunction conditionIsProvablyInvariant(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n moduleInvariants: Set<string>,\n node: SyntaxNode = controlFlow,\n): boolean {\n if (![\"if_statement\", \"if_expression\", \"binary_expression\"].includes(controlFlow.type))\n return false;\n\n const conditions = guardConditions(controlFlow, node);\n if (conditions.length === 0) return false;\n\n return conditions.every((condition) => {\n if ([\"true\", \"false\", \"nil\", \"number\", \"string\"].includes(condition.type))\n return true;\n\n const root = simpleConditionRoot(condition);\n\n if (!root) return false;\n\n if (moduleInvariants.has(root) && moduleNameIsUnshadowed(root, condition, fn, context))\n return true;\n\n if (isNameShadowedBetween(condition, fn, root)) return false;\n if (unstableLocalNames(fn, context).has(root)) return false;\n\n return Boolean(\n context.model.stableVariablesByFunction.get(nodeKey(fn.node))?.has(root),\n );\n });\n}\n\nfunction branchHookSequence(\n branch: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): string[] | null {\n const hooks: string[] = [];\n\n for (const node of context.walk(branch)) {\n if (node.type !== \"function_call\") continue;\n\n if (context.nearestFunction(node) !== fn) continue;\n\n const rawPath = context.getCallPath(node);\n\n if (!rawPath) continue;\n\n const path = context.resolveCallPath(rawPath);\n\n if (!isHookPath(path)) continue;\n\n // Nested control flow inside a branch needs its own stability proof, so do\n // not call the outer branches equivalent merely because their flattened\n // hook names happen to match.\n const nestedControl = node.id === branch.id\n ? null\n : findAncestorBetween(node, branch, (ancestor) =>\n conditionallyContains(ancestor, node),\n );\n\n if (nestedControl || conditionallyContains(branch, node)) return null;\n\n hooks.push(path);\n }\n\n return hooks;\n}\n\nfunction ifBranchesHaveEquivalentBuiltInTopology(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): boolean {\n const isStatement = controlFlow.type === \"if_statement\";\n if (!isStatement && controlFlow.type !== \"if_expression\")\n return false;\n\n const firstBranch = isStatement\n ? controlFlow.namedChildren.find((child) => child.type === \"block\")\n : controlFlow.namedChildren[1];\n const elseClause = controlFlow.namedChildren.find(\n (child) => child.type === \"else_statement\" || child.type === \"else_clause\",\n );\n const lastBranch = isStatement\n ? elseClause?.namedChildren.find((child) => child.type === \"block\")\n : elseClause?.namedChildren[0];\n if (!firstBranch || !lastBranch) return false;\n\n const branches = [firstBranch];\n for (const clause of controlFlow.namedChildren) {\n if (clause.type !== \"elseif_statement\" && clause.type !== \"elseif_clause\")\n continue;\n const condition = clause.namedChildren[0];\n if (!condition) return false;\n const conditionHooks = branchHookSequence(condition, fn, context);\n if (!conditionHooks || conditionHooks.length > 0) return false;\n const branch = isStatement\n ? clause.namedChildren.find((child) => child.type === \"block\")\n : clause.namedChildren[1];\n if (!branch) return false;\n branches.push(branch);\n }\n branches.push(lastBranch);\n\n const sequences = branches.map((branch) =>\n branchHookSequence(branch, fn, context),\n );\n const first = sequences[0];\n if (!first) return false;\n\n if (\n !sequences.every((sequence) =>\n sequence &&\n sequence.length === first.length &&\n sequence.every((path, index) => path === first[index]),\n )\n )\n return false;\n\n // Built-in React hooks have topology that is independent of their arguments.\n // For custom hooks, identical call names can still select different internal\n // hooks based on different arguments, so keep those conservative.\n return first.every((path) => path.startsWith(\"React.\"));\n}\n\nfunction stateModeStability(\n name: string,\n owner: FunctionInfo,\n context: RuleContext,\n): HookModeStability | null {\n const binding = context.model.stateBindings.find(\n (candidate) => candidate.owner === owner && candidate.valueName === name,\n );\n\n if (!binding || !owner.body) return null;\n\n const initializerText = binding.initializer?.text.trim() ?? \"nil\";\n\n const stableLiteral =\n /^(?:true|false|nil|-?\\d+(?:\\.\\d+)?|\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')$/;\n\n let sawIndirectSetterReference = false;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type === \"function_call\" &&\n context.getCallPath(node) === binding.setterName\n ) {\n const argument = context.callArguments(node)[0];\n\n if (\n !argument ||\n !stableLiteral.test(initializerText) ||\n argument.text.trim() !== initializerText\n )\n return \"unstable\";\n\n continue;\n }\n\n if (node.type !== \"identifier\" || node.text !== binding.setterName)\n continue;\n\n if (\n node.startIndex >= binding.declaration.startIndex &&\n node.endIndex <= binding.declaration.endIndex\n )\n continue;\n\n if (node.parent?.type === \"function_call\") continue;\n\n sawIndirectSetterReference = true;\n }\n\n if (sawIndirectSetterReference) return \"unknown\";\n\n return \"stable\";\n}\n\nfunction localAliasExpression(\n name: string,\n owner: FunctionInfo,\n context: RuleContext,\n): SyntaxNode | null {\n if (!owner.body) return null;\n\n let result: SyntaxNode | null = null;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type !== \"variable_declaration\" ||\n context.nearestFunction(node) !== owner\n )\n continue;\n\n const names = declarationNames(node);\n const index = names.indexOf(name);\n\n if (index < 0) continue;\n\n const expressions = declarationExpressions(node);\n const expression = expressions[index] ?? expressions[0] ?? null;\n\n if (result) return null;\n\n result = expression;\n }\n\n return result;\n}\n\nfunction modeValueStability(\n node: SyntaxNode | undefined,\n owner: FunctionInfo,\n context: RuleContext,\n moduleInvariants: Set<string>,\n depth = 0,\n): HookModeStability {\n if (!node) return \"stable\";\n\n if (depth > 4) return \"unknown\";\n\n const text = node.text.trim();\n\n if ([\"true\", \"false\", \"nil\"].includes(text)) return \"stable\";\n\n if (\n [\"number\", \"string\", \"string_content\", \"function_definition\"].includes(\n node.type,\n )\n )\n return \"stable\";\n\n const root = text.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n\n if (!root) return \"unknown\";\n\n const stateStability = stateModeStability(root, owner, context);\n\n if (stateStability) return stateStability;\n\n if (moduleInvariants.has(root)) return \"stable\";\n\n if (\n context.model.stableVariablesByFunction.get(nodeKey(owner.node))?.has(root)\n )\n return \"stable\";\n\n if (text === root) {\n const alias = localAliasExpression(root, owner, context);\n\n if (alias && alias.text.trim() !== root)\n return modeValueStability(\n alias,\n owner,\n context,\n moduleInvariants,\n depth + 1,\n );\n }\n\n return \"unknown\";\n}\n\nfunction tableFieldValue(\n table: SyntaxNode | undefined,\n accessPath: string,\n): SyntaxNode | undefined {\n if (!table || accessPath === \"\") return table;\n\n if (table.type !== \"table_constructor\") return undefined;\n\n let current: SyntaxNode | undefined = table;\n\n for (const part of accessPath.split(\".\")) {\n if (!current || current.type !== \"table_constructor\") return undefined;\n\n const field: SyntaxNode | undefined = current.namedChildren.find(\n (child) => {\n if (child.type !== \"field\") return false;\n\n return (\n child.namedChildren[0]?.type === \"identifier\" &&\n child.namedChildren[0]?.text === part\n );\n },\n );\n\n if (!field) return undefined;\n\n current = field.namedChildren[1];\n }\n\n return current;\n}\n\nfunction controlledAccessPaths(\n summary: ConditionalHookModeSummary,\n parameterIndex: number,\n): string[] {\n const paths = new Set<string>();\n\n for (const [conditionName, index] of Object.entries(\n summary.conditionVariables,\n )) {\n if (index !== parameterIndex) continue;\n\n paths.add(summary.conditionAccessPaths?.[conditionName] ?? \"\");\n }\n\n if (paths.size === 0) paths.add(\"\");\n\n return [...paths];\n}\n\nfunction loopIterationIsProvablyStable(\n loop: SyntaxNode,\n imports: Map<string, Set<string>>,\n owner: FunctionInfo,\n stableShapes: Map<number, Set<string>>,\n moduleTables: Set<string>,\n context: RuleContext,\n moduleInvariants: Set<string>,\n): boolean {\n // A fixed collection does not fix hook count when iterations can exit or skip hooks\n for (const node of context.walk(loop)) {\n if (\n ![\"break_statement\", \"continue_statement\", \"return_statement\"].includes(\n node.type,\n )\n )\n continue;\n if (context.nearestFunction(node) !== owner) continue;\n\n if (node.type !== \"return_statement\") {\n const targetLoop = findAncestorBetween(node, owner.node, (ancestor) =>\n [\"for_statement\", \"while_statement\", \"repeat_statement\"].includes(ancestor.type),\n );\n if (targetLoop?.id !== loop.id) continue;\n }\n\n const dynamicGuard = findAncestorBetween(node, loop, (ancestor) =>\n conditionallyContains(ancestor, node) &&\n !conditionIsProvablyInvariant(ancestor, owner, context, moduleInvariants, node),\n );\n if (dynamicGuard) return false;\n }\n\n const numeric = loop.namedChildren.find(\n (child) => child.type === \"for_numeric_clause\",\n );\n\n if (numeric) {\n const text = numeric.text;\n\n const bounds = text.match(\n /^\\s*[A-Za-z_][A-Za-z0-9_]*\\s*=\\s*([^,]+)\\s*,\\s*([^,]+)(?:\\s*,\\s*([^,]+))?\\s*$/s,\n );\n\n if (\n bounds &&\n bounds\n .slice(1)\n .filter(Boolean)\n .every((value) => /^-?\\d+(?:\\.\\d+)?$/.test(value!.trim()))\n )\n return true;\n }\n\n const clause = loop.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n const match = clause?.text.match(/\\bin\\s+(.+)$/s);\n\n if (!match) return false;\n\n const expression = unwrapIteratorExpression(match[1]);\n\n const path = expression.match(\n /^([A-Za-z_][A-Za-z0-9_]*)(?:\\.([A-Za-z_][A-Za-z0-9_.]*))?$/,\n );\n\n if (!path) return false;\n\n if (!path[2] && stableShapes.get(nodeKey(owner.node))?.has(path[1]))\n return true;\n\n if (!path[2] && moduleTables.has(path[1])) return true;\n\n const fields = imports.get(path[1]);\n\n if (!fields) return false;\n\n const propertyPath = path[2] ?? \"\";\n\n return fields.has(propertyPath);\n}\n\nfunction functionParameterTypes(fn: FunctionInfo): Map<string, string> {\n if (!fn.body) return new Map();\n\n const headerLength = Math.max(0, fn.body.startIndex - fn.node.startIndex);\n const header = fn.node.text.slice(0, headerLength);\n const result = new Map<string, string>();\n\n for (const match of header.matchAll(\n /\\b([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([^,\\n)]+)/g,\n )) {\n result.set(match[1], match[2].trim());\n }\n\n return result;\n}\n\nfunction isNonOptionalParameterType(typeText: string | undefined): boolean {\n if (!typeText) return false;\n\n return !typeText.includes(\"?\") && !/(?:^|[| ])nil(?:$|[| ])/i.test(typeText);\n}\n\nfunction impossibleNilGuardReturn(\n node: SyntaxNode,\n fn: FunctionInfo,\n parameterTypes: Map<string, string>,\n): boolean {\n let current = node.parent;\n\n while (current && current !== fn.node) {\n if (current.type === \"if_statement\") {\n const header = (current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\").trim();\n\n const patterns = [\n /\\bif\\s+not\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*$/,\n /\\bif\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*==\\s*nil\\s*$/,\n /\\bif\\s+nil\\s*==\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*$/,\n ];\n\n for (const pattern of patterns) {\n const match = header.match(pattern);\n\n if (match && isNonOptionalParameterType(parameterTypes.get(match[1])))\n return true;\n }\n\n return false;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction reachableReturnsBefore(\n call: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n cache: Map<number, SyntaxNode[]>,\n): SyntaxNode[] {\n if (!fn.body) return [];\n\n const key = nodeKey(fn.node);\n let returns = cache.get(key);\n\n if (!returns) {\n const parameterTypes = functionParameterTypes(fn);\n\n returns = [...context.walk(fn.body)].filter(\n (node) =>\n node.type === \"return_statement\" &&\n !isNestedInsideFunction(node, fn.node) &&\n !impossibleNilGuardReturn(node, fn, parameterTypes),\n );\n\n cache.set(key, returns);\n }\n\n return returns.filter((node) => {\n if (node.endIndex > call.startIndex) return false;\n\n // Returns from sibling branches cannot precede this hook on the same execution path\n return !findAncestorBetween(node, fn.node, (ancestor) => {\n if (ancestor.type !== \"if_statement\") return false;\n const returnBranch = branchContaining(ancestor, node);\n const callBranch = branchContaining(ancestor, call);\n return Boolean(returnBranch && callBranch && returnBranch.id !== callBranch.id);\n });\n });\n}\n\nfunction returnIsControlledByStableTopologyMode(\n node: SyntaxNode,\n fn: FunctionInfo,\n summary: ConditionalHookModeSummary | null,\n context: RuleContext,\n moduleInvariants: Set<string>,\n): boolean {\n let current = node.parent;\n let sawStableGuard = false;\n\n while (current && current !== fn.node) {\n if ([\"for_statement\", \"while_statement\", \"repeat_statement\"].includes(current.type))\n return false;\n\n if (current.type === \"if_statement\" || current.type === \"if_expression\") {\n if (summary && controlledParameterIndex(current, fn, summary, node) !== null)\n sawStableGuard = true;\n else if (\n conditionIsProvablyInvariant(current, fn, context, moduleInvariants, node)\n )\n sawStableGuard = true;\n else return false;\n }\n\n current = current.parent;\n }\n\n return sawStableGuard;\n}\n\nfunction conditionalFixPreview(kind: string, hookName: string): FixPreview {\n if (kind === \"short-circuit expression\") {\n return {\n kind: \"pattern\",\n before: `local result = enabled and renderChild(${hookName}())`,\n after: `local value = ${hookName}()\\nlocal result = enabled and renderChild(value)`,\n note: \"Call the hook before the short-circuit expression, then branch on its result\",\n };\n }\n\n if (hookName === \"React.useEffect\" && kind === \"if statement\") {\n return {\n kind: \"pattern\",\n before: `if enabled then\\n\\tReact.useEffect(function()\\n\\t\\tperformWork()\\n\\tend, {})\\nend`,\n after: `React.useEffect(function()\\n\\tif enabled then\\n\\t\\tperformWork()\\n\\tend\\nend, { enabled })`,\n note: \"Call the hook every render and put the condition inside its callback.\",\n };\n }\n\n if (kind === \"for statement\") {\n return {\n kind: \"pattern\",\n before: `for _, item in items do\\n\\tlocal value = ${hookName}(item)\\nend`,\n after: `local function Item(props)\\n\\tlocal value = ${hookName}(props.item)\\n\\treturn renderItem(value)\\nend\\n\\nfor _, item in items do\\n\\tchildren[item.id] = React.createElement(Item, {\\n\\t\\titem = item,\\n\\t})\\nend`,\n note: \"When collection size can change, move the hook into a child component so each component instance owns a fixed hook sequence.\",\n };\n }\n\n if (kind === \"while statement\" || kind === \"repeat statement\") {\n return {\n kind: \"pattern\",\n before: `while condition do\\n\\tlocal value = ${hookName}()\\nend`,\n after: `local value = ${hookName}()\\n\\nwhile condition do\\n\\t-- use value without creating another hook call\\nend`,\n note: \"Hook count must not depend on how many times a runtime loop executes.\",\n };\n }\n\n return {\n kind: \"pattern\",\n before: `if enabled then\\n\\tlocal value = ${hookName}()\\nend`,\n after: `local value = ${hookName}()\\n\\nif enabled then\\n\\t-- use value here\\nend`,\n note: \"Keep the hook call unconditional, then branch on its result.\",\n };\n}\n\nfunction earlyReturnFixPreview(hookName: string): FixPreview {\n return {\n kind: \"pattern\",\n before: `if not ready then\\n\\treturn nil\\nend\\n\\nlocal value = ${hookName}()`,\n after: `local value = ${hookName}()\\n\\nif not ready then\\n\\treturn nil\\nend`,\n note: \"Call hooks before any reachable early return so every render executes the same hook sequence.\",\n };\n}\n\nfunction callbackFunctions(context: RuleContext): Set<number> {\n const callbacks = new Set<number>();\n const addCallback = (expression: SyntaxNode) => {\n const fn = resolveLocalFunction(context, expression);\n if (fn) callbacks.add(fn.node.id);\n };\n\n for (const call of context.findCalls()) {\n const path = reactApiPath(context, call);\n const args = context.callArguments(call);\n for (const [index, argument] of args.entries()) {\n if (\n index === 0 &&\n [\"React.memo\", \"React.forwardRef\", \"React.createElement\"].includes(\n path ?? \"\",\n )\n )\n continue;\n if (\n path?.startsWith(\"React.use\") ||\n path === \"React.memo\" ||\n unwrapExpression(argument).type === \"function_definition\"\n )\n addCallback(argument);\n }\n\n // Custom component props may carry component types rather than callbacks\n if (\n path !== \"React.createElement\" ||\n args[0]?.type !== \"string\" ||\n args[1]?.type !== \"table_constructor\"\n )\n continue;\n for (const field of args[1].namedChildren) {\n if (field.type !== \"field\") continue;\n const value = field.namedChildren.at(-1);\n if (value) addCallback(value);\n }\n }\n return callbacks;\n}\n\nexport const rulesOfHooks: RuleDefinition = {\n id: \"react-luau/rules-of-hooks\",\n category: \"Hooks\",\n severity: \"error\",\n\n description:\n \"Hooks must run in the same order on every render of a React component or custom hook.\",\n\n guidance: {\n summary: \"Hook calls must stay in the same order between renders.\",\n help: \"Call hooks at the top level of a component or custom hook, before conditional returns.\",\n },\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n if (!context.model.isReactFile) return diagnostics;\n\n const staticImports = staticIterationImports(context);\n const stableShapes = stableShapeVariablesByFunction(context);\n const moduleTables = staticModuleTables(context);\n const moduleInvariants = moduleInvariantVariables(context);\n const modeImports = conditionalHookModeImports(context);\n const ignoredHookImports = nonReactHookImports(context);\n const currentModeSummary = currentConditionalHookMode(context);\n const callbacks = callbackFunctions(context);\n const reachableReturns = new Map<number, SyntaxNode[]>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n\n if (!rawPath) continue;\n\n if (ignoredHookImports.has(rawPath)) continue;\n\n const path = context.resolveCallPath(rawPath);\n\n if (!isHookPath(path)) continue;\n\n const fn = context.nearestFunction(call);\n\n if (\n !fn ||\n (!fn.isComponent && !fn.isHook) ||\n callbacks.has(fn.node.id)\n ) {\n diagnostics.push({\n node: callNameNode(call),\n message: `Hook ${path} is called outside a React component or custom hook`,\n help: \"Move the hook into a component or a custom hook whose name starts with use\",\n\n fixPreview: {\n kind: \"pattern\",\n before: `local value = ${path}()\\n\\nlocal function helper()\\n\\treturn value\\nend`,\n after: `local function useHelper()\\n\\tlocal value = ${path}()\\n\\treturn value\\nend`,\n note: \"Hooks need a React-owned component or custom-hook call stack\",\n },\n });\n\n continue;\n }\n\n const importedMode = modeImports.get(rawPath);\n\n if (importedMode) {\n const args = context.callArguments(call);\n\n const unstableControls = importedMode.parameterIndexes.flatMap(\n (index) =>\n controlledAccessPaths(importedMode, index)\n .map((accessPath) => {\n const argument = args[index];\n const value = tableFieldValue(argument, accessPath);\n\n const stability =\n accessPath !== \"\"\n ? argument?.type === \"table_constructor\"\n ? value\n ? modeValueStability(\n value,\n fn,\n context,\n moduleInvariants,\n )\n : \"stable\"\n : \"unknown\"\n : modeValueStability(\n argument,\n fn,\n context,\n moduleInvariants,\n );\n\n return { index, accessPath, argument, value, stability };\n })\n .filter((control) => control.stability === \"unstable\"),\n );\n\n if (unstableControls.length > 0) {\n const first = unstableControls[0];\n const firstIndex = first.index;\n const argument = first.argument;\n\n const parameterOffset =\n importedMode.parameterIndexes.indexOf(firstIndex);\n\n const baseParameterName =\n importedMode.parameterNames[parameterOffset] ??\n `argument ${firstIndex + 1}`;\n\n const parameterName = first.accessPath\n ? `${baseParameterName}.${first.accessPath}`\n : baseParameterName;\n\n const argumentText =\n first.value?.text.trim() || argument?.text.trim() || \"<omitted>\";\n\n diagnostics.push({\n node: first.value ?? argument ?? callNameNode(call),\n\n highlights: unstableControls\n .map((control) => control.value ?? control.argument)\n .filter((node): node is SyntaxNode => Boolean(node)),\n\n message: `Hook ${rawPath} receives hook-topology mode ${parameterName} from ${argumentText}, which is updated between renders and can make the custom hook execute a different hook sequence.`,\n help: `Keep ${parameterName} stable for this hook instance, or refactor ${rawPath} so it always calls the same hooks regardless of that mode.`,\n fixPreview: dynamicHookModeFixPreview(rawPath, argumentText),\n });\n }\n }\n\n const controlFlow = findAncestorBetween(call, fn.node, (node) => {\n if (!conditionallyContains(node, call)) return false;\n\n if (\n currentModeSummary &&\n controlledParameterIndex(node, fn, currentModeSummary, call) !== null\n )\n return false;\n\n if (\n conditionIsProvablyInvariant(\n node,\n fn,\n context,\n moduleInvariants,\n call,\n )\n )\n return false;\n\n if (ifBranchesHaveEquivalentBuiltInTopology(node, fn, context))\n return false;\n\n if (\n node.type === \"for_statement\" &&\n loopIterationIsProvablyStable(\n node,\n staticImports,\n fn,\n stableShapes,\n moduleTables,\n context,\n moduleInvariants,\n )\n )\n return false;\n\n return true;\n });\n\n if (controlFlow) {\n const kind = controlFlow.type === \"binary_expression\"\n ? \"short-circuit expression\"\n : controlFlow.type.replaceAll(\"_\", \" \");\n\n const loopLike =\n controlFlow.type === \"for_statement\" ||\n controlFlow.type === \"while_statement\" ||\n controlFlow.type === \"repeat_statement\";\n\n diagnostics.push({\n node: callNameNode(call),\n\n message: loopLike\n ? `Hook ${path} is called inside ${kind} whose size or iteration order may change between renders. If that happens, React will see a different hook sequence`\n : `Hook ${path} is called inside ${kind}, so the hook may be skipped on some renders`,\n\n summary: loopLike\n ? `${path} may run a different number of times between renders`\n : `${path} may be skipped on some renders`,\n\n explanation: loopLike\n ? `This ${kind} may change how many times ${path} is called`\n : `This ${kind} can skip ${path} on some renders`,\n\n help: loopLike\n ? \"Keep hook count independent of runtime collection size or loop iterations. A common fix is to render a child component per item and call the hook inside that child\"\n : \"Call the hook unconditionally at the top level, then branch on the returned value\",\n\n fixPreview: conditionalFixPreview(kind, path),\n });\n\n continue;\n }\n\n const earlierReturns = reachableReturnsBefore(\n call,\n fn,\n context,\n reachableReturns,\n );\n\n if (\n earlierReturns.length > 0 &&\n !earlierReturns.every((node) =>\n returnIsControlledByStableTopologyMode(\n node,\n fn,\n currentModeSummary,\n context,\n moduleInvariants,\n ),\n )\n ) {\n diagnostics.push({\n node: callNameNode(call),\n message: `Hook ${path} may run after an earlier reachable return, so some renders can execute fewer hooks.`,\n help: \"Move the hook before reachable early returns so hook order cannot change between renders.\",\n fixPreview: earlyReturnFixPreview(path),\n });\n }\n }\n\n return diagnostics;\n },\n};\n",
41
43
  "import type { SyntaxNode } from \"../syntax\";\r\n\r\nimport type {\r\n DiagnosticInput,\r\n FunctionInfo,\r\n RuleContext,\r\n RuleDefinition,\r\n StateBinding,\r\n} from \"../types\";\r\n\r\nimport { sameNode } from \"../ast/walk\";\r\n\r\nimport {\r\n assignmentTargetNode,\r\n callNameNode,\r\n containsUnshadowedIdentifier,\r\n identifierNode,\r\n isBindingShadowedBetween,\r\n stateBindingsFor,\r\n} from \"./helpers\";\r\n\r\nimport {\r\n mightMutateParameters,\r\n mutatedParameterIndexesForCall,\r\n mutationOriginForExpression,\r\n} from \"./parameter-mutations\";\r\n\r\nconst TRIVIAL_INITIALIZER_PATHS = new Set([\r\n \"tostring\",\r\n \"tonumber\",\r\n \"type\",\r\n \"typeof\",\r\n \"math.abs\",\r\n \"math.ceil\",\r\n \"math.floor\",\r\n \"math.max\",\r\n \"math.min\",\r\n \"math.round\",\r\n \"string.lower\",\r\n \"string.upper\",\r\n \"string.format\",\r\n \"table.pack\",\r\n \"Vector2.new\",\r\n \"Vector3.new\",\r\n \"Vector2int16.new\",\r\n \"Vector3int16.new\",\r\n \"UDim.new\",\r\n \"UDim2.new\",\r\n \"UDim2.fromOffset\",\r\n \"UDim2.fromScale\",\r\n \"CFrame.new\",\r\n \"Color3.new\",\r\n \"Color3.fromRGB\",\r\n \"Color3.fromHSV\",\r\n \"Rect.new\",\r\n \"NumberRange.new\",\r\n \"TweenInfo.new\",\r\n]);\r\n\r\nfunction isTrivialInitializerPath(path: string): boolean {\r\n return (\r\n TRIVIAL_INITIALIZER_PATHS.has(path) || /(?:^|[.:])getValue$/i.test(path)\r\n );\r\n}\r\n\r\nfunction isNestedFunctionFromOwner(\r\n context: RuleContext,\r\n node: SyntaxNode,\r\n owner: FunctionInfo,\r\n): boolean {\r\n const nearest = context.nearestFunction(node);\r\n\r\n return Boolean(nearest && nearest !== owner);\r\n}\r\n\r\nfunction callsSetter(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n setterName: string,\r\n): boolean {\r\n if (!owner.body) return false;\r\n\r\n for (const call of context.walk(owner.body)) {\r\n if (\r\n call.type === \"function_call\" &&\r\n context.getCallPath(call) === setterName\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isIdentifierRead(node: SyntaxNode, name: string): boolean {\r\n if (node.type !== \"identifier\" || node.text !== name) return false;\r\n\r\n const parent = node.parent;\r\n\r\n if (\r\n parent?.type === \"dot_index_expression\" &&\r\n sameNode(parent.childForFieldName(\"field\"), node)\r\n )\r\n return false;\r\n\r\n if (\r\n parent?.type === \"method_index_expression\" &&\r\n sameNode(parent.namedChildren.at(-1), node)\r\n )\r\n return false;\r\n\r\n return true;\r\n}\r\n\r\nfunction renderReachableNestedFunctions(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n): Set<FunctionInfo> {\r\n const reachable = new Set<FunctionInfo>();\r\n\r\n if (!owner.body) return reachable;\r\n\r\n const byName = new Map<string, FunctionInfo>();\r\n\r\n for (const fn of context.model.functions) {\r\n if (!fn.name || fn === owner) continue;\r\n\r\n let current = fn.node.parent;\r\n\r\n while (current) {\r\n const parentInfo = context.model.functionByNode.get(current.id);\r\n\r\n if (parentInfo) {\r\n if (parentInfo === owner) byName.set(fn.name, fn);\r\n\r\n break;\r\n }\r\n\r\n current = current.parent;\r\n }\r\n }\r\n\r\n const pending: FunctionInfo[] = [];\r\n\r\n const addByName = (name: string | undefined) => {\r\n if (!name) return;\r\n\r\n const fn = byName.get(name);\r\n\r\n if (!fn || reachable.has(fn)) return;\r\n\r\n reachable.add(fn);\r\n pending.push(fn);\r\n };\r\n\r\n for (const call of context.walk(owner.body)) {\r\n if (\r\n call.type !== \"function_call\" ||\r\n context.nearestFunction(call) !== owner\r\n )\r\n continue;\r\n\r\n const path = context.getCallPath(call) ?? \"\";\r\n const resolved = context.resolveCallPath(path);\r\n\r\n if (resolved === \"React.createElement\")\r\n addByName(context.callArguments(call)[0]?.text.trim());\r\n else addByName(path);\r\n }\r\n\r\n while (pending.length > 0) {\r\n const fn = pending.pop()!;\r\n\r\n if (!fn.body) continue;\r\n\r\n for (const call of context.walk(fn.body)) {\r\n if (call.type !== \"function_call\" || context.nearestFunction(call) !== fn)\r\n continue;\r\n\r\n const path = context.getCallPath(call) ?? \"\";\r\n const resolved = context.resolveCallPath(path);\r\n\r\n if (resolved === \"React.createElement\")\r\n addByName(context.callArguments(call)[0]?.text.trim());\r\n else addByName(path);\r\n }\r\n }\r\n\r\n return reachable;\r\n}\r\n\r\nfunction directlyReadsValue(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n binding: StateBinding,\r\n): boolean {\r\n if (!owner.body) return false;\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (!isIdentifierRead(node, binding.valueName)) continue;\r\n\r\n if (\r\n node.startIndex >= binding.declaration.startIndex &&\r\n node.endIndex <= binding.declaration.endIndex\r\n )\r\n continue;\r\n\r\n if (isNestedFunctionFromOwner(context, node, owner)) continue;\r\n\r\n if (\r\n isBindingShadowedBetween(\r\n node,\r\n owner,\r\n binding.valueName,\r\n binding.declaration,\r\n )\r\n )\r\n continue;\r\n\r\n return true;\r\n }\r\n\r\n for (const fn of renderReachableNestedFunctions(context, owner)) {\r\n if (!fn.body) continue;\r\n\r\n for (const node of context.walk(fn.body)) {\r\n if (\r\n isIdentifierRead(node, binding.valueName) &&\r\n !isBindingShadowedBetween(\r\n node,\r\n owner,\r\n binding.valueName,\r\n binding.declaration,\r\n )\r\n )\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isPlainTableState(\r\n binding: StateBinding,\r\n context: RuleContext,\r\n): boolean {\r\n const initializer = binding.initializer;\r\n\r\n if (!initializer) return true;\r\n\r\n if (initializer.type === \"table_constructor\") return true;\r\n\r\n if (initializer.type !== \"function_call\") return false;\r\n\r\n const path = context.getCallPath(initializer) ?? \"\";\r\n\r\n return (\r\n path === \"table.clone\" || path === \"table.create\" || path === \"table.pack\"\r\n );\r\n}\r\n\r\ntype CallbackLifetime =\r\n \"long-lived\" | \"custom-hook\" | \"render-handler\" | \"unknown\";\r\n\r\nfunction callbackLifetime(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n owner: FunctionInfo,\r\n): CallbackLifetime {\r\n const callback = context.nearestFunction(call);\r\n\r\n if (!callback || callback === owner) return \"unknown\";\r\n\r\n let current: SyntaxNode | null = callback.node;\r\n\r\n while (\r\n current &&\r\n current.startIndex >= owner.node.startIndex &&\r\n current.endIndex <= owner.node.endIndex\r\n ) {\r\n if (current.type === \"function_call\") {\r\n const path = context.resolveCallPath(context.getCallPath(current) ?? \"\");\r\n\r\n if (\r\n path === \"React.useEffect\" ||\r\n path === \"React.useLayoutEffect\" ||\r\n path === \"task.spawn\" ||\r\n path === \"task.defer\" ||\r\n path === \"task.delay\" ||\r\n /:Connect$/.test(path) ||\r\n /BindToRenderStep$/.test(path) ||\r\n /:BindAction(?:AtPriority)?$/.test(path) ||\r\n /:BindActivate$/.test(path)\r\n ) {\r\n return \"long-lived\";\r\n }\r\n\r\n if (path === \"React.createElement\") return \"render-handler\";\r\n\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n\r\n if (/^use[A-Z0-9_]/.test(final)) return \"custom-hook\";\r\n }\r\n\r\n if (\r\n current.type === \"function_definition\" ||\r\n current.type === \"function_declaration\"\r\n ) {\r\n if (\r\n current.startIndex !== callback.node.startIndex ||\r\n current.endIndex !== callback.node.endIndex\r\n )\r\n break;\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return \"unknown\";\r\n}\r\n\r\nexport const rerenderFunctionalSetstate: RuleDefinition = {\r\n id: \"react-luau/rerender-functional-setstate\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Use the functional state setter form when deferred callbacks update from the previous state value.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const binding of context.model.stateBindings) {\r\n const owner = binding.owner;\r\n\r\n if (!owner?.body) continue;\r\n\r\n for (const call of context.walk(owner.body)) {\r\n if (\r\n call.type !== \"function_call\" ||\r\n context.getCallPath(call) !== binding.setterName\r\n )\r\n continue;\r\n\r\n if (!isNestedFunctionFromOwner(context, call, owner)) continue;\r\n\r\n const argument = context.callArguments(call)[0];\r\n\r\n if (!argument || argument.type === \"function_definition\") continue;\r\n\r\n if (\r\n !containsUnshadowedIdentifier(\r\n argument,\r\n binding.valueName,\r\n context,\r\n owner,\r\n )\r\n )\r\n continue;\r\n\r\n const lifetime = callbackLifetime(context, call, owner);\r\n\r\n if (lifetime === \"render-handler\" || lifetime === \"unknown\") continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n severity: lifetime === \"custom-hook\" ? \"suggestion\" : \"warning\",\r\n message: `${binding.setterName}() reads ${binding.valueName} from a captured callback value.`,\r\n\r\n help:\r\n lifetime === \"custom-hook\"\r\n ? `Use ${binding.setterName}(function(previous) return ... end) if the custom hook can retain this callback across renders.`\r\n : `Use ${binding.setterName}(function(previous) return ... end) when the next value depends on previous state.`,\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderLazyStateInit: RuleDefinition = {\r\n id: \"react-luau/rerender-lazy-state-init\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Expensive useState initializers should use React's lazy initializer form.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (path !== \"React.useState\") continue;\r\n\r\n const initializer = context.callArguments(call)[0];\r\n\r\n if (!initializer || initializer.type === \"function_definition\") continue;\r\n\r\n const eagerCall = [...context.walk(initializer)].find(\r\n (node) => node.type === \"function_call\",\r\n );\r\n\r\n if (!eagerCall) continue;\r\n\r\n const eagerPath = context.resolveCallPath(\r\n context.getCallPath(eagerCall) ?? \"\",\r\n );\r\n\r\n if (\r\n isTrivialInitializerPath(eagerPath) ||\r\n /^React\\.use[A-Z0-9_]/.test(eagerPath)\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(eagerCall),\r\n message: `${eagerPath || \"This initializer call\"} is evaluated every render before useState can reuse the existing state.`,\r\n summary: `${eagerPath || \"This initializer\"} runs every render. Pass an initializer function to useState.`,\r\n help: \"Wrap expensive initial state creation in function() ... end so it only runs when the state is first initialized.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderLazyRefInit: RuleDefinition = {\r\n id: \"react-luau/rerender-lazy-ref-init\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Avoid eagerly rebuilding expensive values passed to useRef on every render.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (path !== \"React.useRef\") continue;\r\n\r\n const initializer = context.callArguments(call)[0];\r\n\r\n if (!initializer || initializer.type !== \"function_call\") continue;\r\n\r\n const eagerPath = context.resolveCallPath(\r\n context.getCallPath(initializer) ?? \"\",\r\n );\r\n\r\n if (\r\n isTrivialInitializerPath(eagerPath) ||\r\n /^React\\.use[A-Z0-9_]/.test(eagerPath)\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(initializer),\r\n message: `${eagerPath || \"This initializer call\"} is rebuilt before useRef returns the existing ref on every render.`,\r\n help: \"Initialize the ref from a predictable nil-guarded render pattern when construction is pure, or create owned resources in an effect with cleanup. Do not put side-effectful resource creation into useRef just to silence this warning.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderStateOnlyInHandlers: RuleDefinition = {\r\n id: \"react-luau/rerender-state-only-in-handlers\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"State that is only read from callbacks may be mutable data rather than rendered state.\",\r\n\r\n guidance: {\r\n explanation:\r\n \"This state is written, but the component does not read it while rendering or preparing hooks.\",\r\n\r\n help: \"Use a ref when callbacks need the latest value without rerendering. Keep state if a write must update the UI or an effect dependency.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const owner of context.model.functions) {\r\n if (!owner.isComponent) continue;\r\n\r\n for (const binding of stateBindingsFor(context, owner)) {\r\n if (binding.valueName === \"_\" || binding.valueName.startsWith(\"_\"))\r\n continue;\r\n\r\n if (\r\n /^(set)?(?:TriggerRender|ForceUpdate|Rerender|ForceRender|Tick|Bump|BumpVersion|InvalidateRender|Refresh|Repaint)$/i.test(\r\n binding.setterName,\r\n )\r\n )\r\n continue;\r\n\r\n if (!callsSetter(context, owner, binding.setterName)) continue;\r\n\r\n if (directlyReadsValue(context, owner, binding)) continue;\r\n\r\n diagnostics.push({\r\n node:\r\n identifierNode(binding.declaration, binding.valueName) ??\r\n binding.declaration,\r\n\r\n message: `${binding.valueName} is updated as React state but is never read by the component's render path or hook arguments.`,\r\n summary: `${binding.valueName} isn't read during render. Use a ref if updates needn't rerender.`,\r\n help: \"When a value is only read by event or signal callbacks, consider useRef so updates do not rerender the component. Keep useState when the update intentionally invalidates rendering or feeds a hook dependency.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noDirectStateMutation: RuleDefinition = {\r\n id: \"react-luau/no-direct-state-mutation\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description: \"Do not mutate table state in place.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n const seen = new Set<string>();\r\n\r\n for (const binding of context.model.stateBindings) {\r\n const owner = binding.owner;\r\n\r\n if (!owner?.body || !isPlainTableState(binding, context)) continue;\r\n\r\n const escaped = binding.valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (\r\n node.startIndex >= binding.declaration.startIndex &&\r\n node.endIndex <= binding.declaration.endIndex\r\n )\r\n continue;\r\n\r\n let mutates = false;\r\n\r\n if (\r\n node.type === \"assignment_statement\" ||\r\n node.type === \"update_statement\"\r\n ) {\r\n mutates = new RegExp(`^\\\\s*${escaped}\\\\s*(?:\\\\.|\\\\[)`).test(\r\n node.text,\r\n );\r\n } else if (\r\n node.type === \"function_call\" &&\r\n mightMutateParameters(context, node)\r\n ) {\r\n const arguments_ = context.callArguments(node);\r\n\r\n for (const index of mutatedParameterIndexesForCall(\r\n context,\r\n node,\r\n owner,\r\n )) {\r\n const argument = arguments_[index];\r\n\r\n if (!argument) continue;\r\n\r\n const origin = mutationOriginForExpression(\r\n context,\r\n argument,\r\n owner,\r\n );\r\n\r\n if (origin.kind === \"state\" && origin.binding === binding) {\r\n mutates = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (\r\n !mutates ||\r\n isBindingShadowedBetween(\r\n node,\r\n owner,\r\n binding.valueName,\r\n binding.declaration,\r\n )\r\n )\r\n continue;\r\n\r\n const key = `${node.startIndex}:${binding.valueName}`;\r\n\r\n if (seen.has(key)) continue;\r\n\r\n seen.add(key);\r\n\r\n diagnostics.push({\r\n node:\r\n node.type === \"function_call\"\r\n ? callNameNode(node)\r\n : assignmentTargetNode(node),\r\n\r\n message: `${binding.valueName} is React state backed by a table and is mutated in place.`,\r\n summary: `${binding.valueName} is mutated in place. Create a new table before updating state.`,\r\n help: `Create a new table and pass the new identity to ${binding.setterName}. In-place mutation can leave React with the same state identity and makes update ordering harder to reason about.`,\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
42
- "import type { RuleDefinition } from \"../types\";\r\nimport { fieldName, fieldNameNode, fieldValue } from \"./helpers\";\r\n\r\nexport const unstableContextValue: RuleDefinition = {\r\n id: \"react-luau/unstable-context-value\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n description: \"Avoid recreating context value tables on every provider render when identity matters.\",\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n if (!component || !context.isDirectlyExecutedInFunction(call, component)) continue;\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n if (path !== \"React.createElement\") continue;\r\n const args = context.callArguments(call);\r\n const element = args[0]?.text ?? \"\";\r\n const props = args[1];\r\n if (!/\\.Provider$/.test(element) || !props || props.type !== \"table_constructor\") continue;\r\n const valueField = props.namedChildren.find((field) =>\r\n field.type === \"field\" && fieldName(field) === \"value\" && fieldValue(field)?.type === \"table_constructor\"\r\n );\r\n if (!valueField) continue;\r\n\r\n diagnostics.push({\r\n node: fieldNameNode(valueField),\r\n message: \"Context Provider receives a new inline value table on every render.\",\r\n help: \"Memoize the provider value from its real dependencies when consumer updates depend on object identity.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
44
+ "import type { RuleDefinition } from \"../types\";\nimport { fieldName, fieldNameNode, fieldValue } from \"./helpers\";\nimport { freshValueKind } from \"../ast/value-identity\";\n\nexport const unstableContextValue: RuleDefinition = {\n id: \"react-luau/unstable-context-value\",\n category: \"Performance\",\n severity: \"warning\",\n description:\n \"Avoid recreating context reference values during render when identity matters\",\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const component = context.containingComponent(call);\n\n if (!component || !context.isDirectlyExecutedInFunction(call, component))\n continue;\n\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (path !== \"React.createElement\") continue;\n\n const args = context.callArguments(call);\n const element = args[0]?.text ?? \"\";\n const props = args[1];\n\n if (\n !/\\.Provider$/.test(element) ||\n !props ||\n props.type !== \"table_constructor\"\n )\n continue;\n\n const valueField = props.namedChildren.find(\n (field) =>\n field.type === \"field\" &&\n fieldName(field) === \"value\" &&\n freshValueKind(context, fieldValue(field), component),\n );\n\n if (!valueField) continue;\n\n diagnostics.push({\n node: fieldNameNode(valueField),\n message:\n \"Context Provider can receive a new reference value when the component renders\",\n help: \"Memoize the provider value from its real dependencies when consumer updates depend on object identity\",\n });\n }\n\n return diagnostics;\n },\n};\n",
43
45
  "import type { RuleDefinition } from \"../types\";\nimport {\n noBindingGetValueInRender,\n noCreateBindingInRender,\n} from \"./binding-rules\";\nimport { noCallComponentAsFunction } from \"./no-call-component-as-function\";\nimport { noMutatingStateUpdater } from \"./no-mutating-state-updater\";\nimport { useMemoMustReturn } from \"./usememo-must-return\";\nimport { fixExampleForRule } from \"./examples\";\nimport { effectNeedsCleanup } from \"./effect-needs-cleanup\";\n\nimport {\n noDerivedStateEffect,\n noEffectWithFreshDeps,\n noMutableInDeps,\n noSelfUpdatingEffect,\n} from \"./effect-state-rules\";\n\nimport { exhaustiveDeps } from \"./exhaustive-deps\";\nimport { noArrayIndexAsKey } from \"./no-array-index-as-key\";\nimport { noCreateContextInRender } from \"./no-create-context-in-render\";\nimport { noNestedComponentDefinition } from \"./no-nested-component-definition\";\nimport { noPropMutation } from \"./no-prop-mutation\";\nimport { noStaticNameProp } from \"./no-static-name-prop\";\nimport { noRandomKey } from \"./no-random-key\";\nimport { noSetStateInRender } from \"./no-set-state-in-render\";\nimport { parseErrors } from \"./parse-errors\";\n\nimport {\n preferUseRefForMutableCell,\n rerenderHighFrequencyState,\n rerenderRepeatedCollectionScan,\n rerenderStaticDiscoveryInRender,\n rerenderStaticState,\n rerenderUnnecessaryUseCallback,\n rerenderUnnecessaryUseMemo,\n rerenderUnstableMemoProps,\n} from \"./performance-rules\";\n\nimport {\n preferBindingOverState,\n preferBindingOverStateCandidate,\n} from \"./prefer-binding-over-state\";\n\nimport { noCreateRootInRender } from \"./react-roblox-lifecycle\";\nimport { noRefCurrentInRender } from \"./ref-rules\";\n\nimport {\n noSideEffectsInRender,\n noTaskSpawnInRender,\n noYieldInRender,\n} from \"./render-side-effects\";\n\nimport { rulesOfHooks } from \"./rules-of-hooks\";\n\nimport {\n noDirectStateMutation,\n rerenderFunctionalSetstate,\n rerenderLazyRefInit,\n rerenderLazyStateInit,\n rerenderStateOnlyInHandlers,\n} from \"./state-performance\";\n\nimport { unstableContextValue } from \"./unstable-context-value\";\n\nconst definitions: RuleDefinition[] = [\n parseErrors,\n rulesOfHooks,\n exhaustiveDeps,\n effectNeedsCleanup,\n noDerivedStateEffect,\n noSelfUpdatingEffect,\n noEffectWithFreshDeps,\n noMutableInDeps,\n preferBindingOverState,\n preferBindingOverStateCandidate,\n rerenderUnstableMemoProps,\n rerenderHighFrequencyState,\n rerenderUnnecessaryUseMemo,\n rerenderUnnecessaryUseCallback,\n rerenderStaticDiscoveryInRender,\n rerenderRepeatedCollectionScan,\n rerenderStaticState,\n preferUseRefForMutableCell,\n rerenderFunctionalSetstate,\n rerenderLazyStateInit,\n rerenderLazyRefInit,\n rerenderStateOnlyInHandlers,\n noSetStateInRender,\n noMutatingStateUpdater,\n noCallComponentAsFunction,\n noCreateBindingInRender,\n noBindingGetValueInRender,\n useMemoMustReturn,\n noDirectStateMutation,\n noRefCurrentInRender,\n noCreateContextInRender,\n noNestedComponentDefinition,\n noRandomKey,\n noYieldInRender,\n noTaskSpawnInRender,\n noSideEffectsInRender,\n noCreateRootInRender,\n noPropMutation,\n noStaticNameProp,\n noArrayIndexAsKey,\n unstableContextValue,\n];\n\nexport const rules: RuleDefinition[] = definitions.map((rule) => ({\n ...rule,\n\n guidance: {\n ...rule.guidance,\n example: rule.guidance?.example ?? fixExampleForRule(rule.id),\n },\n}));\n\nexport const rulesById = new Map(rules.map((rule) => [rule.id, rule]));\n",
44
46
  "interface SuppressionState {\r\n active: Set<string>;\r\n oneLine: Map<number, Set<string>>;\r\n}\r\n\r\nfunction normalizeRuleToken(token: string): string {\r\n const normalized = token.trim();\r\n if (!normalized || normalized === \"all\" || normalized === \"*\") return \"*\";\r\n return normalized.includes(\"/\") ? normalized : `react-luau/${normalized}`;\r\n}\r\n\r\nfunction parseRuleTokens(value: string): Set<string> {\r\n const withoutReason = value.split(\"--\", 1)[0] ?? \"\";\r\n const tokens = withoutReason\r\n .split(/[\\s,]+/)\r\n .map(normalizeRuleToken)\r\n .filter(Boolean);\r\n return new Set(tokens.length > 0 ? tokens : [\"*\"]);\r\n}\r\n\r\nfunction matchesRule(rules: Set<string> | undefined, ruleId: string): boolean {\r\n return Boolean(rules && (rules.has(\"*\") || rules.has(ruleId)));\r\n}\r\n\r\nexport function createInlineSuppressionChecker(source: string): (ruleId: string, line: number) => boolean {\r\n const state: SuppressionState = {\r\n active: new Set<string>(),\r\n oneLine: new Map<number, Set<string>>(),\r\n };\r\n const activeByLine = new Map<number, Set<string>>();\r\n const lines = source.split(/\\r?\\n/);\r\n const directive = /--\\s*react-luau-doctor-(disable|enable)(?:-(next-line|line))?\\b(.*)$/i;\r\n\r\n for (let index = 0; index < lines.length; index += 1) {\r\n const lineNumber = index + 1;\r\n activeByLine.set(lineNumber, new Set(state.active));\r\n\r\n const match = lines[index].match(directive);\r\n if (!match) continue;\r\n\r\n const action = match[1].toLowerCase();\r\n const placement = match[2]?.toLowerCase();\r\n const rules = parseRuleTokens(match[3] ?? \"\");\r\n\r\n if (placement === \"line\" || placement === \"next-line\") {\r\n if (action !== \"disable\") continue;\r\n const targetLine = placement === \"line\" ? lineNumber : lineNumber + 1;\r\n const existing = state.oneLine.get(targetLine) ?? new Set<string>();\r\n for (const rule of rules) existing.add(rule);\r\n state.oneLine.set(targetLine, existing);\r\n continue;\r\n }\r\n\r\n if (action === \"disable\") {\r\n for (const rule of rules) state.active.add(rule);\r\n } else if (rules.has(\"*\")) {\r\n state.active.clear();\r\n } else {\r\n for (const rule of rules) state.active.delete(rule);\r\n }\r\n }\r\n\r\n return (ruleId: string, line: number): boolean =>\r\n matchesRule(activeByLine.get(line), ruleId) || matchesRule(state.oneLine.get(line), ruleId);\r\n}\r\n",
45
47
  "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Language, Parser } from \"web-tree-sitter\";\nimport type { SyntaxTree } from \"./syntax\";\nimport { parserCompatibleSource } from \"./parser-compat\";\n\nlet parserPromise: Promise<Parser> | null = null;\n\nasync function createParser(): Promise<Parser> {\n await Parser.init();\n\n const grammarPath = path.resolve(\n path.dirname(fileURLToPath(import.meta.url)),\n \"../vendor/tree-sitter-luau.wasm\",\n );\n\n const grammar = new Uint8Array(fs.readFileSync(grammarPath));\n const language = await Language.load(grammar);\n const parser = new Parser();\n parser.setLanguage(language);\n\n return parser;\n}\n\nasync function getParser(): Promise<Parser> {\n parserPromise ??= createParser();\n\n return parserPromise;\n}\n\nexport async function parseLuau(source: string): Promise<SyntaxTree> {\n const parser = await getParser();\n const tree = parser.parse(parserCompatibleSource(source));\n\n if (!tree) throw new Error(\"Tree-sitter failed to parse Luau source\");\n\n return tree;\n}\n",
46
48
  "import fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport type { SyntaxNode, SyntaxTree } from \"./syntax\";\r\nimport {\r\n buildUniqueFeatureAliases,\r\n moduleKeys,\r\n normalizeRequireTarget,\r\n resolveModuleReference,\r\n type ModuleIdentity,\r\n} from \"./module-resolution\";\r\nimport { parseLuau } from \"./parser\";\r\nimport type { AnalysisWorkerPool } from \"./parallel\";\r\nimport type { ScanFileInput, SourceEffectModuleSummary } from \"./types\";\r\n\r\n\r\nexport interface ProjectEffectParseCacheEntry {\r\n source: string;\r\n tree: SyntaxTree;\r\n}\r\n\r\nexport type CachedMutationOrigin =\r\n | { kind: \"receiver\" }\r\n | { kind: \"parameter\"; index: number }\r\n | { kind: \"external\" }\r\n | { kind: \"local\" };\r\n\r\nexport interface CachedMutationCall {\r\n targetId: string;\r\n receiverOrigin: CachedMutationOrigin | null;\r\n argumentOrigins: Array<CachedMutationOrigin | null>;\r\n}\r\n\r\nexport interface CachedSourceEffectFunction {\r\n id: string;\r\n moduleId: string;\r\n localName: string | null;\r\n memberName: string | null;\r\n exported: boolean;\r\n directEffect: boolean;\r\n mutatesReceiver: boolean;\r\n mutatedParameterIndexes: number[];\r\n dependencies: string[];\r\n mutationCalls: CachedMutationCall[];\r\n}\r\n\r\nexport interface CachedSourceEffectModule {\r\n hash: string;\r\n id: string;\r\n keys: string[];\r\n importedModuleIds: string[];\r\n functions: CachedSourceEffectFunction[];\r\n instanceFactories: string[];\r\n}\r\n\r\nexport interface ProjectSourceEffectsBuildResult {\r\n effects: Map<string, SourceEffectModuleSummary>;\r\n cacheModules: Record<string, CachedSourceEffectModule>;\r\n}\r\n\r\nexport interface EffectWorkerIndexInput extends ModuleIdentity {\r\n relativePath: string;\r\n source: string;\r\n}\r\n\r\nexport interface IndexedEffectWorkerModule {\r\n id: string;\r\n relativePath: string;\r\n importedModuleIds: string[];\r\n instanceFactories: string[];\r\n exportedFunctionId?: string;\r\n}\r\n\r\nexport interface AnalyzedEffectWorkerModule {\r\n id: string;\r\n functions: CachedSourceEffectFunction[];\r\n}\r\n\r\nexport type ProjectEffectsProgressPhase =\r\n | \"parse\"\r\n | \"index-functions\"\r\n | \"analyze-calls\"\r\n | \"assemble-graph\"\r\n | \"resolve\"\r\n | \"propagate\"\r\n | \"summarize\";\r\n\r\nexport interface ProjectEffectsProgress {\r\n phase: ProjectEffectsProgressPhase;\r\n current: number;\r\n total: number;\r\n file?: string;\r\n}\r\n\r\ninterface ParsedRecord extends ModuleIdentity {\r\n source: string;\r\n tree: SyntaxTree;\r\n exportName: string | null;\r\n imports: Map<string, string>;\r\n}\r\n\r\ninterface MutationCall {\r\n targetId: string;\r\n receiverRoot: string | null;\r\n argumentRoots: Array<string | null>;\r\n}\r\n\r\ninterface FunctionRecord {\r\n id: string;\r\n moduleId: string;\r\n localName: string | null;\r\n memberName: string | null;\r\n exported: boolean;\r\n method: boolean;\r\n node: SyntaxNode;\r\n body: SyntaxNode;\r\n parameters: string[];\r\n directEffect: boolean;\r\n mutatesReceiver: boolean;\r\n mutatedParameterIndexes: Set<number>;\r\n dependencies: Set<string>;\r\n mutationCalls: MutationCall[];\r\n parameterOrigins: Map<string, number>;\r\n externalRoots: Set<string>;\r\n ownedRoots: Set<string>;\r\n localNames: Set<string>;\r\n}\r\n\r\nexport interface EffectWorkerState {\r\n relativePath: string;\r\n source: string;\r\n record: ParsedRecord;\r\n functions: FunctionRecord[];\r\n}\r\n\r\nfunction normalizeRelative(value: string): string {\r\n return value.split(path.sep).join(\"/\");\r\n}\r\n\r\nfunction child(node: SyntaxNode, type: string): SyntaxNode | null {\r\n return node.namedChildren.find((candidate) => candidate.type === type) ?? null;\r\n}\r\n\r\nfunction topLevelReturnName(root: SyntaxNode): string | null {\r\n for (const node of [...root.namedChildren].reverse()) {\r\n if (node.type !== \"return_statement\") continue;\r\n const expressions = child(node, \"expression_list\");\r\n const value = expressions?.namedChildren[0];\r\n if (value?.type === \"identifier\") return value.text;\r\n return null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction topLevelImports(root: SyntaxNode, moduleAliases: Map<string, string>): Map<string, string> {\r\n const imports = new Map<string, string>();\r\n for (const node of root.namedChildren) {\r\n if (node.type !== \"variable_declaration\") continue;\r\n const { names, expressions } = declarationParts(node);\r\n for (let index = 0; index < names.length; index += 1) {\r\n const expression = expressions[index] ?? expressions[0];\r\n if (expression?.type !== \"function_call\") continue;\r\n const text = expression.text.trim();\r\n const match = text.match(/^require\\s*\\((.*?)\\)\\s*$/s);\r\n if (!match) continue;\r\n const moduleId = resolveModuleReference(normalizeRequireTarget(match[1]), moduleAliases);\r\n if (moduleId) imports.set(names[index], moduleId);\r\n }\r\n }\r\n return imports;\r\n}\r\n\r\nfunction parameterNames(node: SyntaxNode): string[] {\r\n const parameters = child(node, \"parameters\");\r\n if (!parameters) return [];\r\n const result: string[] = [];\r\n for (const parameter of parameters.namedChildren) {\r\n if (parameter.type !== \"parameter\") continue;\r\n const identifier = parameter.namedChildren.find((candidate) => candidate.type === \"identifier\");\r\n if (identifier) result.push(identifier.text);\r\n }\r\n return result;\r\n}\r\n\r\nfunction declarationParts(node: SyntaxNode): { names: string[]; expressions: SyntaxNode[] } {\r\n if (node.type !== \"variable_declaration\") return { names: [], expressions: [] };\r\n const assignment = child(node, \"assignment_statement\");\r\n const variables = assignment ? child(assignment, \"variable_list\") : child(node, \"variable_list\");\r\n const expressions = assignment ? child(assignment, \"expression_list\") : null;\r\n return {\r\n names: variables?.namedChildren.filter((candidate) => candidate.type === \"identifier\").map((candidate) => candidate.text) ?? [],\r\n expressions: expressions?.namedChildren ?? [],\r\n };\r\n}\r\n\r\nfunction assignmentSides(node: SyntaxNode): { left: SyntaxNode[]; right: SyntaxNode[] } {\r\n if (node.type !== \"assignment_statement\") return { left: [], right: [] };\r\n return {\r\n left: child(node, \"variable_list\")?.namedChildren ?? [],\r\n right: child(node, \"expression_list\")?.namedChildren ?? [],\r\n };\r\n}\r\n\r\nfunction callPath(node: SyntaxNode): string | null {\r\n if (node.type !== \"function_call\") return null;\r\n const name = node.childForFieldName(\"name\") ?? node.namedChildren[0];\r\n return name ? name.text.replace(/\\s+/g, \"\") : null;\r\n}\r\n\r\nfunction rootIdentifier(node: SyntaxNode | null | undefined): string | null {\r\n if (!node) return null;\r\n if (node.type === \"identifier\") return node.text;\r\n if (\r\n node.type === \"dot_index_expression\" ||\r\n node.type === \"bracket_index_expression\" ||\r\n node.type === \"method_index_expression\"\r\n ) {\r\n return rootIdentifier(node.namedChildren[0]);\r\n }\r\n const text = node.text.trim();\r\n return text.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? null;\r\n}\r\n\r\nfunction callArguments(node: SyntaxNode): SyntaxNode[] {\r\n if (node.type !== \"function_call\") return [];\r\n return node.childForFieldName(\"arguments\")?.namedChildren ?? [];\r\n}\r\n\r\nfunction builtinMutatedArgumentIndexes(path: string, argumentCount: number): number[] {\r\n switch (path.replace(/\\s+/g, \"\")) {\r\n case \"rawset\":\r\n case \"setmetatable\":\r\n case \"table.clear\":\r\n case \"table.freeze\":\r\n case \"table.insert\":\r\n case \"table.remove\":\r\n case \"table.sort\":\r\n return argumentCount > 0 ? [0] : [];\r\n case \"table.move\":\r\n // table.move writes into the optional destination table, or back into the\r\n // source table when the destination argument is omitted.\r\n return argumentCount >= 5 ? [4] : argumentCount > 0 ? [0] : [];\r\n default:\r\n return [];\r\n }\r\n}\r\n\r\nfunction expressionCreatesOwnedValue(node: SyntaxNode, owned: Set<string>): boolean {\r\n if (node.type === \"table_constructor\" || node.type === \"function_definition\") return true;\r\n if (node.type !== \"function_call\") return false;\r\n\r\n const path = callPath(node)?.replace(/\\s+/g, \"\") ?? \"\";\r\n if (path === \"table.clone\" || path === \"table.create\" || path === \"table.pack\") return true;\r\n if (path !== \"setmetatable\" && path !== \"table.freeze\") return false;\r\n\r\n const first = callArguments(node)[0];\r\n if (!first) return false;\r\n if (first.type === \"table_constructor\") return true;\r\n const root = rootIdentifier(first);\r\n return Boolean(root && owned.has(root));\r\n}\r\n\r\nfunction directNodes(body: SyntaxNode): SyntaxNode[] {\r\n const result: SyntaxNode[] = [];\r\n const visit = (node: SyntaxNode): void => {\r\n if (node !== body && (node.type === \"function_definition\" || node.type === \"function_declaration\")) return;\r\n result.push(node);\r\n for (const candidate of node.namedChildren) visit(candidate);\r\n };\r\n visit(body);\r\n return result;\r\n}\r\n\r\nfunction topLevelFunctionRecords(record: ParsedRecord): FunctionRecord[] {\r\n const functions: FunctionRecord[] = [];\r\n let anonymousExportIndex = 0;\r\n\r\n const add = (\r\n node: SyntaxNode,\r\n body: SyntaxNode | null,\r\n localName: string | null,\r\n memberName: string | null,\r\n method: boolean,\r\n exported: boolean,\r\n ): void => {\r\n if (!body) return;\r\n const key = memberName ? `member:${memberName}` : localName ? `local:${localName}` : `export:${anonymousExportIndex++}`;\r\n functions.push({\r\n id: `${record.id}::${key}`,\r\n moduleId: record.id,\r\n localName,\r\n memberName,\r\n exported,\r\n method,\r\n node,\r\n body,\r\n parameters: parameterNames(node),\r\n directEffect: false,\r\n mutatesReceiver: false,\r\n mutatedParameterIndexes: new Set<number>(),\r\n dependencies: new Set<string>(),\r\n mutationCalls: [],\r\n parameterOrigins: new Map<string, number>(),\r\n externalRoots: new Set<string>(),\r\n ownedRoots: new Set<string>(),\r\n localNames: new Set<string>(),\r\n });\r\n };\r\n\r\n for (const node of record.tree.rootNode.namedChildren) {\r\n if (node.type === \"function_declaration\") {\r\n const nameNode = node.namedChildren.find((candidate) =>\r\n [\"identifier\", \"dot_index_expression\", \"method_index_expression\"].includes(candidate.type),\r\n );\r\n const body = child(node, \"block\");\r\n const text = nameNode?.text.replace(/\\s+/g, \"\") ?? \"\";\r\n const methodMatch = text.match(/^([A-Za-z_][A-Za-z0-9_]*)[:.]([A-Za-z_][A-Za-z0-9_]*)$/);\r\n if (methodMatch && methodMatch[1] === record.exportName) {\r\n add(node, body, null, methodMatch[2], nameNode?.type === \"method_index_expression\", false);\r\n } else if (nameNode?.type === \"identifier\") {\r\n add(node, body, text, null, false, record.exportName === text);\r\n }\r\n continue;\r\n }\r\n\r\n if (node.type === \"variable_declaration\") {\r\n const { names, expressions } = declarationParts(node);\r\n for (let index = 0; index < names.length; index += 1) {\r\n const expression = expressions[index] ?? expressions[0];\r\n if (expression?.type !== \"function_definition\") continue;\r\n add(expression, child(expression, \"block\"), names[index], null, false, record.exportName === names[index]);\r\n }\r\n continue;\r\n }\r\n\r\n if (node.type === \"assignment_statement\") {\r\n const { left, right } = assignmentSides(node);\r\n for (let index = 0; index < left.length; index += 1) {\r\n const expression = right[index] ?? right[0];\r\n if (expression?.type !== \"function_definition\") continue;\r\n const text = left[index].text.replace(/\\s+/g, \"\");\r\n const memberMatch = text.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\r\n if (memberMatch && memberMatch[1] === record.exportName) {\r\n add(expression, child(expression, \"block\"), null, memberMatch[2], text.includes(\":\"), false);\r\n }\r\n }\r\n continue;\r\n }\r\n\r\n if (node.type === \"return_statement\") {\r\n const expressions = child(node, \"expression_list\");\r\n const expression = expressions?.namedChildren[0];\r\n if (expression?.type === \"function_definition\") add(expression, child(expression, \"block\"), null, null, false, true);\r\n }\r\n }\r\n\r\n return functions;\r\n}\r\n\r\n\r\nfunction returnedFactoryMember(fn: FunctionRecord, moduleExportName: string | null): boolean {\r\n if (!fn.memberName || !moduleExportName) return false;\r\n const header = fn.node.text.slice(0, Math.max(0, fn.body.startIndex - fn.node.startIndex));\r\n const escaped = moduleExportName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n if (new RegExp(`:\\\\s*${escaped}\\\\b`).test(header)) return true;\r\n\r\n for (const node of directNodes(fn.body)) {\r\n if (node.type !== \"return_statement\") continue;\r\n if (new RegExp(`\\\\bsetmetatable\\\\s*\\\\([\\\\s\\\\S]*?\\\\b${escaped}\\\\b`).test(node.text)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction moduleLevelInstanceAliases(record: ParsedRecord, summariesByModuleId: Map<string, SourceEffectModuleSummary>): Map<string, string> {\r\n const result = new Map<string, string>();\r\n for (const node of record.tree.rootNode.namedChildren) {\r\n if (node.type !== \"variable_declaration\") continue;\r\n const { names, expressions } = declarationParts(node);\r\n for (let index = 0; index < names.length; index += 1) {\r\n const expression = expressions[index] ?? expressions[0];\r\n if (expression?.type !== \"function_call\") continue;\r\n const path = callPath(expression);\r\n const match = path?.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\r\n if (!match) continue;\r\n const moduleId = record.imports.get(match[1]);\r\n const summary = moduleId ? summariesByModuleId.get(moduleId) : null;\r\n if (moduleId && summary?.instanceFactories.has(match[2])) result.set(names[index], moduleId);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction analyzeFunction(\r\n fn: FunctionRecord,\r\n record: ParsedRecord,\r\n localFunctions: Map<string, string>,\r\n memberFunctions: Map<string, string>,\r\n moduleSummaries: Map<string, SourceEffectModuleSummary>,\r\n moduleInstances: Map<string, string>,\r\n exportedFunctions: Map<string, string>,\r\n): void {\r\n const parameters = new Set(fn.parameters);\r\n const parameterOrigins = new Map<string, number>(fn.parameters.map((name, index) => [name, index] as const));\r\n if (fn.method) {\r\n parameters.add(\"self\");\r\n parameterOrigins.set(\"self\", -1);\r\n }\r\n const locals = new Set<string>();\r\n const owned = new Set<string>();\r\n const externalAliases = new Set<string>();\r\n const refLocals = new Set<string>();\r\n const instanceAliases = new Map(moduleInstances);\r\n const nodes = directNodes(fn.body);\r\n\r\n for (const node of nodes) {\r\n if (node.type === \"function_declaration\" && node.id !== fn.node.id) {\r\n const declared = node.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\r\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(declared)) locals.add(declared);\r\n continue;\r\n }\r\n if (node.type !== \"variable_declaration\") continue;\r\n const { names, expressions } = declarationParts(node);\r\n for (let index = 0; index < names.length; index += 1) {\r\n const name = names[index];\r\n const expression = expressions[index] ?? expressions[0];\r\n locals.add(name);\r\n if (!expression) continue;\r\n const createsOwnedValue = expressionCreatesOwnedValue(expression, owned);\r\n if (createsOwnedValue) owned.add(name);\r\n const root = rootIdentifier(expression);\r\n const parameterOrigin = root ? parameterOrigins.get(root) : undefined;\r\n if (!createsOwnedValue && root && parameterOrigin !== undefined) {\r\n // Keep argument/receiver mutation conditional. A caller may pass a fresh\r\n // render-local value, so it must not become an unconditional effect.\r\n parameterOrigins.set(name, parameterOrigin);\r\n } else if (!createsOwnedValue && root && (externalAliases.has(root) || (!locals.has(root) && root !== name))) {\r\n // Module/global state is externally observable regardless of call-site\r\n // ownership, so aliases of it remain safe to classify as effects.\r\n externalAliases.add(name);\r\n } else if (root && owned.has(root)) {\r\n owned.add(name);\r\n }\r\n\r\n if (expression.type === \"function_call\") {\r\n const path = callPath(expression)?.replace(/\\s+/g, \"\") ?? \"\";\r\n if (path === \"React.useRef\") refLocals.add(name);\r\n const match = path.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\r\n if (match) {\r\n const moduleId = record.imports.get(match[1]);\r\n const summary = moduleId ? moduleSummaries.get(moduleId) : null;\r\n if (moduleId && summary?.instanceFactories.has(match[2])) instanceAliases.set(name, moduleId);\r\n }\r\n }\r\n }\r\n }\r\n\r\n fn.parameterOrigins = parameterOrigins;\r\n fn.externalRoots = externalAliases;\r\n fn.ownedRoots = owned;\r\n fn.localNames = locals;\r\n\r\n // Luau locals are lexically scoped from their declaration onward, so the\r\n // source-order pass above is enough to propagate aliases through local\r\n // declarations. Repeated fixed-point rescans of every function body were\r\n // redundant and particularly expensive on large modules.\r\n for (const node of nodes) {\r\n if (node.type === \"assignment_statement\" && node.parent?.type !== \"variable_declaration\") {\r\n const { left } = assignmentSides(node);\r\n for (const target of left) {\r\n if (target.type === \"identifier\") {\r\n if (!locals.has(target.text) && !parameters.has(target.text)) fn.directEffect = true;\r\n continue;\r\n }\r\n const root = rootIdentifier(target);\r\n if (!root) continue;\r\n if (owned.has(root)) continue;\r\n if (refLocals.has(root) && target.text.replace(/\\s+/g, \"\") === `${root}.current`) continue;\r\n const parameterOrigin = parameterOrigins.get(root);\r\n if (parameterOrigin !== undefined) {\r\n if (parameterOrigin === -1) fn.mutatesReceiver = true;\r\n else fn.mutatedParameterIndexes.add(parameterOrigin);\r\n continue;\r\n }\r\n if (externalAliases.has(root) || !locals.has(root)) fn.directEffect = true;\r\n }\r\n continue;\r\n }\r\n\r\n if (node.type !== \"function_call\") continue;\r\n const path = callPath(node);\r\n if (!path) continue;\r\n const arguments_ = callArguments(node);\r\n\r\n for (const index of builtinMutatedArgumentIndexes(path, arguments_.length)) {\r\n markMutationThroughRoot(fn, rootIdentifier(arguments_[index]));\r\n }\r\n\r\n const localTarget = !locals.has(path) && !parameters.has(path) ? localFunctions.get(path) : null;\r\n if (localTarget) {\r\n fn.dependencies.add(localTarget);\r\n fn.mutationCalls.push({\r\n targetId: localTarget,\r\n receiverRoot: null,\r\n argumentRoots: arguments_.map((argument) => rootIdentifier(argument)),\r\n });\r\n }\r\n\r\n const sameMember = path.match(/^([A-Za-z_][A-Za-z0-9_]*)([:.])([A-Za-z_][A-Za-z0-9_]*)$/);\r\n if (sameMember) {\r\n const receiver = sameMember[1];\r\n if (receiver === \"self\" || (receiver === record.exportName && !locals.has(receiver) && !parameters.has(receiver))) {\r\n const target = memberFunctions.get(sameMember[3]);\r\n if (target) {\r\n fn.dependencies.add(target);\r\n fn.mutationCalls.push({\r\n targetId: target,\r\n receiverRoot: sameMember[2] === \":\" ? receiver : null,\r\n argumentRoots: arguments_.map((argument) => rootIdentifier(argument)),\r\n });\r\n }\r\n }\r\n }\r\n\r\n const importedMember = path.match(/^([A-Za-z_][A-Za-z0-9_]*)([.:])([A-Za-z_][A-Za-z0-9_]*)$/);\r\n if (importedMember) {\r\n const root = importedMember[1];\r\n const moduleId = instanceAliases.get(root)\r\n ?? (!locals.has(root) && !parameters.has(root) ? record.imports.get(root) : undefined);\r\n if (moduleId) {\r\n const target = `${moduleId}::member:${importedMember[3]}`;\r\n fn.dependencies.add(target);\r\n fn.mutationCalls.push({\r\n targetId: target,\r\n receiverRoot: importedMember[2] === \":\" ? root : null,\r\n argumentRoots: arguments_.map((argument) => rootIdentifier(argument)),\r\n });\r\n }\r\n } else if (!locals.has(path) && !parameters.has(path)) {\r\n const moduleId = record.imports.get(path);\r\n const target = moduleId ? exportedFunctions.get(moduleId) : null;\r\n if (target) {\r\n fn.dependencies.add(target);\r\n fn.mutationCalls.push({\r\n targetId: target,\r\n receiverRoot: null,\r\n argumentRoots: arguments_.map((argument) => rootIdentifier(argument)),\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction markMutationThroughRoot(fn: FunctionRecord, root: string | null): boolean {\r\n if (!root) return false;\r\n const parameterOrigin = fn.parameterOrigins.get(root);\r\n if (parameterOrigin !== undefined) {\r\n if (parameterOrigin === -1) {\r\n if (fn.mutatesReceiver) return false;\r\n fn.mutatesReceiver = true;\r\n return true;\r\n }\r\n if (fn.mutatedParameterIndexes.has(parameterOrigin)) return false;\r\n fn.mutatedParameterIndexes.add(parameterOrigin);\r\n return true;\r\n }\r\n\r\n if (fn.ownedRoots.has(root)) return false;\r\n if (fn.externalRoots.has(root) || !fn.localNames.has(root)) {\r\n if (fn.directEffect) return false;\r\n fn.directEffect = true;\r\n return true;\r\n }\r\n if (fn.localNames.has(root)) return false;\r\n return false;\r\n}\r\n\r\nfunction propagateLocalMutationEffects(functions: FunctionRecord[]): void {\r\n const byId = new Map(functions.map((fn) => [fn.id, fn] as const));\r\n let changed = true;\r\n while (changed) {\r\n changed = false;\r\n for (const fn of functions) {\r\n for (const call of fn.mutationCalls) {\r\n const target = byId.get(call.targetId);\r\n if (!target) continue;\r\n if (target.mutatesReceiver && markMutationThroughRoot(fn, call.receiverRoot)) changed = true;\r\n for (const index of target.mutatedParameterIndexes) {\r\n if (markMutationThroughRoot(fn, call.argumentRoots[index] ?? null)) changed = true;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction mutationOriginForRoot(fn: FunctionRecord, root: string | null): CachedMutationOrigin | null {\r\n if (!root) return null;\r\n const parameterOrigin = fn.parameterOrigins.get(root);\r\n if (parameterOrigin === -1) return { kind: \"receiver\" };\r\n if (parameterOrigin !== undefined) return { kind: \"parameter\", index: parameterOrigin };\r\n if (fn.ownedRoots.has(root) || fn.localNames.has(root)) return { kind: \"local\" };\r\n if (fn.externalRoots.has(root) || !fn.localNames.has(root)) return { kind: \"external\" };\r\n return null;\r\n}\r\n\r\nfunction cachedMutationCalls(fn: FunctionRecord): CachedMutationCall[] {\r\n return fn.mutationCalls.map((call) => ({\r\n targetId: call.targetId,\r\n receiverOrigin: mutationOriginForRoot(fn, call.receiverRoot),\r\n argumentOrigins: call.argumentRoots.map((root) => mutationOriginForRoot(fn, root)),\r\n }));\r\n}\r\n\r\nfunction applyCachedMutationOrigin(fn: CachedSourceEffectFunction, origin: CachedMutationOrigin | null): boolean {\r\n if (!origin || origin.kind === \"local\") return false;\r\n if (origin.kind === \"external\") {\r\n if (fn.directEffect) return false;\r\n fn.directEffect = true;\r\n return true;\r\n }\r\n if (origin.kind === \"receiver\") {\r\n if (fn.mutatesReceiver) return false;\r\n fn.mutatesReceiver = true;\r\n return true;\r\n }\r\n if (fn.mutatedParameterIndexes.includes(origin.index)) return false;\r\n fn.mutatedParameterIndexes.push(origin.index);\r\n fn.mutatedParameterIndexes.sort((a, b) => a - b);\r\n return true;\r\n}\r\n\r\nfunction propagateMutationEffects(functions: CachedSourceEffectFunction[]): void {\r\n const byId = new Map(functions.map((fn) => [fn.id, fn] as const));\r\n let changed = true;\r\n while (changed) {\r\n changed = false;\r\n for (const fn of functions) {\r\n for (const call of fn.mutationCalls) {\r\n const target = byId.get(call.targetId);\r\n if (!target) continue;\r\n if (target.mutatesReceiver && applyCachedMutationOrigin(fn, call.receiverOrigin)) changed = true;\r\n for (const index of target.mutatedParameterIndexes) {\r\n if (applyCachedMutationOrigin(fn, call.argumentOrigins[index] ?? null)) changed = true;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport async function indexEffectModuleForWorker(\r\n input: EffectWorkerIndexInput,\r\n moduleAliases: Map<string, string>,\r\n): Promise<{ indexed: IndexedEffectWorkerModule; state: EffectWorkerState; tree: SyntaxTree }> {\r\n const tree = await parseLuau(input.source);\r\n const imports = topLevelImports(tree.rootNode, moduleAliases);\r\n\r\n const record: ParsedRecord = {\r\n id: input.id,\r\n keys: input.keys,\r\n source: input.source,\r\n tree,\r\n exportName: topLevelReturnName(tree.rootNode),\r\n imports,\r\n };\r\n const functions = topLevelFunctionRecords(record);\r\n const instanceFactories: string[] = [];\r\n for (const fn of functions) {\r\n if (fn.memberName && returnedFactoryMember(fn, record.exportName)) instanceFactories.push(fn.memberName);\r\n }\r\n const exportedFunctionId = functions.find((fn) => fn.exported && !fn.memberName)?.id;\r\n\r\n return {\r\n indexed: {\r\n id: input.id,\r\n relativePath: input.relativePath,\r\n importedModuleIds: [...new Set(imports.values())].sort(),\r\n instanceFactories: instanceFactories.sort(),\r\n exportedFunctionId,\r\n },\r\n state: { relativePath: input.relativePath, source: input.source, record, functions },\r\n tree,\r\n };\r\n}\r\n\r\nexport function analyzeEffectModuleForWorker(\r\n state: EffectWorkerState,\r\n moduleSummaries: Map<string, SourceEffectModuleSummary>,\r\n exportedFunctions: Map<string, string>,\r\n): AnalyzedEffectWorkerModule {\r\n const localFunctions = new Map<string, string>();\r\n const memberFunctions = new Map<string, string>();\r\n for (const fn of state.functions) {\r\n if (fn.localName) localFunctions.set(fn.localName, fn.id);\r\n if (fn.memberName) memberFunctions.set(fn.memberName, fn.id);\r\n }\r\n const moduleInstances = moduleLevelInstanceAliases(state.record, moduleSummaries);\r\n for (const fn of state.functions) {\r\n analyzeFunction(fn, state.record, localFunctions, memberFunctions, moduleSummaries, moduleInstances, exportedFunctions);\r\n }\r\n propagateLocalMutationEffects(state.functions);\r\n return {\r\n id: state.record.id,\r\n functions: state.functions.map((fn) => ({\r\n id: fn.id,\r\n moduleId: fn.moduleId,\r\n localName: fn.localName,\r\n memberName: fn.memberName,\r\n exported: fn.exported,\r\n directEffect: fn.directEffect,\r\n mutatesReceiver: fn.mutatesReceiver,\r\n mutatedParameterIndexes: [...fn.mutatedParameterIndexes].sort((a, b) => a - b),\r\n dependencies: [...fn.dependencies].sort(),\r\n mutationCalls: cachedMutationCalls(fn),\r\n })),\r\n };\r\n}\r\n\r\nexport async function buildProjectSourceEffects(\r\n root: string,\r\n candidates: ScanFileInput[],\r\n parseCache?: Map<string, ProjectEffectParseCacheEntry>,\r\n onProgress?: (progress: ProjectEffectsProgress) => void,\r\n fileHashes: Readonly<Record<string, string>> = {},\r\n cachedModules: Readonly<Record<string, CachedSourceEffectModule>> = {},\r\n workerPool?: AnalysisWorkerPool,\r\n): Promise<ProjectSourceEffectsBuildResult> {\r\n interface CandidateIdentity extends ModuleIdentity {\r\n relativePath: string;\r\n candidate: ScanFileInput;\r\n hash: string;\r\n }\r\n\r\n const identities: CandidateIdentity[] = [];\r\n for (const candidate of candidates) {\r\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(root, candidate.absolutePath));\r\n const id = relativePath.toLowerCase();\r\n identities.push({\r\n id,\r\n keys: moduleKeys(relativePath),\r\n relativePath,\r\n candidate,\r\n hash: fileHashes[relativePath] ?? \"\",\r\n });\r\n }\r\n\r\n const moduleIdFeatures = new Map(identities.map((record) => [record.id, record.id] as const));\r\n const moduleAliases = buildUniqueFeatureAliases(identities, moduleIdFeatures);\r\n const currentIds = new Set(identities.map((identity) => identity.id));\r\n const cachedIds = new Set(Object.values(cachedModules).map((module) => module.id));\r\n const sameFileSet = currentIds.size === cachedIds.size && [...currentIds].every((id) => cachedIds.has(id));\r\n\r\n const dirtyIds = new Set<string>();\r\n if (!sameFileSet) {\r\n for (const identity of identities) dirtyIds.add(identity.id);\r\n } else {\r\n for (const identity of identities) {\r\n const cached = cachedModules[identity.relativePath];\r\n if (!cached || cached.hash !== identity.hash) dirtyIds.add(identity.id);\r\n }\r\n\r\n // A changed module can alter whether one of its members is an instance\r\n // factory. Re-analyze direct importers so instance-method dependencies are\r\n // refreshed, while all other unchanged modules keep their cached graph.\r\n if (dirtyIds.size > 0) {\r\n for (const module of Object.values(cachedModules)) {\r\n if (module.importedModuleIds.some((moduleId) => dirtyIds.has(moduleId))) dirtyIds.add(module.id);\r\n }\r\n }\r\n }\r\n\r\n const cachedFunctionStates = new Map<string, CachedSourceEffectFunction[]>();\r\n const analyzedFunctionStatesByModule = new Map<string, CachedSourceEffectFunction[]>();\r\n const importedModuleIdsByModule = new Map<string, string[]>();\r\n const summariesByModuleId = new Map<string, SourceEffectModuleSummary>();\r\n const exportedFunctions = new Map<string, string>();\r\n\r\n if (workerPool && dirtyIds.size >= 16) {\r\n const workerInputs: EffectWorkerIndexInput[] = [];\r\n for (const identity of identities) {\r\n if (!dirtyIds.has(identity.id)) continue;\r\n const { candidate } = identity;\r\n if (candidate.source === undefined && !fs.existsSync(candidate.absolutePath)) continue;\r\n workerInputs.push({\r\n id: identity.id,\r\n keys: identity.keys,\r\n relativePath: identity.relativePath,\r\n source: candidate.source ?? fs.readFileSync(candidate.absolutePath, \"utf8\"),\r\n });\r\n }\r\n\r\n let parsedCount = identities.length - workerInputs.length;\r\n onProgress?.({ phase: \"parse\", current: parsedCount, total: candidates.length });\r\n const indexedModules = await workerPool.indexEffectModules(workerInputs, moduleAliases, (count, file) => {\r\n parsedCount += count;\r\n onProgress?.({ phase: \"parse\", current: Math.min(parsedCount, candidates.length), total: candidates.length, file });\r\n });\r\n onProgress?.({ phase: \"parse\", current: candidates.length, total: candidates.length });\r\n\r\n const indexedById = new Map(indexedModules.map((module) => [module.id, module] as const));\r\n const functionIndexTotal = Math.max(1, identities.length * 2);\r\n onProgress?.({ phase: \"index-functions\", current: 0, total: functionIndexTotal });\r\n\r\n for (let identityIndex = 0; identityIndex < identities.length; identityIndex += 1) {\r\n const identity = identities[identityIndex];\r\n const indexed = indexedById.get(identity.id);\r\n if (indexed) {\r\n importedModuleIdsByModule.set(identity.id, indexed.importedModuleIds);\r\n summariesByModuleId.set(identity.id, {\r\n effectfulMembers: new Set<string>(),\r\n effectfulExport: false,\r\n mutatingMembers: new Set<string>(),\r\n mutatingExportParameters: new Set<number>(),\r\n mutatingMemberParameters: new Map<string, Set<number>>(),\r\n localMutatingParameters: new Map<string, Set<number>>(),\r\n instanceFactories: new Set(indexed.instanceFactories),\r\n });\r\n if (indexed.exportedFunctionId) exportedFunctions.set(identity.id, indexed.exportedFunctionId);\r\n } else {\r\n const cached = cachedModules[identity.relativePath];\r\n const functions = cached?.functions ?? [];\r\n cachedFunctionStates.set(identity.id, functions);\r\n importedModuleIdsByModule.set(identity.id, cached?.importedModuleIds ?? []);\r\n summariesByModuleId.set(identity.id, {\r\n effectfulMembers: new Set<string>(),\r\n effectfulExport: false,\r\n mutatingMembers: new Set<string>(),\r\n mutatingExportParameters: new Set<number>(),\r\n mutatingMemberParameters: new Map<string, Set<number>>(),\r\n localMutatingParameters: new Map<string, Set<number>>(),\r\n instanceFactories: new Set(cached?.instanceFactories ?? []),\r\n });\r\n const exported = functions.find((fn) => fn.exported && !fn.memberName);\r\n if (exported) exportedFunctions.set(identity.id, exported.id);\r\n }\r\n if ((identityIndex & 63) === 63 || identityIndex + 1 === identities.length) {\r\n onProgress?.({ phase: \"index-functions\", current: Math.min(functionIndexTotal, identityIndex + 1), total: functionIndexTotal });\r\n }\r\n }\r\n onProgress?.({ phase: \"index-functions\", current: functionIndexTotal, total: functionIndexTotal });\r\n\r\n const callAnalysisTotal = Math.max(1, indexedModules.length);\r\n let analyzedCount = 0;\r\n onProgress?.({ phase: \"analyze-calls\", current: 0, total: callAnalysisTotal });\r\n const analyzedModules = await workerPool.analyzeEffectModules(summariesByModuleId, exportedFunctions, (count) => {\r\n analyzedCount += count;\r\n onProgress?.({ phase: \"analyze-calls\", current: Math.min(analyzedCount, callAnalysisTotal), total: callAnalysisTotal });\r\n });\r\n for (const module of analyzedModules) analyzedFunctionStatesByModule.set(module.id, module.functions);\r\n onProgress?.({ phase: \"analyze-calls\", current: callAnalysisTotal, total: callAnalysisTotal });\r\n } else {\r\n const rawRecords = new Map<string, ParsedRecord>();\r\n onProgress?.({ phase: \"parse\", current: 0, total: candidates.length });\r\n for (let candidateIndex = 0; candidateIndex < identities.length; candidateIndex += 1) {\r\n const identity = identities[candidateIndex];\r\n const { candidate, relativePath } = identity;\r\n try {\r\n if (!dirtyIds.has(identity.id)) continue;\r\n if (candidate.source === undefined && !fs.existsSync(candidate.absolutePath)) continue;\r\n const source = candidate.source ?? fs.readFileSync(candidate.absolutePath, \"utf8\");\r\n const tree = await parseLuau(source);\r\n parseCache?.set(relativePath, { source, tree });\r\n const imports = topLevelImports(tree.rootNode, moduleAliases);\r\n rawRecords.set(identity.id, {\r\n id: identity.id,\r\n keys: identity.keys,\r\n source,\r\n tree,\r\n exportName: topLevelReturnName(tree.rootNode),\r\n imports,\r\n });\r\n } catch {\r\n // Parse diagnostics are handled by the normal scanner. An unparseable module\r\n // simply cannot contribute source-derived effect information.\r\n } finally {\r\n onProgress?.({ phase: \"parse\", current: candidateIndex + 1, total: candidates.length, file: relativePath });\r\n }\r\n }\r\n\r\n const functionIndexTotal = Math.max(1, identities.length * 2);\r\n onProgress?.({ phase: \"index-functions\", current: 0, total: functionIndexTotal });\r\n const functionsByModule = new Map<string, FunctionRecord[]>();\r\n\r\n for (const identity of identities) {\r\n const record = rawRecords.get(identity.id);\r\n if (record) {\r\n const functions = topLevelFunctionRecords(record);\r\n functionsByModule.set(identity.id, functions);\r\n importedModuleIdsByModule.set(identity.id, [...new Set(record.imports.values())].sort());\r\n const summary: SourceEffectModuleSummary = {\r\n effectfulMembers: new Set<string>(),\r\n effectfulExport: false,\r\n mutatingMembers: new Set<string>(),\r\n mutatingExportParameters: new Set<number>(),\r\n mutatingMemberParameters: new Map<string, Set<number>>(),\r\n localMutatingParameters: new Map<string, Set<number>>(),\r\n instanceFactories: new Set<string>(),\r\n };\r\n for (const fn of functions) {\r\n if (fn.memberName && returnedFactoryMember(fn, record.exportName)) summary.instanceFactories.add(fn.memberName);\r\n }\r\n summariesByModuleId.set(identity.id, summary);\r\n } else {\r\n const cached = cachedModules[identity.relativePath];\r\n cachedFunctionStates.set(identity.id, cached?.functions ?? []);\r\n importedModuleIdsByModule.set(identity.id, cached?.importedModuleIds ?? []);\r\n summariesByModuleId.set(identity.id, {\r\n effectfulMembers: new Set<string>(),\r\n effectfulExport: false,\r\n mutatingMembers: new Set<string>(),\r\n mutatingExportParameters: new Set<number>(),\r\n mutatingMemberParameters: new Map<string, Set<number>>(),\r\n localMutatingParameters: new Map<string, Set<number>>(),\r\n instanceFactories: new Set(cached?.instanceFactories ?? []),\r\n });\r\n }\r\n const indexedCount = summariesByModuleId.size;\r\n if ((indexedCount & 63) === 0 || indexedCount === identities.length) {\r\n onProgress?.({ phase: \"index-functions\", current: indexedCount, total: functionIndexTotal });\r\n }\r\n }\r\n\r\n for (let identityIndex = 0; identityIndex < identities.length; identityIndex += 1) {\r\n const identity = identities[identityIndex];\r\n const parsedFunctions = functionsByModule.get(identity.id);\r\n if (parsedFunctions) {\r\n const exported = parsedFunctions.find((fn) => fn.exported && !fn.memberName);\r\n if (exported) exportedFunctions.set(identity.id, exported.id);\r\n } else {\r\n const exported = (cachedFunctionStates.get(identity.id) ?? []).find((fn) => fn.exported && !fn.memberName);\r\n if (exported) exportedFunctions.set(identity.id, exported.id);\r\n }\r\n if ((identityIndex & 63) === 63 || identityIndex + 1 === identities.length) {\r\n onProgress?.({ phase: \"index-functions\", current: identities.length + identityIndex + 1, total: functionIndexTotal });\r\n }\r\n }\r\n\r\n const callAnalysisTotal = Math.max(1, rawRecords.size);\r\n onProgress?.({ phase: \"analyze-calls\", current: 0, total: callAnalysisTotal });\r\n let analyzedModuleCount = 0;\r\n for (const [moduleId, record] of rawRecords) {\r\n const localFunctions = new Map<string, string>();\r\n const memberFunctions = new Map<string, string>();\r\n const functions = functionsByModule.get(moduleId) ?? [];\r\n for (const fn of functions) {\r\n if (fn.localName) localFunctions.set(fn.localName, fn.id);\r\n if (fn.memberName) memberFunctions.set(fn.memberName, fn.id);\r\n }\r\n const moduleInstances = moduleLevelInstanceAliases(record, summariesByModuleId);\r\n for (const fn of functions) {\r\n analyzeFunction(fn, record, localFunctions, memberFunctions, summariesByModuleId, moduleInstances, exportedFunctions);\r\n }\r\n propagateLocalMutationEffects(functions);\r\n analyzedFunctionStatesByModule.set(moduleId, functions.map((fn) => ({\r\n id: fn.id,\r\n moduleId: fn.moduleId,\r\n localName: fn.localName,\r\n memberName: fn.memberName,\r\n exported: fn.exported,\r\n directEffect: fn.directEffect,\r\n mutatesReceiver: fn.mutatesReceiver,\r\n mutatedParameterIndexes: [...fn.mutatedParameterIndexes].sort((a, b) => a - b),\r\n dependencies: [...fn.dependencies].sort(),\r\n mutationCalls: cachedMutationCalls(fn),\r\n })));\r\n analyzedModuleCount += 1;\r\n if ((analyzedModuleCount & 31) === 0 || analyzedModuleCount === rawRecords.size) {\r\n onProgress?.({ phase: \"analyze-calls\", current: analyzedModuleCount, total: callAnalysisTotal });\r\n }\r\n }\r\n }\r\n\r\n const graphAssemblyTotal = Math.max(1, identities.length);\r\n onProgress?.({ phase: \"assemble-graph\", current: 0, total: graphAssemblyTotal });\r\n const functionStates = new Map<string, CachedSourceEffectFunction>();\r\n const cacheModulesResult: Record<string, CachedSourceEffectModule> = {};\r\n let assembledCount = 0;\r\n for (const identity of identities) {\r\n const states: CachedSourceEffectFunction[] = (analyzedFunctionStatesByModule.get(identity.id) ?? cachedFunctionStates.get(identity.id) ?? [])\r\n .map((fn) => ({\r\n ...fn,\r\n mutatesReceiver: fn.mutatesReceiver ?? false,\r\n mutatedParameterIndexes: [...(fn.mutatedParameterIndexes ?? [])],\r\n dependencies: [...fn.dependencies],\r\n mutationCalls: [...(fn.mutationCalls ?? [])],\r\n }));\r\n for (const fn of states) functionStates.set(fn.id, fn);\r\n const summary = summariesByModuleId.get(identity.id)!;\r\n cacheModulesResult[identity.relativePath] = {\r\n hash: identity.hash,\r\n id: identity.id,\r\n keys: identity.keys,\r\n importedModuleIds: importedModuleIdsByModule.get(identity.id) ?? [],\r\n functions: states,\r\n instanceFactories: [...summary.instanceFactories].sort(),\r\n };\r\n assembledCount += 1;\r\n if ((assembledCount & 63) === 0 || assembledCount === identities.length) {\r\n onProgress?.({ phase: \"assemble-graph\", current: assembledCount, total: graphAssemblyTotal });\r\n }\r\n }\r\n\r\n // Parameter/receiver mutation is conditional on what each caller passes.\r\n // Resolve that information across the complete project graph before seeding\r\n // unconditional side effects, so wrappers preserve precise parameter effects\r\n // instead of becoming globally impure.\r\n propagateMutationEffects([...functionStates.values()]);\r\n\r\n // Build a reverse dependency graph once, then propagate effectfulness only\r\n // through callers that can actually become affected. This avoids repeatedly\r\n // rescanning every function until a fixed point is reached.\r\n const reverseDependencies = new Map<string, string[]>();\r\n const functions = [...functionStates.values()];\r\n onProgress?.({ phase: \"resolve\", current: 0, total: functions.length });\r\n for (let index = 0; index < functions.length; index += 1) {\r\n const fn = functions[index];\r\n for (const dependency of fn.dependencies) {\r\n if (!functionStates.has(dependency)) continue;\r\n const dependents = reverseDependencies.get(dependency);\r\n if (dependents) dependents.push(fn.id);\r\n else reverseDependencies.set(dependency, [fn.id]);\r\n }\r\n if ((index & 127) === 127 || index + 1 === functions.length) {\r\n onProgress?.({ phase: \"resolve\", current: index + 1, total: functions.length });\r\n }\r\n }\r\n\r\n const effectful = new Set<string>();\r\n const queue: string[] = [];\r\n for (const fn of functions) {\r\n if (!fn.directEffect) continue;\r\n effectful.add(fn.id);\r\n queue.push(fn.id);\r\n }\r\n\r\n onProgress?.({ phase: \"propagate\", current: 0, total: Math.max(1, functions.length) });\r\n let queueIndex = 0;\r\n while (queueIndex < queue.length) {\r\n const effectfulId = queue[queueIndex++];\r\n for (const dependent of reverseDependencies.get(effectfulId) ?? []) {\r\n if (effectful.has(dependent)) continue;\r\n effectful.add(dependent);\r\n queue.push(dependent);\r\n }\r\n if ((queueIndex & 63) === 0 || queueIndex === queue.length) {\r\n onProgress?.({ phase: \"propagate\", current: Math.min(queueIndex, Math.max(1, functions.length)), total: Math.max(1, functions.length) });\r\n }\r\n }\r\n // The work queue may visit only the effectful subset of the graph. Explicitly\r\n // mark the phase complete once the queue is exhausted instead of leaving a\r\n // partially filled progress bar behind.\r\n onProgress?.({ phase: \"propagate\", current: Math.max(1, functions.length), total: Math.max(1, functions.length) });\r\n\r\n const summarizeTotal = Math.max(1, functions.length + 1);\r\n onProgress?.({ phase: \"summarize\", current: 0, total: summarizeTotal });\r\n for (const summary of summariesByModuleId.values()) {\r\n summary.effectfulMembers.clear();\r\n summary.effectfulExport = false;\r\n summary.mutatingMembers.clear();\r\n summary.mutatingExportParameters.clear();\r\n summary.mutatingMemberParameters.clear();\r\n summary.localMutatingParameters.clear();\r\n }\r\n for (let index = 0; index < functions.length; index += 1) {\r\n const fn = functions[index];\r\n const summary = summariesByModuleId.get(fn.moduleId);\r\n if (summary && fn.memberName && fn.mutatesReceiver) summary.mutatingMembers.add(fn.memberName);\r\n if (summary && fn.mutatedParameterIndexes.length > 0) {\r\n if (fn.exported && !fn.memberName) {\r\n for (const parameterIndex of fn.mutatedParameterIndexes) summary.mutatingExportParameters.add(parameterIndex);\r\n }\r\n if (fn.memberName) {\r\n summary.mutatingMemberParameters.set(fn.memberName, new Set(fn.mutatedParameterIndexes));\r\n }\r\n if (fn.localName) {\r\n summary.localMutatingParameters.set(fn.localName, new Set(fn.mutatedParameterIndexes));\r\n }\r\n }\r\n if (summary && effectful.has(fn.id)) {\r\n if (fn.memberName) summary.effectfulMembers.add(fn.memberName);\r\n if (fn.exported) summary.effectfulExport = true;\r\n }\r\n if ((index & 127) === 127 || index + 1 === functions.length) {\r\n onProgress?.({ phase: \"summarize\", current: index + 1, total: summarizeTotal });\r\n }\r\n }\r\n\r\n // Alias construction can still be noticeable on large projects, so reserve\r\n // the final progress unit until it is genuinely complete.\r\n const effects = buildUniqueFeatureAliases(identities, summariesByModuleId);\r\n onProgress?.({ phase: \"summarize\", current: summarizeTotal, total: summarizeTotal });\r\n\r\n return {\r\n effects,\r\n cacheModules: cacheModulesResult,\r\n };\r\n}\r\n\r\n"
47
49
  ],
48
- "mappings": "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",
49
- "debugId": "420377AA4E8B7A3664756E2164756E21",
50
+ "mappings": "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",
51
+ "debugId": "3E81A30ECFF40BE164756E2164756E21",
50
52
  "names": []
51
53
  }