@colrealpro/react-luau-doctor 0.19.0 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/cli.ts", "../src/config.ts", "../src/ci.ts", "../src/files.ts", "../src/git.ts", "../src/reporter.ts", "../src/scope.ts", "../src/scanner.ts", "../src/cache.ts", "../src/file-analysis.ts", "../src/ast/walk.ts", "../src/ast/context.ts", "../src/ast/react-model.ts", "../src/inline-disables.ts", "../src/parser.ts", "../src/parser-compat.ts", "../src/roblox-semantics.ts", "../src/rules/helpers.ts", "../src/rules/effect-needs-cleanup.ts", "../src/rules/effect-state-rules.ts", "../src/rules/exhaustive-deps.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/module-resolution.ts", "../src/rules/parameter-mutations.ts", "../src/rules/no-prop-mutation.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/parallel.ts", "../src/project-model.ts", "../src/project-effects.ts", "../src/update-check.ts", "../src/update-install.ts", "../src/fix-examples.ts", "../src/progress.ts"],
3
+ "sources": ["../src/cli.ts", "../src/config.ts", "../src/ci.ts", "../src/files.ts", "../src/git.ts", "../src/reporter.ts", "../src/scope.ts", "../src/scanner.ts", "../src/cache.ts", "../src/file-analysis.ts", "../src/ast/walk.ts", "../src/ast/context.ts", "../src/module-resolution.ts", "../src/ast/react-model.ts", "../src/inline-disables.ts", "../src/parser.ts", "../src/parser-compat.ts", "../src/roblox-semantics.ts", "../src/rules/helpers.ts", "../src/rules/effect-needs-cleanup.ts", "../src/rules/effect-state-rules.ts", "../src/rules/exhaustive-deps.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/parameter-mutations.ts", "../src/rules/no-prop-mutation.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/parallel.ts", "../src/project-model.ts", "../src/project-effects.ts", "../src/update-check.ts", "../src/update-install.ts", "../src/fix-examples.ts", "../src/progress.ts"],
4
4
  "sourcesContent": [
5
5
  "#!/usr/bin/env bun\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport packageJson from \"../package.json\";\nimport {\n effectiveSeverity,\n loadConfigWithSource,\n normalizeCategory,\n normalizeRuleSetting,\n writeConfig,\n} from \"./config\";\nimport { runCiCommand } from \"./ci\";\nimport {\n checkForUpdatesNow,\n fetchChangelogReleases,\n getCachedUpdateNotice,\n refreshUpdateCache,\n startBackgroundUpdateRefresh,\n type ChangelogRelease,\n} from \"./update-check\";\nimport { currentUpdateInstallCommand, installLatestVersion } from \"./update-install\";\nimport { fixExampleForRule } from \"./fix-examples\";\nimport { createProgressRenderer } from \"./progress\";\nimport { createInlineSuppressionChecker } from \"./inline-disables\";\nimport { renderAnnotations, renderRulesList, renderTextReport } from \"./reporter\";\nimport { rules } from \"./rules\";\nimport { scanPath } from \"./scanner\";\nimport { aggregateReports, scanProjectWithScope } from \"./scope\";\nimport type {\n BlockingLevel,\n Category,\n Diagnostic,\n DoctorConfig,\n RuleDefinition,\n ScanProgress,\n ScanReport,\n ScanScope,\n Severity,\n} from \"./types\";\n\ninterface CliOptions {\n target: string;\n verbose?: boolean;\n debug: boolean;\n outputDir?: string;\n scoreOnly: boolean;\n json: boolean;\n jsonCompact: boolean;\n jsonOut?: string;\n project?: string;\n scope?: ScanScope;\n base?: string;\n includeUntracked: boolean;\n diff?: boolean | string;\n changedFilesFrom?: string;\n showScore?: boolean;\n categories: Category[];\n staged: boolean;\n maxDurationSeconds?: number;\n blocking?: BlockingLevel;\n respectInlineDisables?: boolean;\n warnings?: boolean;\n noColor: boolean;\n noCache: boolean;\n noParallel: boolean;\n noUpdateCheck: boolean;\n annotations: boolean;\n minSeverity?: Severity;\n help: boolean;\n version: boolean;\n}\n\nconst VERSION = packageJson.version;\nconst SCOPES = new Set<ScanScope>([\"full\", \"files\", \"changed\", \"lines\"]);\nconst BLOCKING = new Set<BlockingLevel>([\"error\", \"warning\", \"none\"]);\nconst SEVERITIES = new Set<Severity>([\"suggestion\", \"warning\", \"error\"]);\n\nprocess.stdout.on(\"error\", (error: Error & { code?: string }) => {\n if (error.code === \"EPIPE\") process.exit(0);\n throw error;\n});\n\nfunction usage(): string {\n return `React-Luau Doctor ${VERSION}\n\nUsage:\n react-luau-doctor [directory] [options]\n react-luau-doctor ci <install|config|upgrade>\n react-luau-doctor why <file:line>\n react-luau-doctor update [--check]\n react-luau-doctor rules <command>\n\nScan options:\n --verbose Show every finding and per-file details\n --debug Print resolved local scan details to stderr\n --output-dir <dir> Write report.json, diagnostics.json, and summary.json\n --score Output only the numeric score\n --json Output one structured JSON report\n --json-compact Emit compact JSON instead of indented JSON\n --json-out <path> Write the JSON report to a file\n --project <name> Select project directories, comma-separated\n --scope <value> full, files, changed, or lines\n --base <ref> Git base ref for files/changed/lines scope\n --include-untracked Include untracked files in git scopes\n --diff [base] Alias for changed scope; false forces full scope\n --changed-files-from <file> Read changed paths from a newline-delimited file\n --no-score Hide the local score\n --category <category> Only report a category; repeatable\n --staged Scan staged git-index content only\n --max-duration <seconds> Stop after a shared scan time budget and report partial results\n --blocking <level> Exit gate: error, warning, or none\n --respect-inline-disables Respect react-luau-doctor inline suppression comments\n --no-respect-inline-disables Ignore inline suppressions for audit scans\n --warnings / --no-warnings Show warnings (default) or errors only\n --annotations Emit GitHub Actions workflow annotations\n --no-color Disable automatic ANSI colors\n --no-cache Disable the persistent OS-level analysis cache\n --no-parallel Disable parallel file analysis\n --no-update-check Disable the automatic update notice\n\nReact-Luau Doctor options:\n --min-severity <level> suggestion, warning, or error\n -v, --version Print the version\n -h, --help Show this help\n\nCI commands:\n ci install [--provider github|gitlab] [--pr] [--blocking <level>] [--scope <value>] [reporting toggles] [-y] [--cwd <cwd>]\n ci config [--provider github|gitlab] [--blocking <level>] [--scope <value>] [reporting toggles] [-y] [--cwd <cwd>]\n ci upgrade [--provider github|gitlab] [--pr] [-y] [--cwd <cwd>]\n Reporting toggles: --comment/--no-comment, --review-comments/--no-review-comments, --commit-status/--no-commit-status\n\nUpdate commands:\n update Update the global installation to the latest release\n update --check Check npm and show release notes without updating\n\nRules commands:\n rules list [--category <name>] [--configured] [--json]\n rules explain <rule> [--json]\n rules set <rule> <severity>\n rules enable <rule> [--severity <level>]\n rules disable <rule>\n rules category <category> <severity>\n\nConfig:\n react-luau-doctor.config.json\n`;\n}\n\n\nfunction automaticUpdateNoticeEnabled(options: CliOptions, machineReadable: boolean): boolean {\n return !options.noUpdateCheck\n && !machineReadable\n && Boolean(process.stdout.isTTY)\n && !process.env.CI\n && process.env.NO_UPDATE_NOTIFIER === undefined\n && process.env.REACT_LUAU_DOCTOR_NO_UPDATE_CHECK === undefined;\n}\n\nfunction renderUpdateHeader(current: string, latest: string, colorized: boolean): string {\n const label = whyPaint(colorized, \"Update available:\", WHY_ANSI.bold, WHY_ANSI.yellow);\n const oldVersion = whyPaint(colorized, `v${current}`, WHY_ANSI.dim);\n const newVersion = whyPaint(colorized, `v${latest}`, WHY_ANSI.bold);\n return `${label} ${oldVersion} → ${newVersion}`;\n}\n\nfunction renderUpdateNotice(current: string, latest: string, colorized: boolean): string {\n return `${renderUpdateHeader(current, latest, colorized)}\\nRun \\`react-luau-doctor update --check\\` to see what's new.`;\n}\n\nfunction renderChangelogInline(value: string, colorized: boolean, ...baseCodes: string[]): string {\n if (!colorized) return value;\n\n const parts: string[] = [];\n let offset = 0;\n for (const match of value.matchAll(/`([^`\\n]+)`/g)) {\n const index = match.index ?? 0;\n if (index > offset) parts.push(whyPaint(true, value.slice(offset, index), ...baseCodes));\n parts.push(whyPaint(true, match[1], WHY_THEME.variable));\n offset = index + match[0].length;\n }\n\n if (parts.length === 0) return whyPaint(true, value, ...baseCodes);\n if (offset < value.length) parts.push(whyPaint(true, value.slice(offset), ...baseCodes));\n return parts.join(\"\");\n}\n\nfunction renderChangelogNotes(notes: string, colorized: boolean): string {\n return notes.split(/\\r?\\n/).map((line) => {\n const heading = /^#{3,6}\\s+(.+)$/.exec(line.trim());\n if (heading) return renderChangelogInline(heading[1], colorized, WHY_ANSI.bold);\n const bullet = /^(\\s*)[-*]\\s+(.+)$/.exec(line);\n if (bullet) return `${bullet[1] || \" \"}• ${renderChangelogInline(bullet[2], colorized)}`;\n return renderChangelogInline(line, colorized);\n }).join(\"\\n\").trim();\n}\n\nfunction renderUpdateCheck(\n current: string,\n latest: string,\n releases: ChangelogRelease[],\n releaseNotesUnavailable: boolean,\n colorized: boolean,\n): string {\n const lines = [\n renderUpdateHeader(current, latest, colorized),\n \"\",\n whyPaint(colorized, \"What's new\", WHY_ANSI.bold),\n ];\n if (releaseNotesUnavailable) {\n lines.push(\" Release notes could not be loaded from GitHub.\");\n } else if (releases.length === 0) {\n lines.push(\" No changelog entries were found between these versions.\");\n } else {\n for (const release of releases) {\n lines.push(\"\", whyPaint(colorized, `v${release.version}`, WHY_ANSI.bold));\n const notes = renderChangelogNotes(release.notes, colorized);\n if (notes) lines.push(notes);\n }\n }\n lines.push(\"\", \"Run `react-luau-doctor update` to update.\");\n return lines.join(\"\\n\");\n}\n\nasync function runUpdateCommand(argv: string[]): Promise<void> {\n if (argv.includes(\"--help\") || argv.includes(\"-h\")) {\n process.stdout.write(\"Usage: react-luau-doctor update [--check]\\n\");\n return;\n }\n if (argv.length > 1 || (argv.length === 1 && argv[0] !== \"--check\")) {\n throw new Error(\"Usage: react-luau-doctor update [--check]\");\n }\n\n const result = await checkForUpdatesNow(VERSION);\n if (!result.updateAvailable) {\n process.stdout.write(`React-Luau Doctor v${VERSION} is up to date.\\n`);\n return;\n }\n\n const colorized = shouldUseColor(false, false);\n if (argv[0] === \"--check\") {\n let releases: ChangelogRelease[] = [];\n let releaseNotesUnavailable = false;\n try {\n releases = await fetchChangelogReleases(VERSION, result.latest);\n } catch {\n releaseNotesUnavailable = true;\n }\n process.stdout.write(`${renderUpdateCheck(VERSION, result.latest, releases, releaseNotesUnavailable, colorized)}\\n`);\n return;\n }\n\n const command = currentUpdateInstallCommand();\n if (!command) {\n throw new Error(\n `Could not determine the global package manager for this installation. Run \\`npm install -g ${packageJson.name}@latest\\` manually.`,\n );\n }\n\n const label = whyPaint(colorized, \"Updating React-Luau Doctor:\", WHY_ANSI.bold, WHY_ANSI.yellow);\n const oldVersion = whyPaint(colorized, `v${VERSION}`, WHY_ANSI.dim);\n const newVersion = whyPaint(colorized, `v${result.latest}`, WHY_ANSI.bold);\n process.stdout.write(`${label} ${oldVersion} → ${newVersion}\\nUsing \\`${command.display}\\`\\n\\n`);\n installLatestVersion(command);\n process.stdout.write(`\\nUpdated React-Luau Doctor to v${result.latest}.\\n`);\n}\n\nfunction splitLongOption(arg: string): { name: string; inlineValue?: string } {\n if (!arg.startsWith(\"--\")) return { name: arg };\n const equals = arg.indexOf(\"=\");\n if (equals < 0) return { name: arg };\n return { name: arg.slice(0, equals), inlineValue: arg.slice(equals + 1) };\n}\n\nfunction requiredValue(argv: string[], index: number, name: string, inlineValue?: string): { value: string; nextIndex: number } {\n if (inlineValue !== undefined) {\n if (!inlineValue) throw new Error(`${name} requires a value`);\n return { value: inlineValue, nextIndex: index };\n }\n const value = argv[index + 1];\n if (!value || value.startsWith(\"-\")) throw new Error(`${name} requires a value`);\n return { value, nextIndex: index + 1 };\n}\n\nfunction shouldUseColor(noColor = false, machineReadable = false): boolean {\n return !noColor && !machineReadable && process.env.NO_COLOR === undefined && Boolean(process.stdout.isTTY);\n}\n\nconst WHY_ANSI = {\n reset: \"\\u001b[0m\",\n bold: \"\\u001b[1m\",\n dim: \"\\u001b[2m\",\n red: \"\\u001b[31m\",\n yellow: \"\\u001b[33m\",\n magenta: \"\\u001b[35m\",\n};\n\nfunction whyRgb(red: number, green: number, blue: number): string {\n return `\\u001b[38;2;${red};${green};${blue}m`;\n}\n\nfunction whyBgRgb(red: number, green: number, blue: number): string {\n return `\\u001b[48;2;${red};${green};${blue}m`;\n}\n\n// Close to VS Code's Dark+ semantic-token palette. Truecolor ANSI is supported by\n// Windows Terminal, modern PowerShell terminals, and the terminals most people use\n// to run the Doctor.\nconst WHY_THEME = {\n foreground: whyRgb(212, 212, 212),\n variable: whyRgb(156, 220, 254),\n function: whyRgb(220, 220, 170),\n string: whyRgb(206, 145, 120),\n number: whyRgb(181, 206, 168),\n comment: whyRgb(106, 153, 85),\n type: whyRgb(78, 201, 176),\n keyword: whyRgb(197, 134, 192),\n declarationKeyword: whyRgb(86, 156, 214),\n literal: whyRgb(86, 156, 214),\n property: whyRgb(156, 220, 254),\n section: whyRgb(78, 201, 176),\n category: whyRgb(79, 193, 255),\n gutter: whyRgb(96, 96, 96),\n activeGutter: whyRgb(244, 71, 71),\n addedBackground: whyBgRgb(36, 72, 48),\n removedBackground: whyBgRgb(82, 43, 47),\n addedLabelBackground: whyBgRgb(28, 83, 50),\n removedLabelBackground: whyBgRgb(103, 45, 50),\n};\n\nfunction whyPaint(enabled: boolean, value: string, ...codes: string[]): string {\n if (!enabled || codes.length === 0) return value;\n return `${codes.join(\"\")}${value}${WHY_ANSI.reset}`;\n}\n\nfunction whySeverityPaint(enabled: boolean, severity: Severity, value: string): string {\n if (severity === \"error\") return whyPaint(enabled, value, WHY_ANSI.bold, WHY_ANSI.red);\n if (severity === \"warning\") return whyPaint(enabled, value, WHY_ANSI.bold, WHY_ANSI.yellow);\n return whyPaint(enabled, value, WHY_ANSI.bold, WHY_ANSI.magenta);\n}\n\nfunction whySectionTitle(enabled: boolean, value: string): string {\n return whyPaint(enabled, value, WHY_ANSI.bold, WHY_THEME.section);\n}\n\nconst LUAU_CONTROL_KEYWORDS = new Set([\n \"and\",\n \"break\",\n \"continue\",\n \"do\",\n \"else\",\n \"elseif\",\n \"end\",\n \"for\",\n \"if\",\n \"in\",\n \"not\",\n \"or\",\n \"repeat\",\n \"return\",\n \"then\",\n \"until\",\n \"while\",\n]);\nconst LUAU_DECLARATION_KEYWORDS = new Set([\"export\", \"function\", \"local\", \"type\"]);\nconst LUAU_LITERAL_KEYWORDS = new Set([\"false\", \"nil\", \"true\"]);\n\ntype WhyLuauTokenKind = \"whitespace\" | \"comment\" | \"string\" | \"number\" | \"identifier\" | \"operator\";\ninterface WhyLuauToken {\n kind: WhyLuauTokenKind;\n text: string;\n start: number;\n end: number;\n}\n\ninterface WhyCharacterRange {\n start: number;\n end: number;\n}\n\nfunction tokenizeWhyLuauLine(line: string): WhyLuauToken[] {\n const tokens: WhyLuauToken[] = [];\n let index = 0;\n const push = (kind: WhyLuauTokenKind, value: string, start: number): void => {\n tokens.push({ kind, text: value, start, end: start + value.length });\n };\n\n while (index < line.length) {\n const rest = line.slice(index);\n const ch = line[index];\n\n const whitespace = /^\\s+/.exec(rest);\n if (whitespace) {\n push(\"whitespace\", whitespace[0], index);\n index += whitespace[0].length;\n continue;\n }\n\n if (rest.startsWith(\"--\")) {\n push(\"comment\", rest, index);\n break;\n }\n\n if (ch === '\"' || ch === \"'\" || ch === \"`\") {\n let tokenEnd = index + 1;\n while (tokenEnd < line.length) {\n if (line.charCodeAt(tokenEnd) === 92) {\n tokenEnd += 2;\n continue;\n }\n if (line[tokenEnd] === ch) {\n tokenEnd += 1;\n break;\n }\n tokenEnd += 1;\n }\n push(\"string\", line.slice(index, tokenEnd), index);\n index = tokenEnd;\n continue;\n }\n\n if (rest.startsWith(\"[[\")) {\n const close = line.indexOf(\"]]\", index + 2);\n const tokenEnd = close >= 0 ? close + 2 : line.length;\n push(\"string\", line.slice(index, tokenEnd), index);\n index = tokenEnd;\n continue;\n }\n\n const number = /^(?:0[xX][0-9a-fA-F_]+|0[bB][01_]+|\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d[\\d_]*)?)/.exec(rest);\n if (number) {\n push(\"number\", number[0], index);\n index += number[0].length;\n continue;\n }\n\n const identifier = /^[A-Za-z_][A-Za-z0-9_]*/.exec(rest);\n if (identifier) {\n push(\"identifier\", identifier[0], index);\n index += identifier[0].length;\n continue;\n }\n\n const operator = /^(?:\\.\\.\\.|\\.\\.|==|~=|<=|>=|::|->|\\+=|-=|\\*=|\\/=|%=|\\^=|[+\\-*\\/%^#=<>:.,;()[\\]{}])/.exec(rest);\n const token = operator?.[0] ?? ch;\n push(\"operator\", token, index);\n index += token.length;\n }\n return tokens;\n}\n\nfunction previousWhyToken(tokens: WhyLuauToken[], index: number): WhyLuauToken | undefined {\n for (let cursor = index - 1; cursor >= 0; cursor -= 1) {\n if (tokens[cursor].kind !== \"whitespace\") return tokens[cursor];\n }\n return undefined;\n}\n\nfunction nextWhyToken(tokens: WhyLuauToken[], index: number): WhyLuauToken | undefined {\n for (let cursor = index + 1; cursor < tokens.length; cursor += 1) {\n if (tokens[cursor].kind !== \"whitespace\") return tokens[cursor];\n }\n return undefined;\n}\n\nfunction whyIdentifierCodes(tokens: WhyLuauToken[], index: number): string[] {\n const value = tokens[index].text;\n if (LUAU_CONTROL_KEYWORDS.has(value)) return [WHY_ANSI.bold, WHY_THEME.keyword];\n if (LUAU_DECLARATION_KEYWORDS.has(value)) return [WHY_ANSI.bold, WHY_THEME.declarationKeyword];\n if (LUAU_LITERAL_KEYWORDS.has(value)) return [WHY_ANSI.bold, WHY_THEME.literal];\n\n const previous = previousWhyToken(tokens, index);\n const next = nextWhyToken(tokens, index);\n const previousText = previous?.text;\n const nextText = next?.text;\n\n if (previousText === \"function\" || nextText === \"(\") return [WHY_THEME.function];\n if ((previousText === \".\" || previousText === \":\") && nextText === \"(\") return [WHY_THEME.function];\n if (previousText === \"type\" || (previousText === \":\" && nextText !== \"(\")) return [WHY_THEME.type];\n if (previousText === \".\" || previousText === \":\") return [WHY_THEME.property];\n if (/^[A-Z]/.test(value) && (nextText === \".\" || nextText === \"<\")) return [WHY_THEME.type];\n if (nextText === \"=\" && previousText !== \"local\") return [WHY_THEME.property];\n return [WHY_THEME.variable];\n}\n\nfunction whyTokenCodes(tokens: WhyLuauToken[], index: number): string[] {\n const token = tokens[index];\n if (token.kind === \"comment\") return [WHY_THEME.comment];\n if (token.kind === \"string\") return [WHY_THEME.string];\n if (token.kind === \"number\") return [WHY_THEME.number];\n if (token.kind === \"identifier\") return whyIdentifierCodes(tokens, index);\n if (token.kind === \"operator\") return [WHY_THEME.foreground];\n return [];\n}\n\nfunction whyRangeContains(ranges: WhyCharacterRange[], position: number): boolean {\n return ranges.some((range) => position >= range.start && position < range.end);\n}\n\nfunction highlightLuauLine(\n line: string,\n colorized: boolean,\n backgroundRanges: WhyCharacterRange[] = [],\n backgroundCode?: string,\n): string {\n if (!colorized || !line) return line;\n const tokens = tokenizeWhyLuauLine(line);\n return tokens.map((token, index) => {\n const foreground = whyTokenCodes(tokens, index);\n const cuts = new Set<number>([token.start, token.end]);\n for (const range of backgroundRanges) {\n if (range.end <= token.start || range.start >= token.end) continue;\n cuts.add(Math.max(token.start, range.start));\n cuts.add(Math.min(token.end, range.end));\n }\n const points = [...cuts].sort((a, b) => a - b);\n const segments: string[] = [];\n for (let point = 0; point < points.length - 1; point += 1) {\n const segmentStart = points[point];\n const segmentEnd = points[point + 1];\n const value = line.slice(segmentStart, segmentEnd);\n const changed = Boolean(backgroundCode) && whyRangeContains(backgroundRanges, segmentStart);\n if (foreground.length === 0 && !changed) segments.push(value);\n else segments.push(whyPaint(true, value, ...foreground, ...(changed && backgroundCode ? [backgroundCode] : [])));\n }\n return segments.join(\"\");\n }).join(\"\");\n}\n\nfunction changedCharacterRanges(before: string, after: string): { before: WhyCharacterRange[]; after: WhyCharacterRange[] } {\n if (before === after) return { before: [], after: [] };\n let prefix = 0;\n while (prefix < before.length && prefix < after.length && before[prefix] === after[prefix]) prefix += 1;\n let suffix = 0;\n while (\n suffix < before.length - prefix\n && suffix < after.length - prefix\n && before[before.length - 1 - suffix] === after[after.length - 1 - suffix]\n ) suffix += 1;\n return {\n before: before.length - suffix > prefix ? [{ start: prefix, end: before.length - suffix }] : [],\n after: after.length - suffix > prefix ? [{ start: prefix, end: after.length - suffix }] : [],\n };\n}\n\ninterface WhyPreviewDiff {\n beforeRanges: WhyCharacterRange[][];\n afterRanges: WhyCharacterRange[][];\n}\n\nfunction whyPreviewDiff(beforeLines: string[], afterLines: string[]): WhyPreviewDiff {\n const rows = beforeLines.length + 1;\n const columns = afterLines.length + 1;\n const dp = Array.from({ length: rows }, () => Array<number>(columns).fill(0));\n for (let beforeIndex = beforeLines.length - 1; beforeIndex >= 0; beforeIndex -= 1) {\n for (let afterIndex = afterLines.length - 1; afterIndex >= 0; afterIndex -= 1) {\n dp[beforeIndex][afterIndex] = beforeLines[beforeIndex] === afterLines[afterIndex]\n ? dp[beforeIndex + 1][afterIndex + 1] + 1\n : Math.max(dp[beforeIndex + 1][afterIndex], dp[beforeIndex][afterIndex + 1]);\n }\n }\n\n const matches: Array<[number, number]> = [];\n let beforeIndex = 0;\n let afterIndex = 0;\n while (beforeIndex < beforeLines.length && afterIndex < afterLines.length) {\n if (beforeLines[beforeIndex] === afterLines[afterIndex]) {\n matches.push([beforeIndex, afterIndex]);\n beforeIndex += 1;\n afterIndex += 1;\n } else if (dp[beforeIndex + 1][afterIndex] >= dp[beforeIndex][afterIndex + 1]) beforeIndex += 1;\n else afterIndex += 1;\n }\n\n const beforeRanges = beforeLines.map(() => [] as WhyCharacterRange[]);\n const afterRanges = afterLines.map(() => [] as WhyCharacterRange[]);\n const sentinels: Array<[number, number]> = [[-1, -1], ...matches, [beforeLines.length, afterLines.length]];\n for (let matchIndex = 0; matchIndex < sentinels.length - 1; matchIndex += 1) {\n const [previousBefore, previousAfter] = sentinels[matchIndex];\n const [nextBefore, nextAfter] = sentinels[matchIndex + 1];\n const beforeStart = previousBefore + 1;\n const afterStart = previousAfter + 1;\n const beforeCount = nextBefore - beforeStart;\n const afterCount = nextAfter - afterStart;\n const paired = Math.min(beforeCount, afterCount);\n\n for (let offset = 0; offset < paired; offset += 1) {\n const left = beforeStart + offset;\n const right = afterStart + offset;\n const ranges = changedCharacterRanges(beforeLines[left], afterLines[right]);\n beforeRanges[left] = ranges.before;\n afterRanges[right] = ranges.after;\n }\n for (let offset = paired; offset < beforeCount; offset += 1) {\n const line = beforeStart + offset;\n beforeRanges[line] = [{ start: 0, end: Math.max(1, beforeLines[line].length) }];\n }\n for (let offset = paired; offset < afterCount; offset += 1) {\n const line = afterStart + offset;\n afterRanges[line] = [{ start: 0, end: Math.max(1, afterLines[line].length) }];\n }\n }\n\n return { beforeRanges, afterRanges };\n}\n\nfunction normalizeWhyPreviewLines(value: string): string[] {\n const lines = value.split(/\\r?\\n/).map((line) => expandWhyTabs(line));\n while (lines.length > 1 && lines[0].trim().length === 0) lines.shift();\n while (lines.length > 1 && lines.at(-1)?.trim().length === 0) lines.pop();\n if (lines.length <= 1) return lines;\n\n const indentation = (line: string): number => line.match(/^ */)?.[0].length ?? 0;\n const nonBlank = lines\n .map((line, index) => ({ line, index }))\n .filter(({ line }) => line.trim().length > 0);\n if (nonBlank.length === 0) return lines;\n\n const firstIndent = indentation(nonBlank[0].line);\n if (firstIndent > 0) {\n const commonIndent = Math.min(...nonBlank.map(({ line }) => indentation(line)));\n return lines.map((line) => line.trim().length === 0 ? \"\" : line.slice(Math.min(commonIndent, indentation(line))));\n }\n\n // Syntax-node text begins at the expression itself, so the first line has no\n // file indentation while continuation lines still include the source file's\n // tabs/spaces. Remove the continuation baseline, but preserve indentation\n // relative to that baseline for nested code inside the expression.\n const continuation = nonBlank.filter(({ index }) => index > nonBlank[0].index);\n if (continuation.length === 0) return lines;\n const continuationBaseline = Math.min(...continuation.map(({ line }) => indentation(line)));\n if (continuationBaseline <= 0) return lines;\n\n return lines.map((line, index) => {\n if (index <= nonBlank[0].index || line.trim().length === 0) return line;\n return line.slice(Math.min(continuationBaseline, indentation(line)));\n });\n}\n\nfunction renderWhyFixPreview(preview: { before: string; after: string; note?: string }, colorized: boolean, textWidth: number): string[] {\n const beforeLines = normalizeWhyPreviewLines(preview.before);\n const afterLines = normalizeWhyPreviewLines(preview.after);\n const diff = whyPreviewDiff(beforeLines, afterLines);\n const currentLabel = colorized\n ? whyPaint(true, \" CURRENT \", WHY_ANSI.bold, WHY_THEME.foreground, WHY_THEME.removedLabelBackground)\n : \"CURRENT\";\n const suggestedLabel = colorized\n ? whyPaint(true, \" SUGGESTED \", WHY_ANSI.bold, WHY_THEME.foreground, WHY_THEME.addedLabelBackground)\n : \"SUGGESTED\";\n const lines: string[] = [currentLabel];\n beforeLines.forEach((line, index) => {\n lines.push(` ${highlightLuauLine(line, colorized, diff.beforeRanges[index], WHY_THEME.removedBackground)}`);\n });\n lines.push(\"\", suggestedLabel);\n afterLines.forEach((line, index) => {\n lines.push(` ${highlightLuauLine(line, colorized, diff.afterRanges[index], WHY_THEME.addedBackground)}`);\n });\n if (preview.note) {\n lines.push(\"\", ...wrapWhyWords(preview.note, textWidth).map((line) => whyPaint(colorized, line, WHY_ANSI.dim)));\n }\n return lines;\n}\n\nfunction wrapWhyWords(value: string, width: number): string[] {\n const safeWidth = Math.max(32, width);\n const paragraphs = value.split(/\\r?\\n/);\n const lines: string[] = [];\n\n for (let paragraphIndex = 0; paragraphIndex < paragraphs.length; paragraphIndex += 1) {\n const paragraph = paragraphs[paragraphIndex].trim().replace(/\\s+/g, \" \");\n if (!paragraph) {\n lines.push(\"\");\n continue;\n }\n\n let line = \"\";\n for (const word of paragraph.split(\" \")) {\n if (!line) {\n line = word;\n continue;\n }\n if (line.length + 1 + word.length <= safeWidth) {\n line += ` ${word}`;\n continue;\n }\n lines.push(line);\n line = word;\n }\n if (line) lines.push(line);\n if (paragraphIndex < paragraphs.length - 1 && paragraphs[paragraphIndex + 1].trim()) lines.push(\"\");\n }\n\n return lines.length > 0 ? lines : [\"\"];\n}\n\nfunction whyTextWidth(): number {\n return Math.max(60, (process.stdout.columns ?? 120) - 2);\n}\n\nfunction parseBlocking(value: string, name: string): BlockingLevel {\n if (!BLOCKING.has(value as BlockingLevel)) throw new Error(`${name} must be error, warning, or none`);\n return value as BlockingLevel;\n}\n\nfunction parseArgs(argv: string[]): CliOptions {\n const options: CliOptions = {\n target: \".\",\n debug: false,\n scoreOnly: false,\n json: false,\n jsonCompact: false,\n includeUntracked: false,\n categories: [],\n staged: false,\n annotations: false,\n noColor: false,\n noCache: false,\n noParallel: false,\n noUpdateCheck: false,\n help: false,\n version: false,\n };\n\n let sawTarget = false;\n for (let index = 0; index < argv.length; index += 1) {\n const raw = argv[index];\n const { name: arg, inlineValue } = splitLongOption(raw);\n\n if (arg === \"--verbose\") options.verbose = true;\n else if (arg === \"--debug\") options.debug = true;\n else if (arg === \"--score\") options.scoreOnly = true;\n else if (arg === \"--json\") options.json = true;\n else if (arg === \"--json-compact\") options.jsonCompact = true;\n else if (arg === \"--include-untracked\") options.includeUntracked = true;\n else if (arg === \"--no-score\") options.showScore = false;\n else if (arg === \"--staged\") options.staged = true;\n else if (arg === \"--no-respect-inline-disables\") options.respectInlineDisables = false;\n else if (arg === \"--respect-inline-disables\") options.respectInlineDisables = true;\n else if (arg === \"--warnings\") options.warnings = true;\n else if (arg === \"--no-warnings\") options.warnings = false;\n else if (arg === \"--no-color\") options.noColor = true;\n else if (arg === \"--no-cache\") options.noCache = true;\n else if (arg === \"--no-parallel\") options.noParallel = true;\n else if (arg === \"--no-update-check\") options.noUpdateCheck = true;\n else if (arg === \"--annotations\") options.annotations = true;\n else if (arg === \"--help\" || arg === \"-h\") options.help = true;\n else if (arg === \"--version\" || arg === \"-v\") options.version = true;\n else if (arg === \"--output-dir\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n options.outputDir = parsed.value;\n index = parsed.nextIndex;\n } else if (arg === \"--json-out\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n options.jsonOut = parsed.value;\n index = parsed.nextIndex;\n } else if (arg === \"--project\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n options.project = parsed.value;\n index = parsed.nextIndex;\n } else if (arg === \"--scope\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n if (!SCOPES.has(parsed.value as ScanScope)) throw new Error(\"--scope must be full, files, changed, or lines\");\n options.scope = parsed.value as ScanScope;\n index = parsed.nextIndex;\n } else if (arg === \"--base\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n options.base = parsed.value;\n index = parsed.nextIndex;\n } else if (arg === \"--diff\") {\n if (inlineValue !== undefined) options.diff = inlineValue === \"false\" ? false : inlineValue === \"true\" ? true : inlineValue;\n else {\n const next = argv[index + 1];\n if (next && !next.startsWith(\"-\")) {\n options.diff = next === \"false\" ? false : next === \"true\" ? true : next;\n index += 1;\n } else options.diff = true;\n }\n } else if (arg === \"--changed-files-from\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n options.changedFilesFrom = parsed.value;\n index = parsed.nextIndex;\n } else if (arg === \"--category\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n const category = normalizeCategory(parsed.value);\n if (!category) throw new Error(`Unknown category: ${parsed.value}`);\n options.categories.push(category);\n index = parsed.nextIndex;\n } else if (arg === \"--max-duration\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n const seconds = Number(parsed.value);\n if (!Number.isFinite(seconds) || seconds <= 0) throw new Error(\"--max-duration must be a positive number of seconds\");\n options.maxDurationSeconds = seconds;\n index = parsed.nextIndex;\n } else if (arg === \"--blocking\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n options.blocking = parseBlocking(parsed.value, arg);\n index = parsed.nextIndex;\n } else if (arg === \"--min-severity\") {\n const parsed = requiredValue(argv, index, arg, inlineValue);\n if (!SEVERITIES.has(parsed.value as Severity)) throw new Error(\"--min-severity must be suggestion, warning, or error\");\n options.minSeverity = parsed.value as Severity;\n index = parsed.nextIndex;\n } else if (arg.startsWith(\"-\")) {\n throw new Error(`Unknown option: ${raw}`);\n } else if (!sawTarget) {\n options.target = raw;\n sawTarget = true;\n } else {\n throw new Error(`Unexpected argument: ${raw}`);\n }\n }\n\n return options;\n}\n\nfunction resolveScope(options: CliOptions, config: DoctorConfig): { scope: ScanScope; base?: string } {\n if (options.scope) return { scope: options.scope, base: options.base ?? config.base };\n if (options.diff !== undefined) {\n if (options.diff === false) return { scope: \"full\", base: options.base ?? config.base };\n return { scope: \"changed\", base: options.base ?? (typeof options.diff === \"string\" ? options.diff : config.base) };\n }\n if (config.scope) return { scope: config.scope, base: options.base ?? config.base };\n if (config.diff !== undefined) {\n if (config.diff === false) return { scope: \"full\", base: options.base ?? config.base };\n return { scope: \"changed\", base: options.base ?? (typeof config.diff === \"string\" ? config.diff : config.base) };\n }\n if (options.changedFilesFrom) return { scope: \"files\", base: options.base ?? config.base };\n return { scope: \"full\", base: options.base ?? config.base };\n}\n\nfunction validateModeFlags(options: CliOptions, scope: ScanScope): void {\n if (options.scope && options.diff !== undefined && options.diff !== false) throw new Error(\"Cannot combine --scope and --diff; pick one mode\");\n if (options.staged && options.diff !== undefined && options.diff !== false) throw new Error(\"Cannot combine --staged and --diff; pick one mode\");\n if (options.staged && (scope === \"full\" || scope === \"changed\")) {\n throw new Error(`Cannot combine --staged with --scope ${scope}; use --scope files or --scope lines, or omit --scope`);\n }\n if (options.includeUntracked && options.staged) throw new Error(\"Cannot combine --include-untracked with --staged; the git index never holds untracked files\");\n if (options.includeUntracked && scope === \"full\") throw new Error(\"--include-untracked requires files, changed, or lines scope\");\n if (options.scoreOnly && options.json) throw new Error(\"Cannot combine --score and --json; pick one output mode\");\n if (options.scoreOnly && options.showScore === false) throw new Error(\"Cannot combine --score with --no-score\");\n if (options.annotations && (options.json || options.scoreOnly)) throw new Error(\"--annotations cannot be combined with --json or --score\");\n}\n\nfunction findProjectByName(root: string, name: string): string | null {\n const direct = path.resolve(root, name);\n if (fs.existsSync(direct) && fs.statSync(direct).isDirectory()) return direct;\n\n const ignored = new Set([\".git\", \"node_modules\", \"Packages\", \"DevPackages\", \"ServerPackages\", \"dist\", \"vendor\"]);\n const queue: Array<{ directory: string; depth: number }> = [{ directory: root, depth: 0 }];\n const matches: string[] = [];\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (current.depth >= 3) continue;\n for (const entry of fs.readdirSync(current.directory, { withFileTypes: true })) {\n if (!entry.isDirectory() || ignored.has(entry.name)) continue;\n const absolute = path.join(current.directory, entry.name);\n if (entry.name === name) matches.push(absolute);\n queue.push({ directory: absolute, depth: current.depth + 1 });\n }\n }\n if (matches.length > 1) throw new Error(`Project selector \"${name}\" is ambiguous: ${matches.map((match) => path.relative(root, match)).join(\", \")}`);\n return matches[0] ?? null;\n}\n\nfunction resolveProjectRoots(root: string, projectFlag: string | undefined, config: DoctorConfig): string[] {\n const requested = projectFlag ? projectFlag.split(\",\").map((value) => value.trim()).filter(Boolean) : config.projects ?? [];\n if (requested.length === 0) return [root];\n\n return [...new Set(requested.map((project) => {\n const resolved = findProjectByName(root, project);\n if (!resolved) throw new Error(`Could not find project: ${project}`);\n return resolved;\n }))];\n}\n\nfunction serializeReport(report: ScanReport, compact: boolean): string {\n return compact ? JSON.stringify(report) : JSON.stringify(report, null, 2);\n}\n\nfunction writeJsonFile(filename: string, value: unknown, compact = false): void {\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n fs.writeFileSync(filename, `${compact ? JSON.stringify(value) : JSON.stringify(value, null, 2)}\\n`);\n}\n\nfunction writeDiagnosticsDump(directory: string, report: ScanReport): void {\n fs.mkdirSync(directory, { recursive: true });\n writeJsonFile(path.join(directory, \"report.json\"), report);\n writeJsonFile(path.join(directory, \"diagnostics.json\"), report.diagnostics);\n writeJsonFile(path.join(directory, \"summary.json\"), {\n schemaVersion: report.schemaVersion,\n root: report.root,\n scope: report.scope ?? \"full\",\n base: report.base ?? null,\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles,\n partial: report.partial,\n skippedFiles: report.skippedFiles ?? [],\n durationMs: report.durationMs,\n score: report.score,\n counts: report.counts,\n });\n}\n\nfunction shouldBlock(report: ScanReport, level: BlockingLevel): boolean {\n if (level === \"none\") return false;\n if (level === \"warning\") return report.counts.error > 0 || report.counts.warning > 0;\n return report.counts.error > 0;\n}\n\nfunction findRule(requested: string): RuleDefinition {\n const rule = rules.find((candidate) => candidate.id === requested || candidate.id.endsWith(`/${requested}`));\n if (!rule) throw new Error(`Unknown rule: ${requested}`);\n return rule;\n}\n\nfunction parseCommandCwd(argv: string[]): { cwd: string; remaining: string[] } {\n let cwd = process.cwd();\n const remaining: string[] = [];\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (arg === \"-c\" || arg === \"--cwd\") {\n const value = argv[++index];\n if (!value) throw new Error(`${arg} requires a path`);\n cwd = path.resolve(value);\n } else remaining.push(arg);\n }\n return { cwd, remaining };\n}\n\nfunction ruleSeverityMap(config: DoctorConfig): Map<string, string> {\n return new Map(rules.map((rule) => [rule.id, effectiveSeverity(rule.severity, rule.id, config) ?? \"off\"]));\n}\n\nfunction runRulesCommand(argv: string[]): void {\n const noColor = argv.includes(\"--no-color\");\n const cleaned = argv.filter((arg) => arg !== \"--no-color\");\n const action = cleaned[0] ?? \"list\";\n const { cwd, remaining } = parseCommandCwd(cleaned.slice(1));\n const loaded = loadConfigWithSource(cwd);\n const config = loaded.config;\n\n if (action === \"list\") {\n let category: Category | null = null;\n let configured = false;\n let json = false;\n\n for (let index = 0; index < remaining.length; index += 1) {\n const arg = remaining[index];\n if (arg === \"--configured\") configured = true;\n else if (arg === \"--json\") json = true;\n else if (arg === \"--category\") {\n const value = remaining[++index];\n if (!value) throw new Error(\"rules list --category requires a name\");\n category = normalizeCategory(value);\n if (!category) throw new Error(`Unknown category: ${value}`);\n } else throw new Error(`Unknown rules list option: ${arg}`);\n }\n\n const severityMap = ruleSeverityMap(config);\n const filtered = rules.filter((rule) => {\n if (category && rule.category !== category) return false;\n if (configured && config.rules?.[rule.id] === undefined) return false;\n return true;\n });\n\n if (json) {\n process.stdout.write(`${JSON.stringify(filtered.map((rule) => ({\n id: rule.id,\n severity: severityMap.get(rule.id),\n defaultSeverity: rule.severity,\n category: rule.category,\n description: rule.description,\n })), null, 2)}\\n`);\n } else process.stdout.write(`${renderRulesList(filtered, process.stdout.columns ?? 120, severityMap, shouldUseColor(noColor))}\\n`);\n return;\n }\n\n if (action === \"explain\") {\n const requested = remaining[0];\n if (!requested) throw new Error(\"rules explain requires a rule id\");\n const json = remaining.slice(1).includes(\"--json\");\n const extra = remaining.slice(1).filter((arg) => arg !== \"--json\");\n if (extra.length > 0) throw new Error(`Unknown rules explain option: ${extra[0]}`);\n const rule = findRule(requested);\n const currentSeverity = effectiveSeverity(rule.severity, rule.id, config) ?? \"off\";\n const result = {\n id: rule.id,\n severity: currentSeverity,\n defaultSeverity: rule.severity,\n category: rule.category,\n description: rule.description,\n example: fixExampleForRule(rule.id),\n };\n if (json) process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n else {\n const colorized = shouldUseColor(noColor);\n const width = whyTextWidth();\n const lines = [\n whyPaint(colorized, rule.id, WHY_ANSI.bold, WHY_ANSI.magenta),\n `${rule.category} | Severity: ${currentSeverity} | Default: ${rule.severity}`,\n \"\",\n whySectionTitle(colorized, \"What this checks\"),\n ...wrapWhyWords(rule.description, width),\n ];\n if (result.example) {\n lines.push(\"\", whySectionTitle(colorized, \"Example fix\"),\n ...renderWhyFixPreview(result.example, colorized, width));\n }\n lines.push(\"\", ...wrapWhyWords(\"This is an example pattern, not an automatic edit. To explain a finding in your code, run:\", width),\n \" react-luau-doctor why <file:line>\");\n process.stdout.write(`${lines.join(\"\\n\")}\\n`);\n }\n return;\n }\n\n if (action === \"set\") {\n const requested = remaining[0];\n const rawSeverity = remaining[1];\n if (!requested || !rawSeverity) throw new Error(\"rules set requires <rule> <severity>\");\n const rule = findRule(requested);\n const severity = normalizeRuleSetting(rawSeverity);\n if (!severity) throw new Error(\"Rule severity must be off, suggestion, warning/warn, or error\");\n const filename = writeConfig(cwd, (current) => ({ ...current, rules: { ...current.rules, [rule.id]: severity } }));\n process.stdout.write(`Set ${rule.id} to ${severity} in ${path.relative(cwd, filename)}\\n`);\n return;\n }\n\n if (action === \"enable\") {\n const requested = remaining[0];\n if (!requested) throw new Error(\"rules enable requires a rule id\");\n const rule = findRule(requested);\n let severity: Severity = rule.severity;\n const severityIndex = remaining.indexOf(\"--severity\");\n if (severityIndex >= 0) {\n const value = remaining[severityIndex + 1];\n const normalized = value ? normalizeRuleSetting(value) : null;\n if (!normalized || normalized === \"off\") throw new Error(\"--severity must be suggestion, warning/warn, or error\");\n severity = normalized;\n }\n const filename = writeConfig(cwd, (current) => ({ ...current, rules: { ...current.rules, [rule.id]: severity } }));\n process.stdout.write(`Enabled ${rule.id} at ${severity} in ${path.relative(cwd, filename)}\\n`);\n return;\n }\n\n if (action === \"disable\") {\n const requested = remaining[0];\n if (!requested) throw new Error(\"rules disable requires a rule id\");\n const rule = findRule(requested);\n const filename = writeConfig(cwd, (current) => ({ ...current, rules: { ...current.rules, [rule.id]: \"off\" } }));\n process.stdout.write(`Disabled ${rule.id} in ${path.relative(cwd, filename)}\\n`);\n return;\n }\n\n if (action === \"category\") {\n const rawCategory = remaining[0];\n const rawSeverity = remaining[1];\n if (!rawCategory || !rawSeverity) throw new Error(\"rules category requires <category> <severity>\");\n const category = normalizeCategory(rawCategory);\n const severity = normalizeRuleSetting(rawSeverity);\n if (!category) throw new Error(`Unknown category: ${rawCategory}`);\n if (!severity) throw new Error(\"Category severity must be off, suggestion, warning/warn, or error\");\n const categoryRules = rules.filter((rule) => rule.category === category);\n const filename = writeConfig(cwd, (current) => ({\n ...current,\n rules: Object.fromEntries([\n ...Object.entries(current.rules ?? {}),\n ...categoryRules.map((rule) => [rule.id, severity] as const),\n ]),\n }));\n process.stdout.write(`Set ${categoryRules.length} ${category} rules to ${severity} in ${path.relative(cwd, filename)}\\n`);\n return;\n }\n\n throw new Error(`Unknown rules command: ${action}`);\n}\n\nfunction whyLocationContains(location: Diagnostic[\"location\"], line: number, column?: number): boolean {\n if (line < location.line || line > location.endLine) return false;\n if (column === undefined) return true;\n if (location.line === location.endLine) return column >= location.column && column <= location.endColumn;\n if (line === location.line) return column >= location.column;\n if (line === location.endLine) return column <= location.endColumn;\n return true;\n}\n\nfunction whyDiagnosticRanges(diagnostic: Diagnostic): Diagnostic[\"location\"][] {\n return diagnostic.highlights && diagnostic.highlights.length > 0 ? diagnostic.highlights : [diagnostic.location];\n}\n\nfunction whyLocationMatches(diagnostic: Diagnostic, line: number, column?: number): boolean {\n if (whyLocationContains(diagnostic.location, line, column)) return true;\n return (diagnostic.highlights ?? []).some((location) => whyLocationContains(location, line, column));\n}\n\nfunction expandWhyTabs(value: string, tabWidth = 4): string {\n let result = \"\";\n let column = 0;\n for (const character of value) {\n if (character === \"\\t\") {\n const spaces = tabWidth - (column % tabWidth);\n result += \" \".repeat(spaces);\n column += spaces;\n } else {\n result += character;\n column += 1;\n }\n }\n return result;\n}\n\nfunction whyVisualColumn(line: string, column: number): number {\n return expandWhyTabs(line.slice(0, Math.max(0, column - 1))).length + 1;\n}\n\nfunction whyFrameIntervals(ranges: Diagnostic[\"location\"][], sourceLength: number): Array<{ start: number; end: number }> {\n const intervals = ranges\n .map((range) => ({\n start: Math.max(1, range.line - 2),\n end: Math.min(sourceLength, range.endLine + 2),\n }))\n .sort((a, b) => a.start - b.start || a.end - b.end);\n const merged: Array<{ start: number; end: number }> = [];\n for (const interval of intervals) {\n const previous = merged.at(-1);\n if (previous && interval.start <= previous.end + 1) previous.end = Math.max(previous.end, interval.end);\n else merged.push({ ...interval });\n }\n return merged;\n}\n\nfunction whyCaretForLine(sourceLine: string, line: number, ranges: Diagnostic[\"location\"][]): string | null {\n const expanded = expandWhyTabs(sourceLine);\n const marks = Array.from({ length: Math.max(1, expanded.length + 1) }, () => false);\n let hasMark = false;\n for (const range of ranges) {\n if (line < range.line || line > range.endLine) continue;\n const rawStart = line === range.line ? range.column : 1;\n const rawEnd = line === range.endLine ? range.endColumn : sourceLine.length + 1;\n const start = Math.max(1, whyVisualColumn(sourceLine, rawStart));\n const end = Math.max(start + 1, whyVisualColumn(sourceLine, rawEnd));\n for (let column = start - 1; column < Math.min(marks.length, end - 1); column += 1) {\n marks[column] = true;\n hasMark = true;\n }\n }\n if (!hasMark) return null;\n let value = marks.map((marked) => marked ? \"^\" : \" \").join(\"\").replace(/\\s+$/, \"\");\n if (!value) value = \"^\";\n return value;\n}\n\nfunction renderWhyCodeFrame(filename: string, diagnostic: Diagnostic, colorized: boolean): string {\n const source = fs.readFileSync(filename, \"utf8\").split(/\\r?\\n/);\n const ranges = whyDiagnosticRanges(diagnostic);\n const intervals = whyFrameIntervals(ranges, source.length);\n const width = String(Math.max(...intervals.map((interval) => interval.end), 1)).length;\n const lines: string[] = [];\n\n intervals.forEach((interval, intervalIndex) => {\n if (intervalIndex > 0) {\n lines.push(`${whyPaint(colorized, \"…\", WHY_ANSI.dim, WHY_THEME.gutter)} ${\" \".repeat(width)} ${whyPaint(colorized, \"|\", WHY_ANSI.dim, WHY_THEME.gutter)} ${whyPaint(colorized, \"…\", WHY_ANSI.dim, WHY_THEME.gutter)}`);\n }\n for (let line = interval.start; line <= interval.end; line += 1) {\n const sourceLine = source[line - 1] ?? \"\";\n const caretText = whyCaretForLine(sourceLine, line, ranges);\n const active = caretText !== null;\n const marker = active ? whyPaint(colorized, \">\", WHY_ANSI.bold, WHY_ANSI.red) : whyPaint(colorized, \"|\", WHY_ANSI.dim, WHY_THEME.gutter);\n const number = whyPaint(colorized, String(line).padStart(width), active ? WHY_ANSI.bold : WHY_ANSI.dim, active ? WHY_THEME.activeGutter : WHY_THEME.gutter);\n const code = highlightLuauLine(expandWhyTabs(sourceLine), colorized);\n lines.push(`${marker} ${number} ${whyPaint(colorized, \"|\", WHY_ANSI.dim, WHY_THEME.gutter)} ${code}`);\n if (caretText) {\n const caret = whyPaint(colorized, caretText, WHY_ANSI.bold, WHY_ANSI.red);\n lines.push(` ${\" \".repeat(width)} ${whyPaint(colorized, \"|\", WHY_ANSI.dim, WHY_THEME.gutter)} ${caret}`);\n }\n }\n });\n\n return lines.join(\"\\n\");\n}\n\nfunction whySeverityMeaning(severity: Severity): string {\n if (severity === \"error\") return \"This can cause incorrect behavior or violate React's rules and should normally be fixed.\";\n if (severity === \"warning\") return \"This pattern is very likely to be a real issue in the code shown and is normally worth fixing.\";\n return \"This may be intentional. Doctor found a plausible improvement, but the right choice depends on how this value or pattern is meant to affect rendering.\";\n}\n\nfunction whyRuleSpecificContext(diagnostic: Diagnostic): string | null {\n if (diagnostic.rule === \"react-luau/prefer-binding-over-state-candidate\") {\n return \"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 if (diagnostic.rule === \"react-luau/prefer-binding-over-state\") {\n return \"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 if (diagnostic.rule === \"react-luau/rerender-high-frequency-state\") {\n return \"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 if (\n diagnostic.rule === \"react-luau/no-side-effects-in-render\" &&\n diagnostic.message.includes(\"code it calls eventually changes state outside the current render\")\n ) {\n return \"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.\";\n }\n return null;\n}\n\nfunction whyRuleCaveat(diagnostic: Diagnostic): string | null {\n if (diagnostic.rule === \"react-luau/prefer-binding-over-state-candidate\") {\n return \"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 if (diagnostic.rule === \"react-luau/prefer-binding-over-state\") {\n return \"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 if (diagnostic.rule === \"react-luau/rerender-high-frequency-state\") {\n return \"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 return null;\n}\n\nfunction renderWhyDiagnostic(filename: string, diagnostic: Diagnostic, colorized: boolean): string {\n const rule = findRule(diagnostic.rule);\n const textWidth = whyTextWidth();\n const lines: string[] = [\n whyPaint(colorized, diagnostic.rule, WHY_ANSI.bold, WHY_ANSI.magenta),\n whyPaint(colorized, `${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column}`, WHY_ANSI.bold),\n [\n `${whyPaint(colorized, \"Severity\", WHY_ANSI.bold)}: ${whySeverityPaint(colorized, diagnostic.severity, diagnostic.severity)}`,\n `${whyPaint(colorized, \"Category\", WHY_ANSI.bold)}: ${whyPaint(colorized, diagnostic.category, WHY_ANSI.bold, WHY_THEME.category)}`,\n ].join(whyPaint(colorized, \" | \", WHY_ANSI.dim)),\n \"\",\n renderWhyCodeFrame(filename, diagnostic, colorized),\n \"\",\n whySectionTitle(colorized, \"Why this fired\"),\n ...wrapWhyWords(diagnostic.message, textWidth),\n ];\n\n const specificContext = whyRuleSpecificContext(diagnostic);\n if (specificContext) lines.push(\"\", ...wrapWhyWords(specificContext, textWidth));\n\n lines.push(\n \"\",\n whySectionTitle(colorized, \"What the rule checks\"),\n ...wrapWhyWords(rule.description, textWidth),\n \"\",\n whySectionTitle(colorized, \"Confidence\"),\n ...wrapWhyWords(whySeverityMeaning(diagnostic.severity), textWidth),\n );\n\n if (diagnostic.help) {\n lines.push(\"\", whySectionTitle(colorized, \"How to fix\"), ...wrapWhyWords(diagnostic.help, textWidth));\n }\n const fixPreview = diagnostic.fixPreview ?? fixExampleForRule(diagnostic.rule);\n if (fixPreview) {\n const previewTitle = fixPreview.kind === \"exact\" ? \"Suggested change\" : \"Example pattern\";\n lines.push(\"\", whySectionTitle(colorized, previewTitle), ...renderWhyFixPreview(fixPreview, colorized, textWidth));\n }\n const caveat = whyRuleCaveat(diagnostic);\n if (caveat) {\n lines.push(\"\", whySectionTitle(colorized, \"When the current approach may be intentional\"), ...wrapWhyWords(caveat, textWidth));\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nasync function scanWhyFile(\n filename: string,\n cwd: string,\n cache: boolean,\n onProgress?: (progress: ScanProgress) => void,\n): Promise<ScanReport> {\n // Scan only the requested file, but build its project model from the same root\n // as a normal project scan. Project-aware rules otherwise disappear when `why`\n // is invoked on a single file. Suppressions are evaluated after this one audit\n // scan so `why` never rebuilds project context just to discover hidden findings.\n return scanPath(cwd, {\n files: [{ absolutePath: filename, forceScan: true }],\n respectInlineDisables: false,\n onProgress,\n cache,\n });\n}\n\nasync function runWhy(\n location: string,\n cwd: string,\n noColor = false,\n cache = true,\n onProgress?: (progress: ScanProgress) => void,\n beforeOutput?: () => void,\n): Promise<void> {\n const match = location.match(/^(.*):(\\d+)(?::(\\d+))?$/);\n if (!match) throw new Error(\"Location must be file:line or file:line:column\");\n const filename = path.resolve(cwd, match[1]);\n const line = Number(match[2]);\n const column = match[3] === undefined ? undefined : Number(match[3]);\n if (!fs.existsSync(filename)) throw new Error(`File does not exist: ${match[1]}`);\n\n const colorized = shouldUseColor(noColor, false);\n const source = fs.readFileSync(filename, \"utf8\");\n const isSuppressed = createInlineSuppressionChecker(source);\n const auditReport = await scanWhyFile(filename, cwd, cache, onProgress);\n // `why` renders its own output before returning to the CLI entry point. Clear\n // the transient progress line here so the diagnostic never starts on the same\n // terminal row as a completed progress bar.\n beforeOutput?.();\n const matching = auditReport.diagnostics.filter((diagnostic) => whyLocationMatches(diagnostic, line, column));\n const visible = matching.filter((diagnostic) => !isSuppressed(diagnostic.rule, diagnostic.location.line));\n\n if (visible.length > 0) {\n for (let index = 0; index < visible.length; index += 1) {\n if (index > 0) process.stdout.write(\"\\n\");\n process.stdout.write(renderWhyDiagnostic(filename, visible[index], colorized));\n }\n return;\n }\n\n const suppressed = matching.filter((diagnostic) => isSuppressed(diagnostic.rule, diagnostic.location.line));\n if (suppressed.length > 0) {\n process.stdout.write(`No visible diagnostic at ${location}. ${suppressed.length} diagnostic${suppressed.length === 1 ? \" is\" : \"s are\"} hidden by an inline react-luau-doctor suppression.\\n\\n`);\n for (let index = 0; index < suppressed.length; index += 1) {\n if (index > 0) process.stdout.write(\"\\n\");\n process.stdout.write(renderWhyDiagnostic(filename, suppressed[index], colorized));\n }\n return;\n }\n\n const nearby = auditReport.diagnostics\n .filter((diagnostic) => !isSuppressed(diagnostic.rule, diagnostic.location.line))\n .filter((diagnostic) => Math.abs(diagnostic.location.line - line) <= 3)\n .sort((a, b) => Math.abs(a.location.line - line) - Math.abs(b.location.line - line));\n process.stdout.write(`No React-Luau Doctor diagnostic found at ${location}.\\n`);\n if (nearby.length > 0) {\n process.stdout.write(\"Nearby diagnostics in this file:\\n\");\n for (const diagnostic of nearby.slice(0, 5)) {\n process.stdout.write(` ${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column} ${diagnostic.rule}\\n`);\n }\n }\n}\n\nfunction pathIsInside(parent: string, child: string): boolean {\n const relative = path.relative(parent, child);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nasync function runScan(\n options: CliOptions,\n onProgress?: (progress: ScanProgress) => void,\n): Promise<ScanReport> {\n const commandRoot = process.cwd();\n const target = path.resolve(commandRoot, options.target);\n if (!fs.existsSync(target)) throw new Error(`Scan path does not exist: ${options.target}`);\n const targetStat = fs.statSync(target);\n const scanRoot = targetStat.isFile() ? path.dirname(target) : target;\n\n // CLI configuration is owned by the directory the command was launched from.\n // Narrowing the scan target must not silently switch to a different config.\n const loaded = loadConfigWithSource(commandRoot);\n const config = loaded.config;\n const resolvedScope = resolveScope(options, config);\n const scope = options.staged && options.scope === undefined ? \"files\" : resolvedScope.scope;\n validateModeFlags(options, scope);\n\n\n if (targetStat.isFile() && (scope !== \"full\" || options.staged || options.changedFilesFrom)) {\n throw new Error(\"Git scopes require a directory target; scan the containing project directory instead\");\n }\n\n const targetInsideCommandRoot = pathIsInside(commandRoot, target);\n const selectionRoot = targetInsideCommandRoot ? commandRoot : scanRoot;\n const requestedProjectRoots = resolveProjectRoots(selectionRoot, options.project, config);\n const projectTargets = requestedProjectRoots.flatMap((projectRoot) => {\n if (pathIsInside(projectRoot, target)) return [{ projectRoot, targetRoot: target }];\n if (pathIsInside(target, projectRoot)) return [{ projectRoot, targetRoot: projectRoot }];\n return [];\n });\n if (projectTargets.length === 0) {\n throw new Error(`Scan target is outside the selected project${requestedProjectRoots.length === 1 ? \"\" : \"s\"}: ${options.target}`);\n }\n\n const displayRoot = targetInsideCommandRoot ? commandRoot : selectionRoot;\n const minSeverity = (options.warnings ?? config.warnings ?? true) ? options.minSeverity ?? \"suggestion\" : \"error\";\n const categories = options.categories.length > 0 ? options.categories : config.categories;\n const respectInlineDisables = options.respectInlineDisables ?? config.respectInlineDisables ?? true;\n const deadlineAt = options.maxDurationSeconds !== undefined ? performance.now() + options.maxDurationSeconds * 1000 : undefined;\n const reports: Array<{ projectRoot: string; report: ScanReport }> = [];\n for (const { projectRoot, targetRoot } of projectTargets) {\n let report: ScanReport;\n const projectName = projectTargets.length > 1 ? path.relative(displayRoot, projectRoot) || \".\" : undefined;\n const projectProgress = onProgress\n ? (progress: ScanProgress) => onProgress({\n ...progress,\n phase: [projectName, progress.phase].filter(Boolean).join(\":\") || undefined,\n label: projectName && progress.label ? `${projectName}: ${progress.label}` : progress.label,\n })\n : undefined;\n\n if (targetStat.isFile()) {\n report = await scanPath(targetRoot, {\n projectRoot,\n config,\n minSeverity,\n categories,\n respectInlineDisables,\n deadlineAt,\n onProgress: projectProgress,\n cache: !options.noCache,\n parallel: !options.noParallel,\n });\n report.scope = \"full\";\n } else {\n report = await scanProjectWithScope(projectRoot, {\n targetRoot,\n scope,\n base: resolvedScope.base,\n includeUntracked: options.includeUntracked,\n staged: options.staged,\n changedFilesFrom: options.changedFilesFrom,\n config,\n minSeverity,\n categories,\n respectInlineDisables,\n deadlineAt,\n onProgress: projectProgress,\n cache: !options.noCache,\n parallel: !options.noParallel,\n });\n }\n reports.push({ projectRoot, report });\n }\n\n const report = aggregateReports(displayRoot, reports);\n if (options.debug) {\n const debugLines = [\n `[debug] version=${VERSION}`,\n `[debug] bun=${Bun.version} platform=${process.platform}/${process.arch}`,\n `[debug] target=${target}`,\n `[debug] config=${loaded.filename ?? \"none\"}`,\n `[debug] scope=${report.scope ?? scope} base=${report.base ?? resolvedScope.base ?? \"auto\"}`,\n `[debug] projects=${projectTargets.map(({ projectRoot }) => path.relative(displayRoot, projectRoot) || \".\").join(\",\")}`,\n `[debug] candidates=${report.candidateFiles ?? 0} scanned=${report.scannedFiles} partial=${Boolean(report.partial)}`,\n `[debug] parallel=${!options.noParallel}`,\n ];\n process.stderr.write(`${debugLines.join(\"\\n\")}\\n`);\n }\n return report;\n}\n\nasync function main(): Promise<void> {\n try {\n const argv = process.argv.slice(2);\n\n if (argv[0] === \"__update-cache\") {\n await refreshUpdateCache({ silent: true });\n return;\n }\n\n if (argv[0] === \"update\") {\n await runUpdateCommand(argv.slice(1));\n return;\n }\n\n if (argv[0] === \"ci\") {\n await runCiCommand(argv.slice(1));\n return;\n }\n\n if (argv[0] === \"rules\") {\n runRulesCommand(argv.slice(1));\n return;\n }\n\n if (argv[0] === \"why\") {\n const location = argv[1];\n if (!location) throw new Error(\"why requires file:line\");\n const { cwd, remaining } = parseCommandCwd(argv.slice(2));\n const noColor = remaining.includes(\"--no-color\");\n const noCache = remaining.includes(\"--no-cache\");\n const unknown = remaining.filter((arg) => arg !== \"--no-color\" && arg !== \"--no-cache\");\n if (unknown.length > 0) throw new Error(`Unknown why option: ${unknown[0]}`);\n const colorized = shouldUseColor(noColor, false);\n const progress = createProgressRenderer({\n enabled: Boolean(process.stdout.isTTY && !process.env.CI),\n colorized,\n });\n try {\n await runWhy(\n location,\n cwd,\n noColor,\n !noCache,\n (scanProgress) => progress.update(scanProgress),\n () => progress.clear(),\n );\n } finally {\n progress.clear();\n }\n return;\n }\n\n if (argv[0] === \"version\") {\n process.stdout.write(`React-Luau Doctor ${VERSION}\\nBun ${Bun.version}\\n${process.platform} ${process.arch}\\n${os.release()}\\n`);\n return;\n }\n\n const options = parseArgs(argv);\n if (options.help) {\n process.stdout.write(usage());\n return;\n }\n if (options.version) {\n process.stdout.write(`${VERSION}\\n`);\n return;\n }\n const machineReadable = options.scoreOnly || options.json || options.annotations;\n const colorized = shouldUseColor(options.noColor, machineReadable);\n const updateNoticeEnabled = automaticUpdateNoticeEnabled(options, machineReadable);\n if (updateNoticeEnabled) startBackgroundUpdateRefresh();\n const progress = createProgressRenderer({\n enabled: Boolean(process.stdout.isTTY && !process.env.CI && !machineReadable),\n colorized,\n });\n let report: ScanReport;\n try {\n report = await runScan(\n options,\n (scanProgress) => progress.update(scanProgress),\n );\n } finally {\n progress.clear();\n }\n const compactJson = options.jsonCompact;\n const json = `${serializeReport(report, compactJson)}\\n`;\n if (options.jsonOut) {\n const outputPath = path.resolve(process.cwd(), options.jsonOut);\n fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n fs.writeFileSync(outputPath, json);\n }\n if (options.outputDir) writeDiagnosticsDump(path.resolve(process.cwd(), options.outputDir), report);\n\n const config = loadConfigWithSource(process.cwd()).config;\n const showScore = options.showScore ?? true;\n const verbose = options.verbose ?? config.verbose ?? false;\n\n if (options.scoreOnly) process.stdout.write(`${report.score}\\n`);\n else if (options.json) process.stdout.write(json);\n else if (options.annotations) {\n const annotations = renderAnnotations(report);\n if (annotations) process.stdout.write(`${annotations}\\n`);\n } else process.stdout.write(`${renderTextReport(report, showScore, colorized, verbose, process.stdout.columns ?? 120)}\\n`);\n\n if (updateNoticeEnabled) {\n const update = getCachedUpdateNotice(VERSION);\n if (update) process.stdout.write(`\\n${renderUpdateNotice(update.current, update.latest, colorized)}\\n`);\n }\n\n const blocking = options.blocking ?? config.blocking ?? \"error\";\n if (shouldBlock(report, blocking)) process.exitCode = 1;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`react-luau-doctor: ${message}\\n`);\n process.exitCode = 2;\n }\n}\n\nvoid main();\n",
6
6
  "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type {\n BlockingLevel,\n Category,\n DoctorConfig,\n RuleSetting,\n ScanScope,\n Severity,\n} from \"./types\";\n\nconst CONFIG_NAME = \"react-luau-doctor.config.json\";\nconst SEVERITIES = new Set<RuleSetting>([\"off\", \"error\", \"warning\", \"suggestion\"]);\nconst SCOPES = new Set<ScanScope>([\"full\", \"files\", \"changed\", \"lines\"]);\nconst BLOCKING_LEVELS = new Set<BlockingLevel>([\"error\", \"warning\", \"none\"]);\nconst CATEGORIES = new Set<Category>([\"Correctness\", \"Hooks\", \"Effects\", \"Performance\", \"Roblox\", \"Architecture\"]);\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 if (!fs.existsSync(candidate)) return { config: {}, filename: null };\n const parsed = JSON.parse(fs.readFileSync(candidate, \"utf8\")) as DoctorConfig;\n validateConfig(parsed, candidate);\n return { config: parsed, filename: candidate };\n}\n\nexport function loadConfig(root: string): DoctorConfig {\n return loadConfigWithSource(root).config;\n}\n\nfunction validateStringArray(value: unknown, field: string, filename: string): void {\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\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) validateStringArray(config.include, \"include\", filename);\n if (config.ignore !== undefined) validateStringArray(config.ignore, \"ignore\", filename);\n if (config.projects !== undefined) validateStringArray(config.projects, \"projects\", filename);\n\n if (config.categories !== undefined) {\n if (!Array.isArray(config.categories) || config.categories.some((category) => !CATEGORIES.has(category))) {\n throw new Error(`${filename}: categories must contain valid React-Luau Doctor categories`);\n }\n }\n\n if (config.rules) {\n for (const [rule, value] of Object.entries(config.rules)) {\n if (!SEVERITIES.has(value)) throw new Error(`${filename}: invalid severity ${String(value)} for ${rule}`);\n }\n }\n\n if (config.scope !== undefined && !SCOPES.has(config.scope)) {\n throw new Error(`${filename}: scope must be full, files, changed, or lines`);\n }\n if (config.diff !== undefined && typeof config.diff !== \"boolean\" && typeof config.diff !== \"string\") {\n throw new Error(`${filename}: diff must be a boolean or git ref string`);\n }\n if (config.base !== undefined && typeof config.base !== \"string\") throw new Error(`${filename}: base must be a string`);\n if (config.verbose !== undefined && typeof config.verbose !== \"boolean\") throw new Error(`${filename}: verbose must be a boolean`);\n if (config.warnings !== undefined && typeof config.warnings !== \"boolean\") throw new Error(`${filename}: warnings must be a boolean`);\n if (config.respectInlineDisables !== undefined && typeof config.respectInlineDisables !== \"boolean\") {\n throw new Error(`${filename}: respectInlineDisables must be a boolean`);\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 if (!configured) return defaultSeverity;\n return configured === \"off\" ? null : configured;\n}\n\nfunction configPathForWrite(root: string): string {\n const loaded = loadConfigWithSource(root);\n return loaded.filename ?? path.join(root, CONFIG_NAME);\n}\n\nexport function writeConfig(root: string, update: (config: DoctorConfig) => DoctorConfig): 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 return filename;\n}\n\nexport function normalizeRuleSetting(value: string): RuleSetting | null {\n const normalized = value.toLowerCase();\n if (normalized === \"warn\") return \"warning\";\n if (normalized === \"off\" || normalized === \"error\" || normalized === \"warning\" || normalized === \"suggestion\") {\n return normalized;\n }\n return null;\n}\n\nexport function normalizeCategory(value: string): Category | null {\n const normalized = value.toLowerCase();\n for (const category of CATEGORIES) {\n if (category.toLowerCase() === normalized) return category;\n }\n return null;\n}\n",
@@ -10,23 +10,23 @@
10
10
  "import packageJson from \"../package.json\";\nimport type { Diagnostic, RuleDefinition, ScanReport, Severity } from \"./types\";\n\nconst VERSION = packageJson.version;\n\nconst SYMBOLS: Record<Severity, string> = {\n error: \"x\",\n warning: \"!\",\n suggestion: \"i\",\n};\n\nconst ANSI = {\n reset: \"\\u001b[0m\",\n bold: \"\\u001b[1m\",\n dim: \"\\u001b[2m\",\n red: \"\\u001b[31m\",\n yellow: \"\\u001b[33m\",\n cyan: \"\\u001b[36m\",\n green: \"\\u001b[32m\",\n magenta: \"\\u001b[35m\",\n};\n\nfunction paint(value: string, ...codes: string[]): string {\n return `${codes.join(\"\")}${value}${ANSI.reset}`;\n}\n\nfunction severityPaint(severity: Severity, value: string): string {\n if (severity === \"error\") return paint(value, ANSI.bold, ANSI.red);\n if (severity === \"warning\") return paint(value, ANSI.bold, ANSI.yellow);\n return paint(value, ANSI.bold, ANSI.magenta);\n}\n\nfunction scoreLabel(score: number): string {\n if (score >= 90) return \"Excellent\";\n if (score >= 75) return \"Good\";\n if (score >= 50) return \"Needs work\";\n return \"Critical\";\n}\n\nfunction scorePaint(score: number, value: string): string {\n if (score >= 75) return paint(value, ANSI.bold, ANSI.green);\n if (score >= 50) return paint(value, ANSI.bold, ANSI.yellow);\n return paint(value, ANSI.bold, ANSI.red);\n}\n\nfunction terminalWidth(value: number): number {\n return Math.max(32, value || 120);\n}\n\nfunction wrapWords(value: string, width: number): string[] {\n const normalized = value.trim().replace(/\\s+/g, \" \");\n if (!normalized) return [\"\"];\n if (width <= 1) return [normalized];\n\n const lines: string[] = [];\n let line = \"\";\n for (const word of normalized.split(\" \")) {\n if (!line) {\n line = word;\n continue;\n }\n if (line.length + 1 + word.length <= width) {\n line += ` ${word}`;\n continue;\n }\n lines.push(line);\n line = word;\n }\n if (line) lines.push(line);\n return lines;\n}\n\nfunction wrapFirstThen(value: string, firstWidth: number, continuationWidth: number): string[] {\n const normalized = value.trim().replace(/\\s+/g, \" \");\n if (!normalized) return [\"\"];\n\n const words = normalized.split(\" \");\n const lines: string[] = [];\n let width = Math.max(1, firstWidth);\n let line = \"\";\n\n for (const word of words) {\n if (!line) {\n line = word;\n continue;\n }\n if (line.length + 1 + word.length <= width) {\n line += ` ${word}`;\n continue;\n }\n lines.push(line);\n line = word;\n width = Math.max(1, continuationWidth);\n }\n if (line) lines.push(line);\n return lines;\n}\n\nfunction renderDiagnosticLines(diagnostic: Diagnostic, colorized: boolean, width: number, baseIndent = \" \"): string[] {\n const symbol = SYMBOLS[diagnostic.severity];\n const location = `${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column}`;\n const prefixVisible = baseIndent.length + symbol.length + 1 + location.length + 2;\n const continuationIndent = \" \";\n const continuationWidth = Math.max(16, width - continuationIndent.length);\n const firstWidth = width - prefixVisible;\n const splitMessage = firstWidth < 24;\n const messageLines = splitMessage\n ? wrapWords(diagnostic.message, continuationWidth)\n : wrapFirstThen(diagnostic.message, firstWidth, continuationWidth);\n const rendered: string[] = [];\n\n const symbolText = colorized ? severityPaint(diagnostic.severity, symbol) : symbol;\n const locationText = colorized ? paint(location, ANSI.bold) : location;\n\n if (splitMessage) {\n rendered.push(`${baseIndent}${symbolText} ${locationText}`);\n for (const messageLine of messageLines) rendered.push(`${continuationIndent}${messageLine}`);\n return rendered;\n }\n\n rendered.push(`${baseIndent}${symbolText} ${locationText} ${messageLines[0]}`);\n for (const messageLine of messageLines.slice(1)) rendered.push(`${continuationIndent}${messageLine}`);\n return rendered;\n}\n\nfunction renderIndentedWrapped(value: string, colorized: boolean, width: number, indent = \" \"): string[] {\n const wrapped = wrapWords(value, Math.max(16, width - indent.length));\n return wrapped.map((line) => `${indent}${colorized ? paint(line, ANSI.dim) : line}`);\n}\n\nexport function renderRulesList(\n ruleDefinitions: RuleDefinition[],\n terminalWidth = 120,\n severityOverrides: ReadonlyMap<string, string> = new Map(),\n colorized = false,\n): string {\n const title = colorized ? paint(\"React-Luau Doctor Rules\", ANSI.bold, ANSI.magenta) : \"React-Luau Doctor Rules\";\n if (ruleDefinitions.length === 0) return `${title}\\n0 rules`;\n\n const ruleWidth = Math.max(\"Rule ID\".length, ...ruleDefinitions.map((rule) => rule.id.length));\n const severityWidth = Math.max(\n \"Severity\".length,\n ...ruleDefinitions.map((rule) => (severityOverrides.get(rule.id) ?? rule.severity).length),\n );\n const categoryWidth = Math.max(\"Category\".length, ...ruleDefinitions.map((rule) => rule.category.length));\n const gap = \" \";\n const fixedWidth = ruleWidth + severityWidth + categoryWidth + gap.length * 3;\n const tableWidth = Math.max(96, Math.min(160, terminalWidth || 120));\n const descriptionWidth = Math.max(28, tableWidth - fixedWidth);\n const descriptionIndent = \" \".repeat(fixedWidth);\n\n const header = `${\"Rule ID\".padEnd(ruleWidth)}${gap}${\"Severity\".padEnd(severityWidth)}${gap}${\"Category\".padEnd(categoryWidth)}${gap}Description`;\n const separator = `${\"-\".repeat(ruleWidth)}${gap}${\"-\".repeat(severityWidth)}${gap}${\"-\".repeat(categoryWidth)}${gap}${\"-\".repeat(descriptionWidth)}`;\n const lines: string[] = [title, `${ruleDefinitions.length} rules`, \"\", colorized ? paint(header, ANSI.bold) : header, colorized ? paint(separator, ANSI.dim) : separator];\n\n for (const rule of ruleDefinitions) {\n const severity = severityOverrides.get(rule.id) ?? rule.severity;\n const descriptionLines = wrapWords(rule.description, descriptionWidth);\n const ruleCell = rule.id.padEnd(ruleWidth);\n const severityCell = severity.padEnd(severityWidth);\n const categoryCell = rule.category.padEnd(categoryWidth);\n const firstLine = colorized\n ? `${paint(ruleCell, ANSI.bold)}${gap}${severity === \"off\" ? paint(severityCell, ANSI.dim) : severityPaint(severity as Severity, severityCell)}${gap}${paint(categoryCell, ANSI.dim)}${gap}${descriptionLines[0]}`\n : `${ruleCell}${gap}${severityCell}${gap}${categoryCell}${gap}${descriptionLines[0]}`;\n lines.push(firstLine);\n for (const continuation of descriptionLines.slice(1)) {\n lines.push(colorized ? `${descriptionIndent}${paint(continuation, ANSI.dim)}` : `${descriptionIndent}${continuation}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction renderCounts(report: ScanReport, colorized: boolean): string {\n if (!colorized) {\n return `${report.counts.error} errors, ${report.counts.warning} warnings, ${report.counts.suggestion} suggestions`;\n }\n return [\n severityPaint(\"error\", `${report.counts.error} errors`),\n severityPaint(\"warning\", `${report.counts.warning} warnings`),\n severityPaint(\"suggestion\", `${report.counts.suggestion} suggestions`),\n ].join(\", \");\n}\n\nfunction renderHeader(report: ScanReport, colorized: boolean): string[] {\n const title = colorized\n ? `${paint(\"React-Luau Doctor\", ANSI.bold, ANSI.magenta)} ${paint(`v${VERSION}`, ANSI.dim)}`\n : `React-Luau Doctor v${VERSION}`;\n const scopeSuffix = report.scope && report.scope !== \"full\" ? ` (${report.scope} scope)` : \"\";\n const lines = [title, `Scanned ${report.scannedFiles} React-Luau files in ${report.durationMs.toFixed(2)}ms${scopeSuffix}`];\n if (report.partial) {\n const message = `Partial scan: ${(report.skippedFiles ?? []).length} candidate files skipped after the time budget.`;\n lines.push(colorized ? severityPaint(\"warning\", message) : message);\n }\n return lines;\n}\n\nfunction renderVerboseDiagnostics(report: ScanReport, colorized: boolean, width: number): string[] {\n if (report.diagnostics.length === 0) {\n return [colorized ? paint(\"No issues found.\", ANSI.bold, ANSI.green) : \"No issues found.\"];\n }\n\n const lines: string[] = [];\n let currentFile = \"\";\n for (const diagnostic of report.diagnostics) {\n if (diagnostic.file !== currentFile) {\n if (currentFile) lines.push(\"\");\n currentFile = diagnostic.file;\n lines.push(colorized ? paint(currentFile, ANSI.bold, ANSI.cyan) : currentFile);\n }\n lines.push(...renderDiagnosticLines(diagnostic, colorized, width));\n const metadata = `${diagnostic.rule} [${diagnostic.category}]`;\n lines.push(...renderIndentedWrapped(metadata, colorized, width));\n if (diagnostic.help) lines.push(...renderIndentedWrapped(diagnostic.help, colorized, width));\n }\n return lines;\n}\n\ninterface RuleGroup {\n rule: string;\n category: string;\n severity: Severity;\n diagnostics: Diagnostic[];\n}\n\nfunction groupedDiagnostics(report: ScanReport): RuleGroup[] {\n const groups = new Map<string, RuleGroup>();\n const rank: Record<Severity, number> = { error: 2, warning: 1, suggestion: 0 };\n for (const diagnostic of report.diagnostics) {\n const existing = groups.get(diagnostic.rule);\n if (existing) {\n existing.diagnostics.push(diagnostic);\n if (rank[diagnostic.severity] > rank[existing.severity]) existing.severity = diagnostic.severity;\n } else {\n groups.set(diagnostic.rule, {\n rule: diagnostic.rule,\n category: diagnostic.category,\n severity: diagnostic.severity,\n diagnostics: [diagnostic],\n });\n }\n }\n return [...groups.values()].sort(\n (a, b) => rank[b.severity] - rank[a.severity] || b.diagnostics.length - a.diagnostics.length || a.rule.localeCompare(b.rule),\n );\n}\n\nfunction renderCompactDiagnostics(report: ScanReport, colorized: boolean, width: number): string[] {\n if (report.diagnostics.length === 0) {\n return [colorized ? paint(\"No issues found.\", ANSI.bold, ANSI.green) : \"No issues found.\"];\n }\n\n const groups = groupedDiagnostics(report);\n const shown = groups.slice(0, 3);\n const lines: string[] = [\"Top rules:\"];\n let shownFindings = 0;\n\n for (const group of shown) {\n shownFindings += group.diagnostics.length;\n const symbol = colorized ? severityPaint(group.severity, SYMBOLS[group.severity]) : SYMBOLS[group.severity];\n const countLabel = `${group.diagnostics.length} finding${group.diagnostics.length === 1 ? \"\" : \"s\"}`;\n const ruleLabel = colorized ? paint(group.rule, ANSI.bold) : group.rule;\n const metadata = colorized ? paint(`[${group.category}]`, ANSI.dim) : `[${group.category}]`;\n lines.push(`${symbol} ${ruleLabel} ${metadata} ${countLabel}`);\n\n for (const diagnostic of group.diagnostics.slice(0, 3)) {\n const location = `${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column}`;\n const detail = `${location} ${diagnostic.message}`;\n const wrapped = wrapWords(detail, Math.max(16, width - 4));\n for (const line of wrapped) lines.push(colorized ? ` ${paint(line, ANSI.dim)}` : ` ${line}`);\n }\n if (group.diagnostics.length > 3) lines.push(` +${group.diagnostics.length - 3} more`);\n }\n\n const hiddenRules = groups.length - shown.length;\n const hiddenFindings = report.diagnostics.length - shownFindings;\n if (hiddenRules > 0 || hiddenFindings > 0) {\n lines.push(\"\");\n lines.push(`+${hiddenRules} more rules and ${hiddenFindings} more findings. Run react-luau-doctor --verbose for every finding.`);\n }\n return lines;\n}\n\nexport function renderTextReport(\n report: ScanReport,\n showScore = true,\n colorized = false,\n verbose = true,\n outputWidth = 120,\n): string {\n const width = terminalWidth(outputWidth);\n const lines = renderHeader(report, colorized);\n lines.push(\"\");\n lines.push(...(verbose ? renderVerboseDiagnostics(report, colorized, width) : renderCompactDiagnostics(report, colorized, width)));\n lines.push(\"\");\n lines.push(renderCounts(report, colorized));\n if (showScore) {\n const score = `Score: ${report.score}/100 (${scoreLabel(report.score)})`;\n lines.push(colorized ? scorePaint(report.score, score) : score);\n }\n if (report.notes && report.notes.length > 0) {\n lines.push(\"\");\n for (const note of report.notes) {\n const wrapped = wrapWords(`Note: ${note}`, width);\n for (const line of wrapped) lines.push(colorized ? paint(line, ANSI.dim) : line);\n }\n }\n return lines.join(\"\\n\");\n}\n\nfunction escapeWorkflowData(value: string): string {\n return value.replace(/%/g, \"%25\").replace(/\\r/g, \"%0D\").replace(/\\n/g, \"%0A\");\n}\n\nfunction escapeWorkflowProperty(value: string): string {\n return escapeWorkflowData(value).replace(/:/g, \"%3A\").replace(/,/g, \"%2C\");\n}\n\nexport function renderAnnotations(report: ScanReport): string {\n return report.diagnostics\n .map((diagnostic) => {\n const level = diagnostic.severity === \"error\" ? \"error\" : \"warning\";\n const properties = [\n `file=${escapeWorkflowProperty(diagnostic.file)}`,\n `line=${diagnostic.location.line}`,\n `col=${diagnostic.location.column}`,\n `endLine=${diagnostic.location.endLine}`,\n `endColumn=${diagnostic.location.endColumn}`,\n `title=${escapeWorkflowProperty(diagnostic.rule)}`,\n ].join(\",\");\n return `::${level} ${properties}::${escapeWorkflowData(diagnostic.message)}`;\n })\n .join(\"\\n\");\n}\n",
11
11
  "import path from \"node:path\";\nimport { loadConfig } from \"./config\";\nimport { isSelectedLuauPath } from \"./files\";\nimport { createGitScopePlan, type GitScopePlan } from \"./git\";\nimport { createScanAnalysisSession, rebuildReport, scanPath, scoreDiagnostics, type ScanAnalysisSession } from \"./scanner\";\nimport type {\n Category,\n Diagnostic,\n DoctorConfig,\n ScanOptions,\n ScanProgress,\n ScanReport,\n ScanScope,\n Severity,\n} from \"./types\";\n\nexport interface ScopedScanOptions {\n scope: ScanScope;\n targetRoot?: string;\n base?: string;\n includeUntracked?: boolean;\n staged?: boolean;\n changedFilesFrom?: string;\n minSeverity?: Severity;\n categories?: Category[];\n config?: DoctorConfig;\n respectInlineDisables?: boolean;\n deadlineAt?: number;\n onProgress?: (progress: ScanProgress) => void;\n cache?: boolean;\n parallel?: boolean;\n analysisSession?: ScanAnalysisSession;\n}\n\nfunction diagnosticFingerprint(diagnostic: Diagnostic): string {\n return `${diagnostic.file}\\0${diagnostic.rule}\\0${diagnostic.severity}\\0${diagnostic.message}`;\n}\n\nfunction introducedDiagnostics(current: Diagnostic[], baseline: Diagnostic[]): Diagnostic[] {\n const baselineCounts = new Map<string, number>();\n for (const diagnostic of baseline) {\n const fingerprint = diagnosticFingerprint(diagnostic);\n baselineCounts.set(fingerprint, (baselineCounts.get(fingerprint) ?? 0) + 1);\n }\n\n const introduced: Diagnostic[] = [];\n for (const diagnostic of current) {\n const fingerprint = diagnosticFingerprint(diagnostic);\n const remaining = baselineCounts.get(fingerprint) ?? 0;\n if (remaining > 0) baselineCounts.set(fingerprint, remaining - 1);\n else introduced.push(diagnostic);\n }\n return introduced;\n}\n\nfunction touchesChangedLines(diagnostic: Diagnostic, ranges: Array<{ start: number; end: number }>): boolean {\n const locations = [diagnostic.location, ...(diagnostic.highlights ?? [])];\n return locations.some((location) =>\n ranges.some((range) => location.endLine >= range.start && location.line <= range.end)\n );\n}\n\nfunction filterGitScopePlan(plan: GitScopePlan, config: DoctorConfig): GitScopePlan {\n const selected = (relativePath: string | undefined): boolean =>\n relativePath !== undefined && isSelectedLuauPath(relativePath, config);\n\n return {\n ...plan,\n changedFiles: plan.changedFiles.filter((file) => isSelectedLuauPath(file, config)),\n currentFiles: plan.currentFiles.filter((file) => selected(file.relativePath)),\n baselineFiles: plan.baselineFiles.filter((file) => selected(file.relativePath)),\n changedLines: new Map(\n [...plan.changedLines].filter(([file]) => isSelectedLuauPath(file, config)),\n ),\n };\n}\n\nfunction sharedScanOptions(options: ScopedScanOptions, projectRoot: string, phase?: string): ScanOptions & { analysisSession?: ScanAnalysisSession } {\n return {\n projectRoot,\n minSeverity: options.minSeverity,\n categories: options.categories,\n config: options.config,\n respectInlineDisables: options.respectInlineDisables,\n deadlineAt: options.deadlineAt,\n onProgress: options.onProgress,\n progressPhase: phase,\n cache: options.cache,\n parallel: options.parallel,\n analysisSession: options.analysisSession,\n };\n}\n\nexport async function scanProjectWithScope(projectRoot: string, options: ScopedScanOptions): Promise<ScanReport> {\n const targetRoot = path.resolve(options.targetRoot ?? projectRoot);\n const config = options.config ?? loadConfig(projectRoot);\n const configuredOptions = options.config ? options : { ...options, config };\n\n if (options.scope === \"full\" && !options.staged && !options.changedFilesFrom) {\n const report = await scanPath(targetRoot, sharedScanOptions(configuredOptions, projectRoot));\n return { ...report, scope: \"full\" };\n }\n\n const effectiveScope: Exclude<ScanScope, \"full\"> = options.staged\n ? options.scope === \"lines\"\n ? \"lines\"\n : \"files\"\n : options.scope === \"full\"\n ? \"files\"\n : options.scope;\n const scanOptions: ScopedScanOptions = effectiveScope === \"changed\"\n ? { ...configuredOptions, analysisSession: options.analysisSession ?? createScanAnalysisSession() }\n : configuredOptions;\n\n const plan = filterGitScopePlan(createGitScopePlan(targetRoot, {\n scope: effectiveScope,\n base: options.base,\n includeUntracked: options.includeUntracked,\n staged: options.staged,\n changedFilesFrom: options.changedFilesFrom,\n }, projectRoot), config);\n\n const current = await scanPath(targetRoot, {\n ...sharedScanOptions(scanOptions, projectRoot, effectiveScope === \"changed\" ? \"current\" : undefined),\n files: plan.currentFiles,\n });\n\n let diagnostics = current.diagnostics;\n let partial = current.partial;\n let skippedFiles = current.skippedFiles;\n\n if (effectiveScope === \"changed\") {\n const baseline = await scanPath(targetRoot, {\n ...sharedScanOptions(scanOptions, projectRoot, \"baseline\"),\n files: plan.baselineFiles,\n });\n const baselineSkipped = new Set(baseline.skippedFiles ?? []);\n const baselinePaths = new Set(plan.baselineFiles.map((file) => file.relativePath ?? \"\"));\n const comparableCurrent = current.diagnostics.filter(\n (diagnostic) => !baselinePaths.has(diagnostic.file) || !baselineSkipped.has(diagnostic.file),\n );\n diagnostics = introducedDiagnostics(comparableCurrent, baseline.diagnostics);\n partial = partial || Boolean(baseline.partial);\n skippedFiles = [...new Set([...(current.skippedFiles ?? []), ...(baseline.skippedFiles ?? [])])].sort();\n } else if (effectiveScope === \"lines\") {\n diagnostics = current.diagnostics.filter((diagnostic) =>\n touchesChangedLines(diagnostic, plan.changedLines.get(diagnostic.file) ?? []),\n );\n }\n\n return rebuildReport(current, diagnostics, {\n partial,\n skippedFiles,\n scope: options.staged ? \"staged\" : effectiveScope,\n base: plan.base,\n changedFiles: plan.changedFiles,\n });\n}\n\nfunction normalize(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction prefixDiagnostic(diagnostic: Diagnostic, prefix: string): Diagnostic {\n if (!prefix || prefix === \".\") return diagnostic;\n return { ...diagnostic, file: normalize(path.posix.join(prefix, diagnostic.file)) };\n}\n\nexport function aggregateReports(root: string, reports: Array<{ projectRoot: string; report: ScanReport }>): ScanReport {\n const startedDuration = reports.reduce((total, entry) => total + entry.report.durationMs, 0);\n const diagnostics: Diagnostic[] = [];\n const skippedFiles: string[] = [];\n const changedFiles: string[] = [];\n const notes: string[] = [];\n const projects: string[] = [];\n let scannedFiles = 0;\n let candidateFiles = 0;\n let partial = false;\n\n for (const { projectRoot, report } of reports) {\n const prefix = normalize(path.relative(root, projectRoot));\n projects.push(prefix || \".\");\n scannedFiles += report.scannedFiles;\n candidateFiles += report.candidateFiles ?? 0;\n partial = partial || Boolean(report.partial);\n diagnostics.push(...report.diagnostics.map((diagnostic) => prefixDiagnostic(diagnostic, prefix)));\n skippedFiles.push(...(report.skippedFiles ?? []).map((file) => (prefix ? normalize(path.posix.join(prefix, file)) : file)));\n changedFiles.push(...(report.changedFiles ?? []).map((file) => (prefix ? normalize(path.posix.join(prefix, file)) : file)));\n notes.push(...(report.notes ?? []));\n }\n\n diagnostics.sort(\n (a, b) => a.file.localeCompare(b.file) || a.location.line - b.location.line || b.severity.localeCompare(a.severity),\n );\n const counts: Record<Severity, number> = { error: 0, warning: 0, suggestion: 0 };\n for (const diagnostic of diagnostics) counts[diagnostic.severity] += 1;\n\n const scopes = new Set(reports.map((entry) => entry.report.scope).filter(Boolean));\n const bases = new Set(reports.map((entry) => entry.report.base).filter(Boolean));\n\n return {\n schemaVersion: 1,\n root,\n scannedFiles,\n candidateFiles,\n durationMs: Math.round(startedDuration * 100) / 100,\n score: scoreDiagnostics(diagnostics, scannedFiles),\n counts,\n diagnostics,\n partial,\n skippedFiles: [...new Set(skippedFiles)].sort(),\n scope: scopes.size === 1 ? [...scopes][0] : undefined,\n base: bases.size === 1 ? [...bases][0] : undefined,\n changedFiles: [...new Set(changedFiles)].sort(),\n projects,\n notes: notes.length > 0 ? [...new Set(notes)] : undefined,\n };\n}\n",
12
12
  "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n cacheHasSameFileSet,\n cachedEffectModules,\n cachedProjectModel,\n cachedReport,\n changedProjectFiles,\n knownReactFile,\n previousCachedReport,\n previousProjectModel,\n projectModelFeatureKey,\n materializeProjectCandidates,\n prepareProjectCache,\n recordReactFile,\n saveProjectCache,\n stableCacheKey,\n} from \"./cache\";\nimport { loadConfig } from \"./config\";\nimport { discoverLuauFiles } from \"./files\";\nimport { analyzeReactFile, type ReactFileAnalysisInput, type ReactFileAnalysisResult } from \"./file-analysis\";\nimport { AnalysisWorkerPool, analysisWorkerCount } from \"./parallel\";\nimport { buildProjectModel, type ProjectModelModuleCacheEntry } from \"./project-model\";\nimport { buildProjectSourceEffects, type CachedSourceEffectModule, type ProjectEffectParseCacheEntry } from \"./project-effects\";\nimport { rules } from \"./rules\";\nimport type {\n Diagnostic,\n DoctorConfig,\n ScanFileInput,\n ScanOptions,\n ScanReport,\n Severity,\n} from \"./types\";\n\nconst REACT_SOURCE_MARKER = /\\bReact(?:Roblox)?\\b/i;\n\nexport interface ScanAnalysisSession {\n projectModelModules: Map<string, ProjectModelModuleCacheEntry>;\n effectModules?: Record<string, CachedSourceEffectModule>;\n}\n\nexport function createScanAnalysisSession(): ScanAnalysisSession {\n return { projectModelModules: new Map() };\n}\n\ntype ScanRuntimeOptions = ScanOptions & { analysisSession?: ScanAnalysisSession };\n\nexport function scoreDiagnostics(diagnostics: Diagnostic[], scannedFiles: number): number {\n const weightedFindings = diagnostics.reduce((total, diagnostic) => {\n if (diagnostic.severity === \"error\") return total + 8;\n if (diagnostic.severity === \"warning\") return total + 3;\n return total + 1;\n }, 0);\n const penalty = (weightedFindings / Math.max(scannedFiles, 1)) * 20;\n return Math.max(0, Math.round(100 - Math.min(100, penalty)));\n}\n\nfunction countDiagnostics(diagnostics: Diagnostic[]): Record<Severity, number> {\n const counts: Record<Severity, number> = { error: 0, warning: 0, suggestion: 0 };\n for (const diagnostic of diagnostics) counts[diagnostic.severity] += 1;\n return counts;\n}\n\nexport function rebuildReport(\n report: ScanReport,\n diagnostics: Diagnostic[],\n metadata: Partial<Omit<ScanReport, \"schemaVersion\" | \"diagnostics\" | \"counts\" | \"score\">> = {},\n): ScanReport {\n const sorted = [...diagnostics].sort(\n (a, b) => a.file.localeCompare(b.file) || a.location.line - b.location.line || b.severity.localeCompare(a.severity),\n );\n const next = { ...report, ...metadata };\n return {\n ...next,\n schemaVersion: 1,\n diagnostics: sorted,\n counts: countDiagnostics(sorted),\n score: scoreDiagnostics(sorted, next.scannedFiles),\n };\n}\n\nfunction normalizeRelative(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction transitiveAffectedFiles(\n changedFiles: string[],\n previousModules: Readonly<Record<string, CachedSourceEffectModule>>,\n currentModules: Readonly<Record<string, CachedSourceEffectModule>>,\n): Set<string> {\n const affected = new Set(changedFiles.map(normalizeRelative));\n const modules = new Map<string, { file: string; id: string }>();\n const reverse = new Map<string, Set<string>>();\n\n for (const source of [previousModules, currentModules]) {\n for (const [rawFile, module] of Object.entries(source)) {\n const file = normalizeRelative(rawFile);\n modules.set(file, { file, id: module.id });\n for (const dependency of module.importedModuleIds) {\n const importers = reverse.get(dependency) ?? new Set<string>();\n importers.add(file);\n reverse.set(dependency, importers);\n }\n }\n }\n\n const queue = [...affected].map((file) => modules.get(file)?.id ?? file.toLowerCase());\n const visitedIds = new Set(queue);\n while (queue.length > 0) {\n const moduleId = queue.shift()!;\n for (const importerFile of reverse.get(moduleId) ?? []) {\n if (!affected.has(importerFile)) affected.add(importerFile);\n const importerId = modules.get(importerFile)?.id;\n if (importerId && !visitedIds.has(importerId)) {\n visitedIds.add(importerId);\n queue.push(importerId);\n }\n }\n }\n return affected;\n}\n\nfunction candidateInputs(targetPath: string, projectRoot: string, config: DoctorConfig, options: ScanOptions): ScanFileInput[] {\n if (options.files) return options.files;\n const targetStat = fs.statSync(targetPath);\n return discoverLuauFiles(targetPath, config, projectRoot).map((absolutePath) => ({\n absolutePath,\n forceScan: targetStat.isFile(),\n }));\n}\n\nfunction projectInputs(root: string, config: DoctorConfig, scopedCandidates: ScanFileInput[]): ScanFileInput[] {\n const all = discoverLuauFiles(root, config).map((absolutePath) => ({ absolutePath } satisfies ScanFileInput));\n const overlays = new Map<string, ScanFileInput>();\n for (const candidate of scopedCandidates) {\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(root, candidate.absolutePath));\n overlays.set(relativePath, candidate);\n }\n\n const result: ScanFileInput[] = [];\n const used = new Set<string>();\n for (const candidate of all) {\n const relativePath = normalizeRelative(path.relative(root, candidate.absolutePath));\n result.push(overlays.get(relativePath) ?? candidate);\n used.add(relativePath);\n }\n for (const [relativePath, candidate] of overlays) {\n if (!used.has(relativePath)) result.push(candidate);\n }\n return result;\n}\n\nexport async function scanPath(target = \".\", options: ScanRuntimeOptions = {}): Promise<ScanReport> {\n const startedAt = performance.now();\n const cwd = path.resolve(options.cwd ?? process.cwd());\n const targetPath = path.resolve(cwd, target);\n if (!fs.existsSync(targetPath)) throw new Error(`Scan path does not exist: ${target}`);\n const targetStat = fs.statSync(targetPath);\n const defaultRoot = targetStat.isFile() ? path.dirname(targetPath) : targetPath;\n const root = path.resolve(options.projectRoot ?? defaultRoot);\n const config: DoctorConfig = options.config ?? loadConfig(root);\n\n if (config.rules) {\n const knownRules = new Set(rules.map((rule) => rule.id));\n for (const ruleId of Object.keys(config.rules)) {\n if (!knownRules.has(ruleId)) throw new Error(`Unknown configured rule: ${ruleId}`);\n }\n }\n\n const candidates = candidateInputs(targetPath, root, config, options);\n const targetIsProjectRoot = path.resolve(targetPath) === path.resolve(root);\n const modelCandidates = options.files || !targetIsProjectRoot ? projectInputs(root, config, candidates) : candidates;\n const hasSourceOverlays = modelCandidates.some((candidate) => candidate.source !== undefined);\n const canPersistCache = !hasSourceOverlays;\n const phaseSuffix = options.progressPhase ? ` (${options.progressPhase})` : \"\";\n const phaseId = (phase: string): string => [options.progressPhase, phase].filter(Boolean).join(\":\");\n const progress = (phase: string, label: string, current: number, total: number, file?: string, partial?: boolean): void => {\n options.onProgress?.({ current, total, file, partial, phase: phaseId(phase), label: `${label}${phaseSuffix}` });\n };\n\n const cacheSession = prepareProjectCache(\n root,\n modelCandidates,\n options.cache ?? true,\n (current, total, file) => progress(\"index\", \"Indexing project\", current, total, file),\n );\n\n const deadlineAt = options.deadlineAt ?? (options.maxDurationMs !== undefined ? startedAt + options.maxDurationMs : undefined);\n const respectInlineDisables = options.respectInlineDisables ?? config.respectInlineDisables ?? true;\n const minSeverity = options.minSeverity ?? \"suggestion\";\n const reportCacheKey = stableCacheKey({\n minSeverity,\n categories: options.categories ? [...options.categories].sort() : [],\n respectInlineDisables,\n rules: config.rules ?? {},\n });\n const canCacheWholeReport = canPersistCache && targetIsProjectRoot && options.files === undefined && deadlineAt === undefined;\n const previousReport = canCacheWholeReport ? previousCachedReport(cacheSession, reportCacheKey) : null;\n const previousProject = previousProjectModel(cacheSession);\n const previousEffectModules = options.analysisSession?.effectModules ?? cachedEffectModules(cacheSession);\n const changedFiles = changedProjectFiles(cacheSession);\n\n if (canCacheWholeReport) {\n const reportHit = cachedReport(cacheSession, reportCacheKey);\n if (reportHit) {\n progress(\"report-cache\", \"Loading cached results\", 1, 1);\n return {\n schemaVersion: 1,\n root,\n scannedFiles: reportHit.scannedFiles,\n candidateFiles: reportHit.candidateFiles,\n durationMs: Math.round((performance.now() - startedAt) * 100) / 100,\n score: scoreDiagnostics(reportHit.diagnostics, reportHit.scannedFiles),\n counts: countDiagnostics(reportHit.diagnostics),\n diagnostics: reportHit.diagnostics,\n partial: false,\n skippedFiles: [],\n };\n }\n }\n\n const projectParseCache = new Map<string, ProjectEffectParseCacheEntry>();\n const fileHashes = Object.fromEntries(Object.entries(cacheSession.files).map(([file, state]) => [file, state.hash]));\n const materializedCandidates = materializeProjectCandidates(cacheSession, modelCandidates);\n const parallelEnabled = options.parallel !== false && deadlineAt === undefined;\n const workerCount = parallelEnabled ? analysisWorkerCount(Math.max(materializedCandidates.length, candidates.length)) : 1;\n const workerPool = workerCount > 1 ? new AnalysisWorkerPool(workerCount) : null;\n\n try {\n let project = cachedProjectModel(cacheSession);\n if (project && !options.analysisSession) {\n progress(\"project-cache\", \"Loading cached project analysis\", 1, 1);\n } else {\n // Changed-scope scans share per-module project summaries between the current\n // and baseline passes. Even when the aggregate current model is cached, one\n // module-summary pass seeds the in-memory session so the baseline only has to\n // re-analyze files whose Git contents differ.\n progress(\"model\", \"Building project model\", 0, 1);\n const rebuilt = buildProjectModel(root, materializedCandidates, {\n fileHashes,\n moduleCache: options.analysisSession?.projectModelModules,\n });\n if (project?.sourceEffects) rebuilt.sourceEffects = project.sourceEffects;\n project = rebuilt;\n progress(\"model\", \"Building project model\", 1, 1);\n }\n\n if (project.sourceEffects.size === 0) {\n const effectBuild = await buildProjectSourceEffects(\n root,\n materializedCandidates,\n projectParseCache,\n (effectProgress) => {\n if (effectProgress.phase === \"parse\") {\n progress(\"effects-parse\", \"Parsing effect sources\", effectProgress.current, effectProgress.total, effectProgress.file);\n } else if (effectProgress.phase === \"index-functions\") {\n progress(\"effects-index-functions\", \"Indexing effect functions\", effectProgress.current, effectProgress.total);\n } else if (effectProgress.phase === \"analyze-calls\") {\n progress(\"effects-analyze-calls\", \"Resolving effect calls\", effectProgress.current, effectProgress.total);\n } else if (effectProgress.phase === \"assemble-graph\") {\n progress(\"effects-assemble-graph\", \"Building effect graph\", effectProgress.current, effectProgress.total);\n } else if (effectProgress.phase === \"resolve\") {\n progress(\"effects-resolve\", \"Linking effect dependencies\", effectProgress.current, effectProgress.total);\n } else if (effectProgress.phase === \"propagate\") {\n progress(\"effects-propagate\", \"Propagating project effects\", effectProgress.current, effectProgress.total);\n } else {\n progress(\"effects-summarize\", \"Finalizing project effects\", effectProgress.current, effectProgress.total);\n }\n },\n fileHashes,\n previousEffectModules,\n workerPool ?? undefined,\n );\n project.sourceEffects = effectBuild.effects;\n cacheSession.effectModules = effectBuild.cacheModules;\n } else if (!cacheSession.effectModules) {\n cacheSession.effectModules = previousEffectModules;\n }\n if (options.analysisSession) options.analysisSession.effectModules = cacheSession.effectModules ?? previousEffectModules;\n\n const diagnostics: Diagnostic[] = [];\n const skippedFiles: string[] = [];\n let scannedFiles = 0;\n let scanCandidates = candidates;\n let incrementalReuse = false;\n\n const currentEffectModules = cacheSession.effectModules ?? previousEffectModules;\n if (\n canCacheWholeReport &&\n previousReport &&\n previousProject &&\n cacheHasSameFileSet(cacheSession) &&\n projectModelFeatureKey(previousProject) === projectModelFeatureKey(project)\n ) {\n const affectedFiles = transitiveAffectedFiles(changedFiles, previousEffectModules, currentEffectModules);\n diagnostics.push(...previousReport.diagnostics.filter((diagnostic) => !affectedFiles.has(normalizeRelative(diagnostic.file))));\n scanCandidates = candidates.filter((candidate) => {\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(root, candidate.absolutePath));\n return affectedFiles.has(relativePath);\n });\n incrementalReuse = true;\n }\n\n let processedCandidates = 0;\n const scanLabel = incrementalReuse ? \"Scanning affected React files\" : \"Scanning React files\";\n progress(\"scan\", scanLabel, 0, scanCandidates.length);\n\n const applyResult = (result: ReactFileAnalysisResult): void => {\n recordReactFile(cacheSession, result.relativePath, result.isReactFile);\n if (result.scanned) scannedFiles += 1;\n diagnostics.push(...result.diagnostics);\n };\n\n const prepareCandidate = (candidate: ScanFileInput): { input: ReactFileAnalysisInput; tree?: ProjectEffectParseCacheEntry[\"tree\"] } | null => {\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(root, candidate.absolutePath));\n if (candidate.source === undefined && !fs.existsSync(candidate.absolutePath)) return null;\n const forceScan = candidate.forceScan ?? targetStat.isFile();\n const cached = projectParseCache.get(relativePath);\n if (!forceScan && !cached && !changedFiles.includes(relativePath) && knownReactFile(cacheSession, relativePath) === false) return null;\n\n const source = candidate.source ?? cached?.source ?? cacheSession.sources.get(relativePath) ?? fs.readFileSync(candidate.absolutePath, \"utf8\");\n if (!forceScan && !REACT_SOURCE_MARKER.test(source)) {\n recordReactFile(cacheSession, relativePath, false);\n return null;\n }\n\n return {\n input: {\n absolutePath: candidate.absolutePath,\n relativePath,\n source,\n forceScan,\n project,\n config,\n categories: options.categories,\n minSeverity,\n respectInlineDisables,\n },\n tree: cached && cached.source === source ? cached.tree : undefined,\n };\n };\n\n if (parallelEnabled) {\n const prepared = scanCandidates.map(prepareCandidate).filter((value) => value !== null);\n if (workerPool && prepared.length >= 16) {\n let completed = scanCandidates.length - prepared.length;\n progress(\"scan\", scanLabel, completed, scanCandidates.length);\n const results = await workerPool.scanReactFiles(\n prepared.map((entry) => entry.input),\n options.onProgress\n ? (count, file) => {\n completed += count;\n progress(\"scan\", scanLabel, Math.min(completed, scanCandidates.length), scanCandidates.length, file);\n }\n : undefined,\n );\n for (const result of results) applyResult(result);\n processedCandidates = scanCandidates.length;\n progress(\"scan\", scanLabel, processedCandidates, scanCandidates.length);\n } else {\n for (const entry of prepared) {\n applyResult(await analyzeReactFile(entry.input, entry.tree));\n processedCandidates += 1;\n progress(\"scan\", scanLabel, processedCandidates, prepared.length, entry.input.relativePath);\n }\n }\n } else {\n for (let candidateIndex = 0; candidateIndex < scanCandidates.length; candidateIndex += 1) {\n const candidate = scanCandidates[candidateIndex];\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(root, candidate.absolutePath));\n\n if (deadlineAt !== undefined && performance.now() >= deadlineAt) {\n for (const remaining of scanCandidates.slice(candidateIndex)) {\n skippedFiles.push(normalizeRelative(remaining.relativePath ?? path.relative(root, remaining.absolutePath)));\n }\n progress(\"scan\", scanLabel, processedCandidates, scanCandidates.length, relativePath, true);\n break;\n }\n\n try {\n const prepared = prepareCandidate(candidate);\n if (!prepared) continue;\n applyResult(await analyzeReactFile(prepared.input, prepared.tree));\n } finally {\n processedCandidates = candidateIndex + 1;\n progress(\"scan\", scanLabel, processedCandidates, scanCandidates.length, relativePath);\n }\n }\n }\n\n if (incrementalReuse) {\n scannedFiles = Object.values(cacheSession.files).filter((state) => state.isReactFile === true).length;\n }\n\n diagnostics.sort(\n (a, b) => a.file.localeCompare(b.file) || a.location.line - b.location.line || b.severity.localeCompare(a.severity),\n );\n\n const report: ScanReport = {\n schemaVersion: 1,\n root,\n scannedFiles,\n candidateFiles: candidates.length,\n durationMs: Math.round((performance.now() - startedAt) * 100) / 100,\n score: scoreDiagnostics(diagnostics, scannedFiles),\n counts: countDiagnostics(diagnostics),\n diagnostics,\n partial: skippedFiles.length > 0,\n skippedFiles,\n };\n\n if (canPersistCache) saveProjectCache(\n cacheSession,\n project,\n cacheSession.effectModules ?? cachedEffectModules(cacheSession),\n canCacheWholeReport && !report.partial ? reportCacheKey : undefined,\n canCacheWholeReport && !report.partial\n ? { scannedFiles: report.scannedFiles, candidateFiles: report.candidateFiles ?? candidates.length, diagnostics: report.diagnostics }\n : undefined,\n );\n\n return report;\n } finally {\n workerPool?.close();\n }\n}\n",
13
- "import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { CachedSourceEffectModule } from \"./project-effects\";\nimport type {\n Diagnostic,\n ProjectModel,\n ScanFileInput,\n SourceEffectModuleSummary,\n} from \"./types\";\n\nconst MAX_CACHED_REPORTS = 8;\n\ninterface CachedFileState {\n size?: number;\n mtimeMs?: number;\n ctimeMs?: number;\n hash: string;\n isReactFile?: boolean;\n}\n\ninterface SerializedSourceEffectSummary {\n effectfulMembers: string[];\n effectfulExport: boolean;\n mutatingMembers: string[];\n mutatingExportParameters: number[];\n mutatingMemberParameters: Array<[string, number[]]>;\n localMutatingParameters: Array<[string, number[]]>;\n instanceFactories: string[];\n}\n\ninterface SerializedProjectModel {\n memoizedModules: Array<[string, \"shallow\" | \"custom\"]>;\n bindingCandidateHooks: Array<[string, ProjectModel[\"bindingCandidateHooks\"] extends Map<string, infer V> ? V : never]>;\n externalCallbackModules: Array<[string, ProjectModel[\"externalCallbackModules\"] extends Map<string, infer V> ? V : never]>;\n bindingApiAlternatives: Array<[string, string]>;\n bindingCompatibleComponentProps: Array<[string, string[]]>;\n staticIterationTables: Array<[string, string[]]>;\n conditionalHookModes: Array<[string, ProjectModel[\"conditionalHookModes\"] extends Map<string, infer V> ? V : never]>;\n sourceEffects: Array<[string, SerializedSourceEffectSummary]>;\n}\n\nexport interface CachedReportData {\n scannedFiles: number;\n candidateFiles: number;\n diagnostics: Diagnostic[];\n}\n\ninterface CachedReportEntry extends CachedReportData {\n lastUsedAt: number;\n}\n\ninterface ProjectCachePayload {\n analyzerHash: string;\n root: string;\n fingerprint: string;\n files: Record<string, CachedFileState>;\n projectModel?: SerializedProjectModel;\n effectModules?: Record<string, CachedSourceEffectModule>;\n reports?: Record<string, CachedReportEntry>;\n lastUsedAt: number;\n}\n\nexport interface ProjectCacheSession {\n enabled: boolean;\n root: string;\n filename: string | null;\n fingerprint: string;\n files: Record<string, CachedFileState>;\n sources: Map<string, string>;\n previous: ProjectCachePayload | null;\n exact: boolean;\n effectModules?: Record<string, CachedSourceEffectModule>;\n}\n\nfunction normalizeRelative(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction hashText(value: string): string {\n return crypto.createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nlet analyzerHash: string | null = null;\n\nfunction hashAnalyzerFile(hash: crypto.Hash, root: string, filename: string): void {\n if (!fs.existsSync(filename)) return;\n hash.update(normalizeRelative(path.relative(root, filename)));\n hash.update(\"\\0\");\n hash.update(fs.readFileSync(filename));\n hash.update(\"\\0\");\n}\n\nfunction sourceFiles(directory: string): string[] {\n if (!fs.existsSync(directory)) return [];\n const files: string[] = [];\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const filename = path.join(directory, entry.name);\n if (entry.isDirectory()) files.push(...sourceFiles(filename));\n else if (entry.isFile() && entry.name.endsWith(\".ts\")) files.push(filename);\n }\n return files;\n}\n\nfunction currentAnalyzerHash(): string {\n if (analyzerHash) return analyzerHash;\n\n const hash = crypto.createHash(\"sha256\");\n let packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"..\");\n let bundledCli: string | null = null;\n\n try {\n const entrypoint = process.argv[1] ? fs.realpathSync(process.argv[1]) : null;\n if (entrypoint && path.basename(entrypoint) === \"cli.js\" && path.basename(path.dirname(entrypoint)) === \"dist\") {\n bundledCli = entrypoint;\n packageRoot = path.dirname(path.dirname(entrypoint));\n }\n } catch {\n // Source execution and tests may not have a filesystem-backed CLI entrypoint.\n }\n\n if (bundledCli) {\n hashAnalyzerFile(hash, packageRoot, bundledCli);\n hashAnalyzerFile(hash, packageRoot, path.join(path.dirname(bundledCli), \"scan-worker.js\"));\n } else {\n for (const filename of sourceFiles(path.join(packageRoot, \"src\")).sort()) {\n hashAnalyzerFile(hash, packageRoot, filename);\n }\n }\n\n hashAnalyzerFile(hash, packageRoot, path.join(packageRoot, \"package.json\"));\n hashAnalyzerFile(hash, packageRoot, path.join(packageRoot, \"vendor\", \"tree-sitter-luau.wasm\"));\n analyzerHash = hash.digest(\"hex\");\n return analyzerHash;\n}\n\nfunction stableValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableValue);\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, stableValue(entry)]),\n );\n }\n return value;\n}\n\nexport function stableCacheKey(value: unknown): string {\n return hashText(JSON.stringify(stableValue(value))).slice(0, 24);\n}\n\nexport function cacheBaseDirectory(): string {\n if (process.env.REACT_LUAU_DOCTOR_CACHE_DIR) return path.resolve(process.env.REACT_LUAU_DOCTOR_CACHE_DIR);\n if (process.platform === \"win32\") {\n const base = process.env.LOCALAPPDATA ?? path.join(os.homedir(), \"AppData\", \"Local\");\n return path.join(base, \"react-luau-doctor\", \"Cache\");\n }\n if (process.platform === \"darwin\") return path.join(os.homedir(), \"Library\", \"Caches\", \"react-luau-doctor\");\n return path.join(process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), \".cache\"), \"react-luau-doctor\");\n}\n\nfunction projectCacheFilename(root: string): string {\n const canonical = process.platform === \"win32\" ? path.resolve(root).toLowerCase() : path.resolve(root);\n return path.join(cacheBaseDirectory(), `project-${hashText(canonical).slice(0, 24)}.json`);\n}\n\nfunction readPayload(filename: string, root: string): ProjectCachePayload | null {\n try {\n const parsed = JSON.parse(fs.readFileSync(filename, \"utf8\")) as ProjectCachePayload;\n if (\n parsed.analyzerHash !== currentAnalyzerHash() ||\n path.resolve(parsed.root) !== path.resolve(root) ||\n !parsed.files ||\n typeof parsed.fingerprint !== \"string\"\n ) return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writePayload(filename: string, payload: ProjectCachePayload): void {\n try {\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n const temporary = `${filename}.${process.pid}.${Date.now()}.tmp`;\n fs.writeFileSync(temporary, JSON.stringify(payload));\n fs.renameSync(temporary, filename);\n } catch {\n // Caching is an optimization. A read-only or unavailable cache directory must\n // never prevent the analyzer from running.\n }\n}\n\nfunction fileStateMatches(previous: CachedFileState | undefined, stat: fs.Stats): boolean {\n return Boolean(\n previous &&\n previous.size === stat.size &&\n previous.mtimeMs === stat.mtimeMs &&\n previous.ctimeMs === stat.ctimeMs &&\n previous.hash,\n );\n}\n\nexport function prepareProjectCache(\n root: string,\n candidates: ScanFileInput[],\n enabled = true,\n onProgress?: (current: number, total: number, file?: string) => void,\n): ProjectCacheSession {\n const cacheEnabled = enabled && process.env.REACT_LUAU_DOCTOR_DISABLE_CACHE !== \"1\";\n const filename = cacheEnabled ? projectCacheFilename(root) : null;\n const previous = filename ? readPayload(filename, root) : null;\n const files: Record<string, CachedFileState> = {};\n const sources = new Map<string, string>();\n const fingerprintParts: string[] = [];\n\n onProgress?.(0, candidates.length);\n for (let index = 0; index < candidates.length; index += 1) {\n const candidate = candidates[index];\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(root, candidate.absolutePath));\n const previousState = previous?.files[relativePath];\n let state: CachedFileState;\n\n if (candidate.source !== undefined) {\n const hash = hashText(candidate.source);\n sources.set(relativePath, candidate.source);\n state = { hash, isReactFile: previousState?.hash === hash ? previousState.isReactFile : undefined };\n } else {\n try {\n const stat = fs.statSync(candidate.absolutePath);\n if (fileStateMatches(previousState, stat)) {\n state = { ...previousState! };\n } else {\n const source = fs.readFileSync(candidate.absolutePath, \"utf8\");\n const hash = hashText(source);\n sources.set(relativePath, source);\n state = {\n size: stat.size,\n mtimeMs: stat.mtimeMs,\n ctimeMs: stat.ctimeMs,\n hash,\n isReactFile: previousState?.hash === hash ? previousState.isReactFile : undefined,\n };\n }\n } catch {\n onProgress?.(index + 1, candidates.length, relativePath);\n continue;\n }\n }\n\n files[relativePath] = state;\n fingerprintParts.push(`${relativePath}\\0${state.hash}`);\n onProgress?.(index + 1, candidates.length, relativePath);\n }\n\n const fingerprint = hashText(fingerprintParts.join(\"\\0\"));\n return {\n enabled: cacheEnabled,\n root,\n filename,\n fingerprint,\n files,\n sources,\n previous,\n exact: Boolean(previous && previous.fingerprint === fingerprint),\n };\n}\n\nexport function materializeProjectCandidates(session: ProjectCacheSession, candidates: ScanFileInput[]): ScanFileInput[] {\n return candidates.map((candidate) => {\n if (candidate.source !== undefined) return candidate;\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(session.root, candidate.absolutePath));\n const cachedSource = session.sources.get(relativePath);\n if (cachedSource !== undefined) return { ...candidate, relativePath, source: cachedSource };\n try {\n const source = fs.readFileSync(candidate.absolutePath, \"utf8\");\n session.sources.set(relativePath, source);\n return { ...candidate, relativePath, source };\n } catch {\n return { ...candidate, relativePath };\n }\n });\n}\n\nfunction serializeSourceEffect(summary: SourceEffectModuleSummary): SerializedSourceEffectSummary {\n return {\n effectfulMembers: [...summary.effectfulMembers].sort(),\n effectfulExport: summary.effectfulExport,\n mutatingMembers: [...summary.mutatingMembers].sort(),\n mutatingExportParameters: [...summary.mutatingExportParameters].sort((a, b) => a - b),\n mutatingMemberParameters: [...summary.mutatingMemberParameters]\n .map(([name, indexes]) => [name, [...indexes].sort((a, b) => a - b)] as [string, number[]])\n .sort(([left], [right]) => left.localeCompare(right)),\n localMutatingParameters: [...summary.localMutatingParameters]\n .map(([name, indexes]) => [name, [...indexes].sort((a, b) => a - b)] as [string, number[]])\n .sort(([left], [right]) => left.localeCompare(right)),\n instanceFactories: [...summary.instanceFactories].sort(),\n };\n}\n\nfunction deserializeSourceEffect(summary: SerializedSourceEffectSummary): SourceEffectModuleSummary {\n return {\n effectfulMembers: new Set(summary.effectfulMembers),\n effectfulExport: summary.effectfulExport,\n mutatingMembers: new Set(summary.mutatingMembers ?? []),\n mutatingExportParameters: new Set(summary.mutatingExportParameters ?? []),\n mutatingMemberParameters: new Map(\n (summary.mutatingMemberParameters ?? []).map(([name, indexes]) => [name, new Set(indexes)]),\n ),\n localMutatingParameters: new Map(\n (summary.localMutatingParameters ?? []).map(([name, indexes]) => [name, new Set(indexes)]),\n ),\n instanceFactories: new Set(summary.instanceFactories),\n };\n}\n\nexport function serializeProjectModel(project: ProjectModel): SerializedProjectModel {\n return {\n memoizedModules: [...project.memoizedModules],\n bindingCandidateHooks: [...project.bindingCandidateHooks],\n externalCallbackModules: [...project.externalCallbackModules],\n bindingApiAlternatives: [...project.bindingApiAlternatives],\n bindingCompatibleComponentProps: [...project.bindingCompatibleComponentProps].map(([key, value]) => [key, [...value].sort()]),\n staticIterationTables: [...project.staticIterationTables].map(([key, value]) => [key, [...value].sort()]),\n conditionalHookModes: [...project.conditionalHookModes],\n sourceEffects: [...project.sourceEffects].map(([key, value]) => [key, serializeSourceEffect(value)]),\n };\n}\n\nexport function deserializeProjectModel(project: SerializedProjectModel): ProjectModel {\n return {\n memoizedModules: new Map(project.memoizedModules),\n bindingCandidateHooks: new Map(project.bindingCandidateHooks),\n externalCallbackModules: new Map(project.externalCallbackModules),\n bindingApiAlternatives: new Map(project.bindingApiAlternatives),\n bindingCompatibleComponentProps: new Map(project.bindingCompatibleComponentProps.map(([key, value]) => [key, new Set(value)])),\n staticIterationTables: new Map(project.staticIterationTables.map(([key, value]) => [key, new Set(value)])),\n conditionalHookModes: new Map(project.conditionalHookModes),\n sourceEffects: new Map(project.sourceEffects.map(([key, value]) => [key, deserializeSourceEffect(value)])),\n };\n}\n\nexport function cachedEffectModules(session: ProjectCacheSession): Record<string, CachedSourceEffectModule> {\n return session.previous?.effectModules ?? {};\n}\n\nexport function previousProjectModel(session: ProjectCacheSession): ProjectModel | null {\n if (!session.previous?.projectModel) return null;\n try {\n return deserializeProjectModel(session.previous.projectModel);\n } catch {\n return null;\n }\n}\n\nexport function projectModelFeatureKey(project: ProjectModel): string {\n const serialized = serializeProjectModel(project);\n return stableCacheKey({\n memoizedModules: serialized.memoizedModules,\n bindingCandidateHooks: serialized.bindingCandidateHooks,\n externalCallbackModules: serialized.externalCallbackModules,\n bindingApiAlternatives: serialized.bindingApiAlternatives,\n bindingCompatibleComponentProps: serialized.bindingCompatibleComponentProps,\n staticIterationTables: serialized.staticIterationTables,\n conditionalHookModes: serialized.conditionalHookModes,\n });\n}\n\nexport function cachedProjectModel(session: ProjectCacheSession): ProjectModel | null {\n if (!session.exact || !session.previous?.projectModel) return null;\n try {\n return deserializeProjectModel(session.previous.projectModel);\n } catch {\n return null;\n }\n}\n\nexport function previousCachedReport(session: ProjectCacheSession, key: string): CachedReportData | null {\n const report = session.previous?.reports?.[key];\n if (!report) return null;\n return {\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles,\n diagnostics: report.diagnostics,\n };\n}\n\nexport function cachedReport(session: ProjectCacheSession, key: string): CachedReportData | null {\n if (!session.exact) return null;\n const report = session.previous?.reports?.[key];\n if (!report) return null;\n return {\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles,\n diagnostics: report.diagnostics,\n };\n}\n\nexport function cacheHasSameFileSet(session: ProjectCacheSession): boolean {\n if (!session.previous) return false;\n const previousFiles = Object.keys(session.previous.files).sort();\n const currentFiles = Object.keys(session.files).sort();\n return previousFiles.length === currentFiles.length && previousFiles.every((file, index) => file === currentFiles[index]);\n}\n\nexport function changedProjectFiles(session: ProjectCacheSession): string[] {\n if (!session.previous) return Object.keys(session.files);\n const all = new Set([...Object.keys(session.previous.files), ...Object.keys(session.files)]);\n return [...all].filter((file) => session.previous?.files[file]?.hash !== session.files[file]?.hash).sort();\n}\n\nexport function knownReactFile(session: ProjectCacheSession, relativePath: string): boolean | undefined {\n return session.files[normalizeRelative(relativePath)]?.isReactFile;\n}\n\nexport function recordReactFile(session: ProjectCacheSession, relativePath: string, isReactFile: boolean): void {\n const state = session.files[normalizeRelative(relativePath)];\n if (state) state.isReactFile = isReactFile;\n}\n\nexport function saveProjectCache(\n session: ProjectCacheSession,\n project: ProjectModel,\n effectModules: Record<string, CachedSourceEffectModule> = session.previous?.effectModules ?? {},\n reportKey?: string,\n report?: CachedReportData,\n): void {\n if (!session.enabled || !session.filename) return;\n const reports: Record<string, CachedReportEntry> = session.exact ? { ...(session.previous?.reports ?? {}) } : {};\n if (reportKey && report) reports[reportKey] = { ...report, lastUsedAt: Date.now() };\n const prunedReports = Object.fromEntries(\n Object.entries(reports)\n .sort(([, left], [, right]) => right.lastUsedAt - left.lastUsedAt)\n .slice(0, MAX_CACHED_REPORTS),\n );\n writePayload(session.filename, {\n analyzerHash: currentAnalyzerHash(),\n root: path.resolve(session.root),\n fingerprint: session.fingerprint,\n files: session.files,\n projectModel: serializeProjectModel(project),\n effectModules,\n reports: prunedReports,\n lastUsedAt: Date.now(),\n });\n}\n\nexport function projectCachePath(root: string): string {\n return projectCacheFilename(root);\n}\n",
14
- "import crypto from \"node:crypto\";\nimport type { SyntaxTree } from \"./syntax\";\nimport { createRuleContext } from \"./ast/context\";\nimport { buildReactModel } from \"./ast/react-model\";\nimport { effectiveSeverity } from \"./config\";\nimport { createInlineSuppressionChecker } from \"./inline-disables\";\nimport { parseLuau } from \"./parser\";\nimport { rules } from \"./rules\";\nimport type {\n Category,\n Diagnostic,\n DiagnosticInput,\n DoctorConfig,\n ProjectModel,\n Severity,\n SourceFile,\n} from \"./types\";\n\nconst SEVERITY_RANK: Record<Severity, number> = {\n suggestion: 0,\n warning: 1,\n error: 2,\n};\n\nexport interface ReactFileAnalysisInput {\n absolutePath: string;\n relativePath: string;\n source: string;\n forceScan: boolean;\n project: ProjectModel;\n config: DoctorConfig;\n categories?: Category[];\n minSeverity: Severity;\n respectInlineDisables: boolean;\n}\n\nexport interface ReactFileAnalysisResult {\n relativePath: string;\n isReactFile: boolean;\n scanned: boolean;\n diagnostics: Diagnostic[];\n}\n\nfunction diagnosticId(file: string, rule: string, startIndex: number, message: string): string {\n return crypto.createHash(\"sha256\").update(`${file}\\0${rule}\\0${startIndex}\\0${message}`).digest(\"hex\").slice(0, 16);\n}\n\nfunction nodeLocation(node: DiagnosticInput[\"node\"]): Diagnostic[\"location\"] {\n return {\n line: node.startPosition.row + 1,\n column: node.startPosition.column + 1,\n endLine: node.endPosition.row + 1,\n endColumn: node.endPosition.column + 1,\n };\n}\n\nfunction sameLocation(left: Diagnostic[\"location\"], right: Diagnostic[\"location\"]): boolean {\n return left.line === right.line\n && left.column === right.column\n && left.endLine === right.endLine\n && left.endColumn === right.endColumn;\n}\n\nfunction removeSupersededDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] {\n return diagnostics.filter((diagnostic) => {\n if (diagnostic.rule !== \"react-luau/rerender-high-frequency-state\") return true;\n\n return !diagnostics.some((candidate) =>\n candidate.rule === \"react-luau/prefer-binding-over-state\"\n && sameLocation(candidate.location, diagnostic.location)\n && SEVERITY_RANK[candidate.severity] >= SEVERITY_RANK[diagnostic.severity]\n );\n });\n}\n\nfunction toDiagnostic(\n file: SourceFile,\n ruleId: string,\n category: Diagnostic[\"category\"],\n severity: Severity,\n input: DiagnosticInput,\n): Diagnostic {\n const node = input.node;\n const highlights = input.highlights?.map(nodeLocation);\n return {\n id: diagnosticId(file.relativePath, ruleId, node.startIndex, input.message),\n rule: ruleId,\n category,\n severity: input.severity ?? severity,\n message: input.message,\n help: input.help,\n file: file.relativePath,\n location: nodeLocation(node),\n highlights: highlights && highlights.length > 0 ? highlights : undefined,\n fixPreview: input.fixPreview,\n };\n}\n\nexport async function analyzeReactFile(input: ReactFileAnalysisInput, tree?: SyntaxTree): Promise<ReactFileAnalysisResult> {\n const parsedTree = tree ?? await parseLuau(input.source);\n const model = buildReactModel(parsedTree.rootNode);\n if (!input.forceScan && !model.isReactFile) {\n return { relativePath: input.relativePath, isReactFile: false, scanned: false, diagnostics: [] };\n }\n\n const file: SourceFile = {\n absolutePath: input.absolutePath,\n relativePath: input.relativePath,\n source: input.source,\n tree: parsedTree,\n root: parsedTree.rootNode,\n model,\n project: input.project,\n };\n const context = createRuleContext(file);\n const categorySet = input.categories && input.categories.length > 0 ? new Set(input.categories) : null;\n const isSuppressed = input.respectInlineDisables ? createInlineSuppressionChecker(input.source) : () => false;\n const diagnostics: Diagnostic[] = [];\n\n for (const rule of rules) {\n if (categorySet && !categorySet.has(rule.category)) continue;\n const severity = effectiveSeverity(rule.severity, rule.id, input.config);\n if (!severity) continue;\n const findings = rule.run(context);\n for (const finding of findings) {\n const configuredSeverity = input.config.rules?.[rule.id];\n const diagnostic = toDiagnostic(file, rule.id, rule.category, severity, {\n ...finding,\n severity: configuredSeverity && configuredSeverity !== \"off\" ? severity : finding.severity,\n });\n if (SEVERITY_RANK[diagnostic.severity] < SEVERITY_RANK[input.minSeverity]) continue;\n if (isSuppressed(diagnostic.rule, diagnostic.location.line)) continue;\n diagnostics.push(diagnostic);\n }\n if (rule.id === \"react-luau/parse-error\" && findings.length > 0) break;\n }\n\n const filteredDiagnostics = removeSupersededDiagnostics(diagnostics);\n\n return {\n relativePath: input.relativePath,\n isReactFile: model.isReactFile,\n scanned: true,\n diagnostics: filteredDiagnostics,\n };\n}\n",
15
- "import type { SyntaxNode } from \"../syntax\";\n\nexport function walk(node: SyntaxNode): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n const stack = [node];\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n result.push(current);\n\n const children = current.namedChildren;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n stack.push(children[index]);\n }\n }\n\n return result;\n}\n\nexport function ancestors(node: SyntaxNode): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n let current = node.parent;\n while (current) {\n result.push(current);\n current = current.parent;\n }\n return result;\n}\n\nexport function nearestAncestor(node: SyntaxNode, predicate: (candidate: SyntaxNode) => boolean): SyntaxNode | null {\n let current = node.parent;\n while (current) {\n if (predicate(current)) return current;\n current = current.parent;\n }\n return null;\n}\n\nexport function descendantsOfType(node: SyntaxNode, type: string): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n for (const candidate of walk(node)) {\n if (candidate.type === type) result.push(candidate);\n }\n return result;\n}\n\nexport function rootIdentifier(text: string): string | null {\n const match = text.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/);\n return match?.[1] ?? null;\n}\n\nexport function normalizeExpressionText(text: string): string {\n return text.replace(/\\s+/g, \"\").replace(/^\\((.*)\\)$/s, \"$1\");\n}\n\nexport function nodeKey(node: SyntaxNode): number {\n return node.id;\n}\n\nexport function sameNode(left: SyntaxNode | null | undefined, right: SyntaxNode | null | undefined): boolean {\n return Boolean(left && right && nodeKey(left) === nodeKey(right));\n}\n",
13
+ "import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { CachedSourceEffectModule } from \"./project-effects\";\nimport type {\n Diagnostic,\n ProjectModel,\n ScanFileInput,\n SourceEffectModuleSummary,\n} from \"./types\";\n\nconst MAX_CACHED_REPORTS = 8;\n\ninterface CachedFileState {\n size?: number;\n mtimeMs?: number;\n ctimeMs?: number;\n hash: string;\n isReactFile?: boolean;\n}\n\ninterface SerializedSourceEffectSummary {\n effectfulMembers: string[];\n effectfulExport: boolean;\n mutatingMembers: string[];\n mutatingExportParameters: number[];\n mutatingMemberParameters: Array<[string, number[]]>;\n localMutatingParameters: Array<[string, number[]]>;\n instanceFactories: string[];\n}\n\ninterface SerializedProjectModel {\n memoizedModules: Array<[string, \"shallow\" | \"custom\"]>;\n bindingCandidateHooks: Array<[string, ProjectModel[\"bindingCandidateHooks\"] extends Map<string, infer V> ? V : never]>;\n externalCallbackModules: Array<[string, ProjectModel[\"externalCallbackModules\"] extends Map<string, infer V> ? V : never]>;\n bindingApiAlternatives: Array<[string, string]>;\n bindingCompatibleComponentProps: Array<[string, string[]]>;\n staticIterationTables: Array<[string, string[]]>;\n conditionalHookModes: Array<[string, ProjectModel[\"conditionalHookModes\"] extends Map<string, infer V> ? V : never]>;\n reactHookModules: Array<[string, boolean]>;\n sourceEffects: Array<[string, SerializedSourceEffectSummary]>;\n}\n\nexport interface CachedReportData {\n scannedFiles: number;\n candidateFiles: number;\n diagnostics: Diagnostic[];\n}\n\ninterface CachedReportEntry extends CachedReportData {\n lastUsedAt: number;\n}\n\ninterface ProjectCachePayload {\n analyzerHash: string;\n root: string;\n fingerprint: string;\n files: Record<string, CachedFileState>;\n projectModel?: SerializedProjectModel;\n effectModules?: Record<string, CachedSourceEffectModule>;\n reports?: Record<string, CachedReportEntry>;\n lastUsedAt: number;\n}\n\nexport interface ProjectCacheSession {\n enabled: boolean;\n root: string;\n filename: string | null;\n fingerprint: string;\n files: Record<string, CachedFileState>;\n sources: Map<string, string>;\n previous: ProjectCachePayload | null;\n exact: boolean;\n effectModules?: Record<string, CachedSourceEffectModule>;\n}\n\nfunction normalizeRelative(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction hashText(value: string): string {\n return crypto.createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nlet analyzerHash: string | null = null;\n\nfunction hashAnalyzerFile(hash: crypto.Hash, root: string, filename: string): void {\n if (!fs.existsSync(filename)) return;\n hash.update(normalizeRelative(path.relative(root, filename)));\n hash.update(\"\\0\");\n hash.update(fs.readFileSync(filename));\n hash.update(\"\\0\");\n}\n\nfunction sourceFiles(directory: string): string[] {\n if (!fs.existsSync(directory)) return [];\n const files: string[] = [];\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const filename = path.join(directory, entry.name);\n if (entry.isDirectory()) files.push(...sourceFiles(filename));\n else if (entry.isFile() && entry.name.endsWith(\".ts\")) files.push(filename);\n }\n return files;\n}\n\nfunction currentAnalyzerHash(): string {\n if (analyzerHash) return analyzerHash;\n\n const hash = crypto.createHash(\"sha256\");\n let packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"..\");\n let bundledCli: string | null = null;\n\n try {\n const entrypoint = process.argv[1] ? fs.realpathSync(process.argv[1]) : null;\n if (entrypoint && path.basename(entrypoint) === \"cli.js\" && path.basename(path.dirname(entrypoint)) === \"dist\") {\n bundledCli = entrypoint;\n packageRoot = path.dirname(path.dirname(entrypoint));\n }\n } catch {\n // Source execution and tests may not have a filesystem-backed CLI entrypoint.\n }\n\n if (bundledCli) {\n hashAnalyzerFile(hash, packageRoot, bundledCli);\n hashAnalyzerFile(hash, packageRoot, path.join(path.dirname(bundledCli), \"scan-worker.js\"));\n } else {\n for (const filename of sourceFiles(path.join(packageRoot, \"src\")).sort()) {\n hashAnalyzerFile(hash, packageRoot, filename);\n }\n }\n\n hashAnalyzerFile(hash, packageRoot, path.join(packageRoot, \"package.json\"));\n hashAnalyzerFile(hash, packageRoot, path.join(packageRoot, \"vendor\", \"tree-sitter-luau.wasm\"));\n analyzerHash = hash.digest(\"hex\");\n return analyzerHash;\n}\n\nfunction stableValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableValue);\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, stableValue(entry)]),\n );\n }\n return value;\n}\n\nexport function stableCacheKey(value: unknown): string {\n return hashText(JSON.stringify(stableValue(value))).slice(0, 24);\n}\n\nexport function cacheBaseDirectory(): string {\n if (process.env.REACT_LUAU_DOCTOR_CACHE_DIR) return path.resolve(process.env.REACT_LUAU_DOCTOR_CACHE_DIR);\n if (process.platform === \"win32\") {\n const base = process.env.LOCALAPPDATA ?? path.join(os.homedir(), \"AppData\", \"Local\");\n return path.join(base, \"react-luau-doctor\", \"Cache\");\n }\n if (process.platform === \"darwin\") return path.join(os.homedir(), \"Library\", \"Caches\", \"react-luau-doctor\");\n return path.join(process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), \".cache\"), \"react-luau-doctor\");\n}\n\nfunction projectCacheFilename(root: string): string {\n const canonical = process.platform === \"win32\" ? path.resolve(root).toLowerCase() : path.resolve(root);\n return path.join(cacheBaseDirectory(), `project-${hashText(canonical).slice(0, 24)}.json`);\n}\n\nfunction readPayload(filename: string, root: string): ProjectCachePayload | null {\n try {\n const parsed = JSON.parse(fs.readFileSync(filename, \"utf8\")) as ProjectCachePayload;\n if (\n parsed.analyzerHash !== currentAnalyzerHash() ||\n path.resolve(parsed.root) !== path.resolve(root) ||\n !parsed.files ||\n typeof parsed.fingerprint !== \"string\"\n ) return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writePayload(filename: string, payload: ProjectCachePayload): void {\n try {\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n const temporary = `${filename}.${process.pid}.${Date.now()}.tmp`;\n fs.writeFileSync(temporary, JSON.stringify(payload));\n fs.renameSync(temporary, filename);\n } catch {\n // Caching is an optimization. A read-only or unavailable cache directory must\n // never prevent the analyzer from running.\n }\n}\n\nfunction fileStateMatches(previous: CachedFileState | undefined, stat: fs.Stats): boolean {\n return Boolean(\n previous &&\n previous.size === stat.size &&\n previous.mtimeMs === stat.mtimeMs &&\n previous.ctimeMs === stat.ctimeMs &&\n previous.hash,\n );\n}\n\nexport function prepareProjectCache(\n root: string,\n candidates: ScanFileInput[],\n enabled = true,\n onProgress?: (current: number, total: number, file?: string) => void,\n): ProjectCacheSession {\n const cacheEnabled = enabled && process.env.REACT_LUAU_DOCTOR_DISABLE_CACHE !== \"1\";\n const filename = cacheEnabled ? projectCacheFilename(root) : null;\n const previous = filename ? readPayload(filename, root) : null;\n const files: Record<string, CachedFileState> = {};\n const sources = new Map<string, string>();\n const fingerprintParts: string[] = [];\n\n onProgress?.(0, candidates.length);\n for (let index = 0; index < candidates.length; index += 1) {\n const candidate = candidates[index];\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(root, candidate.absolutePath));\n const previousState = previous?.files[relativePath];\n let state: CachedFileState;\n\n if (candidate.source !== undefined) {\n const hash = hashText(candidate.source);\n sources.set(relativePath, candidate.source);\n state = { hash, isReactFile: previousState?.hash === hash ? previousState.isReactFile : undefined };\n } else {\n try {\n const stat = fs.statSync(candidate.absolutePath);\n if (fileStateMatches(previousState, stat)) {\n state = { ...previousState! };\n } else {\n const source = fs.readFileSync(candidate.absolutePath, \"utf8\");\n const hash = hashText(source);\n sources.set(relativePath, source);\n state = {\n size: stat.size,\n mtimeMs: stat.mtimeMs,\n ctimeMs: stat.ctimeMs,\n hash,\n isReactFile: previousState?.hash === hash ? previousState.isReactFile : undefined,\n };\n }\n } catch {\n onProgress?.(index + 1, candidates.length, relativePath);\n continue;\n }\n }\n\n files[relativePath] = state;\n fingerprintParts.push(`${relativePath}\\0${state.hash}`);\n onProgress?.(index + 1, candidates.length, relativePath);\n }\n\n const fingerprint = hashText(fingerprintParts.join(\"\\0\"));\n return {\n enabled: cacheEnabled,\n root,\n filename,\n fingerprint,\n files,\n sources,\n previous,\n exact: Boolean(previous && previous.fingerprint === fingerprint),\n };\n}\n\nexport function materializeProjectCandidates(session: ProjectCacheSession, candidates: ScanFileInput[]): ScanFileInput[] {\n return candidates.map((candidate) => {\n if (candidate.source !== undefined) return candidate;\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(session.root, candidate.absolutePath));\n const cachedSource = session.sources.get(relativePath);\n if (cachedSource !== undefined) return { ...candidate, relativePath, source: cachedSource };\n try {\n const source = fs.readFileSync(candidate.absolutePath, \"utf8\");\n session.sources.set(relativePath, source);\n return { ...candidate, relativePath, source };\n } catch {\n return { ...candidate, relativePath };\n }\n });\n}\n\nfunction serializeSourceEffect(summary: SourceEffectModuleSummary): SerializedSourceEffectSummary {\n return {\n effectfulMembers: [...summary.effectfulMembers].sort(),\n effectfulExport: summary.effectfulExport,\n mutatingMembers: [...summary.mutatingMembers].sort(),\n mutatingExportParameters: [...summary.mutatingExportParameters].sort((a, b) => a - b),\n mutatingMemberParameters: [...summary.mutatingMemberParameters]\n .map(([name, indexes]) => [name, [...indexes].sort((a, b) => a - b)] as [string, number[]])\n .sort(([left], [right]) => left.localeCompare(right)),\n localMutatingParameters: [...summary.localMutatingParameters]\n .map(([name, indexes]) => [name, [...indexes].sort((a, b) => a - b)] as [string, number[]])\n .sort(([left], [right]) => left.localeCompare(right)),\n instanceFactories: [...summary.instanceFactories].sort(),\n };\n}\n\nfunction deserializeSourceEffect(summary: SerializedSourceEffectSummary): SourceEffectModuleSummary {\n return {\n effectfulMembers: new Set(summary.effectfulMembers),\n effectfulExport: summary.effectfulExport,\n mutatingMembers: new Set(summary.mutatingMembers ?? []),\n mutatingExportParameters: new Set(summary.mutatingExportParameters ?? []),\n mutatingMemberParameters: new Map(\n (summary.mutatingMemberParameters ?? []).map(([name, indexes]) => [name, new Set(indexes)]),\n ),\n localMutatingParameters: new Map(\n (summary.localMutatingParameters ?? []).map(([name, indexes]) => [name, new Set(indexes)]),\n ),\n instanceFactories: new Set(summary.instanceFactories),\n };\n}\n\nexport function serializeProjectModel(project: ProjectModel): SerializedProjectModel {\n return {\n memoizedModules: [...project.memoizedModules],\n bindingCandidateHooks: [...project.bindingCandidateHooks],\n externalCallbackModules: [...project.externalCallbackModules],\n bindingApiAlternatives: [...project.bindingApiAlternatives],\n bindingCompatibleComponentProps: [...project.bindingCompatibleComponentProps].map(([key, value]) => [key, [...value].sort()]),\n staticIterationTables: [...project.staticIterationTables].map(([key, value]) => [key, [...value].sort()]),\n conditionalHookModes: [...project.conditionalHookModes],\n reactHookModules: [...project.reactHookModules],\n sourceEffects: [...project.sourceEffects].map(([key, value]) => [key, serializeSourceEffect(value)]),\n };\n}\n\nexport function deserializeProjectModel(project: SerializedProjectModel): ProjectModel {\n return {\n memoizedModules: new Map(project.memoizedModules),\n bindingCandidateHooks: new Map(project.bindingCandidateHooks),\n externalCallbackModules: new Map(project.externalCallbackModules),\n bindingApiAlternatives: new Map(project.bindingApiAlternatives),\n bindingCompatibleComponentProps: new Map(project.bindingCompatibleComponentProps.map(([key, value]) => [key, new Set(value)])),\n staticIterationTables: new Map(project.staticIterationTables.map(([key, value]) => [key, new Set(value)])),\n conditionalHookModes: new Map(project.conditionalHookModes),\n reactHookModules: new Map(project.reactHookModules ?? []),\n sourceEffects: new Map(project.sourceEffects.map(([key, value]) => [key, deserializeSourceEffect(value)])),\n };\n}\n\nexport function cachedEffectModules(session: ProjectCacheSession): Record<string, CachedSourceEffectModule> {\n return session.previous?.effectModules ?? {};\n}\n\nexport function previousProjectModel(session: ProjectCacheSession): ProjectModel | null {\n if (!session.previous?.projectModel) return null;\n try {\n return deserializeProjectModel(session.previous.projectModel);\n } catch {\n return null;\n }\n}\n\nexport function projectModelFeatureKey(project: ProjectModel): string {\n const serialized = serializeProjectModel(project);\n return stableCacheKey({\n memoizedModules: serialized.memoizedModules,\n bindingCandidateHooks: serialized.bindingCandidateHooks,\n externalCallbackModules: serialized.externalCallbackModules,\n bindingApiAlternatives: serialized.bindingApiAlternatives,\n bindingCompatibleComponentProps: serialized.bindingCompatibleComponentProps,\n staticIterationTables: serialized.staticIterationTables,\n conditionalHookModes: serialized.conditionalHookModes,\n reactHookModules: serialized.reactHookModules,\n });\n}\n\nexport function cachedProjectModel(session: ProjectCacheSession): ProjectModel | null {\n if (!session.exact || !session.previous?.projectModel) return null;\n try {\n return deserializeProjectModel(session.previous.projectModel);\n } catch {\n return null;\n }\n}\n\nexport function previousCachedReport(session: ProjectCacheSession, key: string): CachedReportData | null {\n const report = session.previous?.reports?.[key];\n if (!report) return null;\n return {\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles,\n diagnostics: report.diagnostics,\n };\n}\n\nexport function cachedReport(session: ProjectCacheSession, key: string): CachedReportData | null {\n if (!session.exact) return null;\n const report = session.previous?.reports?.[key];\n if (!report) return null;\n return {\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles,\n diagnostics: report.diagnostics,\n };\n}\n\nexport function cacheHasSameFileSet(session: ProjectCacheSession): boolean {\n if (!session.previous) return false;\n const previousFiles = Object.keys(session.previous.files).sort();\n const currentFiles = Object.keys(session.files).sort();\n return previousFiles.length === currentFiles.length && previousFiles.every((file, index) => file === currentFiles[index]);\n}\n\nexport function changedProjectFiles(session: ProjectCacheSession): string[] {\n if (!session.previous) return Object.keys(session.files);\n const all = new Set([...Object.keys(session.previous.files), ...Object.keys(session.files)]);\n return [...all].filter((file) => session.previous?.files[file]?.hash !== session.files[file]?.hash).sort();\n}\n\nexport function knownReactFile(session: ProjectCacheSession, relativePath: string): boolean | undefined {\n return session.files[normalizeRelative(relativePath)]?.isReactFile;\n}\n\nexport function recordReactFile(session: ProjectCacheSession, relativePath: string, isReactFile: boolean): void {\n const state = session.files[normalizeRelative(relativePath)];\n if (state) state.isReactFile = isReactFile;\n}\n\nexport function saveProjectCache(\n session: ProjectCacheSession,\n project: ProjectModel,\n effectModules: Record<string, CachedSourceEffectModule> = session.previous?.effectModules ?? {},\n reportKey?: string,\n report?: CachedReportData,\n): void {\n if (!session.enabled || !session.filename) return;\n const reports: Record<string, CachedReportEntry> = session.exact ? { ...(session.previous?.reports ?? {}) } : {};\n if (reportKey && report) reports[reportKey] = { ...report, lastUsedAt: Date.now() };\n const prunedReports = Object.fromEntries(\n Object.entries(reports)\n .sort(([, left], [, right]) => right.lastUsedAt - left.lastUsedAt)\n .slice(0, MAX_CACHED_REPORTS),\n );\n writePayload(session.filename, {\n analyzerHash: currentAnalyzerHash(),\n root: path.resolve(session.root),\n fingerprint: session.fingerprint,\n files: session.files,\n projectModel: serializeProjectModel(project),\n effectModules,\n reports: prunedReports,\n lastUsedAt: Date.now(),\n });\n}\n\nexport function projectCachePath(root: string): string {\n return projectCacheFilename(root);\n}\n",
14
+ "import crypto from \"node:crypto\";\nimport type { SyntaxTree } from \"./syntax\";\nimport { createRuleContext } from \"./ast/context\";\nimport { buildReactModel } from \"./ast/react-model\";\nimport { effectiveSeverity } from \"./config\";\nimport { createInlineSuppressionChecker } from \"./inline-disables\";\nimport { parseLuau } from \"./parser\";\nimport { rules } from \"./rules\";\nimport type {\n Category,\n Diagnostic,\n DiagnosticInput,\n DoctorConfig,\n ProjectModel,\n Severity,\n SourceFile,\n} from \"./types\";\n\nconst SEVERITY_RANK: Record<Severity, number> = {\n suggestion: 0,\n warning: 1,\n error: 2,\n};\n\nexport interface ReactFileAnalysisInput {\n absolutePath: string;\n relativePath: string;\n source: string;\n forceScan: boolean;\n project: ProjectModel;\n config: DoctorConfig;\n categories?: Category[];\n minSeverity: Severity;\n respectInlineDisables: boolean;\n}\n\nexport interface ReactFileAnalysisResult {\n relativePath: string;\n isReactFile: boolean;\n scanned: boolean;\n diagnostics: Diagnostic[];\n}\n\nfunction diagnosticId(file: string, rule: string, startIndex: number, message: string): string {\n return crypto.createHash(\"sha256\").update(`${file}\\0${rule}\\0${startIndex}\\0${message}`).digest(\"hex\").slice(0, 16);\n}\n\nfunction nodeLocation(node: DiagnosticInput[\"node\"]): Diagnostic[\"location\"] {\n return {\n line: node.startPosition.row + 1,\n column: node.startPosition.column + 1,\n endLine: node.endPosition.row + 1,\n endColumn: node.endPosition.column + 1,\n };\n}\n\nfunction sameLocation(left: Diagnostic[\"location\"], right: Diagnostic[\"location\"]): boolean {\n return left.line === right.line\n && left.column === right.column\n && left.endLine === right.endLine\n && left.endColumn === right.endColumn;\n}\n\nfunction removeSupersededDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] {\n return diagnostics.filter((diagnostic) => {\n if (diagnostic.rule !== \"react-luau/rerender-high-frequency-state\") return true;\n\n return !diagnostics.some((candidate) =>\n candidate.rule === \"react-luau/prefer-binding-over-state\"\n && sameLocation(candidate.location, diagnostic.location)\n && SEVERITY_RANK[candidate.severity] >= SEVERITY_RANK[diagnostic.severity]\n );\n });\n}\n\nfunction toDiagnostic(\n file: SourceFile,\n ruleId: string,\n category: Diagnostic[\"category\"],\n severity: Severity,\n input: DiagnosticInput,\n): Diagnostic {\n const node = input.node;\n const highlights = input.highlights?.map(nodeLocation);\n return {\n id: diagnosticId(file.relativePath, ruleId, node.startIndex, input.message),\n rule: ruleId,\n category,\n severity: input.severity ?? severity,\n message: input.message,\n help: input.help,\n file: file.relativePath,\n location: nodeLocation(node),\n highlights: highlights && highlights.length > 0 ? highlights : undefined,\n fixPreview: input.fixPreview,\n };\n}\n\nexport async function analyzeReactFile(input: ReactFileAnalysisInput, tree?: SyntaxTree): Promise<ReactFileAnalysisResult> {\n const parsedTree = tree ?? await parseLuau(input.source);\n const model = buildReactModel(parsedTree.rootNode, input.project);\n if (!input.forceScan && !model.isReactFile) {\n return { relativePath: input.relativePath, isReactFile: false, scanned: false, diagnostics: [] };\n }\n\n const file: SourceFile = {\n absolutePath: input.absolutePath,\n relativePath: input.relativePath,\n source: input.source,\n tree: parsedTree,\n root: parsedTree.rootNode,\n model,\n project: input.project,\n };\n const context = createRuleContext(file);\n const categorySet = input.categories && input.categories.length > 0 ? new Set(input.categories) : null;\n const isSuppressed = input.respectInlineDisables ? createInlineSuppressionChecker(input.source) : () => false;\n const diagnostics: Diagnostic[] = [];\n\n for (const rule of rules) {\n if (categorySet && !categorySet.has(rule.category)) continue;\n const severity = effectiveSeverity(rule.severity, rule.id, input.config);\n if (!severity) continue;\n const findings = rule.run(context);\n for (const finding of findings) {\n const configuredSeverity = input.config.rules?.[rule.id];\n const diagnostic = toDiagnostic(file, rule.id, rule.category, severity, {\n ...finding,\n severity: configuredSeverity && configuredSeverity !== \"off\" ? severity : finding.severity,\n });\n if (SEVERITY_RANK[diagnostic.severity] < SEVERITY_RANK[input.minSeverity]) continue;\n if (isSuppressed(diagnostic.rule, diagnostic.location.line)) continue;\n diagnostics.push(diagnostic);\n }\n if (rule.id === \"react-luau/parse-error\" && findings.length > 0) break;\n }\n\n const filteredDiagnostics = removeSupersededDiagnostics(diagnostics);\n\n return {\n relativePath: input.relativePath,\n isReactFile: model.isReactFile,\n scanned: true,\n diagnostics: filteredDiagnostics,\n };\n}\n",
15
+ "import type { SyntaxNode } from \"../syntax\";\n\nexport function walk(node: SyntaxNode): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n const stack = [node];\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n result.push(current);\n\n const children = current.namedChildren;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n stack.push(children[index]);\n }\n }\n\n return result;\n}\n\nexport function ancestors(node: SyntaxNode): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n let current = node.parent;\n while (current) {\n result.push(current);\n current = current.parent;\n }\n return result;\n}\n\nexport function nearestAncestor(node: SyntaxNode, predicate: (candidate: SyntaxNode) => boolean): SyntaxNode | null {\n let current = node.parent;\n while (current) {\n if (predicate(current)) return current;\n current = current.parent;\n }\n return null;\n}\n\nexport function descendantsOfType(node: SyntaxNode, type: string): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n for (const candidate of walk(node)) {\n if (candidate.type === type) result.push(candidate);\n }\n return result;\n}\n\n\nexport function parameterBindingNames(parameters: SyntaxNode | null | undefined): string[] {\n if (!parameters) return [];\n const result: string[] = [];\n for (const parameter of parameters.namedChildren) {\n if (parameter.type !== \"parameter\") continue;\n const identifier = parameter.namedChildren.find((child) => child.type === \"identifier\");\n if (identifier) result.push(identifier.text);\n }\n return [...new Set(result)];\n}\n\nexport function rootIdentifier(text: string): string | null {\n const match = text.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/);\n return match?.[1] ?? null;\n}\n\nexport function normalizeExpressionText(text: string): string {\n return text.replace(/\\s+/g, \"\").replace(/^\\((.*)\\)$/s, \"$1\");\n}\n\nexport function nodeKey(node: SyntaxNode): number {\n return node.id;\n}\n\nexport function sameNode(left: SyntaxNode | null | undefined, right: SyntaxNode | null | undefined): boolean {\n return Boolean(left && right && nodeKey(left) === nodeKey(right));\n}\n",
16
16
  "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext, SourceFile } from \"../types\";\nimport { nodeKey, normalizeExpressionText, walk } from \"./walk\";\n\nexport function createRuleContext(file: SourceFile): RuleContext {\n // buildReactModel already materialized the root traversal. Reuse those node\n // wrappers here and only materialize subtrees lazily when a rule needs one.\n const allNodes = file.model.allNodes;\n const calls = allNodes.filter((node) => node.type === \"function_call\");\n const traversalCache = new Map<number, SyntaxNode[]>([[file.root.id, allNodes]]);\n const callPathCache = new Map<number, string | null>();\n const resolvedCallPathCache = new Map<string, string>();\n const nearestFunctionCache = new Map<number, FunctionInfo | null>();\n const componentCache = new Map<number, FunctionInfo | null>();\n\n const traversal = (node: SyntaxNode): SyntaxNode[] => {\n const key = node.id;\n const existing = traversalCache.get(key);\n if (existing) return existing;\n const result = walk(node);\n traversalCache.set(key, result);\n return result;\n };\n\n const getCallPath = (node: SyntaxNode): string | null => {\n if (node.type !== \"function_call\") return null;\n const key = node.id;\n if (callPathCache.has(key)) return callPathCache.get(key) ?? null;\n const name = node.childForFieldName(\"name\");\n const result = name ? normalizeExpressionText(name.text) : null;\n callPathCache.set(key, result);\n return result;\n };\n\n const resolveCallPath = (value: string): string => {\n const normalized = normalizeExpressionText(value);\n const cached = resolvedCallPathCache.get(normalized);\n if (cached) return cached;\n\n const direct = file.model.aliases.get(normalized);\n if (direct) {\n resolvedCallPathCache.set(normalized, direct);\n return direct;\n }\n\n const namespaceMatch = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(.+)$/);\n let result = normalized;\n if (namespaceMatch && file.model.reactNamespaces.has(namespaceMatch[1])) {\n result = `React.${namespaceMatch[2]}`;\n } else if (namespaceMatch && file.model.reactRobloxNamespaces.has(namespaceMatch[1])) {\n result = `ReactRoblox.${namespaceMatch[2]}`;\n }\n resolvedCallPathCache.set(normalized, result);\n return result;\n };\n\n const callArguments = (node: SyntaxNode): SyntaxNode[] => {\n return node.childForFieldName(\"arguments\")?.namedChildren ?? [];\n };\n\n const nearestFunction = (node: SyntaxNode): FunctionInfo | null => {\n const key = node.id;\n if (nearestFunctionCache.has(key)) return nearestFunctionCache.get(key) ?? null;\n\n const visited: number[] = [key];\n let current = node.parent;\n let result: FunctionInfo | null = null;\n while (current) {\n const info = file.model.functionByNode.get(nodeKey(current));\n if (info) {\n result = info;\n break;\n }\n if (nearestFunctionCache.has(current.id)) {\n result = nearestFunctionCache.get(current.id) ?? null;\n break;\n }\n visited.push(current.id);\n current = current.parent;\n }\n\n for (const visitedKey of visited) nearestFunctionCache.set(visitedKey, result);\n return result;\n };\n\n const containingComponent = (node: SyntaxNode): FunctionInfo | null => {\n const key = node.id;\n if (componentCache.has(key)) return componentCache.get(key) ?? null;\n\n const visited: number[] = [key];\n let current = node.parent;\n let result: FunctionInfo | null = null;\n while (current) {\n const info = file.model.functionByNode.get(nodeKey(current));\n if (info?.isComponent) {\n result = info;\n break;\n }\n if (componentCache.has(current.id)) {\n result = componentCache.get(current.id) ?? null;\n break;\n }\n visited.push(current.id);\n current = current.parent;\n }\n\n for (const visitedKey of visited) componentCache.set(visitedKey, result);\n return result;\n };\n\n const isDirectlyExecutedInFunction = (node: SyntaxNode, fn: FunctionInfo): boolean => nearestFunction(node) === fn;\n\n return {\n ...file,\n findCalls: () => calls,\n getCallPath,\n resolveCallPath,\n callArguments,\n nearestFunction,\n containingComponent,\n isDirectlyExecutedInFunction,\n walk: (node = file.root) => traversal(node),\n };\n}\n",
17
- "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, ReactModel, StateBinding } from \"../types\";\nimport { nodeKey, normalizeExpressionText, sameNode, walk } from \"./walk\";\n\nconst REACT_HOOKS = new Set([\n \"useState\",\n \"useEffect\",\n \"useLayoutEffect\",\n \"useMemo\",\n \"useCallback\",\n \"useContext\",\n \"useReducer\",\n \"useRef\",\n \"useImperativeHandle\",\n \"useBinding\",\n]);\n\nconst REACT_MEMBERS = new Set([...REACT_HOOKS, \"createElement\", \"createContext\", \"memo\", \"joinBindings\"]);\nconst STABLE_CUSTOM_HOOK_RETURN = /^(?:set[A-Z0-9_]|dispatch$|send$|emit$|fire$)/i;\nconst INSTANCE_FACTORY_MEMBERS = new Set([\n \"Clone\",\n \"FindFirstAncestor\",\n \"FindFirstAncestorOfClass\",\n \"FindFirstAncestorWhichIsA\",\n \"FindFirstChild\",\n \"FindFirstChildOfClass\",\n \"FindFirstChildWhichIsA\",\n \"GetButton\",\n \"GetMouse\",\n \"GetService\",\n \"WaitForChild\",\n]);\nconst STABLE_ENGINE_FACTORY_MEMBERS = new Set([\"GetMouse\", \"GetService\"]);\n\nfunction identifiersFromParameters(node: SyntaxNode | null): string[] {\n if (!node) return [];\n const result: string[] = [];\n for (const child of walk(node)) {\n if (child.type !== \"identifier\") continue;\n const parentType = child.parent?.type;\n if (parentType === \"parameters\" || parentType === \"parameter\" || parentType === \"typed_identifier\") {\n result.push(child.text);\n }\n }\n return [...new Set(result)];\n}\n\nfunction getFunctionName(node: SyntaxNode): string | null {\n if (node.type === \"function_declaration\") {\n return node.childForFieldName(\"name\")?.text ?? null;\n }\n\n if (node.type !== \"function_definition\") return null;\n let owner = node.parent;\n while (owner && owner.type !== \"variable_declaration\") {\n if (owner.type === \"function_definition\" || owner.type === \"function_declaration\") return null;\n owner = owner.parent;\n }\n if (!owner) return null;\n\n const prefix = owner.text.slice(0, Math.max(0, node.startIndex - owner.startIndex));\n const directMatch = prefix.match(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*$/s);\n if (directMatch) return directMatch[1];\n\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);\n return wrappedMatch?.[1] ?? null;\n}\n\nfunction requireTargetContainsModule(target: string, moduleName: string): boolean {\n return (target.match(/[A-Za-z_][A-Za-z0-9_]*/g) ?? [])\n .some((token) => token.toLowerCase() === moduleName.toLowerCase());\n}\n\nfunction resolvePath(\n rawPath: string,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): string {\n const normalized = normalizeExpressionText(rawPath);\n const direct = aliases.get(normalized);\n if (direct) return direct;\n\n const namespaceMatch = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(.+)$/);\n if (namespaceMatch && reactNamespaces.has(namespaceMatch[1])) return `React.${namespaceMatch[2]}`;\n if (namespaceMatch && reactRobloxNamespaces.has(namespaceMatch[1])) return `ReactRoblox.${namespaceMatch[2]}`;\n return normalized;\n}\n\nfunction directCalls(node: SyntaxNode): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n const pending = [...node.namedChildren];\n while (pending.length > 0) {\n const child = pending.pop()!;\n if (child.type === \"function_definition\" || child.type === \"function_declaration\") continue;\n if (child.type === \"function_call\") result.push(child);\n pending.push(...child.namedChildren);\n }\n return result;\n}\n\nfunction hasDirectCreateElementCall(\n node: SyntaxNode,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): boolean {\n return directCalls(node).some((call) => {\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(name, aliases, reactNamespaces, reactRobloxNamespaces);\n return path === \"React.createElement\" || path === \"ReactRoblox.createPortal\";\n });\n}\n\nfunction hasDirectHookCall(\n node: SyntaxNode,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): boolean {\n return directCalls(node).some((call) => {\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(name, aliases, reactNamespaces, reactRobloxNamespaces);\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n return /^use[A-Z0-9_]/.test(final);\n });\n}\n\nfunction isMemoWrappedFunction(\n node: SyntaxNode,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n): boolean {\n const argumentsNode = node.parent;\n const call = argumentsNode?.type === \"arguments\" ? argumentsNode.parent : null;\n if (!call || call.type !== \"function_call\") return false;\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\n return resolvePath(name, aliases, reactNamespaces, new Set()) === \"React.memo\";\n}\n\nfunction isModuleReturnedFunction(node: SyntaxNode): boolean {\n const expressionList = node.parent;\n const returnStatement = expressionList?.type === \"expression_list\" ? expressionList.parent : null;\n if (!returnStatement || returnStatement.type !== \"return_statement\") return false;\n let current = returnStatement.parent;\n while (current) {\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\n current = current.parent;\n }\n return true;\n}\n\nfunction collectDirectLocals(body: SyntaxNode | null): Set<string> {\n const locals = new Set<string>();\n if (!body) return locals;\n\n for (const child of body.namedChildren) {\n if (child.type === \"variable_declaration\") {\n const beforeEquals = child.text.split(\"=\")[0] ?? \"\";\n const localPart = beforeEquals.replace(/^\\s*local\\s+/, \"\");\n for (const piece of localPart.split(\",\")) {\n const match = piece.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/);\n if (match) locals.add(match[1]);\n }\n } else if (child.type === \"function_declaration\") {\n const name = child.childForFieldName(\"name\")?.text;\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) locals.add(name);\n }\n }\n\n return locals;\n}\n\nfunction nearestFunctionInfo(node: SyntaxNode, functionByNode: Map<number, FunctionInfo>): FunctionInfo | null {\n let current = node.parent;\n while (current) {\n const info = functionByNode.get(nodeKey(current));\n if (info) return info;\n current = current.parent;\n }\n return null;\n}\n\nfunction declarationCall(node: SyntaxNode): SyntaxNode | null {\n if (node.type !== \"variable_declaration\") return null;\n for (const child of walk(node)) {\n if (child.type === \"function_call\") return child;\n if (!sameNode(child, node) && (child.type === \"function_definition\" || child.type === \"function_declaration\")) return null;\n }\n return null;\n}\n\nfunction declarationNames(node: SyntaxNode): string[] {\n if (node.type !== \"variable_declaration\") return [];\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\n const variableList = assignment?.namedChildren.find((child) => child.type === \"variable_list\");\n return variableList?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [];\n}\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\n return expressionList?.namedChildren ?? [];\n}\n\nfunction isSyntacticallyStableInitializer(node: SyntaxNode | undefined): boolean {\n if (!node) return false;\n return [\"nil\", \"true\", \"false\", \"number\", \"string\", \"string_content\"].includes(node.type)\n || /^(?:nil|true|false|-?\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)$/i.test(node.text.trim());\n}\n\n\nfunction finalCallMember(path: string): string {\n return path.split(/[.:]/).at(-1) ?? path;\n}\n\nfunction expressionCreatesInstance(\n node: SyntaxNode | undefined,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): boolean {\n if (!node) return false;\n const text = node.text.trim();\n if (/^(?:workspace|game|script)(?:\\.|:|$)/.test(text)) return true;\n\n for (const candidate of walk(node)) {\n if (candidate.type !== \"function_call\") continue;\n const rawPath = candidate.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n if (path === \"Instance.new\" || INSTANCE_FACTORY_MEMBERS.has(finalCallMember(path))) return true;\n }\n return false;\n}\n\nfunction expressionIsStableEngineObject(\n node: SyntaxNode | undefined,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): boolean {\n if (!node) return false;\n const calls = [...walk(node)].filter((candidate) => candidate.type === \"function_call\");\n if (calls.length !== 1) return false;\n const rawPath = calls[0].childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n return STABLE_ENGINE_FACTORY_MEMBERS.has(finalCallMember(path));\n}\n\nfunction memoReturnsInstance(\n callback: SyntaxNode | undefined,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): boolean {\n if (!callback || callback.type !== \"function_definition\") return false;\n for (const candidate of walk(callback)) {\n if (candidate.type !== \"return_statement\") continue;\n if (expressionCreatesInstance(candidate, aliases, reactNamespaces, reactRobloxNamespaces)) return true;\n }\n return false;\n}\n\nfunction isEmptyDependencyTable(node: SyntaxNode | undefined): boolean {\n return Boolean(node?.type === \"table_constructor\" && node.namedChildren.every((child) => child.type !== \"field\"));\n}\n\nexport function buildReactModel(root: SyntaxNode): ReactModel {\n const reactNamespaces = new Set<string>();\n const reactRobloxNamespaces = new Set<string>();\n const aliases = new Map<string, string>();\n const stateSetters = new Map<string, string>();\n const stateValues = new Map<string, string>();\n const stateBindings: StateBinding[] = [];\n const refVariables = new Set<string>();\n const bindingSetters = new Set<string>();\n const stableVariables = new Set<string>();\n const refVariablesByFunction = new Map<number, Set<string>>();\n const stableVariablesByFunction = new Map<number, Set<string>>();\n const externalMutableVariablesByFunction = new Map<number, Set<string>>();\n const instanceVariablesByFunction = new Map<number, Set<string>>();\n\n const allNodes = [...walk(root)];\n const declarations = allNodes.filter((node) => node.type === \"variable_declaration\");\n let isReactFile = false;\n\n for (const declaration of declarations) {\n const text = declaration.text;\n const requireMatch = text.match(/^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s);\n if (!requireMatch) continue;\n const [, localName, target] = requireMatch;\n if (requireTargetContainsModule(target, \"ReactRoblox\")) {\n reactRobloxNamespaces.add(localName);\n isReactFile = true;\n } else if (requireTargetContainsModule(target, \"React\")) {\n reactNamespaces.add(localName);\n isReactFile = true;\n }\n }\n\n for (const node of allNodes) {\n if (node.type !== \"function_call\") continue;\n const rawPath = normalizeExpressionText(node.childForFieldName(\"name\")?.text ?? \"\");\n const memberMatch = rawPath.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)$/);\n if (!memberMatch) continue;\n const [, namespace, member] = memberMatch;\n if (namespace === \"React\" && REACT_MEMBERS.has(member)) {\n reactNamespaces.add(namespace);\n isReactFile = true;\n } else if (namespace === \"ReactRoblox\" && [\"createRoot\", \"createPortal\"].includes(member)) {\n reactRobloxNamespaces.add(namespace);\n isReactFile = true;\n }\n }\n\n for (const declaration of declarations) {\n const text = declaration.text;\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);\n if (!aliasMatch) continue;\n const [, localName, namespace, member] = aliasMatch;\n if (reactNamespaces.has(namespace) && REACT_MEMBERS.has(member)) aliases.set(localName, `React.${member}`);\n if (reactRobloxNamespaces.has(namespace) && [\"createRoot\", \"createPortal\"].includes(member)) {\n aliases.set(localName, `ReactRoblox.${member}`);\n }\n }\n\n const functions: FunctionInfo[] = [];\n const functionByNode = new Map<number, FunctionInfo>();\n\n for (const node of allNodes) {\n if (node.type !== \"function_declaration\" && node.type !== \"function_definition\") continue;\n const name = getFunctionName(node);\n const body = node.childForFieldName(\"body\");\n const parameters = identifiersFromParameters(node.childForFieldName(\"parameters\"));\n const info: FunctionInfo = {\n node,\n body,\n name,\n parameters,\n isHook: Boolean(isReactFile && name && /^use[A-Z0-9_]/.test(name)),\n isComponent: false,\n };\n functions.push(info);\n functionByNode.set(nodeKey(node), info);\n }\n\n const functionsBySimpleName = new Map<string, FunctionInfo[]>();\n for (const info of functions) {\n if (!info.name || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(info.name)) continue;\n const existing = functionsBySimpleName.get(info.name) ?? [];\n existing.push(info);\n functionsBySimpleName.set(info.name, existing);\n }\n\n for (const info of functions) {\n if (!isReactFile || !info.body || info.isHook) continue;\n const simplePascalName = Boolean(info.name && /^[A-Z][A-Za-z0-9_]*$/.test(info.name));\n const hasHooks = hasDirectHookCall(info.body, aliases, reactNamespaces, reactRobloxNamespaces);\n const renders = hasDirectCreateElementCall(info.body, aliases, reactNamespaces, reactRobloxNamespaces);\n if (hasHooks || isMemoWrappedFunction(info.node, aliases, reactNamespaces) || (simplePascalName && renders)) {\n info.isComponent = true;\n } else if (!info.name && isModuleReturnedFunction(info.node) && hasHooks) {\n info.isComponent = true;\n }\n }\n\n for (const call of allNodes) {\n if (call.type !== \"function_call\") continue;\n const rawPath = call.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n if (path !== \"React.createElement\") continue;\n const element = call.childForFieldName(\"arguments\")?.namedChildren[0]?.text.trim() ?? \"\";\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(element)) continue;\n for (const info of functionsBySimpleName.get(element) ?? []) info.isComponent = true;\n }\n\n const addScopedVariable = (map: Map<number, Set<string>>, owner: FunctionInfo | null, name: string): void => {\n if (!owner) return;\n const key = nodeKey(owner.node);\n const names = map.get(key) ?? new Set<string>();\n names.add(name);\n map.set(key, names);\n };\n\n for (const declaration of declarations) {\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n const owner = nearestFunctionInfo(declaration, functionByNode);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n if (isSyntacticallyStableInitializer(expression) || expressionIsStableEngineObject(expression, aliases, reactNamespaces, reactRobloxNamespaces)) {\n stableVariables.add(names[index]);\n addScopedVariable(stableVariablesByFunction, owner, names[index]);\n }\n if (expressionCreatesInstance(expression, aliases, reactNamespaces, reactRobloxNamespaces)) {\n addScopedVariable(externalMutableVariablesByFunction, owner, names[index]);\n addScopedVariable(instanceVariablesByFunction, owner, names[index]);\n }\n }\n\n const call = declarationCall(declaration);\n if (!call) continue;\n const rawPath = call.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n const args = call.childForFieldName(\"arguments\")?.namedChildren ?? [];\n\n if (path === \"React.joinBindings\" && names.length >= 1) {\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\n } else if (path === \"React.useState\" && names.length >= 2) {\n const [valueName, setterName] = names;\n stateSetters.set(setterName, valueName);\n stateValues.set(valueName, setterName);\n stableVariables.add(setterName);\n addScopedVariable(stableVariablesByFunction, owner, setterName);\n stateBindings.push({\n valueName,\n setterName,\n declaration,\n call,\n initializer: args[0] ?? null,\n owner,\n });\n } else if (path === \"React.useReducer\" && names.length >= 2) {\n stableVariables.add(names[1]);\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\n } else if (path === \"React.useBinding\" && names.length >= 1) {\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n if (names.length >= 2) {\n stableVariables.add(names[1]);\n bindingSetters.add(names[1]);\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\n }\n } else if (path === \"React.useMemo\" && names.length >= 1) {\n if (isEmptyDependencyTable(args[1])) {\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n }\n if (memoReturnsInstance(args[0], aliases, reactNamespaces, reactRobloxNamespaces)) {\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\n addScopedVariable(instanceVariablesByFunction, owner, names[0]);\n }\n } else if (path === \"React.useCallback\" && names.length >= 1 && isEmptyDependencyTable(args[1])) {\n // Empty-dependency callbacks keep a stable identity. Their own stale captures are\n // diagnosed on the useCallback dependency table instead of cascading into every\n // effect that consumes the callback.\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n } else if (path === \"React.useRef\" && names.length >= 1) {\n stableVariables.add(names[0]);\n refVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n addScopedVariable(refVariablesByFunction, owner, names[0]);\n } else {\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n if (/^use[A-Z0-9_]/.test(final)) {\n for (const name of names.slice(1)) {\n if (!STABLE_CUSTOM_HOOK_RETURN.test(name)) continue;\n stableVariables.add(name);\n addScopedVariable(stableVariablesByFunction, owner, name);\n }\n }\n }\n }\n\n // React state/binding hooks can be assigned into previously declared locals.\n // The setter/Binding contracts are still stable even when the declaration and hook\n // call are split across statements. Rules-of-hooks separately reports conditional calls.\n for (const assignment of allNodes) {\n if (assignment.type !== \"assignment_statement\" || assignment.parent?.type === \"variable_declaration\") continue;\n const owner = nearestFunctionInfo(assignment, functionByNode);\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n const variableList = assignment.namedChildren.find((child) => child.type === \"variable_list\");\n const expressionList = assignment.namedChildren.find((child) => child.type === \"expression_list\");\n const names = variableList?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [];\n const expression = expressionList?.namedChildren[0];\n if (!expression || expression.type !== \"function_call\") continue;\n const rawPath = expression.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n\n if (path === \"React.useState\" && names.length >= 2) {\n stableVariables.add(names[1]);\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\n } else if (path === \"React.useBinding\" && names.length >= 1) {\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\n if (names.length >= 2) {\n stableVariables.add(names[1]);\n bindingSetters.add(names[1]);\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\n }\n }\n }\n\n // Binding-like values are stable mutable handles. Custom React-Luau animation hooks\n // often return bindings without the analyzer knowing the hook implementation. Infer\n // them from Binding-only APIs instead of requiring them in dependency arrays.\n for (const call of allNodes) {\n if (call.type !== \"function_call\") continue;\n const rawPath = normalizeExpressionText(call.childForFieldName(\"name\")?.text ?? \"\");\n const match = rawPath.match(/^([A-Za-z_][A-Za-z0-9_]*):(?:getValue|map)$/);\n if (!match) continue;\n const owner = nearestFunctionInfo(call, functionByNode);\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n stableVariables.add(match[1]);\n addScopedVariable(stableVariablesByFunction, owner, match[1]);\n addScopedVariable(externalMutableVariablesByFunction, owner, match[1]);\n }\n\n const componentLocals = new Map<number, Set<string>>();\n for (const info of functions) {\n if (!info.isComponent && !info.isHook) continue;\n const names = collectDirectLocals(info.body);\n for (const parameter of info.parameters) names.add(parameter);\n if (info.name?.includes(\":\")) names.add(\"self\");\n componentLocals.set(nodeKey(info.node), names);\n }\n\n return {\n allNodes,\n isReactFile,\n reactNamespaces,\n reactRobloxNamespaces,\n aliases,\n stateSetters,\n stateValues,\n stateBindings,\n refVariables,\n bindingSetters,\n stableVariables,\n refVariablesByFunction,\n stableVariablesByFunction,\n externalMutableVariablesByFunction,\n instanceVariablesByFunction,\n componentLocals,\n functions,\n functionByNode,\n };\n}\n",
17
+ "import path from \"node:path\";\n\nexport interface ModuleIdentity {\n id: string;\n keys: string[];\n}\n\nfunction normalizeRelative(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nexport function moduleKeys(relativePath: string): string[] {\n let normalized = normalizeRelative(relativePath).replace(/\\.(?:lua|luau)$/i, \"\");\n if (normalized.endsWith(\"/init\")) normalized = normalized.slice(0, -\"/init\".length);\n const segments = normalized.split(\"/\").filter(Boolean);\n if (segments[0]?.toLowerCase() === \"src\") segments.shift();\n\n const keys = new Set<string>();\n for (let index = 0; index < segments.length; index += 1) {\n const suffix = segments.slice(index).join(\".\").toLowerCase();\n if (suffix) keys.add(suffix);\n }\n return [...keys];\n}\n\nexport function normalizeRequireTarget(text: string): string {\n return (text.match(/[A-Za-z_][A-Za-z0-9_]*/g) ?? []).join(\".\").toLowerCase();\n}\n\n/**\n * Builds feature aliases only when an alias uniquely identifies one module in\n * the entire project. This prevents basename collisions and overlapping names\n * when one module name is merely a suffix of another or when multiple\n * directories contain modules with the same basename.\n */\nexport function buildUniqueFeatureAliases<T>(\n modules: ModuleIdentity[],\n featureByModuleId: Map<string, T>,\n): Map<string, T> {\n const owners = new Map<string, Set<string>>();\n for (const module of modules) {\n for (const key of module.keys) {\n const ids = owners.get(key) ?? new Set<string>();\n ids.add(module.id);\n owners.set(key, ids);\n }\n }\n\n const aliases = new Map<string, T>();\n for (const module of modules) {\n const value = featureByModuleId.get(module.id);\n if (value === undefined) continue;\n for (const key of module.keys) {\n const ids = owners.get(key);\n if (ids?.size === 1 && ids.has(module.id)) aliases.set(key, value);\n }\n }\n return aliases;\n}\n\nexport function resolveModuleReference<T>(target: string, aliases: Map<string, T>): T | null {\n // Module aliases are segment suffixes (for example `foo.bar` and `bar`).\n // Walk those suffixes directly instead of scanning every alias in the project\n // for every require expression. The first hit is necessarily the longest one.\n let candidate = target;\n while (true) {\n if (aliases.has(candidate)) return aliases.get(candidate)!;\n const separator = candidate.indexOf(\".\");\n if (separator < 0) return null;\n candidate = candidate.slice(separator + 1);\n }\n}\n",
18
+ "import { normalizeRequireTarget, resolveModuleReference } from \"../module-resolution\";\nimport type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, ProjectModel, ReactModel, StateBinding } from \"../types\";\nimport { nodeKey, normalizeExpressionText, parameterBindingNames, sameNode, walk } from \"./walk\";\n\nconst REACT_HOOKS = new Set([\n \"useState\",\n \"useEffect\",\n \"useLayoutEffect\",\n \"useMemo\",\n \"useCallback\",\n \"useContext\",\n \"useReducer\",\n \"useRef\",\n \"useImperativeHandle\",\n \"useBinding\",\n]);\n\nconst REACT_MEMBERS = new Set([...REACT_HOOKS, \"createElement\", \"createContext\", \"memo\", \"joinBindings\"]);\nconst STABLE_CUSTOM_HOOK_RETURN = /^(?:set[A-Z0-9_]|dispatch$|send$|emit$|fire$)/i;\nconst INSTANCE_FACTORY_MEMBERS = new Set([\n \"Clone\",\n \"FindFirstAncestor\",\n \"FindFirstAncestorOfClass\",\n \"FindFirstAncestorWhichIsA\",\n \"FindFirstChild\",\n \"FindFirstChildOfClass\",\n \"FindFirstChildWhichIsA\",\n \"GetButton\",\n \"GetMouse\",\n \"GetService\",\n \"WaitForChild\",\n]);\nconst STABLE_ENGINE_FACTORY_MEMBERS = new Set([\"GetMouse\", \"GetService\"]);\n\nfunction identifiersFromParameters(node: SyntaxNode | null): string[] {\n return parameterBindingNames(node);\n}\n\nfunction getFunctionName(node: SyntaxNode): string | null {\n if (node.type === \"function_declaration\") {\n return node.childForFieldName(\"name\")?.text ?? null;\n }\n\n if (node.type !== \"function_definition\") return null;\n let owner = node.parent;\n while (owner && owner.type !== \"variable_declaration\") {\n if (owner.type === \"function_definition\" || owner.type === \"function_declaration\") return null;\n owner = owner.parent;\n }\n if (!owner) return null;\n\n const prefix = owner.text.slice(0, Math.max(0, node.startIndex - owner.startIndex));\n const directMatch = prefix.match(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*$/s);\n if (directMatch) return directMatch[1];\n\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);\n return wrappedMatch?.[1] ?? null;\n}\n\nfunction requireTargetContainsModule(target: string, moduleName: string): boolean {\n return (target.match(/[A-Za-z_][A-Za-z0-9_]*/g) ?? [])\n .some((token) => token.toLowerCase() === moduleName.toLowerCase());\n}\n\nfunction resolvePath(\n rawPath: string,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): string {\n const normalized = normalizeExpressionText(rawPath);\n const direct = aliases.get(normalized);\n if (direct) return direct;\n\n const namespaceMatch = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(.+)$/);\n if (namespaceMatch && reactNamespaces.has(namespaceMatch[1])) return `React.${namespaceMatch[2]}`;\n if (namespaceMatch && reactRobloxNamespaces.has(namespaceMatch[1])) return `ReactRoblox.${namespaceMatch[2]}`;\n return normalized;\n}\n\nfunction directCalls(node: SyntaxNode): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n const pending = [...node.namedChildren];\n while (pending.length > 0) {\n const child = pending.pop()!;\n if (child.type === \"function_definition\" || child.type === \"function_declaration\") continue;\n if (child.type === \"function_call\") result.push(child);\n pending.push(...child.namedChildren);\n }\n return result;\n}\n\nfunction hasDirectCreateElementCall(\n node: SyntaxNode,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): boolean {\n return directCalls(node).some((call) => {\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(name, aliases, reactNamespaces, reactRobloxNamespaces);\n return path === \"React.createElement\" || path === \"ReactRoblox.createPortal\";\n });\n}\n\nfunction hasDirectHookCall(\n node: SyntaxNode,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n importedHookKinds: Map<string, boolean>,\n): boolean {\n return directCalls(node).some((call) => {\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(name, aliases, reactNamespaces, reactRobloxNamespaces);\n const normalizedName = normalizeExpressionText(name);\n const importedKind = importedHookKinds.get(normalizedName);\n if (importedKind !== undefined) return importedKind;\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n return /^use[A-Z0-9_]/.test(final);\n });\n}\n\nfunction isMemoWrappedFunction(\n node: SyntaxNode,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n): boolean {\n const argumentsNode = node.parent;\n const call = argumentsNode?.type === \"arguments\" ? argumentsNode.parent : null;\n if (!call || call.type !== \"function_call\") return false;\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\n return resolvePath(name, aliases, reactNamespaces, new Set()) === \"React.memo\";\n}\n\nfunction isModuleReturnedFunction(node: SyntaxNode): boolean {\n const expressionList = node.parent;\n const returnStatement = expressionList?.type === \"expression_list\" ? expressionList.parent : null;\n if (!returnStatement || returnStatement.type !== \"return_statement\") return false;\n let current = returnStatement.parent;\n while (current) {\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\n current = current.parent;\n }\n return true;\n}\n\nfunction collectDirectLocals(body: SyntaxNode | null): Set<string> {\n const locals = new Set<string>();\n if (!body) return locals;\n\n for (const child of body.namedChildren) {\n if (child.type === \"variable_declaration\") {\n const beforeEquals = child.text.split(\"=\")[0] ?? \"\";\n const localPart = beforeEquals.replace(/^\\s*local\\s+/, \"\");\n for (const piece of localPart.split(\",\")) {\n const match = piece.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/);\n if (match) locals.add(match[1]);\n }\n } else if (child.type === \"function_declaration\") {\n const name = child.childForFieldName(\"name\")?.text;\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) locals.add(name);\n }\n }\n\n return locals;\n}\n\nfunction nearestFunctionInfo(node: SyntaxNode, functionByNode: Map<number, FunctionInfo>): FunctionInfo | null {\n let current = node.parent;\n while (current) {\n const info = functionByNode.get(nodeKey(current));\n if (info) return info;\n current = current.parent;\n }\n return null;\n}\n\nfunction declarationCall(node: SyntaxNode): SyntaxNode | null {\n if (node.type !== \"variable_declaration\") return null;\n for (const child of walk(node)) {\n if (child.type === \"function_call\") return child;\n if (!sameNode(child, node) && (child.type === \"function_definition\" || child.type === \"function_declaration\")) return null;\n }\n return null;\n}\n\nfunction declarationNames(node: SyntaxNode): string[] {\n if (node.type !== \"variable_declaration\") return [];\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\n const variableList = assignment?.namedChildren.find((child) => child.type === \"variable_list\");\n return variableList?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [];\n}\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\n return expressionList?.namedChildren ?? [];\n}\n\nfunction isSyntacticallyStableInitializer(node: SyntaxNode | undefined): boolean {\n if (!node) return false;\n return [\"nil\", \"true\", \"false\", \"number\", \"string\", \"string_content\"].includes(node.type)\n || /^(?:nil|true|false|-?\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)$/i.test(node.text.trim());\n}\n\n\nfunction finalCallMember(path: string): string {\n return path.split(/[.:]/).at(-1) ?? path;\n}\n\nfunction expressionCreatesInstance(\n node: SyntaxNode | undefined,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): boolean {\n if (!node) return false;\n const text = node.text.trim();\n if (/^(?:workspace|game|script)(?:\\.|:|$)/.test(text)) return true;\n\n for (const candidate of walk(node)) {\n if (candidate.type !== \"function_call\") continue;\n const rawPath = candidate.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n if (path === \"Instance.new\" || INSTANCE_FACTORY_MEMBERS.has(finalCallMember(path))) return true;\n }\n return false;\n}\n\nfunction expressionIsStableEngineObject(\n node: SyntaxNode | undefined,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): boolean {\n if (!node) return false;\n const calls = [...walk(node)].filter((candidate) => candidate.type === \"function_call\");\n if (calls.length !== 1) return false;\n const rawPath = calls[0].childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n return STABLE_ENGINE_FACTORY_MEMBERS.has(finalCallMember(path));\n}\n\nfunction memoReturnsInstance(\n callback: SyntaxNode | undefined,\n aliases: Map<string, string>,\n reactNamespaces: Set<string>,\n reactRobloxNamespaces: Set<string>,\n): boolean {\n if (!callback || callback.type !== \"function_definition\") return false;\n for (const candidate of walk(callback)) {\n if (candidate.type !== \"return_statement\") continue;\n if (expressionCreatesInstance(candidate, aliases, reactNamespaces, reactRobloxNamespaces)) return true;\n }\n return false;\n}\n\nfunction isEmptyDependencyTable(node: SyntaxNode | undefined): boolean {\n return Boolean(node?.type === \"table_constructor\" && node.namedChildren.every((child) => child.type !== \"field\"));\n}\n\n\nfunction importedHookKinds(\n declarations: SyntaxNode[],\n project: ProjectModel | undefined,\n): Map<string, boolean> {\n const result = new Map<string, boolean>();\n if (!project) return result;\n\n for (const declaration of declarations) {\n const match = declaration.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n if (!match || !/^use[A-Z0-9_]/.test(match[1])) continue;\n const kind = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n project.reactHookModules,\n );\n if (kind !== null) result.set(match[1], kind);\n }\n return result;\n}\n\nexport function buildReactModel(root: SyntaxNode, project?: ProjectModel): ReactModel {\n const reactNamespaces = new Set<string>();\n const reactRobloxNamespaces = new Set<string>();\n const aliases = new Map<string, string>();\n const stateSetters = new Map<string, string>();\n const stateValues = new Map<string, string>();\n const stateBindings: StateBinding[] = [];\n const refVariables = new Set<string>();\n const bindingSetters = new Set<string>();\n const stableVariables = new Set<string>();\n const refVariablesByFunction = new Map<number, Set<string>>();\n const stableVariablesByFunction = new Map<number, Set<string>>();\n const externalMutableVariablesByFunction = new Map<number, Set<string>>();\n const instanceVariablesByFunction = new Map<number, Set<string>>();\n\n const allNodes = [...walk(root)];\n const declarations = allNodes.filter((node) => node.type === \"variable_declaration\");\n const projectHookKinds = importedHookKinds(declarations, project);\n let isReactFile = false;\n\n for (const declaration of declarations) {\n const text = declaration.text;\n const requireMatch = text.match(/^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s);\n if (!requireMatch) continue;\n const [, localName, target] = requireMatch;\n if (requireTargetContainsModule(target, \"ReactRoblox\")) {\n reactRobloxNamespaces.add(localName);\n isReactFile = true;\n } else if (requireTargetContainsModule(target, \"React\")) {\n reactNamespaces.add(localName);\n isReactFile = true;\n }\n }\n\n for (const node of allNodes) {\n if (node.type !== \"function_call\") continue;\n const rawPath = normalizeExpressionText(node.childForFieldName(\"name\")?.text ?? \"\");\n const memberMatch = rawPath.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)$/);\n if (!memberMatch) continue;\n const [, namespace, member] = memberMatch;\n if (namespace === \"React\" && REACT_MEMBERS.has(member)) {\n reactNamespaces.add(namespace);\n isReactFile = true;\n } else if (namespace === \"ReactRoblox\" && [\"createRoot\", \"createPortal\"].includes(member)) {\n reactRobloxNamespaces.add(namespace);\n isReactFile = true;\n }\n }\n\n for (const declaration of declarations) {\n const text = declaration.text;\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);\n if (!aliasMatch) continue;\n const [, localName, namespace, member] = aliasMatch;\n if (reactNamespaces.has(namespace) && REACT_MEMBERS.has(member)) aliases.set(localName, `React.${member}`);\n if (reactRobloxNamespaces.has(namespace) && [\"createRoot\", \"createPortal\"].includes(member)) {\n aliases.set(localName, `ReactRoblox.${member}`);\n }\n }\n\n const functions: FunctionInfo[] = [];\n const functionByNode = new Map<number, FunctionInfo>();\n\n for (const node of allNodes) {\n if (node.type !== \"function_declaration\" && node.type !== \"function_definition\") continue;\n const name = getFunctionName(node);\n const body = node.childForFieldName(\"body\");\n const parameters = identifiersFromParameters(node.childForFieldName(\"parameters\"));\n const info: FunctionInfo = {\n node,\n body,\n name,\n parameters,\n isHook: Boolean(isReactFile && name && /^use[A-Z0-9_]/.test(name)),\n isComponent: false,\n };\n functions.push(info);\n functionByNode.set(nodeKey(node), info);\n }\n\n const functionsBySimpleName = new Map<string, FunctionInfo[]>();\n for (const info of functions) {\n if (!info.name || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(info.name)) continue;\n const existing = functionsBySimpleName.get(info.name) ?? [];\n existing.push(info);\n functionsBySimpleName.set(info.name, existing);\n }\n\n for (const info of functions) {\n if (!isReactFile || !info.body || info.isHook) continue;\n const simplePascalName = Boolean(info.name && /^[A-Z][A-Za-z0-9_]*$/.test(info.name));\n const hasHooks = hasDirectHookCall(\n info.body,\n aliases,\n reactNamespaces,\n reactRobloxNamespaces,\n projectHookKinds,\n );\n const renders = hasDirectCreateElementCall(info.body, aliases, reactNamespaces, reactRobloxNamespaces);\n if (hasHooks || isMemoWrappedFunction(info.node, aliases, reactNamespaces) || (simplePascalName && renders)) {\n info.isComponent = true;\n } else if (!info.name && isModuleReturnedFunction(info.node) && hasHooks) {\n info.isComponent = true;\n }\n }\n\n for (const call of allNodes) {\n if (call.type !== \"function_call\") continue;\n const rawPath = call.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n if (path !== \"React.createElement\") continue;\n const element = call.childForFieldName(\"arguments\")?.namedChildren[0]?.text.trim() ?? \"\";\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(element)) continue;\n for (const info of functionsBySimpleName.get(element) ?? []) info.isComponent = true;\n }\n\n const addScopedVariable = (map: Map<number, Set<string>>, owner: FunctionInfo | null, name: string): void => {\n if (!owner) return;\n const key = nodeKey(owner.node);\n const names = map.get(key) ?? new Set<string>();\n names.add(name);\n map.set(key, names);\n };\n\n for (const declaration of declarations) {\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n const owner = nearestFunctionInfo(declaration, functionByNode);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n if (isSyntacticallyStableInitializer(expression) || expressionIsStableEngineObject(expression, aliases, reactNamespaces, reactRobloxNamespaces)) {\n stableVariables.add(names[index]);\n addScopedVariable(stableVariablesByFunction, owner, names[index]);\n }\n if (expressionCreatesInstance(expression, aliases, reactNamespaces, reactRobloxNamespaces)) {\n addScopedVariable(externalMutableVariablesByFunction, owner, names[index]);\n addScopedVariable(instanceVariablesByFunction, owner, names[index]);\n }\n }\n\n const call = declarationCall(declaration);\n if (!call) continue;\n const rawPath = call.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n const args = call.childForFieldName(\"arguments\")?.namedChildren ?? [];\n\n if (path === \"React.joinBindings\" && names.length >= 1) {\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\n } else if (path === \"React.useState\" && names.length >= 2) {\n const [valueName, setterName] = names;\n stateSetters.set(setterName, valueName);\n stateValues.set(valueName, setterName);\n stableVariables.add(setterName);\n addScopedVariable(stableVariablesByFunction, owner, setterName);\n stateBindings.push({\n valueName,\n setterName,\n declaration,\n call,\n initializer: args[0] ?? null,\n owner,\n });\n } else if (path === \"React.useReducer\" && names.length >= 2) {\n stableVariables.add(names[1]);\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\n } else if (path === \"React.useBinding\" && names.length >= 1) {\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n if (names.length >= 2) {\n stableVariables.add(names[1]);\n bindingSetters.add(names[1]);\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\n }\n } else if (path === \"React.useMemo\" && names.length >= 1) {\n if (isEmptyDependencyTable(args[1])) {\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n }\n if (memoReturnsInstance(args[0], aliases, reactNamespaces, reactRobloxNamespaces)) {\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\n addScopedVariable(instanceVariablesByFunction, owner, names[0]);\n }\n } else if (path === \"React.useCallback\" && names.length >= 1 && isEmptyDependencyTable(args[1])) {\n // Empty-dependency callbacks keep a stable identity. Their own stale captures are\n // diagnosed on the useCallback dependency table instead of cascading into every\n // effect that consumes the callback.\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n } else if (path === \"React.useRef\" && names.length >= 1) {\n stableVariables.add(names[0]);\n refVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n addScopedVariable(refVariablesByFunction, owner, names[0]);\n } else {\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n if (/^use[A-Z0-9_]/.test(final)) {\n for (const name of names.slice(1)) {\n if (!STABLE_CUSTOM_HOOK_RETURN.test(name)) continue;\n stableVariables.add(name);\n addScopedVariable(stableVariablesByFunction, owner, name);\n }\n }\n }\n }\n\n // React state/binding hooks can be assigned into previously declared locals.\n // The setter/Binding contracts are still stable even when the declaration and hook\n // call are split across statements. Rules-of-hooks separately reports conditional calls.\n for (const assignment of allNodes) {\n if (assignment.type !== \"assignment_statement\" || assignment.parent?.type === \"variable_declaration\") continue;\n const owner = nearestFunctionInfo(assignment, functionByNode);\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n const variableList = assignment.namedChildren.find((child) => child.type === \"variable_list\");\n const expressionList = assignment.namedChildren.find((child) => child.type === \"expression_list\");\n const names = variableList?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [];\n const expression = expressionList?.namedChildren[0];\n if (!expression || expression.type !== \"function_call\") continue;\n const rawPath = expression.childForFieldName(\"name\")?.text ?? \"\";\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\n\n if (path === \"React.useState\" && names.length >= 2) {\n stableVariables.add(names[1]);\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\n } else if (path === \"React.useBinding\" && names.length >= 1) {\n stableVariables.add(names[0]);\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\n if (names.length >= 2) {\n stableVariables.add(names[1]);\n bindingSetters.add(names[1]);\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\n }\n }\n }\n\n // Binding-like values are stable mutable handles. Custom React-Luau animation hooks\n // often return bindings without the analyzer knowing the hook implementation. Infer\n // them from Binding-only APIs instead of requiring them in dependency arrays.\n for (const call of allNodes) {\n if (call.type !== \"function_call\") continue;\n const rawPath = normalizeExpressionText(call.childForFieldName(\"name\")?.text ?? \"\");\n const match = rawPath.match(/^([A-Za-z_][A-Za-z0-9_]*):(?:getValue|map)$/);\n if (!match) continue;\n const owner = nearestFunctionInfo(call, functionByNode);\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n stableVariables.add(match[1]);\n addScopedVariable(stableVariablesByFunction, owner, match[1]);\n addScopedVariable(externalMutableVariablesByFunction, owner, match[1]);\n }\n\n const componentLocals = new Map<number, Set<string>>();\n for (const info of functions) {\n if (!info.isComponent && !info.isHook) continue;\n const names = collectDirectLocals(info.body);\n for (const parameter of info.parameters) names.add(parameter);\n if (info.name?.includes(\":\")) names.add(\"self\");\n componentLocals.set(nodeKey(info.node), names);\n }\n\n return {\n allNodes,\n isReactFile,\n reactNamespaces,\n reactRobloxNamespaces,\n aliases,\n stateSetters,\n stateValues,\n stateBindings,\n refVariables,\n bindingSetters,\n stableVariables,\n refVariablesByFunction,\n stableVariablesByFunction,\n externalMutableVariablesByFunction,\n instanceVariablesByFunction,\n componentLocals,\n functions,\n functionByNode,\n };\n}\n",
18
19
  "interface SuppressionState {\n active: Set<string>;\n oneLine: Map<number, Set<string>>;\n}\n\nfunction normalizeRuleToken(token: string): string {\n const normalized = token.trim();\n if (!normalized || normalized === \"all\" || normalized === \"*\") return \"*\";\n return normalized.includes(\"/\") ? normalized : `react-luau/${normalized}`;\n}\n\nfunction parseRuleTokens(value: string): Set<string> {\n const withoutReason = value.split(\"--\", 1)[0] ?? \"\";\n const tokens = withoutReason\n .split(/[\\s,]+/)\n .map(normalizeRuleToken)\n .filter(Boolean);\n return new Set(tokens.length > 0 ? tokens : [\"*\"]);\n}\n\nfunction matchesRule(rules: Set<string> | undefined, ruleId: string): boolean {\n return Boolean(rules && (rules.has(\"*\") || rules.has(ruleId)));\n}\n\nexport function createInlineSuppressionChecker(source: string): (ruleId: string, line: number) => boolean {\n const state: SuppressionState = {\n active: new Set<string>(),\n oneLine: new Map<number, Set<string>>(),\n };\n const activeByLine = new Map<number, Set<string>>();\n const lines = source.split(/\\r?\\n/);\n const directive = /--\\s*react-luau-doctor-(disable|enable)(?:-(next-line|line))?\\b(.*)$/i;\n\n for (let index = 0; index < lines.length; index += 1) {\n const lineNumber = index + 1;\n activeByLine.set(lineNumber, new Set(state.active));\n\n const match = lines[index].match(directive);\n if (!match) continue;\n\n const action = match[1].toLowerCase();\n const placement = match[2]?.toLowerCase();\n const rules = parseRuleTokens(match[3] ?? \"\");\n\n if (placement === \"line\" || placement === \"next-line\") {\n if (action !== \"disable\") continue;\n const targetLine = placement === \"line\" ? lineNumber : lineNumber + 1;\n const existing = state.oneLine.get(targetLine) ?? new Set<string>();\n for (const rule of rules) existing.add(rule);\n state.oneLine.set(targetLine, existing);\n continue;\n }\n\n if (action === \"disable\") {\n for (const rule of rules) state.active.add(rule);\n } else if (rules.has(\"*\")) {\n state.active.clear();\n } else {\n for (const rule of rules) state.active.delete(rule);\n }\n }\n\n return (ruleId: string, line: number): boolean =>\n matchesRule(activeByLine.get(line), ruleId) || matchesRule(state.oneLine.get(line), ruleId);\n}\n",
19
20
  "import fs from \"node:fs\";\nimport path from \"node:path\";\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 const grammarPath = path.resolve(import.meta.dir, \"../vendor/tree-sitter-luau.wasm\");\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 return parser;\n}\n\nasync function getParser(): Promise<Parser> {\n parserPromise ??= createParser();\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 if (!tree) throw new Error(\"Tree-sitter failed to parse Luau source\");\n return tree;\n}\n",
20
- "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 continue;\n }\n\n if (char === \"\\\"\" || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"-\" && next === \"-\") break;\n\n if (char === \"(\") depth.parentheses += 1;\n else if (char === \")\") 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.match(/[^\\n]*(?:\\n|$)/g)?.filter((line, index, all) => line.length > 0 || index < all.length - 1) ?? [source];\n const offsets: number[] = [];\n let offset = 0;\n for (const line of lines) {\n offsets.push(offset);\n offset += line.length;\n }\n return { lines, offsets };\n}\n\nfunction longBracketEquals(source: string, start: number): number | null {\n if (source[start] !== \"[\") return null;\n let index = start + 1;\n while (source[index] === \"=\") index += 1;\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 return end < 0 ? source.length : end + closer.length;\n}\n\n/**\n * Marks executable-code positions. Strings and comments are false so syntax\n * compatibility rewrites never alter text that merely contains a keyword.\n */\nfunction codeMask(source: string): Uint8Array {\n const mask = new Uint8Array(source.length);\n mask.fill(1);\n\n let index = 0;\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 while (cursor < source.length) {\n mask[cursor] = 0;\n const current = source[cursor];\n cursor += 1;\n if (cursor - 1 === index) continue;\n if (escaped) escaped = false;\n else if (current === \"\\\\\") escaped = true;\n else if (current === quote) break;\n }\n index = cursor;\n continue;\n }\n\n if (char === \"`\") {\n let cursor = index;\n let escaped = false;\n while (cursor < source.length) {\n mask[cursor] = 0;\n const current = source[cursor];\n cursor += 1;\n if (cursor - 1 === index) continue;\n if (escaped) escaped = false;\n else if (current === \"\\\\\") escaped = true;\n else if (current === \"`\") break;\n }\n index = cursor;\n continue;\n }\n\n if (char === \"-\" && source[index + 1] === \"-\") {\n const longEquals = longBracketEquals(source, index + 2);\n const end = longEquals === null ? source.indexOf(\"\\n\", index + 2) : 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 if (equals !== null) {\n const end = longBracketEnd(source, index, equals);\n mask.fill(0, index, end);\n index = end;\n continue;\n }\n }\n\n index += 1;\n }\n\n return mask;\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 return true;\n}\n\nfunction maskTypeAliases(source: string, mask: Uint8Array): Range[] {\n const { lines, offsets } = lineData(source);\n const ranges: Range[] = [];\n const typeStart = /^(\\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 if (!match || !isCode(mask, offsets[lineIndex] + match.index!, offsets[lineIndex] + match.index! + match[0].trimStart().length)) 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 = current === lineIndex ? currentLine.slice(match[0].length) : currentLine;\n if (segment.trim().length > 0) sawExpression = true;\n scanTypeLine(segment, depth);\n endLine = current;\n\n if (!sawExpression || !depthIsZero(depth)) continue;\n const trimmed = segment.trimEnd();\n if (/[|&=,]$/.test(trimmed)) continue;\n\n let nextNonEmpty = \"\";\n for (let lookahead = current + 1; lookahead < lines.length; lookahead += 1) {\n nextNonEmpty = lines[lookahead].trim();\n if (nextNonEmpty.length > 0) break;\n }\n if (/^[|&]/.test(nextNonEmpty)) continue;\n break;\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 maskTypeLevelBlocks(source: string, mask: Uint8Array): Range[] {\n const { lines, offsets } = lineData(source);\n const ranges: Range[] = [];\n const declarationStart = /^(\\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 if (!match) continue;\n const firstToken = offsets[lineIndex] + match[1].length;\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 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 if (!trimmed) continue;\n const currentIndent = currentLine.match(/^\\s*/)?.[0].replace(/\\t/g, \" \").length ?? 0;\n if (trimmed === \"end\" && currentIndent <= indentation && isCode(mask, offsets[current] + currentLine.indexOf(\"end\"), offsets[current] + currentLine.indexOf(\"end\") + 3)) {\n endLine = current;\n break;\n }\n }\n }\n\n ranges.push({ start: offsets[lineIndex], end: offsets[endLine] + lines[endLine].length });\n lineIndex = endLine;\n }\n\n return ranges;\n}\n\nfunction attributeRanges(source: string, mask: Uint8Array): Range[] {\n const ranges: Range[] = [];\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 while (cursor < source.length) {\n if (isCode(mask, cursor)) {\n if (source[cursor] === \"[\") depth += 1;\n else if (source[cursor] === \"]\") {\n depth -= 1;\n if (depth === 0) {\n cursor += 1;\n break;\n }\n }\n }\n cursor += 1;\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 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 return ranges;\n}\n\nfunction explicitTypeArgumentRanges(source: string, mask: Uint8Array): Range[] {\n const ranges: Range[] = [];\n for (let index = 0; index < source.length - 1; index += 1) {\n if (source[index] !== \"<\" || source[index + 1] !== \"<\" || !isCode(mask, index, index + 2)) continue;\n\n let depth = 2;\n let cursor = index + 2;\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 cursor += 1;\n }\n if (depth === 0) {\n ranges.push({ start: index, end: cursor });\n index = cursor - 1;\n }\n }\n return ranges;\n}\n\nfunction mergeRanges(ranges: Range[]): Range[] {\n const sorted = ranges.filter((range) => range.end > range.start).sort((a, b) => a.start - b.start || a.end - b.end);\n const merged: Range[] = [];\n for (const range of sorted) {\n const previous = merged.at(-1);\n if (previous && range.start <= previous.end) previous.end = Math.max(previous.end, range.end);\n else merged.push({ ...range });\n }\n return merged;\n}\n\nfunction blankPreservingUtf8Bytes(value: string): string {\n let result = \"\";\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 return result;\n}\n\nfunction applyMasks(source: string, ranges: Range[]): string {\n let output = source;\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 return output;\n}\n\nfunction genericFunctionParameterRanges(source: string, mask: Uint8Array): 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 if (!isCode(mask, start, start + match[0].length)) continue;\n\n let cursor = start + match[0].length;\n while (cursor < source.length) {\n const char = source[cursor];\n if (/\\s/.test(char)) {\n cursor += 1;\n continue;\n }\n if (char === \"(\") break;\n if (char === \"<\") {\n let depth = 0;\n const rangeStart = cursor;\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 if (depth === 0) {\n cursor += 1;\n ranges.push({ start: rangeStart, end: cursor });\n break;\n }\n }\n }\n cursor += 1;\n }\n break;\n }\n\n if (/[A-Za-z0-9_.:]/.test(char)) {\n cursor += 1;\n continue;\n }\n break;\n }\n }\n\n return ranges;\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(source: string, mask: Uint8Array): 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 if (!isCode(mask, start, end)) continue;\n if (declarationRanges.some((range) => start >= range.start && end <= range.end)) continue;\n\n const name = match[0].slice(0, -3);\n replacements.push({ start, end, value: `...${name}` });\n }\n\n let output = source;\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 return output;\n}\n\nfunction normalizeIntegerLiteralSuffixes(source: string, mask: Uint8Array): string {\n const suffixes: number[] = [];\n const integerPattern = /\\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 if (isCode(mask, start, suffix + 1)) suffixes.push(suffix);\n }\n\n let output = source;\n for (const suffix of suffixes.sort((a, b) => b - a)) {\n output = `${output.slice(0, suffix)} ${output.slice(suffix + 1)}`;\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 = /\\bconst\\b(?=\\s+(?:function\\b|[A-Za-z_][A-Za-z0-9_]*\\s*(?::|,|=)))/g;\n for (const match of source.matchAll(constPattern)) {\n const start = match.index;\n if (isCode(mask, start, start + 5)) replacements.push({ start, end: start + 5, value: \"local\" });\n }\n\n const exportPattern = /\\bexport\\b(?=\\s+(?:local\\b|const\\b|function\\b))/g;\n for (const match of source.matchAll(exportPattern)) {\n const start = match.index;\n if (isCode(mask, start, start + 6)) replacements.push({ start, end: start + 6, value: \" \" });\n }\n\n let output = source;\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 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(keywordCompatible, mask);\n const packCompatible = normalizeGenericTypePackUses(literalCompatible, mask);\n const ranges = [\n ...maskTypeAliases(source, mask),\n ...maskTypeLevelBlocks(source, mask),\n ...attributeRanges(source, mask),\n ...explicitTypeArgumentRanges(source, mask),\n ];\n const masked = applyMasks(packCompatible, 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",
21
+ "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 continue;\n }\n\n if (char === \"\\\"\" || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"-\" && next === \"-\") break;\n\n if (char === \"(\") depth.parentheses += 1;\n else if (char === \")\") 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.match(/[^\\n]*(?:\\n|$)/g)?.filter((line, index, all) => line.length > 0 || index < all.length - 1) ?? [source];\n const offsets: number[] = [];\n let offset = 0;\n for (const line of lines) {\n offsets.push(offset);\n offset += line.length;\n }\n return { lines, offsets };\n}\n\nfunction longBracketEquals(source: string, start: number): number | null {\n if (source[start] !== \"[\") return null;\n let index = start + 1;\n while (source[index] === \"=\") index += 1;\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 return end < 0 ? source.length : end + closer.length;\n}\n\n/**\n * Marks executable-code positions. Strings and comments are false so syntax\n * compatibility rewrites never alter text that merely contains a keyword.\n */\nfunction codeMask(source: string): Uint8Array {\n const mask = new Uint8Array(source.length);\n mask.fill(1);\n\n let index = 0;\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 while (cursor < source.length) {\n mask[cursor] = 0;\n const current = source[cursor];\n cursor += 1;\n if (cursor - 1 === index) continue;\n if (escaped) escaped = false;\n else if (current === \"\\\\\") escaped = true;\n else if (current === quote) break;\n }\n index = cursor;\n continue;\n }\n\n if (char === \"`\") {\n let cursor = index;\n let escaped = false;\n while (cursor < source.length) {\n mask[cursor] = 0;\n const current = source[cursor];\n cursor += 1;\n if (cursor - 1 === index) continue;\n if (escaped) escaped = false;\n else if (current === \"\\\\\") escaped = true;\n else if (current === \"`\") break;\n }\n index = cursor;\n continue;\n }\n\n if (char === \"-\" && source[index + 1] === \"-\") {\n const longEquals = longBracketEquals(source, index + 2);\n const end = longEquals === null ? source.indexOf(\"\\n\", index + 2) : 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 if (equals !== null) {\n const end = longBracketEnd(source, index, equals);\n mask.fill(0, index, end);\n index = end;\n continue;\n }\n }\n\n index += 1;\n }\n\n return mask;\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 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 for (let cursor = start; cursor < source.length; cursor += 1) {\n if (!isCode(mask, cursor)) continue;\n if (source[cursor] === opener) depth += 1;\n else if (source[cursor] === closer) {\n depth -= 1;\n if (depth === 0) return cursor + 1;\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 = /^(\\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 if (!match || !isCode(mask, offsets[lineIndex] + match.index!, offsets[lineIndex] + match.index! + match[0].trimStart().length)) 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 = current === lineIndex ? currentLine.slice(match[0].length) : currentLine;\n if (segment.trim().length > 0) sawExpression = true;\n scanTypeLine(segment, depth);\n endLine = current;\n\n if (!sawExpression || !depthIsZero(depth)) continue;\n const trimmed = segment.trimEnd();\n if (/[|&=,]$/.test(trimmed)) continue;\n\n let nextNonEmpty = \"\";\n for (let lookahead = current + 1; lookahead < lines.length; lookahead += 1) {\n nextNonEmpty = lines[lookahead].trim();\n if (nextNonEmpty.length > 0) break;\n }\n if (/^[|&]/.test(nextNonEmpty)) continue;\n break;\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 maskTypeLevelBlocks(source: string, mask: Uint8Array): Range[] {\n const { lines, offsets } = lineData(source);\n const ranges: Range[] = [];\n const declarationStart = /^(\\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 if (!match) continue;\n const firstToken = offsets[lineIndex] + match[1].length;\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 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 if (!trimmed) continue;\n const currentIndent = currentLine.match(/^\\s*/)?.[0].replace(/\\t/g, \" \").length ?? 0;\n if (trimmed === \"end\" && currentIndent <= indentation && isCode(mask, offsets[current] + currentLine.indexOf(\"end\"), offsets[current] + currentLine.indexOf(\"end\") + 3)) {\n endLine = current;\n break;\n }\n }\n }\n\n ranges.push({ start: offsets[lineIndex], end: offsets[endLine] + lines[endLine].length });\n lineIndex = endLine;\n }\n\n return ranges;\n}\n\nfunction attributeRanges(source: string, mask: Uint8Array): Range[] {\n const ranges: Range[] = [];\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 while (cursor < source.length) {\n if (isCode(mask, cursor)) {\n if (source[cursor] === \"[\") depth += 1;\n else if (source[cursor] === \"]\") {\n depth -= 1;\n if (depth === 0) {\n cursor += 1;\n break;\n }\n }\n }\n cursor += 1;\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 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 return ranges;\n}\n\nfunction explicitTypeArgumentRanges(source: string, mask: Uint8Array): Range[] {\n const ranges: Range[] = [];\n for (let index = 0; index < source.length - 1; index += 1) {\n if (source[index] !== \"<\" || source[index + 1] !== \"<\" || !isCode(mask, index, index + 2)) continue;\n\n let depth = 2;\n let cursor = index + 2;\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 cursor += 1;\n }\n if (depth === 0) {\n ranges.push({ start: index, end: cursor });\n index = cursor - 1;\n }\n }\n return ranges;\n}\n\nfunction mergeRanges(ranges: Range[]): Range[] {\n const sorted = ranges.filter((range) => range.end > range.start).sort((a, b) => a.start - b.start || a.end - b.end);\n const merged: Range[] = [];\n for (const range of sorted) {\n const previous = merged.at(-1);\n if (previous && range.start <= previous.end) previous.end = Math.max(previous.end, range.end);\n else merged.push({ ...range });\n }\n return merged;\n}\n\nfunction blankPreservingUtf8Bytes(value: string): string {\n let result = \"\";\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 return result;\n}\n\nfunction applyMasks(source: string, ranges: Range[]): string {\n let output = source;\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 return output;\n}\n\nfunction genericFunctionParameterRanges(source: string, mask: Uint8Array): 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 if (!isCode(mask, start, start + match[0].length)) continue;\n\n let cursor = start + match[0].length;\n while (cursor < source.length) {\n const char = source[cursor];\n if (/\\s/.test(char)) {\n cursor += 1;\n continue;\n }\n if (char === \"(\") break;\n if (char === \"<\") {\n let depth = 0;\n const rangeStart = cursor;\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 if (depth === 0) {\n cursor += 1;\n ranges.push({ start: rangeStart, end: cursor });\n break;\n }\n }\n }\n cursor += 1;\n }\n break;\n }\n\n if (/[A-Za-z0-9_.:]/.test(char)) {\n cursor += 1;\n continue;\n }\n break;\n }\n }\n\n return ranges;\n}\n\nfunction genericFunctionReturnPrefixRanges(source: string, mask: Uint8Array): 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 if (!isCode(mask, start, start + match[0].length)) continue;\n\n let cursor = start + match[0].length;\n let genericDepth = 0;\n while (cursor < source.length) {\n if (!isCode(mask, cursor)) {\n cursor += 1;\n continue;\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 cursor += 1;\n }\n if (source[cursor] !== \"(\") continue;\n\n const parameterEnd = matchingCodeDelimiterEnd(source, mask, cursor, \"(\", \")\");\n if (parameterEnd === null) continue;\n cursor = parameterEnd;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n if (source[cursor] !== \":\" || !isCode(mask, cursor)) continue;\n cursor += 1;\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n if (source[cursor] !== \"<\") continue;\n\n const rangeStart = cursor;\n const genericEnd = matchingCodeDelimiterEnd(source, mask, cursor, \"<\", \">\");\n if (genericEnd === null) continue;\n cursor = genericEnd;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n const typeParametersEnd = matchingCodeDelimiterEnd(source, mask, cursor, \"(\", \")\");\n if (typeParametersEnd === null) continue;\n cursor = typeParametersEnd;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n if (source.slice(cursor, cursor + 2) !== \"->\" || !isCode(mask, cursor, cursor + 2)) continue;\n cursor += 2;\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(source: string, mask: Uint8Array): 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 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 if (open < 0) continue;\n\n const end = matchingCodeDelimiterEnd(source, mask, open, \"(\", \")\");\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 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 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(source: string, mask: Uint8Array): 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 if (!isCode(mask, start, end)) continue;\n if (declarationRanges.some((range) => start >= range.start && end <= range.end)) continue;\n\n const name = match[0].slice(0, -3);\n replacements.push({ start, end, value: `...${name}` });\n }\n\n let output = source;\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 return output;\n}\n\nfunction normalizeIntegerLiteralSuffixes(source: string, mask: Uint8Array): string {\n const suffixes: number[] = [];\n const integerPattern = /\\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 if (isCode(mask, start, suffix + 1)) suffixes.push(suffix);\n }\n\n let output = source;\n for (const suffix of suffixes.sort((a, b) => b - a)) {\n output = `${output.slice(0, suffix)} ${output.slice(suffix + 1)}`;\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 = /\\bconst\\b(?=\\s+(?:function\\b|[A-Za-z_][A-Za-z0-9_]*\\s*(?::|,|=)))/g;\n for (const match of source.matchAll(constPattern)) {\n const start = match.index;\n if (isCode(mask, start, start + 5)) replacements.push({ start, end: start + 5, value: \"local\" });\n }\n\n const exportPattern = /\\bexport\\b(?=\\s+(?:local\\b|const\\b|function\\b))/g;\n for (const match of source.matchAll(exportPattern)) {\n const start = match.index;\n if (isCode(mask, start, start + 6)) replacements.push({ start, end: start + 6, value: \" \" });\n }\n\n let output = source;\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 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(keywordCompatible, mask);\n const packCompatible = normalizeGenericTypePackUses(literalCompatible, mask);\n const typeofCompatible = normalizeLocalTypeofAnnotations(packCompatible, mask);\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 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",
21
22
  "import type { SyntaxNode } from \"./syntax\";\nimport type { RuleContext } from \"./types\";\n\n/**\n * Engine members that are documented/known to yield. The analyzer intentionally\n * matches exact member names instead of every `*Async` function so custom\n * promise-style APIs do not become false positives merely because of naming.\n */\nconst YIELDING_ENGINE_MEMBERS = new Set([\n \"WaitForChild\",\n \"Wait\",\n \"GetAsync\",\n \"SetAsync\",\n \"UpdateAsync\",\n \"RemoveAsync\",\n \"IncrementAsync\",\n \"GetSortedAsync\",\n \"ListKeysAsync\",\n \"ListVersionsAsync\",\n \"GetVersionAsync\",\n \"PublishAsync\",\n \"SubscribeAsync\",\n \"RequestAsync\",\n \"PostAsync\",\n \"PreloadAsync\",\n \"ComputeAsync\",\n \"FilterStringAsync\",\n \"FilterStringForBroadcast\",\n \"FilterStringForPlayerAsync\",\n \"GetNonChatStringForBroadcastAsync\",\n \"GetNonChatStringForUserAsync\",\n \"GetChatForUserAsync\",\n \"AwardBadgeAsync\",\n \"UserHasBadgeAsync\",\n \"GetBadgeInfoAsync\",\n \"GetPolicyInfoForPlayerAsync\",\n \"GetTranslatorForPlayerAsync\",\n \"GetUserIdFromNameAsync\",\n \"GetNameFromUserIdAsync\",\n \"GetHumanoidDescriptionFromUserId\",\n \"GetHumanoidDescriptionFromOutfitId\",\n \"GetFriendsAsync\",\n \"GetUserThumbnailAsync\",\n \"GetUserInfosByUserIdsAsync\",\n \"GetGroupInfoAsync\",\n \"GetAlliesAsync\",\n \"GetEnemiesAsync\",\n \"GetGroupsAsync\",\n \"TeleportAsync\",\n \"ReserveServerAsync\",\n \"CreatePlaceAsync\",\n \"SavePlaceAsync\",\n \"LoadAsset\",\n \"LoadAssetVersion\",\n \"GetProductInfo\",\n \"CreateEditableImageAsync\",\n \"CreateEditableMeshAsync\",\n \"GetBundleDetailsAsync\",\n \"GetGamePlacesAsync\",\n \"GetDeveloperProductsAsync\",\n \"GetInventoryAsync\",\n \"GetItemDetailsAsync\",\n \"GetBatchItemDetailsAsync\",\n \"PromptCreateAssetAsync\",\n \"PromptImportAnimationClipFromVideoAsync\",\n \"GetAnimationClipAsync\",\n]);\n\nconst ROBLOX_MUTABLE_LEAFS = new Set([\n \"AbsolutePosition\",\n \"AbsoluteRotation\",\n \"AbsoluteSize\",\n \"AssemblyAngularVelocity\",\n \"AssemblyLinearVelocity\",\n \"CFrame\",\n \"Changed\",\n \"ContentSize\",\n \"CurrentCamera\",\n \"Enabled\",\n \"FocusLost\",\n \"Focused\",\n \"Heartbeat\",\n \"InputBegan\",\n \"InputChanged\",\n \"InputEnded\",\n \"Parent\",\n \"Position\",\n \"PreRender\",\n \"PreSimulation\",\n \"RenderStepped\",\n \"Rotation\",\n \"Size\",\n \"Stepped\",\n \"TextBounds\",\n \"Value\",\n \"ViewportSize\",\n \"WorldCFrame\",\n \"WorldPosition\",\n \"X\",\n \"Y\",\n]);\n\nconst INSTANCE_FACTORY_MEMBERS = new Set([\n \"Clone\",\n \"FindFirstAncestor\",\n \"FindFirstAncestorOfClass\",\n \"FindFirstAncestorWhichIsA\",\n \"FindFirstChild\",\n \"FindFirstChildOfClass\",\n \"FindFirstChildWhichIsA\",\n \"GetButton\",\n \"GetMouse\",\n \"GetService\",\n \"WaitForChild\",\n]);\n\nexport function finalCallMember(path: string): string {\n return path.split(/[.:]/).at(-1) ?? path;\n}\n\nfunction declarationInitializer(node: SyntaxNode, name: string): SyntaxNode | null | undefined {\n if (node.type !== \"variable_declaration\") return undefined;\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 const names = variables?.namedChildren.filter((child) => child.type === \"identifier\") ?? [];\n const index = names.findIndex((candidate) => candidate.text === name);\n if (index < 0) return undefined;\n return expressions?.namedChildren[index] ?? expressions?.namedChildren[0] ?? null;\n}\n\nfunction functionBindsName(node: SyntaxNode, name: string): boolean {\n if (node.type !== \"function_definition\" && node.type !== \"function_declaration\") return false;\n const parameters = node.childForFieldName(\"parameters\");\n if (!parameters) return false;\n return parameters.namedChildren.some((parameter) =>\n parameter.namedChildren.some((child) => child.type === \"identifier\" && child.text === name)\n || (parameter.type === \"identifier\" && parameter.text === name)\n );\n}\n\nfunction loopBindsName(node: SyntaxNode, name: string): boolean {\n if (node.type !== \"for_statement\") return false;\n const header = node.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return new RegExp(`^\\\\s*for\\\\s+(?:${escaped}\\\\s*=|[^\\\\n]*\\\\b${escaped}\\\\b[^\\\\n]*\\\\bin\\\\b)`, \"s\").test(header);\n}\n\nfunction visibleInitializer(name: string, from: SyntaxNode, context: RuleContext): SyntaxNode | null | undefined {\n let current: SyntaxNode | null = from.parent;\n while (current) {\n if (current.type === \"block\" || current.id === context.root.id) {\n const children = current.namedChildren;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n const child = children[index];\n if (child.startIndex >= from.startIndex) continue;\n const initializer = declarationInitializer(child, name);\n if (initializer !== undefined) return initializer;\n if (child.type === \"function_declaration\") {\n const declared = child.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\n if (declared === name) return null;\n }\n }\n }\n if (functionBindsName(current, name) || loopBindsName(current, name)) return null;\n current = current.parent;\n }\n return undefined;\n}\n\nfunction expressionHasRobloxOrigin(\n expression: SyntaxNode | null | undefined,\n from: SyntaxNode,\n context: RuleContext,\n seen: Set<string>,\n): boolean {\n if (!expression) return false;\n const normalized = expression.text.replace(/\\s+/g, \"\");\n if (/^(?:game|workspace|script)(?:[.:]|$)/.test(normalized) || /^Instance\\.new\\(/.test(normalized)) return true;\n\n const root = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (!root || root === \"require\" || seen.has(root)) return false;\n if (expression.type !== \"identifier\" && expression.type !== \"function_call\") return false;\n\n seen.add(root);\n return expressionHasRobloxOrigin(visibleInitializer(root, from, context), from, context, seen);\n}\n\nfunction hasRobloxReceiver(path: string, call: SyntaxNode, context: RuleContext): boolean {\n const normalized = path.replace(/\\s+/g, \"\");\n if (/^(?:game|workspace|script)(?:[.:]|$)/.test(normalized)) return true;\n const root = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (!root) return false;\n return expressionHasRobloxOrigin(visibleInitializer(root, call, context), call, context, new Set([root]));\n}\n\nconst runServiceCallCache = new WeakMap<RuleContext, Map<number, boolean>>();\nconst runServiceExpressionCache = new WeakMap<RuleContext, Map<number, boolean>>();\nconst highFrequencyRobloxCallCache = new WeakMap<RuleContext, Map<number, boolean>>();\nconst highFrequencyRobloxExpressionCache = new WeakMap<RuleContext, Map<number, boolean>>();\n\nfunction cachedNodeBoolean(\n cache: WeakMap<RuleContext, Map<number, boolean>>,\n context: RuleContext,\n node: SyntaxNode,\n compute: () => boolean,\n): boolean {\n let entries = cache.get(context);\n if (!entries) {\n entries = new Map<number, boolean>();\n cache.set(context, entries);\n }\n const cached = entries.get(node.id);\n if (cached !== undefined) return cached;\n const value = compute();\n entries.set(node.id, value);\n return value;\n}\n\nconst RUN_SERVICE_EVENTS = new Set([\n \"RenderStepped\",\n \"Heartbeat\",\n \"Stepped\",\n \"PreRender\",\n \"PreSimulation\",\n \"PostSimulation\",\n]);\n\nfunction expressionIsRunService(\n expression: SyntaxNode | null | undefined,\n from: SyntaxNode,\n context: RuleContext,\n seen: Set<string>,\n): boolean {\n if (!expression) return false;\n const normalized = expression.text.replace(/\\s+/g, \"\");\n if (/^game:GetService\\([\"']RunService[\"']\\)$/.test(normalized)) return true;\n if (expression.type !== \"identifier\") return false;\n const name = expression.text;\n if (seen.has(name)) return false;\n seen.add(name);\n return expressionIsRunService(visibleInitializer(name, from, context), from, context, seen);\n}\n\nfunction rootIsRunService(root: string, from: SyntaxNode, context: RuleContext): boolean {\n if (root === \"game\") return false;\n return expressionIsRunService(visibleInitializer(root, from, context), from, context, new Set([root]));\n}\n\nexport function isHighFrequencyRunServiceExpression(node: SyntaxNode, context: RuleContext): boolean {\n return cachedNodeBoolean(runServiceExpressionCache, context, node, () => {\n const normalized = node.text.replace(/\\s+/g, \"\");\n if (/^game:GetService\\([\"']RunService[\"']\\)\\.(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)$/.test(normalized)) {\n return true;\n }\n const match = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)$/);\n return Boolean(match && RUN_SERVICE_EVENTS.has(match[2]) && rootIsRunService(match[1], node, context));\n });\n}\n\nexport function isHighFrequencyRunServiceCall(call: SyntaxNode, context: RuleContext): boolean {\n return cachedNodeBoolean(runServiceCallCache, context, call, () => {\n const normalized = (context.getCallPath(call) ?? \"\").replace(/\\s+/g, \"\");\n const direct = call.text.replace(/\\s+/g, \"\");\n if (/^game:GetService\\([\"']RunService[\"']\\)(?:\\.(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation):Connect|:BindToRenderStep|:BindToSimulation)\\(/.test(direct)) {\n return true;\n }\n\n const event = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation):Connect$/);\n if (event) return rootIsRunService(event[1], call, context);\n\n const bind = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*):(?:BindToRenderStep|BindToSimulation)$/);\n return Boolean(bind && rootIsRunService(bind[1], call, context));\n });\n}\n\nconst HIGH_FREQUENCY_ROBLOX_EVENTS = new Set([\n \"InputChanged\",\n \"TouchMoved\",\n \"Move\",\n]);\n\nexport function isHighFrequencyRobloxExpression(node: SyntaxNode, context: RuleContext): boolean {\n return cachedNodeBoolean(highFrequencyRobloxExpressionCache, context, node, () => {\n if (isHighFrequencyRunServiceExpression(node, context)) return true;\n const normalized = node.text.replace(/\\s+/g, \"\");\n const match = normalized.match(/^(.+)\\.(InputChanged|TouchMoved|Move)$/);\n if (!match || !HIGH_FREQUENCY_ROBLOX_EVENTS.has(match[2])) return false;\n return hasRobloxReceiver(match[1], node, context);\n });\n}\n\nexport function isHighFrequencyRobloxCall(call: SyntaxNode, context: RuleContext): boolean {\n return cachedNodeBoolean(highFrequencyRobloxCallCache, context, call, () => {\n if (isHighFrequencyRunServiceCall(call, context)) return true;\n const normalized = (context.getCallPath(call) ?? \"\").replace(/\\s+/g, \"\");\n const event = normalized.match(/^(.+)\\.(InputChanged|TouchMoved|Move):Connect$/);\n if (!event || !HIGH_FREQUENCY_ROBLOX_EVENTS.has(event[2])) return false;\n return hasRobloxReceiver(event[1], call, context);\n });\n}\n\nexport function sourceHasHighFrequencyRunService(source: string): boolean {\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)) {\n return true;\n }\n\n const aliases = new Set<string>();\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)) {\n aliases.add(match[1]);\n }\n for (const alias of aliases) {\n const escaped = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const pattern = new RegExp(`\\\\b${escaped}\\\\s*(?:\\\\.\\\\s*(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)\\\\s*:\\\\s*Connect|:\\\\s*(?:BindToRenderStep|BindToSimulation))`);\n if (pattern.test(source)) return true;\n }\n return false;\n}\n\nexport function sourceHasHighFrequencyRobloxEvent(source: string): boolean {\n if (sourceHasHighFrequencyRunService(source)) return true;\n\n if (/game\\s*:\\s*GetService\\s*\\(\\s*[\"']UserInputService[\"']\\s*\\)\\s*\\.\\s*(?:InputChanged|TouchMoved)\\s*:\\s*Connect/.test(source)) {\n return true;\n }\n\n const serviceAliases = new Set<string>();\n for (const match of source.matchAll(\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*game\\s*:\\s*GetService\\s*\\(\\s*[\"']UserInputService[\"']\\s*\\)/g,\n )) {\n serviceAliases.add(match[1]);\n }\n for (const alias of serviceAliases) {\n const escaped = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (new RegExp(`\\\\b${escaped}\\\\s*\\\\.\\\\s*(?:InputChanged|TouchMoved)\\\\s*:\\\\s*Connect`).test(source)) {\n return true;\n }\n }\n\n const playersAliases = new Set<string>();\n for (const match of source.matchAll(\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*game\\s*:\\s*GetService\\s*\\(\\s*[\"']Players[\"']\\s*\\)/g,\n )) {\n playersAliases.add(match[1]);\n }\n for (const players of playersAliases) {\n const escapedPlayers = players.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n for (const match of source.matchAll(\n new RegExp(`\\\\blocal\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*${escapedPlayers}\\\\s*\\\\.\\\\s*LocalPlayer\\\\s*:\\\\s*GetMouse\\\\s*\\\\(\\\\s*\\\\)`, \"g\"),\n )) {\n const mouse = match[1].replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (new RegExp(`\\\\b${mouse}\\\\s*\\\\.\\\\s*Move\\\\s*:\\\\s*Connect`).test(source)) return true;\n }\n }\n\n return false;\n}\n\nexport function knownYieldReason(path: string, call?: SyntaxNode, context?: RuleContext): string | null {\n const normalized = path.replace(/\\s+/g, \"\");\n if (normalized === \"task.wait\") return \"task.wait\";\n if (normalized === \"coroutine.yield\") return \"coroutine.yield\";\n\n const member = finalCallMember(normalized);\n if (!YIELDING_ENGINE_MEMBERS.has(member)) return null;\n if (!call || !context) return null;\n return hasRobloxReceiver(normalized, call, context) ? member : null;\n}\n\nexport function functionYieldPoint(node: SyntaxNode, context: RuleContext): { call: SyntaxNode; reason: string } | null {\n for (const candidate of context.walk(node)) {\n if (candidate.type !== \"function_call\") continue;\n const nearest = context.nearestFunction(candidate);\n const owner = context.model.functionByNode.get(node.id);\n if (owner && nearest !== owner) continue;\n const path = context.resolveCallPath(context.getCallPath(candidate) ?? \"\");\n const reason = knownYieldReason(path, candidate, context);\n if (reason) return { call: candidate, reason };\n }\n return null;\n}\n\nexport function isInstanceProducingExpression(node: SyntaxNode | undefined, context: RuleContext): boolean {\n if (!node) return false;\n\n const text = node.text.trim();\n if (/^(?:workspace|game|script)(?:\\.|:|$)/.test(text)) return true;\n\n for (const candidate of context.walk(node)) {\n if (candidate.type !== \"function_call\") continue;\n const path = context.resolveCallPath(context.getCallPath(candidate) ?? \"\");\n if (path === \"Instance.new\") return true;\n if (INSTANCE_FACTORY_MEMBERS.has(finalCallMember(path))) return true;\n }\n\n return false;\n}\n\nexport function mutableDependencyBase(path: string, externallyMutableRoots: Set<string>): string | null {\n const normalized = path.replace(/\\s+/g, \"\");\n if (/\\.current(?:\\.|$)/.test(normalized)) return \"\";\n\n const segments = normalized.split(\".\");\n if (segments.length < 2) return null;\n\n if (externallyMutableRoots.has(segments[0])) return segments[0];\n\n const mutableIndex = segments.findIndex((segment, index) => index > 0 && ROBLOX_MUTABLE_LEAFS.has(segment));\n if (mutableIndex <= 0) return null;\n\n const ownerPath = segments.slice(0, mutableIndex).join(\".\");\n const mutableLeaf = segments[mutableIndex];\n const signalLike = /(?:Changed|Began|Ended|Focused|Heartbeat|Stepped|PreRender|PreSimulation)$/.test(mutableLeaf);\n const objectLike = /(?:instance|attachment|camera|mouse|frame|gui|part|value|humanoid|sound|tween|workspace|root|viewport)/i.test(ownerPath);\n return signalLike || objectLike ? ownerPath : null;\n}\n",
22
23
  "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext } from \"../types\";\nimport { rootIdentifier, sameNode } from \"../ast/walk\";\n\nexport const CONDITIONAL_TYPES = new Set([\n \"if_statement\",\n \"if_expression\",\n \"for_statement\",\n \"while_statement\",\n \"repeat_statement\",\n]);\n\nexport function isHookPath(path: string): boolean {\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n return /^use[A-Z0-9_]/.test(final);\n}\n\n\nexport function assignmentTargetNode(statement: SyntaxNode): SyntaxNode {\n return statement.namedChildren[0] ?? statement;\n}\n\nexport function tableStartNode(table: SyntaxNode): SyntaxNode {\n return table.children.find((child) => child.type === \"{\") ?? table;\n}\n\nexport function identifierNode(node: SyntaxNode, name: string): SyntaxNode | null {\n const stack = [node];\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (current.type === \"identifier\" && current.text === name) return current;\n for (let index = current.namedChildren.length - 1; index >= 0; index -= 1) stack.push(current.namedChildren[index]);\n }\n return null;\n}\n\nexport function callNameNode(call: SyntaxNode): SyntaxNode {\n return call.childForFieldName(\"name\") ?? call;\n}\n\nexport function fieldNameNode(field: SyntaxNode): SyntaxNode {\n return field.childForFieldName(\"name\") ?? field;\n}\n\nexport function firstFunctionArgument(context: RuleContext, call: SyntaxNode): SyntaxNode | null {\n return context.callArguments(call).find((arg) => arg.type === \"function_definition\") ?? null;\n}\n\nexport function directComponentForCall(context: RuleContext, call: SyntaxNode): FunctionInfo | null {\n const fn = context.nearestFunction(call);\n return fn?.isComponent ? fn : null;\n}\n\nexport function findAncestorBetween(node: SyntaxNode, stop: SyntaxNode, predicate: (node: SyntaxNode) => boolean): SyntaxNode | null {\n let current = node.parent;\n while (current && !sameNode(current, stop)) {\n if (predicate(current)) return current;\n current = current.parent;\n }\n return null;\n}\n\nexport function declarationNames(node: SyntaxNode): string[] {\n if (node.type !== \"variable_declaration\") return [];\n const beforeEquals = node.text.split(\"=\")[0] ?? \"\";\n return beforeEquals\n .replace(/^\\s*local\\s+/, \"\")\n .split(\",\")\n .map((piece) => piece.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? null)\n .filter((name): name is string => Boolean(name));\n}\n\nexport function callRoot(path: string): string | null {\n return rootIdentifier(path);\n}\n\nexport function isNestedInsideFunction(node: SyntaxNode, boundary: SyntaxNode): boolean {\n let current = node.parent;\n while (current && !sameNode(current, boundary)) {\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return true;\n current = current.parent;\n }\n return false;\n}\n\nexport function functionHasReturnedBefore(call: SyntaxNode, fn: FunctionInfo, context: RuleContext): boolean {\n if (!fn.body) return false;\n for (const node of context.walk(fn.body)) {\n if (node.endIndex > call.startIndex) continue;\n if (node.type !== \"return_statement\") continue;\n if (isNestedInsideFunction(node, fn.node)) continue;\n return true;\n }\n return false;\n}\n\nexport function parseDependencyRoots(node: SyntaxNode | undefined): Set<string> {\n const result = new Set<string>();\n if (!node || node.type !== \"table_constructor\") return result;\n\n for (const child of node.namedChildren) {\n const root = rootIdentifier(child.text);\n if (root) result.add(root);\n }\n return result;\n}\n\nexport function assignmentLeft(text: string): string {\n const match = text.match(/^(.*?)(?:\\+=|-=|\\*=|\\/=|%=|\\^=|\\.\\.=|\\/=|=)/s);\n return match?.[1]?.trim() ?? \"\";\n}\n\nexport function functionInfoForNode(context: RuleContext, node: SyntaxNode | null): FunctionInfo | null {\n if (!node) return null;\n return context.model.functionByNode.get(node.id) ?? null;\n}\n\nexport function stateBindingsFor(context: RuleContext, owner: FunctionInfo): typeof context.model.stateBindings {\n return context.model.stateBindings.filter((binding) => binding.owner === owner);\n}\n\nexport function isEffectPath(path: string): boolean {\n return path === \"React.useEffect\" || path === \"React.useLayoutEffect\";\n}\n\nexport function dependencyExpressions(node: SyntaxNode | undefined): SyntaxNode[] {\n if (!node || node.type !== \"table_constructor\") return [];\n return node.namedChildren\n .filter((child) => child.type === \"field\")\n .map((field) => {\n const name = field.childForFieldName(\"name\");\n if (name && field.text.trim().startsWith(\"[\")) return name;\n return field.namedChildren.find((child) => !sameNode(child, name)) ?? name ?? field;\n });\n}\n\nexport function fieldName(node: SyntaxNode): string | null {\n if (node.type !== \"field\") return null;\n const name = node.childForFieldName(\"name\");\n return name?.type === \"identifier\" ? name.text : null;\n}\n\nexport function fieldValue(node: SyntaxNode): SyntaxNode | null {\n if (node.type !== \"field\") return null;\n const name = node.childForFieldName(\"name\");\n if (!name) return node.namedChildren[0] ?? null;\n return node.namedChildren.find((child) => child.startIndex > name.endIndex) ?? null;\n}\n\nexport function containsIdentifier(node: SyntaxNode | null | undefined, name: string, context: RuleContext): boolean {\n if (!node) return false;\n for (const child of context.walk(node)) {\n if (child.type !== \"identifier\" || child.text !== name) continue;\n const parent = child.parent;\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.childForFieldName(\"field\"), child)) continue;\n if (parent?.type === \"method_index_expression\" && (sameNode(parent.childForFieldName(\"method\"), child) || sameNode(parent.namedChildren.at(-1), child))) continue;\n return true;\n }\n return false;\n}\n\nexport function ownerStateSetter(context: RuleContext, owner: FunctionInfo, path: string): string | null {\n for (const binding of context.model.stateBindings) {\n if (binding.owner === owner && binding.setterName === path) return binding.valueName;\n }\n return null;\n}\n\n\nfunction parameterNames(node: SyntaxNode | null): Set<string> {\n const names = new Set<string>();\n if (!node) return names;\n for (const candidate of node.namedChildren) {\n for (const child of [candidate, ...Array.from((function* walkLocal(current: SyntaxNode): Iterable<SyntaxNode> {\n for (const nested of current.namedChildren) {\n yield nested;\n yield* walkLocal(nested);\n }\n })(candidate))]) {\n if (child.type === \"identifier\") names.add(child.text);\n }\n }\n return names;\n}\n\nfunction blockBindingsBefore(block: SyntaxNode, beforeIndex: number): Set<string> {\n const names = new Set<string>();\n for (const child of block.namedChildren) {\n if (child.startIndex >= beforeIndex) continue;\n if (child.type === \"variable_declaration\") {\n for (const name of declarationNames(child)) names.add(name);\n } else if (child.type === \"function_declaration\") {\n const name = child.childForFieldName(\"name\")?.text;\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) names.add(name);\n }\n }\n return names;\n}\n\nfunction loopBindings(loop: SyntaxNode): Set<string> {\n const names = new Set<string>();\n const header = loop.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\n const numeric = header.match(/^\\s*for\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=/s);\n if (numeric) names.add(numeric[1]);\n const generic = header.match(/^\\s*for\\s+(.+?)\\s+in\\b/s);\n if (generic) {\n for (const part of generic[1].split(\",\")) {\n const name = part.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (name) names.add(name);\n }\n }\n return names;\n}\n\nexport function isNameShadowedBetween(node: SyntaxNode, boundary: FunctionInfo, name: string): boolean {\n let current: SyntaxNode | null = node.parent;\n while (current && !sameNode(current, boundary.node)) {\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") {\n if (parameterNames(current.childForFieldName(\"parameters\")).has(name)) return true;\n }\n if (current.type === \"block\" && !sameNode(current.parent, boundary.node) && blockBindingsBefore(current, node.startIndex).has(name)) return true;\n if (current.type === \"for_statement\" && loopBindings(current).has(name)) return true;\n current = current.parent;\n }\n return false;\n}\n\nconst topLevelBindingsCache = new WeakMap<FunctionInfo, Map<string, SyntaxNode[]>>();\n\nfunction topLevelBindings(boundary: FunctionInfo): Map<string, SyntaxNode[]> {\n const cached = topLevelBindingsCache.get(boundary);\n if (cached) return cached;\n\n const result = new Map<string, SyntaxNode[]>();\n const add = (name: string, node: SyntaxNode): void => {\n const existing = result.get(name) ?? [];\n existing.push(node);\n result.set(name, existing);\n };\n\n for (const child of boundary.body?.namedChildren ?? []) {\n if (child.type === \"variable_declaration\") {\n for (const name of declarationNames(child)) add(name, child);\n } else if (child.type === \"function_declaration\") {\n const declared = child.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(declared)) add(declared, child);\n }\n }\n\n topLevelBindingsCache.set(boundary, result);\n return result;\n}\n\nexport function isBindingShadowedBetween(\n node: SyntaxNode,\n boundary: FunctionInfo,\n name: string,\n declaration: SyntaxNode | null = null,\n): boolean {\n if (isNameShadowedBetween(node, boundary, name)) return true;\n if (!boundary.body) return false;\n\n const afterIndex = declaration?.endIndex ?? boundary.body.startIndex - 1;\n return (topLevelBindings(boundary).get(name) ?? []).some((binding) =>\n binding.startIndex > afterIndex && binding.startIndex < node.startIndex\n );\n}\n\nexport function containsUnshadowedIdentifier(\n node: SyntaxNode | null | undefined,\n name: string,\n context: RuleContext,\n boundary: FunctionInfo,\n): boolean {\n if (!node) return false;\n for (const child of context.walk(node)) {\n if (child.type !== \"identifier\" || child.text !== name) continue;\n const parent = child.parent;\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.childForFieldName(\"field\"), child)) continue;\n if (parent?.type === \"method_index_expression\" && (sameNode(parent.childForFieldName(\"method\"), child) || sameNode(parent.namedChildren.at(-1), child))) continue;\n if (isNameShadowedBetween(child, boundary, name)) continue;\n return true;\n }\n return false;\n}\n\nexport function directFunctionCalls(context: RuleContext, fn: FunctionInfo): SyntaxNode[] {\n if (!fn.body) return [];\n return [...context.walk(fn.body)].filter((node) => node.type === \"function_call\" && context.nearestFunction(node) === fn);\n}\n",
23
24
  "import type { SyntaxNode } from \"../syntax\";\nimport type { FixPreview, FunctionInfo, RuleContext, RuleDefinition, Severity } from \"../types\";\nimport { sameNode } from \"../ast/walk\";\nimport { functionYieldPoint } from \"../roblox-semantics\";\nimport { callNameNode, declarationNames, firstFunctionArgument, functionInfoForNode } from \"./helpers\";\n\ninterface Resource {\n call: SyntaxNode;\n label: string;\n variable: string | null;\n detail?: string;\n severity?: Severity;\n cleanupMatches(cleanupText: string, variable: string | null, call: SyntaxNode): boolean;\n}\n\nconst ALWAYS_MANAGED_METHOD = /:GiveTask$/;\nconst GENERIC_MANAGER_METHOD = /:(?:Add|AddTask|AddObject|Track)$/;\nconst MANAGER_ROOT = /(?:maid|trove|janitor|cleaner|cleanup|scope|bin|disposer)(?:$|[._])/i;\nconst CONNECTION_RETURNING_METHODS = new Set([\"BindToSimulation\", \"SubscribeAsync\", \"OnUpdate\"]);\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction connectionOwnerExpression(rawPath: string): string | null {\n const connected = rawPath.match(/^(.*):Connect$/s)?.[1];\n if (!connected) return null;\n\n const signalMethod = connected.match(/^(.*):(?:GetPropertyChangedSignal|GetAttributeChangedSignal)\\s*\\(.*\\)$/s);\n if (signalMethod) return signalMethod[1]?.trim() || null;\n\n const eventProperty = connected.match(/^(.*)\\.[A-Za-z_][A-Za-z0-9_]*$/s);\n return eventProperty?.[1]?.trim() || null;\n}\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\n return expressionList?.namedChildren ?? [];\n}\n\nfunction initializerCreatesInstance(initializer: SyntaxNode | undefined, context: RuleContext): boolean {\n if (!initializer) return false;\n for (const candidate of context.walk(initializer)) {\n if (candidate.type !== \"function_call\") continue;\n if (context.resolveCallPath(context.getCallPath(candidate) ?? \"\") === \"Instance.new\") return true;\n }\n return false;\n}\n\nfunction bodyDeclaresInstanceBefore(\n body: SyntaxNode | null,\n beforeIndex: number,\n expression: string,\n context: RuleContext,\n): boolean {\n if (!body) return false;\n for (const child of body.namedChildren) {\n if (child.startIndex >= beforeIndex) break;\n if (child.type !== \"variable_declaration\") continue;\n const names = declarationNames(child);\n const index = names.indexOf(expression);\n if (index === -1) continue;\n if (initializerCreatesInstance(declarationExpressions(child)[index], context)) return true;\n }\n return false;\n}\n\nfunction isProvenInstanceExpression(\n expression: string | null,\n call: SyntaxNode,\n context: RuleContext,\n callback: FunctionInfo,\n): boolean {\n if (!expression || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(expression)) return false;\n const callbackInstances = context.model.instanceVariablesByFunction.get(callback.node.id);\n if (callbackInstances?.has(expression)) return true;\n if (bodyDeclaresInstanceBefore(callback.body, call.startIndex, expression, context)) return true;\n\n const effectOwner = context.nearestFunction(callback.node);\n if (effectOwner) {\n const ownerInstances = context.model.instanceVariablesByFunction.get(effectOwner.node.id);\n if (ownerInstances?.has(expression)) return true;\n }\n return Boolean(effectOwner && bodyDeclaresInstanceBefore(effectOwner.body, callback.node.startIndex, expression, context));\n}\n\nfunction cleanupDestroysExpression(cleanupText: string, expression: string): boolean {\n return new RegExp(`(?:^|[^A-Za-z0-9_])${escapeRegExp(expression)}\\\\s*:\\\\s*Destroy\\\\s*\\\\(`, \"s\").test(cleanupText);\n}\n\nfunction assignedVariableName(call: SyntaxNode, callback: FunctionInfo): string | null {\n let current = call.parent;\n while (current && !sameNode(current, callback.node)) {\n if (current.type === \"variable_declaration\") {\n const names = declarationNames(current);\n const expressions = declarationExpressions(current);\n const index = expressions.findIndex((expression) => expression.startIndex <= call.startIndex && expression.endIndex >= call.endIndex);\n if (index >= 0) return names[index] ?? names[0] ?? null;\n return names[0] ?? null;\n }\n if (current.type === \"assignment_statement\") {\n const beforeCall = current.text.slice(0, Math.max(0, call.startIndex - current.startIndex));\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);\n const target = match?.[1]?.replace(/\\s+/g, \"\") ?? \"\";\n const root = target.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (root) return root;\n // A call can be nested inside a conditional/table initializer. In that case\n // keep walking so the surrounding variable declaration can own the resource.\n }\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return null;\n current = current.parent;\n }\n return null;\n}\n\nfunction cleanupIteratesAndDisconnects(cleanupText: string, collection: string): boolean {\n const escaped = escapeRegExp(collection);\n const loops = new RegExp(\n `for\\\\s+[^\\\\n]*?([A-Za-z_][A-Za-z0-9_]*)\\\\s+in\\\\s+${escaped}\\\\s+do([\\\\s\\\\S]*?)end`,\n \"g\",\n );\n for (const match of cleanupText.matchAll(loops)) {\n const item = match[1];\n const body = match[2] ?? \"\";\n if (new RegExp(`\\\\b${escapeRegExp(item)}\\\\s*:\\\\s*Disconnect\\\\s*\\\\(`).test(body)) return true;\n }\n return false;\n}\n\nfunction cleanupCallsDisposer(cleanupText: string, variable: string): boolean {\n return new RegExp(`(?:^|[^A-Za-z0-9_.:])${escapeRegExp(variable)}\\\\s*\\\\(`, \"s\").test(cleanupText);\n}\n\nfunction isManagedByCleanupContainer(call: SyntaxNode, context: RuleContext, callback: FunctionInfo): boolean {\n let current = call.parent;\n while (current && !sameNode(current, callback.node)) {\n if (current.type === \"function_call\") {\n const path = context.getCallPath(current) ?? \"\";\n if (ALWAYS_MANAGED_METHOD.test(path)) return true;\n if (GENERIC_MANAGER_METHOD.test(path)) {\n const receiver = path.split(\":\", 1)[0] ?? \"\";\n if (MANAGER_ROOT.test(receiver)) return true;\n }\n }\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\n current = current.parent;\n }\n return false;\n}\n\nfunction localFunctionByName(callback: FunctionInfo, name: string, context: RuleContext): SyntaxNode | null {\n if (!callback.body) return null;\n for (const child of callback.body.namedChildren) {\n if (child.type === \"function_declaration\" && child.childForFieldName(\"name\")?.text === name) return child;\n if (child.type !== \"variable_declaration\") continue;\n const match = child.text.match(new RegExp(`^\\\\s*local\\\\s+${escapeRegExp(name)}\\\\s*=\\\\s*function\\\\b`, \"s\"));\n if (!match) continue;\n return [...context.walk(child)].find((node) => node.type === \"function_definition\") ?? null;\n }\n return null;\n}\n\nfunction cleanupTexts(callback: FunctionInfo, context: RuleContext): string[] {\n if (!callback.body) return [];\n const texts: string[] = [];\n\n for (const node of context.walk(callback.body)) {\n if (node.type !== \"return_statement\") continue;\n if (context.nearestFunction(node) !== callback) continue;\n const expressionList = node.namedChildren.find((child) => child.type === \"expression_list\");\n const returned = expressionList?.namedChildren[0];\n if (!returned) continue;\n if (returned.type === \"function_definition\") {\n texts.push(returned.text);\n continue;\n }\n if (returned.type === \"identifier\") {\n const localFunction = localFunctionByName(callback, returned.text, context);\n if (localFunction) texts.push(localFunction.text);\n }\n }\n\n return texts;\n}\n\nfunction taskCallbackNode(call: SyntaxNode, context: RuleContext, callback: FunctionInfo): SyntaxNode | null {\n const args = context.callArguments(call);\n const candidate = args.find((arg) => arg.type === \"function_definition\");\n if (candidate) return candidate;\n const named = args[0];\n if (named?.type === \"identifier\") return localFunctionByName(callback, named.text, context);\n return null;\n}\n\nfunction cancellationFlagMatches(taskCallback: SyntaxNode | null, cleanupText: string, callback: FunctionInfo): boolean {\n if (!taskCallback || !callback.body) return false;\n const beforeTask = callback.body.text.slice(0, Math.max(0, taskCallback.startIndex - callback.body.startIndex));\n const declarations = [...beforeTask.matchAll(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*false\\b/g)].map((match) => match[1]);\n\n for (const name of declarations) {\n const escaped = escapeRegExp(name);\n if (!new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*true\\\\b`).test(cleanupText)) continue;\n const taskText = taskCallback.text;\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);\n if (observesCancellation) return true;\n }\n\n return false;\n}\n\nfunction connectionResource(call: SyntaxNode, variable: string | null, label = \"RBXScriptConnection\"): Resource {\n return {\n call,\n label,\n variable,\n cleanupMatches(text, name) {\n return Boolean(\n name\n && (new RegExp(`\\\\b${escapeRegExp(name)}\\\\s*:\\\\s*Disconnect\\\\s*\\\\(`).test(text)\n || cleanupIteratesAndDisconnects(text, name)),\n );\n },\n };\n}\n\nfunction numericTaskDelay(call: SyntaxNode, context: RuleContext): number | null {\n const first = context.callArguments(call)[0]?.text.trim();\n if (!first || !/^-?\\d+(?:\\.\\d+)?$/.test(first)) return null;\n const value = Number(first);\n return Number.isFinite(value) ? value : null;\n}\n\nfunction isCleanupOnlyTask(callbackNode: SyntaxNode | null, context: RuleContext): boolean {\n if (!callbackNode) return false;\n const info = functionInfoForNode(context, callbackNode);\n if (!info?.body) return false;\n const calls = [...context.walk(info.body)].filter((node) => node.type === \"function_call\" && context.nearestFunction(node) === info);\n if (calls.length === 0) return false;\n return calls.every((call) => /:(?:Destroy|Disconnect)$/.test(context.getCallPath(call) ?? \"\"));\n}\n\nfunction taskSeverity(path: string, call: SyntaxNode, taskCallback: SyntaxNode | null, yieldPoint: unknown, context: RuleContext): Severity {\n if (path === \"task.defer\" && !yieldPoint) return \"suggestion\";\n if (path === \"task.delay\" && !yieldPoint) {\n if (isCleanupOnlyTask(taskCallback, context)) return \"suggestion\";\n const delay = numericTaskDelay(call, context);\n if (delay !== null && delay <= 0.25) return \"suggestion\";\n }\n return \"warning\";\n}\n\nfunction cleanupHelp(resources: Resource[], details: string[]): string {\n const labels = new Set(resources.map((resource) => resource.label));\n let action: string;\n\n if (resources.every((resource) => resource.label.includes(\"task\"))) {\n action = \"Cancel the task in returned cleanup if it must stop with the effect.\";\n } else if (labels.size === 1 && labels.has(\"connection/subscription\")) {\n action = \"Disconnect the connection in returned cleanup, or hand it to a cleanup manager.\";\n } else if (labels.size === 1 && [...labels][0]?.endsWith(\" connection\")) {\n action = \"Disconnect the returned connection in cleanup.\";\n } else if (labels.size === 1 && labels.has(\"RenderStep binding\")) {\n action = \"Call UnbindFromRenderStep with the same binding name in cleanup.\";\n } else if (labels.size === 1 && labels.has(\"ContextAction binding\")) {\n action = \"Call UnbindAction with the same action name in cleanup.\";\n } else if (labels.size === 1 && labels.has(\"ContextAction activation binding\")) {\n action = \"Call UnbindActivate with the same input type in cleanup.\";\n } else if (labels.size === 1 && labels.has(\"React root\")) {\n action = \"Unmount the root in cleanup.\";\n } else {\n action = \"Release the owned resources in returned cleanup.\";\n }\n\n return `${details.length > 0 ? `${details.join(\" \")} ` : \"\"}${action}`;\n}\n\nfunction cleanupFixPreview(resources: Resource[], context: RuleContext): FixPreview | undefined {\n const labels = new Set(resources.map((resource) => resource.label));\n const first = resources[0];\n if (!first) return undefined;\n\n if (labels.size === 1 && labels.has(\"RenderStep binding\")) {\n const bindingName = context.callArguments(first.call)[0]?.text.trim() ?? '\"RenderStepName\"';\n return {\n kind: \"pattern\",\n before: `RunService:BindToRenderStep(${bindingName}, priority, onStep)`,\n after: `RunService:BindToRenderStep(${bindingName}, priority, onStep)\n\nreturn function()\n\tRunService:UnbindFromRenderStep(${bindingName})\nend`,\n note: \"Unbind the same RenderStep name when the effect reruns or unmounts.\",\n };\n }\n\n if ([...labels].every((label) => label.includes(\"task\"))) {\n const path = context.resolveCallPath(context.getCallPath(first.call) ?? \"task.delay\");\n const taskCall = path === \"task.defer\"\n ? `task.defer(function()\n\tdoWork()\nend)`\n : path === \"task.spawn\"\n ? `task.spawn(function()\n\tdoWork()\nend)`\n : `task.delay(delaySeconds, function()\n\tdoWork()\nend)`;\n return {\n kind: \"pattern\",\n before: taskCall,\n after: `local thread = ${taskCall}\n\nreturn function()\n\ttask.cancel(thread)\nend`,\n note: \"Cancel scheduled work only when it must not outlive this effect. Short fire-and-forget work may intentionally remain uncancelled.\",\n };\n }\n\n if (labels.size === 1 && labels.has(\"ContextAction binding\")) {\n return {\n kind: \"pattern\",\n before: `ContextActionService:BindAction(actionName, onAction, false, inputType)`,\n after: `ContextActionService:BindAction(actionName, onAction, false, inputType)\n\nreturn function()\n\tContextActionService:UnbindAction(actionName)\nend`,\n note: \"Unbind the same action name in the effect cleanup.\",\n };\n }\n\n if (labels.size === 1 && labels.has(\"React root\")) {\n return {\n kind: \"pattern\",\n before: `local root = ReactRoblox.createRoot(container)`,\n after: `local root = ReactRoblox.createRoot(container)\n\nreturn function()\n\troot:unmount()\nend`,\n note: \"Unmount roots created by the effect when ownership ends.\",\n };\n }\n\n return {\n kind: \"pattern\",\n before: `local connection = signal:Connect(onChanged)`,\n after: `local connection = signal:Connect(onChanged)\n\nreturn function()\n\tconnection:Disconnect()\nend`,\n note: \"Return cleanup from the same effect that acquires the resource.\",\n };\n}\n\nfunction classifyResource(call: SyntaxNode, context: RuleContext, callback: FunctionInfo): Resource | null {\n const rawPath = context.getCallPath(call) ?? \"\";\n const path = context.resolveCallPath(rawPath);\n const variable = assignedVariableName(call, callback);\n const finalMember = path.split(/[.:]/).at(-1) ?? path;\n\n if (/:Connect$/.test(rawPath)) {\n const ownerExpression = connectionOwnerExpression(rawPath);\n const ownerIsInstance = isProvenInstanceExpression(ownerExpression, call, context, callback);\n return {\n call,\n label: \"connection/subscription\",\n variable,\n cleanupMatches(text, name) {\n if (name && new RegExp(`\\\\b${escapeRegExp(name)}\\\\s*:\\\\s*Disconnect\\\\s*\\\\(`).test(text)) return true;\n if (name && cleanupIteratesAndDisconnects(text, name)) return true;\n // Custom Signal/Iris-style Connect APIs may return a disposer function instead of RBXScriptConnection.\n if (name && cleanupCallsDisposer(text, name)) return true;\n return Boolean(ownerIsInstance && ownerExpression && cleanupDestroysExpression(text, ownerExpression));\n },\n };\n }\n\n if (CONNECTION_RETURNING_METHODS.has(finalMember)) {\n return connectionResource(call, variable, `${finalMember} connection`);\n }\n\n if (/BindToRenderStep$/.test(rawPath)) {\n const bindingName = context.callArguments(call)[0]?.text.trim();\n return {\n call,\n label: \"RenderStep binding\",\n variable,\n cleanupMatches(text) {\n if (!/UnbindFromRenderStep\\s*\\(/.test(text)) return false;\n if (!bindingName) return true;\n return new RegExp(`UnbindFromRenderStep\\\\s*\\\\(\\\\s*${escapeRegExp(bindingName)}\\\\s*\\\\)`).test(text);\n },\n };\n }\n\n if (/:BindAction(?:AtPriority)?$/.test(rawPath)) {\n const actionName = context.callArguments(call)[0]?.text.trim();\n return {\n call,\n label: \"ContextAction binding\",\n variable,\n cleanupMatches(text) {\n if (/:UnbindAllActions\\s*\\(/.test(text)) return true;\n if (!/:UnbindAction\\s*\\(/.test(text)) return false;\n if (!actionName) return true;\n return new RegExp(`:UnbindAction\\\\s*\\\\(\\\\s*${escapeRegExp(actionName)}\\\\s*\\\\)`).test(text);\n },\n };\n }\n\n if (/:BindActivate$/.test(rawPath)) {\n const inputType = context.callArguments(call)[0]?.text.trim();\n return {\n call,\n label: \"ContextAction activation binding\",\n variable,\n cleanupMatches(text) {\n if (!/:UnbindActivate\\s*\\(/.test(text)) return false;\n if (!inputType) return true;\n return new RegExp(`:UnbindActivate\\\\s*\\\\(\\\\s*${escapeRegExp(inputType)}(?:\\\\s*,|\\\\s*\\\\))`).test(text);\n },\n };\n }\n\n if (path === \"ReactRoblox.createRoot\") {\n return {\n call,\n label: \"React root\",\n variable,\n cleanupMatches(text, name) {\n return Boolean(name && new RegExp(`\\\\b${escapeRegExp(name)}\\\\s*:\\\\s*unmount\\\\s*\\\\(`, \"i\").test(text));\n },\n };\n }\n\n if (path === \"task.delay\" || path === \"task.defer\" || path === \"task.spawn\") {\n const taskCallback = taskCallbackNode(call, context, callback);\n const yieldPoint = taskCallback ? functionYieldPoint(taskCallback, context) : null;\n const outlivesEffect = path !== \"task.spawn\" || Boolean(yieldPoint);\n if (!outlivesEffect) return null;\n\n return {\n call,\n label: path === \"task.spawn\" ? \"yielding spawned task\" : path === \"task.defer\" ? \"deferred task\" : \"delayed task\",\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.\",\n severity: taskSeverity(path, call, taskCallback, yieldPoint, context),\n variable,\n cleanupMatches(text, name) {\n if (name) {\n const escaped = escapeRegExp(name);\n if (new RegExp(`task\\\\.cancel\\\\s*\\\\(\\\\s*${escaped}\\\\s*\\\\)`).test(text)) return true;\n if (new RegExp(`p?call\\\\s*\\\\(\\\\s*task\\\\.cancel\\\\s*,\\\\s*${escaped}\\\\s*\\\\)`).test(text)) return true;\n }\n return cancellationFlagMatches(taskCallback, text, callback);\n },\n };\n }\n\n return null;\n}\n\nexport const effectNeedsCleanup: RuleDefinition = {\n id: \"react-luau/effect-needs-cleanup\",\n category: \"Effects\",\n severity: \"warning\",\n description: \"Effects that create owned resources or outliving tasks should return matching cleanup.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n if (!rawPath) continue;\n const path = context.resolveCallPath(rawPath);\n if (path !== \"React.useEffect\" && path !== \"React.useLayoutEffect\") continue;\n\n const callbackNode = firstFunctionArgument(context, call);\n const callback = functionInfoForNode(context, callbackNode);\n if (!callbackNode || !callback) continue;\n const cleanup = cleanupTexts(callback, context);\n const missing: Resource[] = [];\n\n for (const candidate of context.walk(callbackNode)) {\n if (candidate.type !== \"function_call\") continue;\n if (context.nearestFunction(candidate) !== callback) continue;\n if (isManagedByCleanupContainer(candidate, context, callback)) continue;\n const resource = classifyResource(candidate, context, callback);\n if (!resource) continue;\n if (cleanup.some((text) => resource.cleanupMatches(text, resource.variable, resource.call))) continue;\n missing.push(resource);\n }\n\n if (missing.length === 0) continue;\n const labels = [...new Set(missing.map((resource) => resource.label))];\n const details = [...new Set(missing.map((resource) => resource.detail).filter((detail): detail is string => Boolean(detail)))];\n const severityRank: Record<Severity, number> = { suggestion: 0, warning: 1, error: 2 };\n const severity = missing.reduce<Severity>(\n (highest, resource) => severityRank[resource.severity ?? \"warning\"] > severityRank[highest] ? resource.severity ?? \"warning\" : highest,\n \"suggestion\",\n );\n const highlights = missing.map((resource) => callNameNode(resource.call));\n diagnostics.push({\n node: highlights[0],\n highlights,\n severity,\n message: `Effect creates ${labels.join(\", \")} without matching returned cleanup.`,\n help: cleanupHelp(missing, details),\n fixPreview: cleanupFixPreview(missing, context),\n });\n }\n\n return diagnostics;\n },\n};\n",
24
- "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\nimport { nodeKey, rootIdentifier } from \"../ast/walk\";\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(context: RuleContext, call: SyntaxNode): FunctionInfo | null {\n const owner = context.nearestFunction(call);\n return owner && (owner.isComponent || owner.isHook) ? owner : null;\n}\n\nfunction callbackAndDeps(context: RuleContext, call: SyntaxNode): { callback: SyntaxNode; deps: SyntaxNode } | null {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const args = context.callArguments(call);\n if (path === \"React.useImperativeHandle\") {\n const callback = args[1];\n const deps = args[2];\n if (callback?.type === \"function_definition\" && deps?.type === \"table_constructor\") return { callback, deps };\n return null;\n }\n const callback = args[0];\n const deps = args[1];\n if (callback?.type === \"function_definition\" && deps?.type === \"table_constructor\") return { callback, deps };\n return null;\n}\n\nfunction directTopLevelCalls(context: RuleContext, callback: SyntaxNode): SyntaxNode[] {\n const info = functionInfoForNode(context, callback);\n if (!info?.body) return [];\n return info.body.namedChildren.filter((child) => child.type === \"function_call\");\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 return false;\n}\n\nfunction hasExternalSubscription(node: SyntaxNode, context: RuleContext): boolean {\n for (const child of context.walk(node)) {\n if (child.type !== \"function_call\") continue;\n const path = context.getCallPath(child) ?? \"\";\n if (/:Connect$/.test(path) || /BindToRenderStep$/.test(path) || /:BindAction(?:AtPriority)?$/.test(path)) return true;\n }\n return false;\n}\n\nfunction directLocalInitializer(owner: FunctionInfo, name: string): SyntaxNode | null {\n if (!owner.body) return null;\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const assignment = statement.namedChildren.find((child) => child.type === \"assignment_statement\");\n const variableList = assignment?.namedChildren.find((child) => child.type === \"variable_list\");\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\n const names = variableList?.namedChildren.filter((child) => child.type === \"identifier\") ?? [];\n const expressions = expressionList?.namedChildren ?? [];\n const index = names.findIndex((child) => child.text === name);\n if (index >= 0) return expressions[index] ?? expressions[0] ?? null;\n }\n return null;\n}\n\nfunction setterCalledOutsideCallback(context: RuleContext, owner: FunctionInfo, callback: SyntaxNode, setterName: string): boolean {\n if (!owner.body) return false;\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"function_call\" || context.getCallPath(node) !== setterName) continue;\n if (node.startIndex >= callback.startIndex && node.endIndex <= callback.endIndex) continue;\n return true;\n }\n return false;\n}\n\nfunction freshDependencyKind(node: SyntaxNode, owner: FunctionInfo): string | null {\n if (node.type === \"table_constructor\") return \"table\";\n if (node.type === \"function_definition\") return \"function\";\n\n if (node.type === \"identifier\") {\n const initializer = directLocalInitializer(owner, node.text);\n if (initializer?.type === \"table_constructor\") return \"table\";\n if (initializer?.type === \"function_definition\") return \"function\";\n }\n\n return null;\n}\n\nexport const noDerivedStateEffect: RuleDefinition = {\n id: \"react-luau/no-derived-state-effect\",\n category: \"Effects\",\n severity: \"warning\",\n description: \"Avoid copying render-known derived values into state from an effect.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (!isEffectPath(path)) continue;\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n if (!owner || !parts) continue;\n if (hasExternalSubscription(parts.callback, context)) continue;\n const available = context.model.componentLocals.get(nodeKey(owner.node)) ?? new Set(owner.parameters);\n const bindings = stateBindingsFor(context, owner);\n const setterToValue = new Map(bindings.map((binding) => [binding.setterName, binding.valueName]));\n\n for (const setterCall of directTopLevelCalls(context, parts.callback)) {\n const setter = context.getCallPath(setterCall) ?? \"\";\n const targetState = setterToValue.get(setter);\n if (!targetState) continue;\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)) continue;\n const argument = context.callArguments(setterCall)[0];\n if (!argument || argument.type === \"function_definition\" || hasCall(argument, context)) continue;\n\n const sourceNames = [...available].filter((name) => name !== targetState && containsUnshadowedIdentifier(argument, name, context, owner));\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 help: \"Compute the value during render when it is fully derived from render-known inputs.\",\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 description: \"Effects should not unconditionally update state that is also one of their dependencies.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (!isEffectPath(path)) continue;\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n if (!owner || !parts) continue;\n const deps = parseDependencyRoots(parts.deps);\n\n for (const binding of stateBindingsFor(context, owner)) {\n if (!deps.has(binding.valueName)) continue;\n for (const setterCall of directTopLevelCalls(context, parts.callback)) {\n if (context.getCallPath(setterCall) !== binding.setterName) continue;\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\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 description: \"Dependency tables should not contain tables or functions recreated on every render.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (!HOOKS_WITH_DEPS.has(path)) continue;\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n if (!owner || !parts) continue;\n\n for (const dependency of dependencyExpressions(parts.deps)) {\n const kind = freshDependencyKind(dependency, owner);\n if (!kind) continue;\n const label = dependency.type === \"identifier\" ? ` ${dependency.text}` : \"\";\n diagnostics.push({\n node: dependency,\n message: `${path} depends on${label || \" an inline value\"} that is a new ${kind} on every render.`,\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 description: \"Mutable ref.current values do not belong in hook dependency tables.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (!HOOKS_WITH_DEPS.has(path)) continue;\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n if (!owner || !parts) continue;\n const refs = context.model.refVariablesByFunction.get(nodeKey(owner.node)) ?? new Set<string>();\n\n for (const dependency of dependencyExpressions(parts.deps)) {\n const root = rootIdentifier(dependency.text);\n if (!root || !refs.has(root)) continue;\n if (!new RegExp(`^${root.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\s*\\\\.\\\\s*current\\\\b`).test(dependency.text.trim())) continue;\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",
25
- "import type { SyntaxNode } from \"../syntax\";\nimport type { DiagnosticInput, FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\nimport { nodeKey, normalizeExpressionText, rootIdentifier, sameNode } from \"../ast/walk\";\nimport { mutableDependencyBase } from \"../roblox-semantics\";\nimport { declarationNames, dependencyExpressions, tableStartNode } from \"./helpers\";\n\nconst GLOBALS = new Set([\n \"game\", \"workspace\", \"script\", \"shared\", \"Enum\", \"Instance\", \"task\", \"coroutine\", \"debug\", \"os\", \"utf8\", \"buffer\", \"bit32\",\n \"math\", \"string\", \"table\", \"pairs\", \"ipairs\", \"next\", \"pcall\", \"xpcall\", \"print\", \"warn\", \"error\", \"assert\", \"type\", \"typeof\",\n \"tonumber\", \"tostring\", \"select\", \"unpack\", \"rawget\", \"rawset\", \"rawequal\", \"setmetatable\", \"getmetatable\", \"Vector2\", \"Vector3\", \"UDim\",\n \"UDim2\", \"CFrame\", \"Color3\", \"BrickColor\", \"Rect\", \"Region3\", \"Ray\", \"TweenInfo\", \"NumberRange\", \"NumberSequence\", \"ColorSequence\",\n \"DateTime\", \"Random\", \"Axes\", \"Faces\", \"PhysicalProperties\", \"RaycastParams\", \"OverlapParams\", \"DockWidgetPluginGuiInfo\",\n]);\n\nconst HOOK_ARGUMENTS = new Map<string, { callbackIndex: number; depsIndex: number }>([\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\nfunction parameterNames(functionNode: SyntaxNode): Set<string> {\n const names = new Set<string>();\n const parameters = functionNode.childForFieldName(\"parameters\");\n if (!parameters) return names;\n for (const node of parameters.namedChildren) {\n for (const candidate of descendants(node)) {\n if (candidate.type === \"identifier\") names.add(candidate.text);\n }\n }\n return names;\n}\n\nfunction* descendants(node: SyntaxNode): Iterable<SyntaxNode> {\n yield node;\n for (const child of node.namedChildren) yield* descendants(child);\n}\n\nfunction directBlockBindingNames(block: SyntaxNode, beforeIndex: number): Set<string> {\n const names = new Set<string>();\n for (const child of block.namedChildren) {\n if (child.startIndex >= beforeIndex) continue;\n if (child.type === \"variable_declaration\") {\n for (const name of declarationNames(child)) names.add(name);\n } else if (child.type === \"function_declaration\") {\n const name = child.childForFieldName(\"name\")?.text;\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) names.add(name);\n }\n }\n return names;\n}\n\nfunction loopBindingNames(loop: SyntaxNode): Set<string> {\n const names = new Set<string>();\n const header = loop.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\n const numeric = header.match(/^\\s*for\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=/s);\n if (numeric) names.add(numeric[1]);\n const generic = header.match(/^\\s*for\\s+(.+?)\\s+in\\b/s);\n if (generic) {\n for (const part of generic[1].split(\",\")) {\n const name = part.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (name) names.add(name);\n }\n }\n return names;\n}\n\nfunction isLocallyBoundOccurrence(identifier: SyntaxNode, callback: SyntaxNode, name: string): boolean {\n if (parameterNames(callback).has(name)) return true;\n\n let current = identifier.parent;\n while (current && !sameNode(current, callback)) {\n if ((current.type === \"function_definition\" || current.type === \"function_declaration\") && parameterNames(current).has(name)) {\n return true;\n }\n if (current.type === \"block\" && directBlockBindingNames(current, identifier.startIndex).has(name)) return true;\n if (current.type === \"for_statement\" && loopBindingNames(current).has(name)) return true;\n current = current.parent;\n }\n return false;\n}\n\nfunction isPropertyName(node: SyntaxNode): boolean {\n const parent = node.parent;\n if (!parent) return false;\n if (parent.type === \"dot_index_expression\") return sameNode(parent.childForFieldName(\"field\"), node);\n if (parent.type === \"method_index_expression\") return sameNode(parent.childForFieldName(\"method\"), node) || sameNode(parent.namedChildren.at(-1), node);\n // `fieldName = value` uses fieldName as a table key, not as a captured value.\n // Without this, a coincidentally named component local can create a fake dep.\n if (parent.type === \"field\" && !parent.text.trim().startsWith(\"[\")) {\n return sameNode(parent.childForFieldName(\"name\"), node);\n }\n return false;\n}\n\nfunction outermostDotPath(node: SyntaxNode): boolean {\n const parent = node.parent;\n return !(parent?.type === \"dot_index_expression\" && sameNode(parent.namedChildren[0], node));\n}\n\nfunction rootIdentifierNode(node: SyntaxNode, root: string): SyntaxNode | null {\n for (const candidate of descendants(node)) {\n if (candidate.type !== \"identifier\" || candidate.text !== root) continue;\n if (isPropertyName(candidate)) continue;\n return candidate;\n }\n return null;\n}\n\nfunction normalizeCapturedPath(\n path: string,\n stableVariables: Set<string>,\n externallyMutableRoots: Set<string>,\n): string | null {\n const normalized = normalizeExpressionText(path);\n const root = rootIdentifier(normalized);\n if (!root) return normalized;\n\n const mutableBase = mutableDependencyBase(normalized, externallyMutableRoots);\n if (mutableBase === \"\") return null;\n if (mutableBase) {\n const baseRoot = rootIdentifier(mutableBase);\n if (baseRoot && stableVariables.has(baseRoot)) return null;\n return mutableBase;\n }\n\n return normalized;\n}\n\nfunction capturedDependencyPaths(\n callback: SyntaxNode,\n available: Set<string>,\n stableVariables: Set<string>,\n externallyMutableRoots: Set<string>,\n): Set<string> {\n const captured = new Set<string>();\n\n for (const node of descendants(callback)) {\n if (node.type === \"dot_index_expression\" && outermostDotPath(node)) {\n const root = rootIdentifier(node.text);\n if (!root || !available.has(root) || GLOBALS.has(root) || stableVariables.has(root)) continue;\n const rootNode = rootIdentifierNode(node, root);\n if (!rootNode || isLocallyBoundOccurrence(rootNode, callback, root)) continue;\n const capture = normalizeCapturedPath(node.text, stableVariables, externallyMutableRoots);\n if (capture) captured.add(capture);\n continue;\n }\n\n if (node.type !== \"identifier\" || isPropertyName(node)) continue;\n const parent = node.parent;\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.namedChildren[0], node)) continue;\n const name = node.text;\n if (!available.has(name) || GLOBALS.has(name) || stableVariables.has(name)) continue;\n if (isLocallyBoundOccurrence(node, callback, name)) continue;\n captured.add(name);\n }\n\n return captured;\n}\n\nfunction localFunctionNode(owner: FunctionInfo, name: string, context: RuleContext): SyntaxNode | null {\n if (!owner.body) return null;\n for (const statement of owner.body.namedChildren) {\n if (statement.type === \"function_declaration\" && statement.childForFieldName(\"name\")?.text === name) return statement;\n if (statement.type !== \"variable_declaration\" || !declarationNames(statement).includes(name)) continue;\n const prefix = statement.text.split(\"=\", 1)[0] ?? \"\";\n if (!new RegExp(`\\b${name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\b`).test(prefix)) continue;\n const fn = [...context.walk(statement)].find((node) => node.type === \"function_definition\");\n if (fn) return fn;\n }\n return null;\n}\n\nfunction expandLocalFunctionCaptures(\n captured: Set<string>,\n owner: FunctionInfo,\n available: Set<string>,\n stableVariables: Set<string>,\n externallyMutableRoots: Set<string>,\n context: RuleContext,\n): Set<string> {\n const result = new Set<string>();\n const visiting = new Set<string>();\n\n const addCapture = (capture: string): void => {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(capture)) {\n result.add(capture);\n return;\n }\n const fn = localFunctionNode(owner, capture, context);\n if (visiting.has(capture)) return;\n if (!fn) {\n result.add(capture);\n return;\n }\n\n visiting.add(capture);\n const inner = capturedDependencyPaths(fn, available, stableVariables, externallyMutableRoots);\n for (const dependency of inner) addCapture(dependency);\n visiting.delete(capture);\n };\n\n for (const capture of captured) addCapture(capture);\n return result;\n}\n\nfunction dependencyPaths(node: SyntaxNode): Set<string> {\n return new Set(dependencyExpressions(node).map((dependency) => normalizeExpressionText(dependency.text)));\n}\n\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))$/;\n\nfunction isPureDerivedExpression(node: SyntaxNode, context: RuleContext): boolean {\n for (const candidate of context.walk(node)) {\n if (candidate !== node && (candidate.type === \"function_definition\" || candidate.type === \"function_declaration\")) return false;\n if (candidate.type !== \"function_call\") continue;\n const rawPath = context.getCallPath(candidate);\n if (!rawPath) return false;\n const path = normalizeExpressionText(context.resolveCallPath(rawPath));\n if (!PURE_DERIVED_CALL.test(path)) return false;\n }\n return true;\n}\n\nfunction mutatedOwnerLocals(owner: FunctionInfo, context: RuleContext): Set<string> {\n const mutated = new Set<string>();\n if (!owner.body) return mutated;\n\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"assignment_statement\" && node.type !== \"update_statement\") continue;\n if (node.parent?.type === \"variable_declaration\") continue;\n const variables = node.namedChildren.find((child) => child.type === \"variable_list\");\n if (!variables) continue;\n for (const variable of variables.namedChildren) {\n const root = rootIdentifier(normalizeExpressionText(variable.text));\n if (root) mutated.add(root);\n }\n }\n\n return mutated;\n}\n\nfunction derivedLocalDependencies(\n owner: FunctionInfo,\n available: Set<string>,\n stableVariables: Set<string>,\n externallyMutableRoots: Set<string>,\n context: RuleContext,\n): Map<string, Set<string>> {\n const derived = new Map<string, Set<string>>();\n if (!owner.body) return derived;\n const mutated = mutatedOwnerLocals(owner, context);\n\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const names = declarationNames(statement);\n const expressions = declarationExpressions(statement);\n if (names.length === 0 || expressions.length === 0) continue;\n\n for (let index = 0; index < names.length; index += 1) {\n const name = names[index];\n const expression = expressions[index] ?? expressions[0];\n if (!expression || mutated.has(name) || !isPureDerivedExpression(expression, context)) continue;\n derived.set(name, capturedDependencyPaths(expression, available, stableVariables, externallyMutableRoots));\n }\n }\n\n return derived;\n}\n\nfunction expandDerivedLocalCaptures(\n captured: Set<string>,\n derived: Map<string, Set<string>>,\n dependencies: Set<string>,\n): Set<string> {\n const result = new Set<string>();\n const visiting = new Set<string>();\n\n const addCapture = (capture: string): void => {\n if (dependencySatisfies(capture, dependencies)) {\n result.add(capture);\n return;\n }\n const root = rootIdentifier(capture);\n if (!root || !derived.has(root)) {\n result.add(capture);\n return;\n }\n if (visiting.has(root)) return;\n\n visiting.add(root);\n for (const dependency of derived.get(root) ?? []) addCapture(dependency);\n visiting.delete(root);\n };\n\n for (const capture of captured) addCapture(capture);\n return result;\n}\n\nfunction hasDynamicUnpackDependencies(node: SyntaxNode, context: RuleContext): boolean {\n for (const dependency of dependencyExpressions(node)) {\n for (const candidate of context.walk(dependency)) {\n if (candidate.type !== \"function_call\") continue;\n const rawPath = context.getCallPath(candidate);\n if (!rawPath) continue;\n const path = normalizeExpressionText(context.resolveCallPath(rawPath));\n if (path === \"unpack\" || path === \"table.unpack\") return true;\n }\n }\n return false;\n}\n\nfunction memoizedProducerDependencies(owner: FunctionInfo, context: RuleContext): Map<string, Set<string>> {\n const producers = new Map<string, Set<string>>();\n if (!owner.body) return producers;\n\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const names = declarationNames(statement);\n const expressions = declarationExpressions(statement);\n if (names.length === 0 || expressions.length === 0) continue;\n\n for (let index = 0; index < names.length; index += 1) {\n const name = names[index];\n const expression = expressions[index] ?? expressions[0];\n if (!expression || expression.type !== \"function_call\") continue;\n const rawPath = context.getCallPath(expression);\n if (!rawPath) continue;\n const path = context.resolveCallPath(rawPath);\n if (path !== \"React.useMemo\" && path !== \"React.useCallback\") continue;\n const args = context.callArguments(expression);\n const deps = args[1];\n if (!deps || deps.type !== \"table_constructor\" || hasDynamicUnpackDependencies(deps, context)) continue;\n producers.set(name, dependencyPaths(deps));\n }\n }\n\n return producers;\n}\n\nfunction isTransitivelyCoveredMemoizedValue(\n dependency: string,\n producers: Map<string, Set<string>>,\n dependencies: Set<string>,\n): boolean {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(dependency)) return false;\n const producerDependencies = producers.get(dependency);\n if (!producerDependencies) return false;\n return [...producerDependencies].every((producerDependency) => dependencySatisfies(producerDependency, dependencies));\n}\n\nfunction dependencySatisfies(captured: string, dependencies: Set<string>): boolean {\n for (const dependency of dependencies) {\n if (captured === dependency) return true;\n if (captured.startsWith(`${dependency}.`) || captured.startsWith(`${dependency}[`)) return true;\n }\n return false;\n}\n\nfunction minimalMissingDependencies(captured: Set<string>, dependencies: Set<string>): string[] {\n const missing = [...captured]\n .filter((name) => !dependencySatisfies(name, dependencies))\n .sort((left, right) => left.length - right.length || left.localeCompare(right));\n const result: string[] = [];\n for (const candidate of missing) {\n if (dependencySatisfies(candidate, new Set(result))) continue;\n result.push(candidate);\n }\n return result.sort();\n}\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\n return expressionList?.namedChildren ?? [];\n}\n\nfunction directCallsInExpression(node: SyntaxNode): SyntaxNode[] {\n const calls: SyntaxNode[] = [];\n const pending = [node];\n while (pending.length > 0) {\n const current = pending.pop()!;\n if (current !== node && (current.type === \"function_definition\" || current.type === \"function_declaration\")) continue;\n if (current.type === \"function_call\") calls.push(current);\n pending.push(...current.namedChildren);\n }\n return calls;\n}\n\nfunction isCustomHookCall(call: SyntaxNode, context: RuleContext): boolean {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n return !path.startsWith(\"React.\") && /^use[A-Z0-9_]/.test(final);\n}\n\ninterface CustomHookDependencyHints {\n memberHandleRoots: Set<string>;\n likelyHandleRoots: Set<string>;\n compositeHandleRoots: Set<string>;\n}\n\nconst HANDLE_VALUE_NAME = /(?:ref|binding|tween|spring|motion|animation|controller|handle|connection|signal)$/i;\nconst HANDLE_HOOK_NAME = /(?:Tween|Spring|Binding|Motion|Animated|Animation|Sound)$/i;\n\nfunction isCalledAsFunction(owner: FunctionInfo, name: string, context: RuleContext): boolean {\n if (!owner.body) return false;\n for (const call of context.walk(owner.body)) {\n if (call.type !== \"function_call\") continue;\n const path = normalizeExpressionText(context.getCallPath(call) ?? \"\");\n if (path === name) return true;\n }\n return false;\n}\n\nfunction customHookDependencyHints(owner: FunctionInfo, context: RuleContext): CustomHookDependencyHints {\n const hints: CustomHookDependencyHints = {\n memberHandleRoots: new Set<string>(),\n likelyHandleRoots: new Set<string>(),\n compositeHandleRoots: new Set<string>(),\n };\n if (!owner.body) return hints;\n\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const names = declarationNames(statement);\n const expressions = declarationExpressions(statement);\n if (names.length === 0 || expressions.length === 0) continue;\n\n for (let index = 0; index < names.length; index += 1) {\n const name = names[index];\n const expression = expressions[index] ?? expressions[0];\n if (!expression) continue;\n const calls = directCallsInExpression(expression);\n if (calls.length === 0) continue;\n\n const directHook = calls.find((call) => isCustomHookCall(call, context));\n if (directHook && expression.type === \"function_call\") {\n const path = context.resolveCallPath(context.getCallPath(directHook) ?? \"\");\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n const likelyHandle = HANDLE_VALUE_NAME.test(name) || HANDLE_HOOK_NAME.test(final) || isCalledAsFunction(owner, name, context);\n if (likelyHandle) {\n hints.memberHandleRoots.add(name);\n hints.likelyHandleRoots.add(name);\n }\n continue;\n }\n\n if (expression.type === \"table_constructor\") {\n const meaningfulCalls = calls.filter((call) => {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n return !/^(?:Color3|Vector2|Vector3|UDim|UDim2|CFrame|TweenInfo|NumberSequence|ColorSequence)\\./.test(path);\n });\n const allHandleHooks = meaningfulCalls.length > 0 && meaningfulCalls.every((call) => {\n if (!isCustomHookCall(call, context)) return false;\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n return HANDLE_HOOK_NAME.test(final);\n });\n if (allHandleHooks) hints.compositeHandleRoots.add(name);\n }\n }\n }\n\n return hints;\n}\n\nfunction isAmbiguousCustomHookHandle(dependency: string, hints: CustomHookDependencyHints): boolean {\n const root = rootIdentifier(dependency);\n if (!root) return false;\n if (hints.compositeHandleRoots.has(root)) return true;\n if (hints.likelyHandleRoots.has(root)) return true;\n return hints.memberHandleRoots.has(root) && dependency !== root;\n}\n\n\nexport const exhaustiveDeps: RuleDefinition = {\n id: \"react-luau/exhaustive-deps\",\n category: \"Hooks\",\n severity: \"warning\",\n description: \"React hook dependency tables should include captured reactive render values.\",\n run(context: RuleContext) {\n const diagnostics: DiagnosticInput[] = [];\n const derivedDependenciesByOwner = new Map<number, Map<string, Set<string>>>();\n const dependencyHintsByOwner = new Map<number, CustomHookDependencyHints>();\n const memoizedProducersByOwner = new Map<number, Map<string, Set<string>>>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n if (!rawPath) continue;\n const path = context.resolveCallPath(rawPath);\n const shape = HOOK_ARGUMENTS.get(path);\n if (!shape) continue;\n\n const args = context.callArguments(call);\n const callback = args[shape.callbackIndex];\n const deps = args[shape.depsIndex];\n if (!callback || callback.type !== \"function_definition\" || !deps || deps.type !== \"table_constructor\") continue;\n\n const owner = context.nearestFunction(call);\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n const ownerKey = nodeKey(owner.node);\n const available = context.model.componentLocals.get(ownerKey) ?? new Set<string>();\n const stableVariables = context.model.stableVariablesByFunction.get(ownerKey) ?? new Set<string>();\n const externallyMutableRoots = context.model.externalMutableVariablesByFunction.get(ownerKey) ?? new Set<string>();\n const functionExpandedCaptures = expandLocalFunctionCaptures(\n capturedDependencyPaths(callback, available, stableVariables, externallyMutableRoots),\n owner,\n available,\n stableVariables,\n externallyMutableRoots,\n context,\n );\n const dependencies = dependencyPaths(deps);\n let derivedDependencies = derivedDependenciesByOwner.get(ownerKey);\n if (!derivedDependencies) {\n derivedDependencies = derivedLocalDependencies(owner, available, stableVariables, externallyMutableRoots, context);\n derivedDependenciesByOwner.set(ownerKey, derivedDependencies);\n }\n const captured = expandDerivedLocalCaptures(\n functionExpandedCaptures,\n derivedDependencies,\n dependencies,\n );\n const missing = minimalMissingDependencies(captured, dependencies);\n if (missing.length === 0) continue;\n\n if (hasDynamicUnpackDependencies(deps, context)) {\n diagnostics.push({\n node: tableStartNode(deps),\n severity: \"suggestion\",\n message: `${path} uses dynamic unpack(...) dependencies, so exhaustive dependency analysis is partial.`,\n help: \"The analyzer cannot prove which values unpack(...) contributes. Review the explicit dependencies and the custom hook contract.\",\n });\n continue;\n }\n\n let hints = dependencyHintsByOwner.get(ownerKey);\n if (!hints) {\n hints = customHookDependencyHints(owner, context);\n dependencyHintsByOwner.set(ownerKey, hints);\n }\n let memoizedProducers = memoizedProducersByOwner.get(ownerKey);\n if (!memoizedProducers) {\n memoizedProducers = memoizedProducerDependencies(owner, context);\n memoizedProducersByOwner.set(ownerKey, memoizedProducers);\n }\n const uncertainHandles = missing.filter((dependency) => isAmbiguousCustomHookHandle(dependency, hints));\n const transitivelyCoveredMemoized = missing.filter((dependency) =>\n !isAmbiguousCustomHookHandle(dependency, hints)\n && isTransitivelyCoveredMemoizedValue(dependency, memoizedProducers, dependencies)\n );\n const reactiveMissing = missing.filter((dependency) =>\n !isAmbiguousCustomHookHandle(dependency, hints)\n && !isTransitivelyCoveredMemoizedValue(dependency, memoizedProducers, dependencies)\n );\n\n if (reactiveMissing.length > 0) {\n diagnostics.push({\n node: tableStartNode(deps),\n message: `${path} dependency table is missing ${reactiveMissing.join(\", \")}.`,\n help: `Add ${reactiveMissing.join(\", \")} to the dependency table, or stop capturing ${reactiveMissing.length === 1 ? \"that value\" : \"those values\"} in the callback.`,\n });\n }\n\n if (transitivelyCoveredMemoized.length > 0) {\n diagnostics.push({\n node: tableStartNode(deps),\n severity: \"suggestion\",\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.`,\n help: \"The producing memo dependencies are already covered. Listing the memoized value directly can make the dependency relationship clearer.\",\n });\n }\n\n if (uncertainHandles.length > 0) {\n diagnostics.push({\n node: tableStartNode(deps),\n severity: \"suggestion\",\n message: `${path} captures custom-hook handle ${uncertainHandles.join(\", \")} without listing ${uncertainHandles.length === 1 ? \"it as a dependency\" : \"them as dependencies\"}.`,\n help: \"The analyzer cannot prove this custom-hook return is stable. Check the hook contract before changing the dependency table.\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n",
25
+ "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\nimport { nodeKey, rootIdentifier } from \"../ast/walk\";\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(context: RuleContext, call: SyntaxNode): FunctionInfo | null {\n const owner = context.nearestFunction(call);\n return owner && (owner.isComponent || owner.isHook) ? owner : null;\n}\n\nfunction effectCallbackWithoutDeps(context: RuleContext, call: SyntaxNode): SyntaxNode | null {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (!isEffectPath(path)) return null;\n const args = context.callArguments(call);\n const callback = args[0];\n if (callback?.type !== \"function_definition\") return null;\n if (args.length < 2 || args[1]?.type === \"nil\") return callback;\n return null;\n}\n\nfunction callbackAndDeps(context: RuleContext, call: SyntaxNode): { callback: SyntaxNode; deps: SyntaxNode } | null {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const args = context.callArguments(call);\n if (path === \"React.useImperativeHandle\") {\n const callback = args[1];\n const deps = args[2];\n if (callback?.type === \"function_definition\" && deps?.type === \"table_constructor\") return { callback, deps };\n return null;\n }\n const callback = args[0];\n const deps = args[1];\n if (callback?.type === \"function_definition\" && deps?.type === \"table_constructor\") return { callback, deps };\n return null;\n}\n\nfunction directTopLevelCalls(context: RuleContext, callback: SyntaxNode): SyntaxNode[] {\n const info = functionInfoForNode(context, callback);\n if (!info?.body) return [];\n return info.body.namedChildren.filter((child) => child.type === \"function_call\");\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 return false;\n}\n\nfunction hasExternalSubscription(node: SyntaxNode, context: RuleContext): boolean {\n for (const child of context.walk(node)) {\n if (child.type !== \"function_call\") continue;\n const path = context.getCallPath(child) ?? \"\";\n if (/:Connect$/.test(path) || /BindToRenderStep$/.test(path) || /:BindAction(?:AtPriority)?$/.test(path)) return true;\n }\n return false;\n}\n\nfunction directLocalInitializer(owner: FunctionInfo, name: string): SyntaxNode | null {\n if (!owner.body) return null;\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const assignment = statement.namedChildren.find((child) => child.type === \"assignment_statement\");\n const variableList = assignment?.namedChildren.find((child) => child.type === \"variable_list\");\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\n const names = variableList?.namedChildren.filter((child) => child.type === \"identifier\") ?? [];\n const expressions = expressionList?.namedChildren ?? [];\n const index = names.findIndex((child) => child.text === name);\n if (index >= 0) return expressions[index] ?? expressions[0] ?? null;\n }\n return null;\n}\n\nfunction setterCalledOutsideCallback(context: RuleContext, owner: FunctionInfo, callback: SyntaxNode, setterName: string): boolean {\n if (!owner.body) return false;\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"function_call\" || context.getCallPath(node) !== setterName) continue;\n if (node.startIndex >= callback.startIndex && node.endIndex <= callback.endIndex) continue;\n return true;\n }\n return false;\n}\n\nfunction guaranteedRepeatedStateChange(argument: SyntaxNode, stateName: string, context: RuleContext): 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 const returnStatement = updater?.body?.namedChildren.find((child) => child.type === \"return_statement\");\n const returnValue = returnStatement?.namedChildren[0];\n if (previousName && returnValue && guaranteedRepeatedStateChange(returnValue, previousName, context)) return true;\n return false;\n }\n\n const text = argument.text.trim();\n const escaped = stateName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (new RegExp(`^not\\\\s+${escaped}$`).test(text)) return true;\n if (new RegExp(`^${escaped}\\\\s*[+-]\\\\s*(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)$`).test(text)) return true;\n if (new RegExp(`^(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)\\\\s*\\\\+\\\\s*${escaped}$`).test(text)) return true;\n\n if (argument.type === \"function_call\") {\n const path = context.resolveCallPath(context.getCallPath(argument) ?? \"\");\n if (path === \"table.clone\" || path === \"table.create\" || path === \"table.pack\") return true;\n }\n\n return false;\n}\n\nfunction freshDependencyKind(node: SyntaxNode, owner: FunctionInfo): string | null {\n if (node.type === \"table_constructor\") return \"table\";\n if (node.type === \"function_definition\") return \"function\";\n\n if (node.type === \"identifier\") {\n const initializer = directLocalInitializer(owner, node.text);\n if (initializer?.type === \"table_constructor\") return \"table\";\n if (initializer?.type === \"function_definition\") return \"function\";\n }\n\n return null;\n}\n\nexport const noDerivedStateEffect: RuleDefinition = {\n id: \"react-luau/no-derived-state-effect\",\n category: \"Effects\",\n severity: \"warning\",\n description: \"Avoid copying render-known derived values into state from an effect.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (!isEffectPath(path)) continue;\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n if (!owner || !parts) continue;\n if (hasExternalSubscription(parts.callback, context)) continue;\n const available = context.model.componentLocals.get(nodeKey(owner.node)) ?? new Set(owner.parameters);\n const bindings = stateBindingsFor(context, owner);\n const setterToValue = new Map(bindings.map((binding) => [binding.setterName, binding.valueName]));\n\n for (const setterCall of directTopLevelCalls(context, parts.callback)) {\n const setter = context.getCallPath(setterCall) ?? \"\";\n const targetState = setterToValue.get(setter);\n if (!targetState) continue;\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)) continue;\n const argument = context.callArguments(setterCall)[0];\n if (!argument || argument.type === \"function_definition\" || hasCall(argument, context)) continue;\n\n const sourceNames = [...available].filter((name) => name !== targetState && containsUnshadowedIdentifier(argument, name, context, owner));\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 help: \"Compute the value during render when it is fully derived from render-known inputs.\",\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 description: \"Effects should not unconditionally update state in a way that schedules themselves again.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (!isEffectPath(path)) continue;\n const owner = ownerForHook(context, call);\n if (!owner) continue;\n\n const parts = callbackAndDeps(context, call);\n if (parts) {\n const deps = parseDependencyRoots(parts.deps);\n for (const binding of stateBindingsFor(context, owner)) {\n if (!deps.has(binding.valueName)) continue;\n for (const setterCall of directTopLevelCalls(context, parts.callback)) {\n if (context.getCallPath(setterCall) !== binding.setterName) continue;\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 continue;\n }\n\n const callback = effectCallbackWithoutDeps(context, call);\n if (!callback) continue;\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 const argument = context.callArguments(setterCall)[0];\n if (!argument || !guaranteedRepeatedStateChange(argument, binding.valueName, context)) continue;\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 description: \"Dependency tables should not contain tables or functions recreated on every render.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (!HOOKS_WITH_DEPS.has(path)) continue;\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n if (!owner || !parts) continue;\n\n for (const dependency of dependencyExpressions(parts.deps)) {\n const kind = freshDependencyKind(dependency, owner);\n if (!kind) continue;\n const label = dependency.type === \"identifier\" ? ` ${dependency.text}` : \"\";\n diagnostics.push({\n node: dependency,\n message: `${path} depends on${label || \" an inline value\"} that is a new ${kind} on every render.`,\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 description: \"Mutable ref.current values do not belong in hook dependency tables.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (!HOOKS_WITH_DEPS.has(path)) continue;\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n if (!owner || !parts) continue;\n const refs = context.model.refVariablesByFunction.get(nodeKey(owner.node)) ?? new Set<string>();\n\n for (const dependency of dependencyExpressions(parts.deps)) {\n const root = rootIdentifier(dependency.text);\n if (!root || !refs.has(root)) continue;\n if (!new RegExp(`^${root.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\s*\\\\.\\\\s*current\\\\b`).test(dependency.text.trim())) continue;\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",
26
+ "import type { SyntaxNode } from \"../syntax\";\nimport type { DiagnosticInput, FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\nimport { nodeKey, normalizeExpressionText, parameterBindingNames, rootIdentifier, sameNode } from \"../ast/walk\";\nimport { mutableDependencyBase } from \"../roblox-semantics\";\nimport { declarationNames, dependencyExpressions, tableStartNode } from \"./helpers\";\n\nconst GLOBALS = new Set([\n \"game\", \"workspace\", \"script\", \"shared\", \"Enum\", \"Instance\", \"task\", \"coroutine\", \"debug\", \"os\", \"utf8\", \"buffer\", \"bit32\",\n \"math\", \"string\", \"table\", \"pairs\", \"ipairs\", \"next\", \"pcall\", \"xpcall\", \"print\", \"warn\", \"error\", \"assert\", \"type\", \"typeof\",\n \"tonumber\", \"tostring\", \"select\", \"unpack\", \"rawget\", \"rawset\", \"rawequal\", \"setmetatable\", \"getmetatable\", \"Vector2\", \"Vector3\", \"UDim\",\n \"UDim2\", \"CFrame\", \"Color3\", \"BrickColor\", \"Rect\", \"Region3\", \"Ray\", \"TweenInfo\", \"NumberRange\", \"NumberSequence\", \"ColorSequence\",\n \"DateTime\", \"Random\", \"Axes\", \"Faces\", \"PhysicalProperties\", \"RaycastParams\", \"OverlapParams\", \"DockWidgetPluginGuiInfo\",\n]);\n\nconst HOOK_ARGUMENTS = new Map<string, { callbackIndex: number; depsIndex: number }>([\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\nfunction parameterNames(functionNode: SyntaxNode): Set<string> {\n return new Set(parameterBindingNames(functionNode.childForFieldName(\"parameters\")));\n}\n\nfunction* descendants(node: SyntaxNode): Iterable<SyntaxNode> {\n yield node;\n for (const child of node.namedChildren) yield* descendants(child);\n}\n\nconst TYPE_ONLY_NODES = new Set([\n \"type_definition\",\n \"type_annotation\",\n \"type_parameters\",\n \"generic_type_list\",\n \"generic_type\",\n \"function_type\",\n \"optional_type\",\n \"object_type\",\n \"union_type\",\n \"intersection_type\",\n \"tuple_type\",\n \"singleton_type\",\n \"variadic_type\",\n \"variadic_type_pack\",\n]);\n\nfunction isTypeOnlyChild(parent: SyntaxNode, child: SyntaxNode): boolean {\n if (TYPE_ONLY_NODES.has(child.type)) return true;\n if (TYPE_ONLY_NODES.has(parent.type)) return true;\n\n if (parent.type === \"parameter\") {\n return !sameNode(parent.namedChildren.find((candidate) => candidate.type === \"identifier\"), child);\n }\n\n if (parent.type === \"cast_expression\" || parent.type === \"type_cast_expression\") {\n return !sameNode(parent.namedChildren[0], child);\n }\n\n if (parent.type === \"function_definition\" || parent.type === \"function_declaration\") {\n const name = parent.childForFieldName(\"name\");\n const parameters = parent.childForFieldName(\"parameters\");\n const body = parent.childForFieldName(\"body\");\n if (sameNode(child, name) || sameNode(child, parameters) || sameNode(child, body)) return false;\n return true;\n }\n\n if (parent.type === \"variable_list\" && parent.parent?.parent?.type === \"variable_declaration\") {\n return true;\n }\n\n return false;\n}\n\nfunction* runtimeDescendants(node: SyntaxNode): Iterable<SyntaxNode> {\n yield node;\n for (const child of node.namedChildren) {\n if (isTypeOnlyChild(node, child)) continue;\n yield* runtimeDescendants(child);\n }\n}\n\nfunction directBlockBindingNames(block: SyntaxNode, beforeIndex: number): Set<string> {\n const names = new Set<string>();\n for (const child of block.namedChildren) {\n if (child.startIndex >= beforeIndex) continue;\n if (child.type === \"variable_declaration\") {\n for (const name of declarationNames(child)) names.add(name);\n } else if (child.type === \"function_declaration\") {\n const name = child.childForFieldName(\"name\")?.text;\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) names.add(name);\n }\n }\n return names;\n}\n\nfunction loopBindingNames(loop: SyntaxNode): Set<string> {\n const names = new Set<string>();\n const header = loop.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\n const numeric = header.match(/^\\s*for\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=/s);\n if (numeric) names.add(numeric[1]);\n const generic = header.match(/^\\s*for\\s+(.+?)\\s+in\\b/s);\n if (generic) {\n for (const part of generic[1].split(\",\")) {\n const name = part.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (name) names.add(name);\n }\n }\n return names;\n}\n\nfunction isLocallyBoundOccurrence(identifier: SyntaxNode, callback: SyntaxNode, name: string): boolean {\n if (parameterNames(callback).has(name)) return true;\n\n let current = identifier.parent;\n while (current && !sameNode(current, callback)) {\n if ((current.type === \"function_definition\" || current.type === \"function_declaration\") && parameterNames(current).has(name)) {\n return true;\n }\n if (current.type === \"block\" && directBlockBindingNames(current, identifier.startIndex).has(name)) return true;\n if (current.type === \"for_statement\" && loopBindingNames(current).has(name)) return true;\n current = current.parent;\n }\n return false;\n}\n\nfunction isPropertyName(node: SyntaxNode): boolean {\n const parent = node.parent;\n if (!parent) return false;\n if (parent.type === \"dot_index_expression\") return sameNode(parent.childForFieldName(\"field\"), node);\n if (parent.type === \"method_index_expression\") return sameNode(parent.childForFieldName(\"method\"), node) || sameNode(parent.namedChildren.at(-1), node);\n // `fieldName = value` uses fieldName as a table key, not as a captured value.\n // Without this, a coincidentally named component local can create a fake dep.\n if (parent.type === \"field\" && !parent.text.trim().startsWith(\"[\")) {\n return sameNode(parent.childForFieldName(\"name\"), node);\n }\n return false;\n}\n\nfunction outermostDotPath(node: SyntaxNode): boolean {\n const parent = node.parent;\n return !(parent?.type === \"dot_index_expression\" && sameNode(parent.namedChildren[0], node));\n}\n\nfunction rootIdentifierNode(node: SyntaxNode, root: string): SyntaxNode | null {\n for (const candidate of descendants(node)) {\n if (candidate.type !== \"identifier\" || candidate.text !== root) continue;\n if (isPropertyName(candidate)) continue;\n return candidate;\n }\n return null;\n}\n\nfunction normalizeCapturedPath(\n path: string,\n stableVariables: Set<string>,\n externallyMutableRoots: Set<string>,\n): string | null {\n const normalized = normalizeExpressionText(path);\n const root = rootIdentifier(normalized);\n if (!root) return normalized;\n\n const mutableBase = mutableDependencyBase(normalized, externallyMutableRoots);\n if (mutableBase === \"\") return null;\n if (mutableBase) {\n const baseRoot = rootIdentifier(mutableBase);\n if (baseRoot && stableVariables.has(baseRoot)) return null;\n return mutableBase;\n }\n\n return normalized;\n}\n\nfunction capturedDependencyPaths(\n callback: SyntaxNode,\n available: Set<string>,\n stableVariables: Set<string>,\n externallyMutableRoots: Set<string>,\n): Set<string> {\n const captured = new Set<string>();\n\n for (const node of runtimeDescendants(callback)) {\n if (node.type === \"dot_index_expression\" && outermostDotPath(node)) {\n const root = rootIdentifier(node.text);\n if (!root || !available.has(root) || GLOBALS.has(root) || stableVariables.has(root)) continue;\n const rootNode = rootIdentifierNode(node, root);\n if (!rootNode || isLocallyBoundOccurrence(rootNode, callback, root)) continue;\n const capture = normalizeCapturedPath(node.text, stableVariables, externallyMutableRoots);\n if (capture) captured.add(capture);\n continue;\n }\n\n if (node.type !== \"identifier\" || isPropertyName(node)) continue;\n const parent = node.parent;\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.namedChildren[0], node)) continue;\n const name = node.text;\n if (!available.has(name) || GLOBALS.has(name) || stableVariables.has(name)) continue;\n if (isLocallyBoundOccurrence(node, callback, name)) continue;\n captured.add(name);\n }\n\n return captured;\n}\n\nfunction localFunctionNode(owner: FunctionInfo, name: string, context: RuleContext): SyntaxNode | null {\n if (!owner.body) return null;\n for (const statement of owner.body.namedChildren) {\n if (statement.type === \"function_declaration\" && statement.childForFieldName(\"name\")?.text === name) return statement;\n if (statement.type !== \"variable_declaration\" || !declarationNames(statement).includes(name)) continue;\n const prefix = statement.text.split(\"=\", 1)[0] ?? \"\";\n if (!new RegExp(`\\b${name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\b`).test(prefix)) continue;\n const fn = [...context.walk(statement)].find((node) => node.type === \"function_definition\");\n if (fn) return fn;\n }\n return null;\n}\n\nfunction expandLocalFunctionCaptures(\n captured: Set<string>,\n owner: FunctionInfo,\n available: Set<string>,\n stableVariables: Set<string>,\n externallyMutableRoots: Set<string>,\n context: RuleContext,\n): Set<string> {\n const result = new Set<string>();\n const visiting = new Set<string>();\n\n const addCapture = (capture: string): void => {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(capture)) {\n result.add(capture);\n return;\n }\n const fn = localFunctionNode(owner, capture, context);\n if (visiting.has(capture)) return;\n if (!fn) {\n result.add(capture);\n return;\n }\n\n visiting.add(capture);\n const inner = capturedDependencyPaths(fn, available, stableVariables, externallyMutableRoots);\n for (const dependency of inner) addCapture(dependency);\n visiting.delete(capture);\n };\n\n for (const capture of captured) addCapture(capture);\n return result;\n}\n\nfunction dependencyCoveragePath(node: SyntaxNode): string {\n if (node.type === \"cast_expression\" || node.type === \"type_cast_expression\" || node.type === \"parenthesized_expression\") {\n const expression = node.namedChildren[0];\n if (expression) return dependencyCoveragePath(expression);\n }\n\n if (node.type === \"binary_expression\") {\n const left = node.childForFieldName(\"left\") ?? node.namedChildren[0];\n const right = node.childForFieldName(\"right\") ?? node.namedChildren[1];\n const isOr = node.children.some((child) => child.type === \"or\");\n if (isOr && left && right?.type === \"false\") return dependencyCoveragePath(left);\n }\n\n return normalizeExpressionText(node.text);\n}\n\nfunction dependencyPaths(node: SyntaxNode): Set<string> {\n return new Set(dependencyExpressions(node).map(dependencyCoveragePath));\n}\n\nfunction transparentAliasPath(node: SyntaxNode): string | null {\n if (node.type === \"cast_expression\" || node.type === \"type_cast_expression\" || node.type === \"parenthesized_expression\") {\n const expression = node.namedChildren[0];\n return expression ? transparentAliasPath(expression) : null;\n }\n\n if (node.type !== \"identifier\" && node.type !== \"dot_index_expression\") return null;\n return normalizeExpressionText(node.text);\n}\n\nfunction immutableTransparentAliases(owner: FunctionInfo, context: RuleContext): Map<string, string> {\n const aliases = new Map<string, string>();\n if (!owner.body) return aliases;\n const mutated = mutatedOwnerLocals(owner, context);\n\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const names = declarationNames(statement);\n const expressions = declarationExpressions(statement);\n\n for (let index = 0; index < names.length; index += 1) {\n const name = names[index];\n const expression = expressions[index];\n if (!expression || mutated.has(name)) continue;\n const source = transparentAliasPath(expression);\n if (!source || source === name) continue;\n const sourceRoot = rootIdentifier(source);\n if (!sourceRoot || mutated.has(sourceRoot)) continue;\n aliases.set(name, source);\n }\n }\n\n return aliases;\n}\n\nfunction resolveAliasPath(path: string, aliases: Map<string, string>): string {\n let current = path;\n const visiting = new Set<string>();\n\n while (true) {\n const root = rootIdentifier(current);\n if (!root || visiting.has(root)) return current;\n const source = aliases.get(root);\n if (!source) return current;\n visiting.add(root);\n current = `${source}${current.slice(root.length)}`;\n }\n}\n\nfunction dependencyPathsWithAliases(\n node: SyntaxNode,\n aliases: Map<string, string>,\n): Set<string> {\n const dependencies = dependencyPaths(node);\n for (const dependency of [...dependencies]) {\n const resolved = resolveAliasPath(dependency, aliases);\n if (resolved !== dependency) dependencies.add(resolved);\n }\n return dependencies;\n}\n\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))$/;\n\nfunction isPureDerivedExpression(node: SyntaxNode, context: RuleContext): boolean {\n for (const candidate of context.walk(node)) {\n if (candidate !== node && (candidate.type === \"function_definition\" || candidate.type === \"function_declaration\")) return false;\n if (candidate.type !== \"function_call\") continue;\n const rawPath = context.getCallPath(candidate);\n if (!rawPath) return false;\n const path = normalizeExpressionText(context.resolveCallPath(rawPath));\n if (!PURE_DERIVED_CALL.test(path)) return false;\n }\n return true;\n}\n\nfunction mutatedOwnerLocals(owner: FunctionInfo, context: RuleContext): Set<string> {\n const mutated = new Set<string>();\n if (!owner.body) return mutated;\n\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"assignment_statement\" && node.type !== \"update_statement\") continue;\n if (node.parent?.type === \"variable_declaration\") continue;\n const variables = node.namedChildren.find((child) => child.type === \"variable_list\");\n if (!variables) continue;\n for (const variable of variables.namedChildren) {\n const root = rootIdentifier(normalizeExpressionText(variable.text));\n if (root) mutated.add(root);\n }\n }\n\n return mutated;\n}\n\nfunction derivedLocalDependencies(\n owner: FunctionInfo,\n available: Set<string>,\n stableVariables: Set<string>,\n externallyMutableRoots: Set<string>,\n context: RuleContext,\n): Map<string, Set<string>> {\n const derived = new Map<string, Set<string>>();\n if (!owner.body) return derived;\n const mutated = mutatedOwnerLocals(owner, context);\n\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const names = declarationNames(statement);\n const expressions = declarationExpressions(statement);\n if (names.length === 0 || expressions.length === 0) continue;\n\n for (let index = 0; index < names.length; index += 1) {\n const name = names[index];\n const expression = expressions[index] ?? expressions[0];\n if (!expression || mutated.has(name) || !isPureDerivedExpression(expression, context)) continue;\n derived.set(name, capturedDependencyPaths(expression, available, stableVariables, externallyMutableRoots));\n }\n }\n\n return derived;\n}\n\nfunction expandDerivedLocalCaptures(\n captured: Set<string>,\n derived: Map<string, Set<string>>,\n dependencies: Set<string>,\n): Set<string> {\n const result = new Set<string>();\n const visiting = new Set<string>();\n\n const addCapture = (capture: string): void => {\n if (dependencySatisfies(capture, dependencies)) {\n result.add(capture);\n return;\n }\n const root = rootIdentifier(capture);\n if (!root || !derived.has(root)) {\n result.add(capture);\n return;\n }\n if (visiting.has(root)) return;\n\n visiting.add(root);\n for (const dependency of derived.get(root) ?? []) addCapture(dependency);\n visiting.delete(root);\n };\n\n for (const capture of captured) addCapture(capture);\n return result;\n}\n\nfunction hasDynamicUnpackDependencies(node: SyntaxNode, context: RuleContext): boolean {\n for (const dependency of dependencyExpressions(node)) {\n for (const candidate of context.walk(dependency)) {\n if (candidate.type !== \"function_call\") continue;\n const rawPath = context.getCallPath(candidate);\n if (!rawPath) continue;\n const path = normalizeExpressionText(context.resolveCallPath(rawPath));\n if (path === \"unpack\" || path === \"table.unpack\") return true;\n }\n }\n return false;\n}\n\nfunction memoizedProducerDependencies(owner: FunctionInfo, context: RuleContext): Map<string, Set<string>> {\n const producers = new Map<string, Set<string>>();\n if (!owner.body) return producers;\n\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const names = declarationNames(statement);\n const expressions = declarationExpressions(statement);\n if (names.length === 0 || expressions.length === 0) continue;\n\n for (let index = 0; index < names.length; index += 1) {\n const name = names[index];\n const expression = expressions[index] ?? expressions[0];\n if (!expression || expression.type !== \"function_call\") continue;\n const rawPath = context.getCallPath(expression);\n if (!rawPath) continue;\n const path = context.resolveCallPath(rawPath);\n if (path !== \"React.useMemo\" && path !== \"React.useCallback\") continue;\n const args = context.callArguments(expression);\n const deps = args[1];\n if (!deps || deps.type !== \"table_constructor\" || hasDynamicUnpackDependencies(deps, context)) continue;\n producers.set(name, dependencyPaths(deps));\n }\n }\n\n return producers;\n}\n\nfunction isTransitivelyCoveredMemoizedValue(\n dependency: string,\n producers: Map<string, Set<string>>,\n dependencies: Set<string>,\n): boolean {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(dependency)) return false;\n const producerDependencies = producers.get(dependency);\n if (!producerDependencies) return false;\n return [...producerDependencies].every((producerDependency) => dependencySatisfies(producerDependency, dependencies));\n}\n\nfunction dependencySatisfies(captured: string, dependencies: Set<string>): boolean {\n for (const dependency of dependencies) {\n if (captured === dependency) return true;\n if (captured.startsWith(`${dependency}.`) || captured.startsWith(`${dependency}[`)) return true;\n }\n return false;\n}\n\nfunction minimalMissingDependencies(captured: Set<string>, dependencies: Set<string>): string[] {\n const missing = [...captured]\n .filter((name) => !dependencySatisfies(name, dependencies))\n .sort((left, right) => left.length - right.length || left.localeCompare(right));\n const result: string[] = [];\n for (const candidate of missing) {\n if (dependencySatisfies(candidate, new Set(result))) continue;\n result.push(candidate);\n }\n return result.sort();\n}\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\n return expressionList?.namedChildren ?? [];\n}\n\nfunction directCallsInExpression(node: SyntaxNode): SyntaxNode[] {\n const calls: SyntaxNode[] = [];\n const pending = [node];\n while (pending.length > 0) {\n const current = pending.pop()!;\n if (current !== node && (current.type === \"function_definition\" || current.type === \"function_declaration\")) continue;\n if (current.type === \"function_call\") calls.push(current);\n pending.push(...current.namedChildren);\n }\n return calls;\n}\n\nfunction isCustomHookCall(call: SyntaxNode, context: RuleContext): boolean {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n return !path.startsWith(\"React.\") && /^use[A-Z0-9_]/.test(final);\n}\n\ninterface CustomHookDependencyHints {\n memberHandleRoots: Set<string>;\n likelyHandleRoots: Set<string>;\n compositeHandleRoots: Set<string>;\n}\n\nconst HANDLE_VALUE_NAME = /(?:ref|binding|tween|spring|motion|animation|controller|handle|connection|signal)$/i;\nconst HANDLE_HOOK_NAME = /(?:Tween|Spring|Binding|Motion|Animated|Animation|Sound)$/i;\n\nfunction isCalledAsFunction(owner: FunctionInfo, name: string, context: RuleContext): boolean {\n if (!owner.body) return false;\n for (const call of context.walk(owner.body)) {\n if (call.type !== \"function_call\") continue;\n const path = normalizeExpressionText(context.getCallPath(call) ?? \"\");\n if (path === name) return true;\n }\n return false;\n}\n\nfunction customHookDependencyHints(owner: FunctionInfo, context: RuleContext): CustomHookDependencyHints {\n const hints: CustomHookDependencyHints = {\n memberHandleRoots: new Set<string>(),\n likelyHandleRoots: new Set<string>(),\n compositeHandleRoots: new Set<string>(),\n };\n if (!owner.body) return hints;\n\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const names = declarationNames(statement);\n const expressions = declarationExpressions(statement);\n if (names.length === 0 || expressions.length === 0) continue;\n\n for (let index = 0; index < names.length; index += 1) {\n const name = names[index];\n const expression = expressions[index] ?? expressions[0];\n if (!expression) continue;\n const calls = directCallsInExpression(expression);\n if (calls.length === 0) continue;\n\n const directHook = calls.find((call) => isCustomHookCall(call, context));\n if (directHook && expression.type === \"function_call\") {\n const path = context.resolveCallPath(context.getCallPath(directHook) ?? \"\");\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n const likelyHandle = HANDLE_VALUE_NAME.test(name) || HANDLE_HOOK_NAME.test(final) || isCalledAsFunction(owner, name, context);\n if (likelyHandle) {\n hints.memberHandleRoots.add(name);\n hints.likelyHandleRoots.add(name);\n }\n continue;\n }\n\n if (expression.type === \"table_constructor\") {\n const meaningfulCalls = calls.filter((call) => {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n return !/^(?:Color3|Vector2|Vector3|UDim|UDim2|CFrame|TweenInfo|NumberSequence|ColorSequence)\\./.test(path);\n });\n const allHandleHooks = meaningfulCalls.length > 0 && meaningfulCalls.every((call) => {\n if (!isCustomHookCall(call, context)) return false;\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n return HANDLE_HOOK_NAME.test(final);\n });\n if (allHandleHooks) hints.compositeHandleRoots.add(name);\n }\n }\n }\n\n return hints;\n}\n\nfunction isAmbiguousCustomHookHandle(dependency: string, hints: CustomHookDependencyHints): boolean {\n const root = rootIdentifier(dependency);\n if (!root) return false;\n if (hints.compositeHandleRoots.has(root)) return true;\n if (hints.likelyHandleRoots.has(root)) return true;\n return hints.memberHandleRoots.has(root) && dependency !== root;\n}\n\n\nexport const exhaustiveDeps: RuleDefinition = {\n id: \"react-luau/exhaustive-deps\",\n category: \"Hooks\",\n severity: \"warning\",\n description: \"React hook dependency tables should include captured reactive render values.\",\n run(context: RuleContext) {\n const diagnostics: DiagnosticInput[] = [];\n const derivedDependenciesByOwner = new Map<number, Map<string, Set<string>>>();\n const dependencyHintsByOwner = new Map<number, CustomHookDependencyHints>();\n const memoizedProducersByOwner = new Map<number, Map<string, Set<string>>>();\n const transparentAliasesByOwner = new Map<number, Map<string, string>>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n if (!rawPath) continue;\n const path = context.resolveCallPath(rawPath);\n const shape = HOOK_ARGUMENTS.get(path);\n if (!shape) continue;\n\n const args = context.callArguments(call);\n const callback = args[shape.callbackIndex];\n const deps = args[shape.depsIndex];\n if (!callback || callback.type !== \"function_definition\" || !deps || deps.type !== \"table_constructor\") continue;\n\n const owner = context.nearestFunction(call);\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n const ownerKey = nodeKey(owner.node);\n const available = context.model.componentLocals.get(ownerKey) ?? new Set<string>();\n const stableVariables = context.model.stableVariablesByFunction.get(ownerKey) ?? new Set<string>();\n const externallyMutableRoots = context.model.externalMutableVariablesByFunction.get(ownerKey) ?? new Set<string>();\n const functionExpandedCaptures = expandLocalFunctionCaptures(\n capturedDependencyPaths(callback, available, stableVariables, externallyMutableRoots),\n owner,\n available,\n stableVariables,\n externallyMutableRoots,\n context,\n );\n let transparentAliases = transparentAliasesByOwner.get(ownerKey);\n if (!transparentAliases) {\n transparentAliases = immutableTransparentAliases(owner, context);\n transparentAliasesByOwner.set(ownerKey, transparentAliases);\n }\n const dependencies = dependencyPathsWithAliases(deps, transparentAliases);\n let derivedDependencies = derivedDependenciesByOwner.get(ownerKey);\n if (!derivedDependencies) {\n derivedDependencies = derivedLocalDependencies(owner, available, stableVariables, externallyMutableRoots, context);\n derivedDependenciesByOwner.set(ownerKey, derivedDependencies);\n }\n const captured = expandDerivedLocalCaptures(\n functionExpandedCaptures,\n derivedDependencies,\n dependencies,\n );\n const missing = minimalMissingDependencies(captured, dependencies);\n if (missing.length === 0) continue;\n\n if (hasDynamicUnpackDependencies(deps, context)) {\n diagnostics.push({\n node: tableStartNode(deps),\n severity: \"suggestion\",\n message: `${path} uses dynamic unpack(...) dependencies, so exhaustive dependency analysis is partial.`,\n help: \"The analyzer cannot prove which values unpack(...) contributes. Review the explicit dependencies and the custom hook contract.\",\n });\n continue;\n }\n\n let hints = dependencyHintsByOwner.get(ownerKey);\n if (!hints) {\n hints = customHookDependencyHints(owner, context);\n dependencyHintsByOwner.set(ownerKey, hints);\n }\n let memoizedProducers = memoizedProducersByOwner.get(ownerKey);\n if (!memoizedProducers) {\n memoizedProducers = memoizedProducerDependencies(owner, context);\n memoizedProducersByOwner.set(ownerKey, memoizedProducers);\n }\n const uncertainHandles = missing.filter((dependency) => isAmbiguousCustomHookHandle(dependency, hints));\n const transitivelyCoveredMemoized = missing.filter((dependency) =>\n !isAmbiguousCustomHookHandle(dependency, hints)\n && isTransitivelyCoveredMemoizedValue(dependency, memoizedProducers, dependencies)\n );\n const reactiveMissing = missing.filter((dependency) =>\n !isAmbiguousCustomHookHandle(dependency, hints)\n && !isTransitivelyCoveredMemoizedValue(dependency, memoizedProducers, dependencies)\n );\n\n if (reactiveMissing.length > 0) {\n diagnostics.push({\n node: tableStartNode(deps),\n message: `${path} dependency table is missing ${reactiveMissing.join(\", \")}.`,\n help: `Add ${reactiveMissing.join(\", \")} to the dependency table, or stop capturing ${reactiveMissing.length === 1 ? \"that value\" : \"those values\"} in the callback.`,\n });\n }\n\n if (transitivelyCoveredMemoized.length > 0) {\n diagnostics.push({\n node: tableStartNode(deps),\n severity: \"suggestion\",\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.`,\n help: \"The producing memo dependencies are already covered. Listing the memoized value directly can make the dependency relationship clearer.\",\n });\n }\n\n if (uncertainHandles.length > 0) {\n diagnostics.push({\n node: tableStartNode(deps),\n severity: \"suggestion\",\n message: `${path} captures custom-hook handle ${uncertainHandles.join(\", \")} without listing ${uncertainHandles.length === 1 ? \"it as a dependency\" : \"them as dependencies\"}.`,\n help: \"The analyzer cannot prove this custom-hook return is stable. Check the hook contract before changing the dependency table.\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n",
26
27
  "import type { SyntaxNode } from \"../syntax\";\nimport type { RuleContext, RuleDefinition } from \"../types\";\nimport { assignmentLeft, fieldName, fieldValue } from \"./helpers\";\n\nfunction loopIndex(text: string): string | null {\n const numeric = text.match(/^\\s*for\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=/s);\n if (numeric) return numeric[1];\n\n const generic = text.match(/^\\s*for\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*,/s);\n const candidate = generic?.[1] ?? null;\n // Single-letter keys are frequently dictionary keys in Luau, not array positions.\n return candidate && /^(?:idx|index|position)$/i.test(candidate) ? candidate : null;\n}\n\nfunction assignmentAncestor(call: SyntaxNode, loop: SyntaxNode): SyntaxNode | null {\n let current = call.parent;\n while (current && current.startIndex >= loop.startIndex && current.endIndex <= loop.endIndex) {\n if (current.type === \"assignment_statement\") return current;\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return null;\n current = current.parent;\n }\n return null;\n}\n\nfunction createElementCallsInLoop(context: RuleContext, loop: SyntaxNode): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n for (const node of context.walk(loop)) {\n if (node.type !== \"function_call\") continue;\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\n if (path === \"React.createElement\") result.push(node);\n }\n return result;\n}\n\nexport const noArrayIndexAsKey: RuleDefinition = {\n id: \"react-luau/no-array-index-as-key\",\n category: \"Correctness\",\n severity: \"suggestion\",\n description: \"Review dynamic React children that use their current array position as identity.\",\n run(context) {\n const diagnostics = [];\n\n for (const node of context.walk()) {\n if (node.type !== \"for_statement\") continue;\n const index = loopIndex(node.text);\n if (!index) continue;\n const escaped = index.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const keyProp = new RegExp(`\\\\bkey\\\\s*=\\\\s*${escaped}\\\\b`);\n const indexedTarget = new RegExp(`\\\\[\\\\s*${escaped}\\\\s*\\\\]\\\\s*$`);\n\n const highlights: SyntaxNode[] = [];\n for (const call of createElementCallsInLoop(context, node)) {\n const props = context.callArguments(call)[1];\n if (props?.type === \"table_constructor\" && keyProp.test(props.text)) {\n const keyField = props.namedChildren.find((field) =>\n field.type === \"field\" && fieldName(field) === \"key\" && fieldValue(field)?.text.trim() === index\n );\n highlights.push(fieldValue(keyField ?? props) ?? keyField ?? props);\n }\n\n const assignment = assignmentAncestor(call, node);\n if (assignment && indexedTarget.test(assignmentLeft(assignment.text))) {\n const indexNode = [...context.walk(assignment)].find((candidate) =>\n candidate.type === \"identifier\" && candidate.text === index && candidate.startIndex < call.startIndex\n );\n highlights.push(indexNode ?? assignment);\n }\n }\n\n if (highlights.length === 0) continue;\n diagnostics.push({\n node: highlights[0],\n highlights,\n message: `Loop index ${index} is used as React child identity.`,\n help: \"Use a stable item key when children can be inserted, removed, reordered, or kept alive for exit animation.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
27
28
  "import type { RuleDefinition } from \"../types\";\nimport { callNameNode } from \"./helpers\";\n\nexport const noCreateContextInRender: RuleDefinition = {\n id: \"react-luau/no-create-context-in-render\",\n category: \"Correctness\",\n severity: \"error\",\n description: \"React contexts must have stable identity and should not be created during render.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (path !== \"React.createContext\") continue;\n const owner = context.nearestFunction(call);\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n if (!context.isDirectlyExecutedInFunction(call, owner)) continue;\n\n diagnostics.push({\n node: callNameNode(call),\n message: `React.createContext() is called during ${owner.isHook ? \"hook\" : \"component\"} render${owner.name ? ` in ${owner.name}` : \"\"}.`,\n help: \"Create the context once at module scope so providers and consumers keep the same context identity.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
28
29
  "import type { FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\n\nfunction enclosingComponent(context: RuleContext, candidate: FunctionInfo): FunctionInfo | null {\n let current = candidate.node.parent;\n while (current) {\n const info = context.model.functionByNode.get(current.id);\n if (info?.isComponent) return info;\n current = current.parent;\n }\n return null;\n}\n\nfunction isRenderedBy(context: RuleContext, component: FunctionInfo, name: string): boolean {\n if (!component.body) return false;\n for (const call of context.walk(component.body)) {\n if (call.type !== \"function_call\") continue;\n if (context.nearestFunction(call) !== component) continue;\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (path !== \"React.createElement\") continue;\n if (context.callArguments(call)[0]?.text.trim() === name) return true;\n }\n return false;\n}\n\n\nfunction componentNameNode(context: RuleContext, candidate: FunctionInfo): FunctionInfo[\"node\"] {\n const direct = candidate.node.childForFieldName(\"name\");\n if (direct) return direct;\n let current = candidate.node.parent;\n while (current && current.type !== \"variable_declaration\" && current.type !== \"function_declaration\") current = current.parent;\n if (current) {\n const identifier = [...context.walk(current)].find((node) =>\n node.type === \"identifier\" && node.text === candidate.name && node.startIndex < candidate.node.startIndex\n );\n if (identifier) return identifier;\n }\n return candidate.node;\n}\n\nexport const noNestedComponentDefinition: RuleDefinition = {\n id: \"react-luau/no-nested-component-definition\",\n category: \"Architecture\",\n severity: \"warning\",\n description: \"Do not define rendered component types inside another component.\",\n run(context) {\n const diagnostics = [];\n\n for (const candidate of context.model.functions) {\n if (!candidate.isComponent || !candidate.name || !/^[A-Z]/.test(candidate.name)) continue;\n const parent = enclosingComponent(context, candidate);\n if (!parent || !isRenderedBy(context, parent, candidate.name)) continue;\n\n diagnostics.push({\n node: componentNameNode(context, candidate),\n message: `${candidate.name} is defined inside ${parent.name ?? \"another component\"} and rendered as a component type.`,\n help: \"Move the nested component to module scope. Recreating a component type on each parent render can remount it and discard its local state.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
29
- "import path from \"node:path\";\n\nexport interface ModuleIdentity {\n id: string;\n keys: string[];\n}\n\nfunction normalizeRelative(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nexport function moduleKeys(relativePath: string): string[] {\n let normalized = normalizeRelative(relativePath).replace(/\\.(?:lua|luau)$/i, \"\");\n if (normalized.endsWith(\"/init\")) normalized = normalized.slice(0, -\"/init\".length);\n const segments = normalized.split(\"/\").filter(Boolean);\n if (segments[0]?.toLowerCase() === \"src\") segments.shift();\n\n const keys = new Set<string>();\n for (let index = 0; index < segments.length; index += 1) {\n const suffix = segments.slice(index).join(\".\").toLowerCase();\n if (suffix) keys.add(suffix);\n }\n return [...keys];\n}\n\nexport function normalizeRequireTarget(text: string): string {\n return (text.match(/[A-Za-z_][A-Za-z0-9_]*/g) ?? []).join(\".\").toLowerCase();\n}\n\n/**\n * Builds feature aliases only when an alias uniquely identifies one module in\n * the entire project. This prevents basename collisions and overlapping names\n * when one module name is merely a suffix of another or when multiple\n * directories contain modules with the same basename.\n */\nexport function buildUniqueFeatureAliases<T>(\n modules: ModuleIdentity[],\n featureByModuleId: Map<string, T>,\n): Map<string, T> {\n const owners = new Map<string, Set<string>>();\n for (const module of modules) {\n for (const key of module.keys) {\n const ids = owners.get(key) ?? new Set<string>();\n ids.add(module.id);\n owners.set(key, ids);\n }\n }\n\n const aliases = new Map<string, T>();\n for (const module of modules) {\n const value = featureByModuleId.get(module.id);\n if (value === undefined) continue;\n for (const key of module.keys) {\n const ids = owners.get(key);\n if (ids?.size === 1 && ids.has(module.id)) aliases.set(key, value);\n }\n }\n return aliases;\n}\n\nexport function resolveModuleReference<T>(target: string, aliases: Map<string, T>): T | null {\n // Module aliases are segment suffixes (for example `foo.bar` and `bar`).\n // Walk those suffixes directly instead of scanning every alias in the project\n // for every require expression. The first hit is necessarily the longest one.\n let candidate = target;\n while (true) {\n if (aliases.has(candidate)) return aliases.get(candidate)!;\n const separator = candidate.indexOf(\".\");\n if (separator < 0) return null;\n candidate = candidate.slice(separator + 1);\n }\n}\n",
30
30
  "import type { SyntaxNode } from \"../syntax\";\nimport { moduleKeys, normalizeRequireTarget, resolveModuleReference } from \"../module-resolution\";\nimport { normalizeExpressionText, 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: \"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 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 if (seen.has(key)) return { kind: \"unknown\" };\n seen.add(key);\n\n const binding = visibleBinding(name, atNode, owner);\n if (binding) {\n const state = stateBindingForName(context, owner, name, binding.node);\n if (state) return { kind: \"state\", binding: state };\n if (!binding.expression) return { kind: \"unknown\" };\n return resolveExpressionOriginInternal(context, binding.expression, owner, seen);\n }\n\n if (owner.isComponent && owner.parameters[0] === name) return { kind: \"props\", name };\n return { kind: \"unknown\" };\n}\n\nfunction resolveExpressionOriginInternal(\n context: RuleContext,\n expression: SyntaxNode,\n owner: FunctionInfo,\n seen: Set<string>,\n): MutationValueOrigin {\n if (freshExpression(context, expression)) return { kind: \"fresh\" };\n const root = rootIdentifier(expression.text);\n if (!root) return { kind: \"unknown\" };\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",
31
31
  "import type { RuleDefinition } from \"../types\";\nimport { assignmentLeft, assignmentTargetNode, callNameNode, isBindingShadowedBetween } from \"./helpers\";\nimport { mightMutateParameters, mutatedParameterIndexesForCall, mutationOriginForExpression } from \"./parameter-mutations\";\n\nexport const noPropMutation: RuleDefinition = {\n id: \"react-luau/no-prop-mutation\",\n category: \"Correctness\",\n severity: \"error\",\n description: \"Component props should be treated as immutable inputs.\",\n run(context) {\n const diagnostics = [];\n\n for (const node of context.walk()) {\n if (node.type === \"assignment_statement\" || node.type === \"update_statement\") {\n const component = context.containingComponent(node);\n if (!component || !context.isDirectlyExecutedInFunction(node, component)) continue;\n\n const propsName = component.parameters[0];\n if (!propsName) continue;\n if (isBindingShadowedBetween(node, component, propsName)) continue;\n const left = assignmentLeft(node.text);\n const escaped = propsName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (!new RegExp(`^${escaped}\\\\s*(?:\\\\.|\\\\[)`).test(left)) continue;\n\n diagnostics.push({\n node: assignmentTargetNode(node),\n message: `Component mutates ${propsName} directly.`,\n help: \"Treat props as immutable. Derive a local value, clone a table you own, or update state in the owner instead.\",\n });\n continue;\n }\n\n if (node.type !== \"function_call\" || !mightMutateParameters(context, node)) continue;\n const component = context.containingComponent(node);\n if (!component || !context.isDirectlyExecutedInFunction(node, component)) continue;\n const propsName = component.parameters[0];\n if (!propsName) continue;\n\n const arguments_ = context.callArguments(node);\n const mutatedIndexes = mutatedParameterIndexesForCall(context, node, component);\n let mutatedArgument = null;\n for (const index of mutatedIndexes) {\n const argument = arguments_[index];\n if (!argument) continue;\n const origin = mutationOriginForExpression(context, argument, component);\n if (origin.kind !== \"props\" || origin.name !== propsName) continue;\n mutatedArgument = argument;\n break;\n }\n if (!mutatedArgument) continue;\n\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\") || \"This call\";\n diagnostics.push({\n node: callNameNode(node),\n highlights: [mutatedArgument],\n message: `${path} mutates an argument derived from ${propsName}.`,\n help: \"Treat props as immutable. Clone the table before passing it to a mutating helper, or move the mutation into the owner that controls the value.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
32
32
  "import type { SyntaxNode } from \"../syntax\";\nimport type { RuleContext, RuleDefinition } from \"../types\";\nimport { fieldName, fieldValue } from \"./helpers\";\n\nconst FRESH_CALLS = [\n /^math\\.random$/,\n /^Random\\.new$/,\n /:GenerateGUID$/,\n /^DateTime\\.now$/,\n /^os\\.clock$/,\n /^tick$/,\n /^time$/,\n /:GetServerTimeNow$/,\n /:NextInteger$/,\n /:NextNumber$/,\n];\n\nfunction freshDescription(node: SyntaxNode, context: RuleContext): string | null {\n for (const child of context.walk(node)) {\n if (child.type !== \"function_call\") continue;\n const path = context.getCallPath(child) ?? \"\";\n if (FRESH_CALLS.some((pattern) => pattern.test(path)) || /Random\\.new\\s*\\([^)]*\\)\\s*:\\s*Next(?:Integer|Number)/s.test(child.text)) {\n return `${path || \"fresh-value call\"}()`;\n }\n }\n return null;\n}\n\nfunction isCreateElementCall(node: SyntaxNode | undefined, context: RuleContext): boolean {\n if (!node || node.type !== \"function_call\") return false;\n return context.resolveCallPath(context.getCallPath(node) ?? \"\") === \"React.createElement\";\n}\n\nexport const noRandomKey: RuleDefinition = {\n id: \"react-luau/no-random-key\",\n category: \"Correctness\",\n severity: \"error\",\n description: \"React child keys must not be regenerated on each render.\",\n run(context) {\n const diagnostics = [];\n\n for (const field of context.walk()) {\n if (field.type !== \"field\") continue;\n const name = field.childForFieldName(\"name\");\n let keyExpression: SyntaxNode | null = null;\n\n if (fieldName(field) === \"key\") {\n keyExpression = fieldValue(field);\n } else if (field.text.trim().startsWith(\"[\") && name) {\n const value = field.namedChildren.find((child) => child.startIndex > name.endIndex);\n if (isCreateElementCall(value, context)) keyExpression = name;\n }\n\n if (!keyExpression) continue;\n const description = freshDescription(keyExpression, context);\n if (!description) continue;\n\n diagnostics.push({\n node: keyExpression,\n message: `React key is created from ${description}, so its identity can change every render.`,\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.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
@@ -37,19 +37,19 @@
37
37
  "import type { RuleDefinition } from \"../types\";\nimport { callNameNode } from \"./helpers\";\n\nexport const noCreateRootInRender: RuleDefinition = {\n id: \"react-luau/no-create-root-in-render\",\n category: \"Roblox\",\n severity: \"error\",\n description: \"Do not create ReactRoblox roots during component render.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (path !== \"ReactRoblox.createRoot\") continue;\n const owner = context.containingComponent(call);\n if (!owner || !context.isDirectlyExecutedInFunction(call, owner)) continue;\n diagnostics.push({\n node: callNameNode(call),\n message: \"ReactRoblox.createRoot() is called during component render.\",\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.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
38
38
  "import type { SyntaxNode } from \"../syntax\";\nimport type { DiagnosticInput, FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\nimport { normalizeExpressionText, sameNode } from \"../ast/walk\";\nimport { assignmentLeft, assignmentTargetNode, declarationNames, isBindingShadowedBetween } from \"./helpers\";\n\nfunction refRootFromTarget(target: string, refs: Set<string>): string | null {\n const match = target.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*\\.\\s*current\\b/);\n if (!match || !refs.has(match[1])) return null;\n return match[1];\n}\n\nfunction isNilGuardedLazyInit(node: SyntaxNode, refName: string): boolean {\n let current = node.parent;\n while (current) {\n if (current.type === \"if_statement\") {\n const condition = current.childForFieldName(\"condition\")?.text.replace(/\\s+/g, \"\") ?? \"\";\n const escaped = refName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (new RegExp(`^(?:${escaped}\\.current==nil|nil==${escaped}\\.current)$`).test(condition)) return true;\n return false;\n }\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\n current = current.parent;\n }\n return false;\n}\n\nfunction assignmentRight(text: string): string | null {\n const match = text.match(/^(?:.*?)(?:\\+=|-=|\\*=|\\/=|%=|\\^=|\\.\\.=|=)\\s*(.+)$/s);\n return match?.[1]?.trim() ?? null;\n}\n\nfunction refDeclaration(owner: FunctionInfo, refName: string, context: RuleContext): SyntaxNode | null {\n if (!owner.body) return null;\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const names = declarationNames(statement);\n const index = names.indexOf(refName);\n if (index === -1) continue;\n const assignment = statement.namedChildren.find((child) => child.type === \"assignment_statement\");\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\")?.namedChildren ?? [];\n const expression = expressions[index] ?? expressions[0];\n if (!expression || expression.type !== \"function_call\") continue;\n if (context.resolveCallPath(context.getCallPath(expression) ?? \"\") === \"React.useRef\") return statement;\n }\n return null;\n}\n\nfunction refInitializer(owner: FunctionInfo, refName: string, context: RuleContext): string | null {\n if (!owner.body) return null;\n for (const statement of owner.body.namedChildren) {\n if (statement.type !== \"variable_declaration\") continue;\n const names = declarationNames(statement);\n const index = names.indexOf(refName);\n if (index === -1) continue;\n const assignment = statement.namedChildren.find((child) => child.type === \"assignment_statement\");\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\")?.namedChildren ?? [];\n const expression = expressions[index] ?? expressions[0];\n if (!expression || expression.type !== \"function_call\") return null;\n const path = context.resolveCallPath(context.getCallPath(expression) ?? \"\");\n if (path !== \"React.useRef\") return null;\n return context.callArguments(expression)[0]?.text.trim() ?? \"nil\";\n }\n return null;\n}\n\nfunction isTopLevelOwnerStatement(node: SyntaxNode, owner: FunctionInfo): boolean {\n let current = node.parent;\n while (current && !sameNode(current, owner.node)) {\n if (current.type === \"if_statement\" || current.type === \"for_statement\" || current.type === \"while_statement\" || current.type === \"repeat_statement\") {\n return false;\n }\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\n current = current.parent;\n }\n return Boolean(current);\n}\n\n\nfunction exactRefCurrentTarget(node: SyntaxNode, refName: string): boolean {\n return normalizeExpressionText(assignmentLeft(node.text)) === `${refName}.current`;\n}\n\nfunction hasDirectRenderRead(owner: FunctionInfo, refName: string, context: RuleContext): boolean {\n if (!owner.body) return false;\n const target = `${refName}.current`;\n\n for (const candidate of context.walk(owner.body)) {\n if (candidate.type !== \"dot_index_expression\" || normalizeExpressionText(candidate.text) !== target) continue;\n if (!context.isDirectlyExecutedInFunction(candidate, owner)) continue;\n\n let current: SyntaxNode | null = candidate.parent;\n let isWrite = false;\n while (current && !sameNode(current, owner.node)) {\n if (current.type === \"assignment_statement\" || current.type === \"update_statement\") {\n isWrite = exactRefCurrentTarget(current, refName);\n break;\n }\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") break;\n current = current.parent;\n }\n if (!isWrite) return true;\n }\n\n return false;\n}\n\nfunction isLatestValueMirror(node: SyntaxNode, owner: FunctionInfo, refName: string, context: RuleContext): boolean {\n if (node.type !== \"assignment_statement\" || !exactRefCurrentTarget(node, refName)) return false;\n const right = assignmentRight(node.text);\n if (!right) return false;\n\n const initializer = refInitializer(owner, refName, context);\n if (initializer !== null && normalizeExpressionText(right) === normalizeExpressionText(initializer)) return true;\n\n // A direct top-level `ref.current = renderValue` is the common use-latest\n // mirror pattern even when the ref used a neutral initial value such as false.\n // Nested writes remain warnings because they are usually imperative render work.\n if (isTopLevelOwnerStatement(node, owner)) {\n return /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/.test(normalizeExpressionText(right));\n }\n\n // A render-computed ref that is only written during render and read later by\n // effects/events is another use-latest mirror shape. The conditional/looped\n // write can still observe a pre-commit render, so keep it visible as a\n // suggestion rather than treating it as fully safe.\n return !hasDirectRenderRead(owner, refName, context);\n}\n\nexport const noRefCurrentInRender: RuleDefinition = {\n id: \"react-luau/no-ref-current-in-render\",\n category: \"Correctness\",\n severity: \"warning\",\n description: \"Avoid mutating ref.current during render except for predictable initialization or deliberate latest-value mirrors.\",\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const node of context.walk()) {\n if (node.type !== \"assignment_statement\" && node.type !== \"update_statement\") continue;\n const owner = context.nearestFunction(node);\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n if (!context.isDirectlyExecutedInFunction(node, owner)) continue;\n const refs = context.model.refVariablesByFunction.get(owner.node.id) ?? new Set<string>();\n const target = assignmentLeft(node.text);\n const refName = refRootFromTarget(target, refs);\n if (!refName || isNilGuardedLazyInit(node, refName)) continue;\n const declaration = refDeclaration(owner, refName, context);\n if (isBindingShadowedBetween(node, owner, refName, declaration)) continue;\n\n const latestValueMirror = isLatestValueMirror(node, owner, refName, context);\n diagnostics.push({\n node: assignmentTargetNode(node),\n severity: latestValueMirror ? \"suggestion\" : \"warning\",\n message: latestValueMirror\n ? `${refName}.current mirrors its latest render value during render.`\n : `${refName}.current is mutated during ${owner.isHook ? \"hook\" : \"component\"} render.`,\n help: latestValueMirror\n ? \"A latest-value ref can expose an uncommitted render value to imperative callbacks. Update it after commit when that distinction matters.\"\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.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
39
39
  "import type { SyntaxNode } from \"../syntax\";\nimport type { RuleContext, RuleDefinition, SourceEffectModuleSummary } from \"../types\";\nimport { normalizeRequireTarget, resolveModuleReference } from \"../module-resolution\";\nimport { knownYieldReason } from \"../roblox-semantics\";\nimport { callNameNode } from \"./helpers\";\n\ninterface SourceBinding<T> {\n declaration: SyntaxNode;\n value: T | null;\n}\n\ntype SourceBindings<T> = Map<string, SourceBinding<T>[]>;\n\ninterface EffectInstance {\n summary: SourceEffectModuleSummary;\n persistent: boolean;\n}\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\") return { names: [], expressions: [] };\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 bindingParts(node: SyntaxNode): { names: string[]; expressions: SyntaxNode[] } {\n return node.type === \"variable_declaration\" ? declarationParts(node) : assignmentParts(node);\n}\n\nfunction addSourceBinding<T>(bindings: SourceBindings<T>, name: string, declaration: SyntaxNode, value: T | null): void {\n const existing = bindings.get(name) ?? [];\n existing.push({ declaration, value });\n bindings.set(name, existing);\n}\n\nfunction nearestScopeContainer(node: SyntaxNode, context: RuleContext): SyntaxNode {\n const owner = context.nearestFunction(node);\n let current = node.parent;\n while (current) {\n if (current.type === \"block\") return current;\n if (owner && current.id === owner.node.id) return owner.body ?? owner.node;\n current = current.parent;\n }\n return context.root;\n}\n\nfunction declarationVisibleAt(declaration: SyntaxNode, node: SyntaxNode, context: RuleContext): boolean {\n if (declaration.startIndex >= node.startIndex) return false;\n const container = nearestScopeContainer(declaration, context);\n return node.startIndex >= container.startIndex && node.endIndex <= container.endIndex;\n}\n\nfunction functionParameterNames(node: SyntaxNode): Set<string> {\n const result = new Set<string>();\n const parameters = node.childForFieldName(\"parameters\")\n ?? node.namedChildren.find((child) => child.type === \"parameters\");\n for (const parameter of parameters?.namedChildren ?? []) {\n if (parameter.type === \"identifier\") result.add(parameter.text);\n for (const child of parameter.namedChildren) {\n if (child.type === \"identifier\") result.add(child.text);\n }\n }\n return result;\n}\n\nfunction loopBindsName(node: SyntaxNode, name: string): boolean {\n if (node.type !== \"for_statement\") return false;\n const header = node.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return new RegExp(`^\\\\s*for\\\\s+(?:${escaped}\\\\s*=|[^\\\\n]*\\\\b${escaped}\\\\b[^\\\\n]*\\\\bin\\\\b)`, \"s\").test(header);\n}\n\nfunction bindingShadowedAfterDeclaration(declaration: SyntaxNode, node: SyntaxNode, name: string): boolean {\n let current = node.parent;\n while (current) {\n // Once we reach a scope that already contains the source binding, binders\n // outside that scope cannot shadow the binding at this use site.\n if (declaration.startIndex >= current.startIndex && declaration.endIndex <= current.endIndex) return false;\n if (\n (current.type === \"function_definition\" || current.type === \"function_declaration\")\n && functionParameterNames(current).has(name)\n ) return true;\n if (loopBindsName(current, name)) return true;\n current = current.parent;\n }\n return false;\n}\n\nfunction resolveSourceBinding<T>(\n bindings: SourceBindings<T>,\n name: string,\n node: SyntaxNode,\n context: RuleContext,\n): T | null {\n const candidates = bindings.get(name);\n if (!candidates) return null;\n\n for (let index = candidates.length - 1; index >= 0; index -= 1) {\n const candidate = candidates[index];\n if (!declarationVisibleAt(candidate.declaration, node, context)) continue;\n if (bindingShadowedAfterDeclaration(candidate.declaration, node, name)) return null;\n return candidate.value;\n }\n return null;\n}\n\nfunction sourceEffectImports(context: RuleContext): SourceBindings<SourceEffectModuleSummary> {\n const result: SourceBindings<SourceEffectModuleSummary> = new Map();\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\" && node.type !== \"assignment_statement\") continue;\n if (node.type === \"assignment_statement\" && node.parent?.type === \"variable_declaration\") continue;\n const { names, expressions } = bindingParts(node);\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n const requireMatch = expression?.type === \"function_call\"\n ? expression.text.match(/^\\s*require\\s*\\((.*?)\\)\\s*$/s)\n : null;\n const summary = requireMatch\n ? resolveModuleReference(normalizeRequireTarget(requireMatch[1]), context.project.sourceEffects)\n : null;\n addSourceBinding(result, names[index], node, summary);\n }\n }\n return result;\n}\n\nfunction factorySummaryFromCall(\n call: SyntaxNode,\n context: RuleContext,\n imports: SourceBindings<SourceEffectModuleSummary>,\n): SourceEffectModuleSummary | null {\n const path = context.getCallPath(call)?.replace(/\\s+/g, \"\") ?? \"\";\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 summary = resolveSourceBinding(imports, match[1], call, context);\n if (!summary?.instanceFactories.has(match[2])) return null;\n return summary;\n}\n\nfunction returnedFactorySummary(\n callback: SyntaxNode,\n context: RuleContext,\n imports: SourceBindings<SourceEffectModuleSummary>,\n): SourceEffectModuleSummary | null {\n for (const node of context.walk(callback)) {\n if (node !== callback && (node.type === \"function_definition\" || node.type === \"function_declaration\")) continue;\n if (node.type !== \"return_statement\") continue;\n const expressions = node.namedChildren.find((child) => child.type === \"expression_list\");\n const value = expressions?.namedChildren[0];\n if (value?.type === \"function_call\") return factorySummaryFromCall(value, context, imports);\n }\n return null;\n}\n\nfunction sourceEffectInstances(\n context: RuleContext,\n imports: SourceBindings<SourceEffectModuleSummary>,\n): SourceBindings<EffectInstance> {\n const result: SourceBindings<EffectInstance> = new Map();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\" && node.type !== \"assignment_statement\") continue;\n if (node.type === \"assignment_statement\" && node.parent?.type === \"variable_declaration\") continue;\n const { names, expressions } = bindingParts(node);\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n let instance: EffectInstance | null = null;\n if (expression?.type === \"function_call\") {\n const directFactory = factorySummaryFromCall(expression, context, imports);\n if (directFactory) {\n // An instance created at module scope persists across renders. A fresh\n // factory result created inside render is local to that render and\n // receiver-only mutation is not externally observable by itself.\n instance = {\n summary: directFactory,\n persistent: context.nearestFunction(node) === null,\n };\n } else if (context.resolveCallPath(context.getCallPath(expression) ?? \"\") === \"React.useMemo\") {\n const callback = context.callArguments(expression)[0];\n if (callback?.type === \"function_definition\") {\n const memoizedFactory = returnedFactorySummary(callback, context, imports);\n if (memoizedFactory) instance = { summary: memoizedFactory, persistent: true };\n }\n }\n } else if (expression?.type === \"identifier\") {\n instance = resolveSourceBinding(result, expression.text, expression, context);\n }\n addSourceBinding(result, names[index], node, instance);\n }\n }\n\n return result;\n}\n\nfunction sourceInferredEffectCall(\n call: SyntaxNode,\n context: RuleContext,\n imports: SourceBindings<SourceEffectModuleSummary>,\n instances: SourceBindings<EffectInstance>,\n): boolean {\n const path = context.getCallPath(call)?.replace(/\\s+/g, \"\") ?? \"\";\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(path)) {\n const direct = resolveSourceBinding(imports, path, call, context);\n if (direct?.effectfulExport) return true;\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\n const instance = resolveSourceBinding(instances, member[1], call, context);\n if (instance) {\n if (instance.summary.effectfulMembers.has(member[2])) return true;\n return instance.persistent && instance.summary.mutatingMembers.has(member[2]);\n }\n\n const imported = resolveSourceBinding(imports, member[1], call, context);\n if (!imported) return false;\n // The imported module table is itself persistent project state, so a method\n // that mutates its receiver is observable even if it has no other effects.\n return imported.effectfulMembers.has(member[2]) || imported.mutatingMembers.has(member[2]);\n}\n\nconst RENDER_EFFECT_PATTERNS = [\n /^Instance\\.new$/,\n /tween[^:]*:(?:Create|Play)$/i,\n /:Connect$/,\n /:BindAction$/,\n /:BindActionAtPriority$/,\n /:BindActivate$/,\n /BindToRenderStep$/,\n /BindToSimulation$/,\n /:Destroy$/,\n /:unmount$/,\n];\n\nfunction hasNestedKnownRenderSideEffect(call: SyntaxNode, context: RuleContext): boolean {\n for (const node of context.walk(call)) {\n if (node.startIndex === call.startIndex && node.endIndex === call.endIndex) continue;\n if (node.type !== \"function_call\") continue;\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\n if (path === \"task.spawn\" || path === \"task.defer\" || path === \"task.delay\") return true;\n if (knownYieldReason(path, node, context) || RENDER_EFFECT_PATTERNS.some(pattern => pattern.test(path))) return true;\n }\n return false;\n}\n\nexport const noYieldInRender: RuleDefinition = {\n id: \"react-luau/no-yield-in-render\",\n category: \"Correctness\",\n severity: \"error\",\n description: \"React render functions must not yield.\",\n run(context) {\n const diagnostics = [];\n for (const call of context.findCalls()) {\n const component = context.containingComponent(call);\n if (!component || !context.isDirectlyExecutedInFunction(call, component)) continue;\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const reason = knownYieldReason(path, call, context);\n if (!reason) continue;\n diagnostics.push({\n node: callNameNode(call),\n message: `${path} can yield during component render.`,\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.`,\n });\n }\n return diagnostics;\n },\n};\n\nexport const noTaskSpawnInRender: RuleDefinition = {\n id: \"react-luau/no-task-spawn-in-render\",\n category: \"Correctness\",\n severity: \"error\",\n description: \"Do not schedule asynchronous work during render.\",\n run(context) {\n const diagnostics = [];\n for (const call of context.findCalls()) {\n const component = context.containingComponent(call);\n if (!component || !context.isDirectlyExecutedInFunction(call, component)) continue;\n const path = context.getCallPath(call);\n if (path !== \"task.spawn\" && path !== \"task.defer\" && path !== \"task.delay\") continue;\n diagnostics.push({\n node: callNameNode(call),\n message: `${path} schedules work during component render.`,\n help: \"Move the scheduled work into an effect or the event that actually owns the side effect.\",\n });\n }\n return diagnostics;\n },\n};\n\nexport const noSideEffectsInRender: RuleDefinition = {\n id: \"react-luau/no-side-effects-in-render\",\n category: \"Correctness\",\n severity: \"error\",\n description: \"Do not create Instances, start tweens, subscribe, or perform other externally observable side effects during component render.\",\n run(context) {\n const diagnostics = [];\n const effectImports = sourceEffectImports(context);\n const effectInstances = sourceEffectInstances(context, effectImports);\n\n\n for (const call of context.findCalls()) {\n const component = context.containingComponent(call);\n if (!component || !context.isDirectlyExecutedInFunction(call, component)) continue;\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const knownPattern = RENDER_EFFECT_PATTERNS.some((pattern) => pattern.test(path));\n let inferredFromSource = sourceInferredEffectCall(call, context, effectImports, effectInstances);\n // Report the inner operation rather than duplicating it on an inferred wrapper.\n if (inferredFromSource && hasNestedKnownRenderSideEffect(call, context)) inferredFromSource = false;\n if (!knownPattern && !inferredFromSource) continue;\n diagnostics.push({\n node: callNameNode(call),\n message: inferredFromSource && !knownPattern\n ? `${path} runs during render, and code it calls eventually changes state outside the current render.`\n : `${path} performs a side effect directly during component render.`,\n help: inferredFromSource && !knownPattern\n ? \"Move this call into an effect, event handler, or another committed lifecycle boundary so an abandoned render cannot still change application state.\"\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.\",\n fixPreview: inferredFromSource && !knownPattern\n ? {\n kind: \"pattern\" as const,\n before: call.text,\n after: `React.useEffect(function()\n\t${call.text}\nend, { -- dependencies })`,\n note: \"The exact owner depends on intent: use an effect for committed lifecycle work, or move the call into the event that actually triggers the mutation.\",\n }\n : undefined,\n });\n }\n\n return diagnostics;\n },\n};\n",
40
- "import {\n moduleKeys,\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\nimport type { SyntaxNode } from \"../syntax\";\nimport type {\n ConditionalHookModeSummary,\n DiagnosticInput,\n FixPreview,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n} from \"../types\";\nimport { nodeKey } from \"../ast/walk\";\nimport {\n callNameNode,\n CONDITIONAL_TYPES,\n declarationNames,\n findAncestorBetween,\n isHookPath,\n isNestedInsideFunction,\n} from \"./helpers\";\n\nfunction staticIterationImports(\n context: RuleContext,\n): Map<string, Set<string>> {\n const result = new Map<string, Set<string>>();\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\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 if (!match) continue;\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.staticIterationTables,\n );\n if (summary) result.set(match[1], summary);\n }\n return result;\n}\n\nfunction conditionalHookModeImports(\n context: RuleContext,\n): Map<string, ConditionalHookModeSummary> {\n const result = new Map<string, ConditionalHookModeSummary>();\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\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 if (!match) continue;\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.conditionalHookModes,\n );\n if (summary) result.set(match[1], summary);\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 if (summary) return summary;\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 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 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 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 if (!name) continue;\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (new RegExp(`^if\\\\s+(?:not\\\\s+)?${escaped}\\\\s*$`).test(header))\n return index;\n }\n return null;\n}\n\nfunction isStableModeArgument(\n node: SyntaxNode | undefined,\n context: RuleContext,\n): boolean {\n if (!node) return true;\n const text = node.text.trim();\n if ([\"true\", \"false\", \"nil\"].includes(text)) return true;\n if (\n [\n \"number\",\n \"string\",\n \"string_content\",\n \"table_constructor\",\n \"function_definition\",\n ].includes(node.type)\n )\n return true;\n if (\n /^[A-Za-z_][A-Za-z0-9_]*$/.test(text) &&\n context.model.stableVariables.has(text)\n )\n return true;\n return false;\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}(true) -- or false; keep this mode fixed for this call site`,\n note: \"A custom hook may choose different internal hooks only when this mode is 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 if (wrapper) current = wrapper[1].trim();\n return current;\n}\n\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n const assignment = node.namedChildren.find(\n (child) => child.type === \"assignment_statement\",\n );\n const expressionList = assignment?.namedChildren.find(\n (child) => child.type === \"expression_list\",\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 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 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 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 const owner = context.nearestFunction(declaration);\n if (!owner) continue;\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n if (!expression) continue;\n if (expression.type === \"table_constructor\") {\n namesFor(owner).add(names[index]);\n continue;\n }\n if (expression.type !== \"function_call\") continue;\n const rawPath = context.getCallPath(expression);\n if (!rawPath || context.resolveCallPath(rawPath) !== \"React.useMemo\")\n continue;\n const args = context.callArguments(expression);\n if (isEmptyTable(args[1])) namesFor(owner).add(names[index]);\n }\n }\n\n const callsByLocalFunction = new Map<string, SyntaxNode[]>();\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n if (!rawPath || !functionsByName.has(rawPath)) continue;\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 if (expression.type === \"table_constructor\") return true;\n const text = expression.text.trim();\n if (!owner || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(text)) return false;\n return namesFor(owner).has(text);\n };\n\n let changed = true;\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 const owner = context.nearestFunction(declaration);\n if (!owner) continue;\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n if (!expressionIsStableShape(expression, owner)) continue;\n const target = names[index];\n const ownerNames = namesFor(owner);\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 if (calls.length === 0) continue;\n for (let index = 0; index < fn.parameters.length; index += 1) {\n const allStable = calls.every((call) => {\n const caller = context.nearestFunction(call);\n return expressionIsStableShape(context.callArguments(call)[index], caller);\n });\n if (!allStable) continue;\n const parameter = fn.parameters[index];\n if (!parameter) continue;\n const fnNames = namesFor(fn);\n if (!fnNames.has(parameter)) {\n fnNames.add(parameter);\n changed = true;\n }\n }\n }\n }\n\n return stable;\n}\n\nfunction loopIterationIsProvablyStable(\n loop: SyntaxNode,\n imports: Map<string, Set<string>>,\n owner: FunctionInfo,\n stableShapes: Map<number, Set<string>>,\n): boolean {\n const numeric = loop.namedChildren.find(\n (child) => child.type === \"for_numeric_clause\",\n );\n if (numeric) {\n const text = numeric.text;\n const bounds = text.match(\n /^\\s*[A-Za-z_][A-Za-z0-9_]*\\s*=\\s*([^,]+)\\s*,\\s*([^,]+)(?:\\s*,\\s*([^,]+))?\\s*$/s,\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 const match = clause?.text.match(/\\bin\\s+(.+)$/s);\n if (!match) return false;\n const expression = unwrapIteratorExpression(match[1]);\n const path = expression.match(\n /^([A-Za-z_][A-Za-z0-9_]*)(?:\\.([A-Za-z_][A-Za-z0-9_.]*))?$/,\n );\n if (!path) return false;\n if (\n !path[2] &&\n stableShapes.get(nodeKey(owner.node))?.has(path[1])\n )\n return true;\n const fields = imports.get(path[1]);\n if (!fields) return false;\n const propertyPath = path[2] ?? \"\";\n return fields.has(propertyPath);\n}\n\nfunction functionParameterTypes(fn: FunctionInfo): Map<string, string> {\n if (!fn.body) return new Map();\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 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 return result;\n}\n\nfunction isNonOptionalParameterType(typeText: string | undefined): boolean {\n if (!typeText) return false;\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 while (current && current !== fn.node) {\n if (current.type === \"if_statement\") {\n const header = (current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\").trim();\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 for (const pattern of patterns) {\n const match = header.match(pattern);\n if (match && isNonOptionalParameterType(parameterTypes.get(match[1])))\n return true;\n }\n return false;\n }\n current = current.parent;\n }\n return false;\n}\n\nfunction hasReachableReturnBefore(\n call: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n cache: Map<number, SyntaxNode[]>,\n): boolean {\n if (!fn.body) return false;\n const key = nodeKey(fn.node);\n let returns = cache.get(key);\n if (!returns) {\n const parameterTypes = functionParameterTypes(fn);\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 cache.set(key, returns);\n }\n return returns.some((node) => node.endIndex <= call.startIndex);\n}\n\nfunction conditionalFixPreview(kind: string, hookName: string): FixPreview {\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 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 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 description:\n \"Hooks must run in the same order on every render of a React component or custom hook.\",\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n const staticImports = staticIterationImports(context);\n const stableShapes = stableShapeVariablesByFunction(context);\n const modeImports = conditionalHookModeImports(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 if (!rawPath) continue;\n const path = context.resolveCallPath(rawPath);\n if (!isHookPath(path)) continue;\n\n const fn = context.nearestFunction(call);\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 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 continue;\n }\n\n const importedMode = modeImports.get(rawPath);\n if (importedMode) {\n const args = context.callArguments(call);\n const dynamicIndexes = importedMode.parameterIndexes.filter(\n (index) => !isStableModeArgument(args[index], context),\n );\n if (dynamicIndexes.length > 0) {\n const firstIndex = dynamicIndexes[0];\n const argument = args[firstIndex];\n const parameterOffset =\n importedMode.parameterIndexes.indexOf(firstIndex);\n const parameterName =\n importedMode.parameterNames[parameterOffset] ??\n `argument ${firstIndex + 1}`;\n const argumentText = argument?.text.trim() || \"<omitted>\";\n diagnostics.push({\n node: argument ?? callNameNode(call),\n highlights: dynamicIndexes\n .map((index) => args[index])\n .filter((node): node is SyntaxNode => Boolean(node)),\n message: `Hook ${rawPath} receives render-varying hook mode ${parameterName} from ${argumentText}; if it changes between renders, the custom hook can execute a different hook sequence.`,\n help: `Pass a stable mode at this call site, or refactor ${rawPath} so it always calls the same hooks regardless of ${parameterName}.`,\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 if (controlFlow) {\n if (\n currentModeSummary &&\n currentModeSummary.knownCallSites > 0 &&\n controlledParameterIndex(controlFlow, fn, currentModeSummary) !== null\n )\n continue;\n if (\n controlFlow.type === \"for_statement\" &&\n loopIterationIsProvablyStable(\n controlFlow,\n staticImports,\n fn,\n stableShapes,\n )\n )\n continue;\n const kind = controlFlow.type.replaceAll(\"_\", \" \");\n const loopLike =\n controlFlow.type === \"for_statement\" ||\n controlFlow.type === \"while_statement\" ||\n controlFlow.type === \"repeat_statement\";\n diagnostics.push({\n node: callNameNode(call),\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 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 fixPreview: conditionalFixPreview(kind, path),\n });\n continue;\n }\n\n if (hasReachableReturnBefore(call, fn, context, reachableReturns)) {\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",
40
+ "import {\n moduleKeys,\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\nimport type { SyntaxNode } from \"../syntax\";\nimport type {\n ConditionalHookModeSummary,\n DiagnosticInput,\n FixPreview,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n} from \"../types\";\nimport { nodeKey } from \"../ast/walk\";\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 for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\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 if (!match) continue;\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.staticIterationTables,\n );\n if (summary) result.set(match[1], summary);\n }\n return result;\n}\n\n\nfunction nonReactHookImports(context: RuleContext): Set<string> {\n const result = new Set<string>();\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\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 if (!match || !/^use[A-Z0-9_]/.test(match[1])) continue;\n const kind = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.reactHookModules,\n );\n if (kind === false) result.add(match[1]);\n }\n return result;\n}\n\nfunction conditionalHookModeImports(\n context: RuleContext,\n): Map<string, ConditionalHookModeSummary> {\n const result = new Map<string, ConditionalHookModeSummary>();\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\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 if (!match) continue;\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.conditionalHookModes,\n );\n if (summary) result.set(match[1], summary);\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 if (summary) return summary;\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 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 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 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 if (!name) continue;\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (new RegExp(`^if\\\\s+(?:not\\\\s+)?${escaped}\\\\s*$`).test(header))\n return index;\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 if (wrapper) current = wrapper[1].trim();\n return current;\n}\n\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n const assignment = node.namedChildren.find(\n (child) => child.type === \"assignment_statement\",\n );\n const expressionList = assignment?.namedChildren.find(\n (child) => child.type === \"expression_list\",\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 const fields = node.namedChildren.filter((child) => child.type === \"field\");\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((child) => child.type === \"vararg_expression\"),\n )\n )\n return false;\n const last = fields.at(-1);\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 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 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 const owner = context.nearestFunction(declaration);\n if (!owner) continue;\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n if (!expression) continue;\n if (\n expression.type === \"table_constructor\" &&\n tableConstructorHasStableArity(expression)\n ) {\n namesFor(owner).add(names[index]);\n continue;\n }\n if (expression.type !== \"function_call\") continue;\n const rawPath = context.getCallPath(expression);\n if (!rawPath || context.resolveCallPath(rawPath) !== \"React.useMemo\")\n continue;\n const args = context.callArguments(expression);\n if (isEmptyTable(args[1])) namesFor(owner).add(names[index]);\n }\n }\n\n const callsByLocalFunction = new Map<string, SyntaxNode[]>();\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n if (!rawPath || !functionsByName.has(rawPath)) continue;\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 if (expression.type === \"table_constructor\") return tableConstructorHasStableArity(expression);\n const text = expression.text.trim();\n if (!owner || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(text)) return false;\n return namesFor(owner).has(text);\n };\n\n let changed = true;\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 const owner = context.nearestFunction(declaration);\n if (!owner) continue;\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n if (!expressionIsStableShape(expression, owner)) continue;\n const target = names[index];\n const ownerNames = namesFor(owner);\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 if (calls.length === 0) continue;\n for (let index = 0; index < fn.parameters.length; index += 1) {\n const allStable = calls.every((call) => {\n const caller = context.nearestFunction(call);\n return expressionIsStableShape(context.callArguments(call)[index], caller);\n });\n if (!allStable) continue;\n const parameter = fn.parameters[index];\n if (!parameter) continue;\n const fnNames = namesFor(fn);\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 (node.type === \"variable_declaration\" && !context.nearestFunction(node)) {\n for (const name of declarationNames(node)) declarations.set(name, node);\n continue;\n }\n if (\n node.type !== \"assignment_statement\" ||\n node.parent?.type === \"variable_declaration\"\n )\n continue;\n const variableList = node.namedChildren.find(\n (child) => child.type === \"variable_list\",\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 simpleConditionRoot(controlFlow: SyntaxNode): string | null {\n if (controlFlow.type !== \"if_statement\" && controlFlow.type !== \"if_expression\")\n return null;\n const condition = controlFlow.namedChildren[0];\n if (!condition) return null;\n const text = condition.text.trim();\n const match = text.match(\n /^(?:not\\s+)?([A-Za-z_][A-Za-z0-9_]*)(?:\\s*(?:==|~=)\\s*(?:true|false|nil))?$/,\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 if (!condition) return false;\n if ([\"true\", \"false\", \"nil\", \"number\", \"string\"].includes(condition.type))\n return true;\n\n const root = simpleConditionRoot(controlFlow);\n if (!root) return false;\n if (moduleInvariants.has(root)) return true;\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 for (const node of context.walk(branch)) {\n if (node.type !== \"function_call\") continue;\n if (context.nearestFunction(node) !== fn) continue;\n const rawPath = context.getCallPath(node);\n if (!rawPath) continue;\n const path = context.resolveCallPath(rawPath);\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 if (nestedControl) return null;\n hooks.push(path);\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 const thenBlock = controlFlow.namedChildren.find(\n (child) => child.type === \"block\",\n );\n const elseStatement = controlFlow.namedChildren.find(\n (child) => child.type === \"else_statement\",\n );\n const elseBlock = elseStatement?.namedChildren.find(\n (child) => child.type === \"block\",\n );\n if (!thenBlock || !elseBlock) return false;\n\n const thenHooks = branchHookSequence(thenBlock, fn, context);\n const elseHooks = branchHookSequence(elseBlock, fn, context);\n if (!thenHooks || !elseHooks || thenHooks.length !== elseHooks.length)\n return false;\n if (!thenHooks.every((path, index) => path === elseHooks[index])) 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 if (!binding || !owner.body) return null;\n\n const initializerText = binding.initializer?.text.trim() ?? \"nil\";\n const stableLiteral = /^(?:true|false|nil|-?\\d+(?:\\.\\d+)?|\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')$/;\n let sawIndirectSetterReference = false;\n for (const node of context.walk(owner.body)) {\n if (node.type === \"function_call\" && context.getCallPath(node) === binding.setterName) {\n const argument = context.callArguments(node)[0];\n if (\n !argument ||\n !stableLiteral.test(initializerText) ||\n argument.text.trim() !== initializerText\n )\n return \"unstable\";\n continue;\n }\n if (node.type !== \"identifier\" || node.text !== binding.setterName) continue;\n if (node.startIndex >= binding.declaration.startIndex && node.endIndex <= binding.declaration.endIndex)\n continue;\n if (node.parent?.type === \"function_call\") continue;\n sawIndirectSetterReference = true;\n }\n\n if (sawIndirectSetterReference) return \"unknown\";\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 let result: SyntaxNode | null = null;\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"variable_declaration\" || context.nearestFunction(node) !== owner)\n continue;\n const names = declarationNames(node);\n const index = names.indexOf(name);\n if (index < 0) continue;\n const expressions = declarationExpressions(node);\n const expression = expressions[index] ?? expressions[0] ?? null;\n if (result) return null;\n result = expression;\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 if (depth > 4) return \"unknown\";\n const text = node.text.trim();\n if ([\"true\", \"false\", \"nil\"].includes(text)) return \"stable\";\n if ([\"number\", \"string\", \"string_content\", \"function_definition\"].includes(node.type))\n return \"stable\";\n\n const root = text.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (!root) return \"unknown\";\n const stateStability = stateModeStability(root, owner, context);\n if (stateStability) return stateStability;\n if (moduleInvariants.has(root)) return \"stable\";\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 if (alias && alias.text.trim() !== root)\n return modeValueStability(alias, owner, context, moduleInvariants, depth + 1);\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 if (table.type !== \"table_constructor\") return undefined;\n let current: SyntaxNode | undefined = table;\n for (const part of accessPath.split(\".\")) {\n if (!current || current.type !== \"table_constructor\") return undefined;\n const field: SyntaxNode | undefined = current.namedChildren.find((child) => {\n if (child.type !== \"field\") return false;\n return child.namedChildren[0]?.type === \"identifier\" &&\n child.namedChildren[0]?.text === part;\n });\n if (!field) return undefined;\n current = field.namedChildren[1];\n }\n return current;\n}\n\nfunction controlledAccessPaths(\n summary: ConditionalHookModeSummary,\n parameterIndex: number,\n): string[] {\n const paths = new Set<string>();\n for (const [conditionName, index] of Object.entries(summary.conditionVariables)) {\n if (index !== parameterIndex) continue;\n paths.add(summary.conditionAccessPaths?.[conditionName] ?? \"\");\n }\n if (paths.size === 0) paths.add(\"\");\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): boolean {\n const numeric = loop.namedChildren.find(\n (child) => child.type === \"for_numeric_clause\",\n );\n if (numeric) {\n const text = numeric.text;\n const bounds = text.match(\n /^\\s*[A-Za-z_][A-Za-z0-9_]*\\s*=\\s*([^,]+)\\s*,\\s*([^,]+)(?:\\s*,\\s*([^,]+))?\\s*$/s,\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 const match = clause?.text.match(/\\bin\\s+(.+)$/s);\n if (!match) return false;\n const expression = unwrapIteratorExpression(match[1]);\n const path = expression.match(\n /^([A-Za-z_][A-Za-z0-9_]*)(?:\\.([A-Za-z_][A-Za-z0-9_.]*))?$/,\n );\n if (!path) return false;\n if (\n !path[2] &&\n stableShapes.get(nodeKey(owner.node))?.has(path[1])\n )\n return true;\n const fields = imports.get(path[1]);\n if (!fields) return false;\n const propertyPath = path[2] ?? \"\";\n return fields.has(propertyPath);\n}\n\nfunction functionParameterTypes(fn: FunctionInfo): Map<string, string> {\n if (!fn.body) return new Map();\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 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 return result;\n}\n\nfunction isNonOptionalParameterType(typeText: string | undefined): boolean {\n if (!typeText) return false;\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 while (current && current !== fn.node) {\n if (current.type === \"if_statement\") {\n const header = (current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\").trim();\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 for (const pattern of patterns) {\n const match = header.match(pattern);\n if (match && isNonOptionalParameterType(parameterTypes.get(match[1])))\n return true;\n }\n return false;\n }\n current = current.parent;\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 const key = nodeKey(fn.node);\n let returns = cache.get(key);\n if (!returns) {\n const parameterTypes = functionParameterTypes(fn);\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 cache.set(key, returns);\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 while (current && current !== fn.node) {\n if (current.type === \"if_statement\" || current.type === \"if_expression\") {\n if (\n summary &&\n controlledParameterIndex(current, fn, summary) !== null\n )\n return true;\n if (conditionIsProvablyInvariant(current, fn, context, moduleInvariants))\n return true;\n return false;\n }\n current = current.parent;\n }\n return false;\n}\n\nfunction conditionalFixPreview(kind: string, hookName: string): FixPreview {\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 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 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 description:\n \"Hooks must run in the same order on every render of a React component or custom hook.\",\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n if (!context.model.isReactFile) return diagnostics;\n const staticImports = staticIterationImports(context);\n const stableShapes = stableShapeVariablesByFunction(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 if (!rawPath) continue;\n if (ignoredHookImports.has(rawPath)) continue;\n const path = context.resolveCallPath(rawPath);\n if (!isHookPath(path)) continue;\n\n const fn = context.nearestFunction(call);\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 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 continue;\n }\n\n const importedMode = modeImports.get(rawPath);\n if (importedMode) {\n const args = context.callArguments(call);\n const unstableControls = importedMode.parameterIndexes.flatMap((index) =>\n controlledAccessPaths(importedMode, index)\n .map((accessPath) => {\n const argument = args[index];\n const value = tableFieldValue(argument, accessPath);\n const stability = accessPath !== \"\"\n ? argument?.type === \"table_constructor\"\n ? value\n ? modeValueStability(value, fn, context, moduleInvariants)\n : \"stable\"\n : \"unknown\"\n : modeValueStability(\n argument,\n fn,\n context,\n moduleInvariants,\n );\n return { index, accessPath, argument, value, stability };\n })\n .filter((control) => control.stability === \"unstable\"),\n );\n if (unstableControls.length > 0) {\n const first = unstableControls[0];\n const firstIndex = first.index;\n const argument = first.argument;\n const parameterOffset =\n importedMode.parameterIndexes.indexOf(firstIndex);\n const baseParameterName =\n importedMode.parameterNames[parameterOffset] ??\n `argument ${firstIndex + 1}`;\n const parameterName = first.accessPath\n ? `${baseParameterName}.${first.accessPath}`\n : baseParameterName;\n const argumentText = first.value?.text.trim() || argument?.text.trim() || \"<omitted>\";\n diagnostics.push({\n node: first.value ?? argument ?? callNameNode(call),\n highlights: unstableControls\n .map((control) => control.value ?? control.argument)\n .filter((node): node is SyntaxNode => Boolean(node)),\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 if (controlFlow) {\n if (\n currentModeSummary &&\n controlledParameterIndex(controlFlow, fn, currentModeSummary) !== null\n )\n continue;\n if (conditionIsProvablyInvariant(controlFlow, fn, context, moduleInvariants))\n continue;\n if (ifBranchesHaveEquivalentBuiltInTopology(controlFlow, fn, context))\n continue;\n if (\n controlFlow.type === \"for_statement\" &&\n loopIterationIsProvablyStable(\n controlFlow,\n staticImports,\n fn,\n stableShapes,\n )\n )\n continue;\n const kind = controlFlow.type.replaceAll(\"_\", \" \");\n const loopLike =\n controlFlow.type === \"for_statement\" ||\n controlFlow.type === \"while_statement\" ||\n controlFlow.type === \"repeat_statement\";\n diagnostics.push({\n node: callNameNode(call),\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 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 fixPreview: conditionalFixPreview(kind, path),\n });\n continue;\n }\n\n const earlierReturns = reachableReturnsBefore(\n call,\n fn,\n context,\n reachableReturns,\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
41
  "import type { SyntaxNode } from \"../syntax\";\nimport type { DiagnosticInput, FunctionInfo, RuleContext, RuleDefinition, StateBinding } from \"../types\";\nimport { sameNode } from \"../ast/walk\";\nimport { assignmentTargetNode, callNameNode, containsUnshadowedIdentifier, identifierNode, isBindingShadowedBetween, stateBindingsFor } from \"./helpers\";\nimport { mightMutateParameters, mutatedParameterIndexesForCall, mutationOriginForExpression } from \"./parameter-mutations\";\n\nconst TRIVIAL_INITIALIZER_PATHS = new Set([\n \"tostring\",\n \"tonumber\",\n \"type\",\n \"typeof\",\n \"math.abs\",\n \"math.ceil\",\n \"math.floor\",\n \"math.max\",\n \"math.min\",\n \"math.round\",\n \"string.lower\",\n \"string.upper\",\n \"string.format\",\n \"table.pack\",\n \"Vector2.new\",\n \"Vector3.new\",\n \"Vector2int16.new\",\n \"Vector3int16.new\",\n \"UDim.new\",\n \"UDim2.new\",\n \"UDim2.fromOffset\",\n \"UDim2.fromScale\",\n \"CFrame.new\",\n \"Color3.new\",\n \"Color3.fromRGB\",\n \"Color3.fromHSV\",\n \"Rect.new\",\n \"NumberRange.new\",\n \"TweenInfo.new\",\n]);\n\nfunction isTrivialInitializerPath(path: string): boolean {\n return TRIVIAL_INITIALIZER_PATHS.has(path) || /(?:^|[.:])getValue$/i.test(path);\n}\n\nfunction isNestedFunctionFromOwner(context: RuleContext, node: SyntaxNode, owner: FunctionInfo): boolean {\n const nearest = context.nearestFunction(node);\n return Boolean(nearest && nearest !== owner);\n}\n\nfunction callsSetter(context: RuleContext, owner: FunctionInfo, setterName: string): boolean {\n if (!owner.body) return false;\n for (const call of context.walk(owner.body)) {\n if (call.type === \"function_call\" && context.getCallPath(call) === setterName) return true;\n }\n return false;\n}\n\nfunction isIdentifierRead(node: SyntaxNode, name: string): boolean {\n if (node.type !== \"identifier\" || node.text !== name) return false;\n const parent = node.parent;\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.childForFieldName(\"field\"), node)) return false;\n if (parent?.type === \"method_index_expression\" && sameNode(parent.namedChildren.at(-1), node)) return false;\n return true;\n}\n\nfunction renderReachableNestedFunctions(context: RuleContext, owner: FunctionInfo): Set<FunctionInfo> {\n const reachable = new Set<FunctionInfo>();\n if (!owner.body) return reachable;\n\n const byName = new Map<string, FunctionInfo>();\n for (const fn of context.model.functions) {\n if (!fn.name || fn === owner) continue;\n let current = fn.node.parent;\n while (current) {\n const parentInfo = context.model.functionByNode.get(current.id);\n if (parentInfo) {\n if (parentInfo === owner) byName.set(fn.name, fn);\n break;\n }\n current = current.parent;\n }\n }\n\n const pending: FunctionInfo[] = [];\n const addByName = (name: string | undefined) => {\n if (!name) return;\n const fn = byName.get(name);\n if (!fn || reachable.has(fn)) return;\n reachable.add(fn);\n pending.push(fn);\n };\n\n for (const call of context.walk(owner.body)) {\n if (call.type !== \"function_call\" || context.nearestFunction(call) !== owner) continue;\n const path = context.getCallPath(call) ?? \"\";\n const resolved = context.resolveCallPath(path);\n if (resolved === \"React.createElement\") addByName(context.callArguments(call)[0]?.text.trim());\n else addByName(path);\n }\n\n while (pending.length > 0) {\n const fn = pending.pop()!;\n if (!fn.body) continue;\n for (const call of context.walk(fn.body)) {\n if (call.type !== \"function_call\" || context.nearestFunction(call) !== fn) continue;\n const path = context.getCallPath(call) ?? \"\";\n const resolved = context.resolveCallPath(path);\n if (resolved === \"React.createElement\") addByName(context.callArguments(call)[0]?.text.trim());\n else addByName(path);\n }\n }\n\n return reachable;\n}\n\nfunction directlyReadsValue(context: RuleContext, owner: FunctionInfo, binding: StateBinding): boolean {\n if (!owner.body) return false;\n\n for (const node of context.walk(owner.body)) {\n if (!isIdentifierRead(node, binding.valueName)) continue;\n if (node.startIndex >= binding.declaration.startIndex && node.endIndex <= binding.declaration.endIndex) continue;\n if (isNestedFunctionFromOwner(context, node, owner)) continue;\n if (isBindingShadowedBetween(node, owner, binding.valueName, binding.declaration)) continue;\n return true;\n }\n\n for (const fn of renderReachableNestedFunctions(context, owner)) {\n if (!fn.body) continue;\n for (const node of context.walk(fn.body)) {\n if (isIdentifierRead(node, binding.valueName) && !isBindingShadowedBetween(node, owner, binding.valueName, binding.declaration)) return true;\n }\n }\n\n return false;\n}\n\nfunction isPlainTableState(binding: StateBinding, context: RuleContext): boolean {\n const initializer = binding.initializer;\n if (!initializer) return true;\n if (initializer.type === \"table_constructor\") return true;\n if (initializer.type !== \"function_call\") return false;\n const path = context.getCallPath(initializer) ?? \"\";\n return path === \"table.clone\" || path === \"table.create\" || path === \"table.pack\";\n}\n\ntype CallbackLifetime = \"long-lived\" | \"custom-hook\" | \"render-handler\" | \"unknown\";\n\nfunction callbackLifetime(context: RuleContext, call: SyntaxNode, owner: FunctionInfo): CallbackLifetime {\n const callback = context.nearestFunction(call);\n if (!callback || callback === owner) return \"unknown\";\n\n let current: SyntaxNode | null = callback.node;\n while (current && current.startIndex >= owner.node.startIndex && current.endIndex <= owner.node.endIndex) {\n if (current.type === \"function_call\") {\n const path = context.resolveCallPath(context.getCallPath(current) ?? \"\");\n if (\n path === \"React.useEffect\"\n || path === \"React.useLayoutEffect\"\n || path === \"task.spawn\"\n || path === \"task.defer\"\n || path === \"task.delay\"\n || /:Connect$/.test(path)\n || /BindToRenderStep$/.test(path)\n || /:BindAction(?:AtPriority)?$/.test(path)\n || /:BindActivate$/.test(path)\n ) {\n return \"long-lived\";\n }\n if (path === \"React.createElement\") return \"render-handler\";\n const final = path.split(/[.:]/).at(-1) ?? \"\";\n if (/^use[A-Z0-9_]/.test(final)) return \"custom-hook\";\n }\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") {\n if (current.startIndex !== callback.node.startIndex || current.endIndex !== callback.node.endIndex) break;\n }\n current = current.parent;\n }\n\n return \"unknown\";\n}\n\nexport const rerenderFunctionalSetstate: RuleDefinition = {\n id: \"react-luau/rerender-functional-setstate\",\n category: \"Performance\",\n severity: \"warning\",\n description: \"Use the functional state setter form when deferred callbacks update from the previous state value.\",\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const binding of context.model.stateBindings) {\n const owner = binding.owner;\n if (!owner?.body) continue;\n\n for (const call of context.walk(owner.body)) {\n if (call.type !== \"function_call\" || context.getCallPath(call) !== binding.setterName) continue;\n if (!isNestedFunctionFromOwner(context, call, owner)) continue;\n const argument = context.callArguments(call)[0];\n if (!argument || argument.type === \"function_definition\") continue;\n if (!containsUnshadowedIdentifier(argument, binding.valueName, context, owner)) continue;\n const lifetime = callbackLifetime(context, call, owner);\n if (lifetime === \"render-handler\" || lifetime === \"unknown\") continue;\n\n diagnostics.push({\n node: callNameNode(call),\n severity: lifetime === \"custom-hook\" ? \"suggestion\" : \"warning\",\n message: `${binding.setterName}() reads ${binding.valueName} from a captured callback value.`,\n help: lifetime === \"custom-hook\"\n ? `Use ${binding.setterName}(function(previous) return ... end) if the custom hook can retain this callback across renders.`\n : `Use ${binding.setterName}(function(previous) return ... end) when the next value depends on previous state.`,\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const rerenderLazyStateInit: RuleDefinition = {\n id: \"react-luau/rerender-lazy-state-init\",\n category: \"Performance\",\n severity: \"warning\",\n description: \"Expensive useState initializers should use React's lazy initializer form.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (path !== \"React.useState\") continue;\n const initializer = context.callArguments(call)[0];\n if (!initializer || initializer.type === \"function_definition\") continue;\n\n const eagerCall = [...context.walk(initializer)].find((node) => node.type === \"function_call\");\n if (!eagerCall) continue;\n const eagerPath = context.resolveCallPath(context.getCallPath(eagerCall) ?? \"\");\n if (isTrivialInitializerPath(eagerPath) || /^React\\.use[A-Z0-9_]/.test(eagerPath)) continue;\n\n diagnostics.push({\n node: callNameNode(eagerCall),\n message: `${eagerPath || \"This initializer call\"} is evaluated every render before useState can reuse the existing state.`,\n help: \"Wrap expensive initial state creation in function() ... end so it only runs when the state is first initialized.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nexport const rerenderLazyRefInit: RuleDefinition = {\n id: \"react-luau/rerender-lazy-ref-init\",\n category: \"Performance\",\n severity: \"warning\",\n description: \"Avoid eagerly rebuilding expensive values passed to useRef on every render.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (path !== \"React.useRef\") continue;\n const initializer = context.callArguments(call)[0];\n if (!initializer || initializer.type !== \"function_call\") continue;\n const eagerPath = context.resolveCallPath(context.getCallPath(initializer) ?? \"\");\n if (isTrivialInitializerPath(eagerPath) || /^React\\.use[A-Z0-9_]/.test(eagerPath)) continue;\n\n diagnostics.push({\n node: callNameNode(initializer),\n message: `${eagerPath || \"This initializer call\"} is rebuilt before useRef returns the existing ref on every render.`,\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.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nexport const rerenderStateOnlyInHandlers: RuleDefinition = {\n id: \"react-luau/rerender-state-only-in-handlers\",\n category: \"Performance\",\n severity: \"warning\",\n description: \"State that is only read from callbacks may be mutable data rather than rendered state.\",\n run(context) {\n const diagnostics = [];\n\n for (const owner of context.model.functions) {\n if (!owner.isComponent) continue;\n for (const binding of stateBindingsFor(context, owner)) {\n if (binding.valueName === \"_\" || binding.valueName.startsWith(\"_\")) continue;\n if (/^(set)?(?:TriggerRender|ForceUpdate|Rerender|ForceRender|Tick|Bump|BumpVersion|InvalidateRender|Refresh|Repaint)$/i.test(binding.setterName)) continue;\n if (!callsSetter(context, owner, binding.setterName)) continue;\n if (directlyReadsValue(context, owner, binding)) continue;\n\n diagnostics.push({\n node: identifierNode(binding.declaration, binding.valueName) ?? binding.declaration,\n message: `${binding.valueName} is updated as React state but is never read by the component's render path or hook arguments.`,\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.\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const noDirectStateMutation: RuleDefinition = {\n id: \"react-luau/no-direct-state-mutation\",\n category: \"Correctness\",\n severity: \"warning\",\n description: \"Do not mutate table state in place.\",\n run(context) {\n const diagnostics = [];\n const seen = new Set<string>();\n\n for (const binding of context.model.stateBindings) {\n const owner = binding.owner;\n if (!owner?.body || !isPlainTableState(binding, context)) continue;\n const escaped = binding.valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n for (const node of context.walk(owner.body)) {\n if (node.startIndex >= binding.declaration.startIndex && node.endIndex <= binding.declaration.endIndex) continue;\n let mutates = false;\n\n if (node.type === \"assignment_statement\" || node.type === \"update_statement\") {\n mutates = new RegExp(`^\\\\s*${escaped}\\\\s*(?:\\\\.|\\\\[)`).test(node.text);\n } else if (node.type === \"function_call\" && mightMutateParameters(context, node)) {\n const arguments_ = context.callArguments(node);\n for (const index of mutatedParameterIndexesForCall(context, node, owner)) {\n const argument = arguments_[index];\n if (!argument) continue;\n const origin = mutationOriginForExpression(context, argument, owner);\n if (origin.kind === \"state\" && origin.binding === binding) {\n mutates = true;\n break;\n }\n }\n }\n\n if (!mutates || isBindingShadowedBetween(node, owner, binding.valueName, binding.declaration)) continue;\n const key = `${node.startIndex}:${binding.valueName}`;\n if (seen.has(key)) continue;\n seen.add(key);\n diagnostics.push({\n node: node.type === \"function_call\" ? callNameNode(node) : assignmentTargetNode(node),\n message: `${binding.valueName} is React state backed by a table and is mutated in place.`,\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.`,\n });\n }\n }\n\n return diagnostics;\n },\n};\n",
42
42
  "import type { RuleDefinition } from \"../types\";\nimport { fieldName, fieldNameNode, fieldValue } from \"./helpers\";\n\nexport const unstableContextValue: RuleDefinition = {\n id: \"react-luau/unstable-context-value\",\n category: \"Performance\",\n severity: \"warning\",\n description: \"Avoid recreating context value tables on every provider render when identity matters.\",\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const component = context.containingComponent(call);\n if (!component || !context.isDirectlyExecutedInFunction(call, component)) continue;\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n if (path !== \"React.createElement\") continue;\n const args = context.callArguments(call);\n const element = args[0]?.text ?? \"\";\n const props = args[1];\n if (!/\\.Provider$/.test(element) || !props || props.type !== \"table_constructor\") continue;\n const valueField = props.namedChildren.find((field) =>\n field.type === \"field\" && fieldName(field) === \"value\" && fieldValue(field)?.type === \"table_constructor\"\n );\n if (!valueField) continue;\n\n diagnostics.push({\n node: fieldNameNode(valueField),\n message: \"Context Provider receives a new inline value table on every render.\",\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
43
  "import type { RuleDefinition } from \"../types\";\nimport { effectNeedsCleanup } from \"./effect-needs-cleanup\";\nimport {\n noDerivedStateEffect,\n noEffectWithFreshDeps,\n noMutableInDeps,\n noSelfUpdatingEffect,\n} from \"./effect-state-rules\";\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 { noRandomKey } from \"./no-random-key\";\nimport { noSetStateInRender } from \"./no-set-state-in-render\";\nimport { parseErrors } from \"./parse-errors\";\nimport {\n preferUseRefForMutableCell,\n rerenderHighFrequencyState,\n rerenderRepeatedCollectionScan,\n rerenderStaticDiscoveryInRender,\n rerenderStaticState,\n rerenderUnnecessaryUseCallback,\n rerenderUnnecessaryUseMemo,\n rerenderUnstableMemoProps,\n} from \"./performance-rules\";\nimport { preferBindingOverState, preferBindingOverStateCandidate } from \"./prefer-binding-over-state\";\nimport { noCreateRootInRender } from \"./react-roblox-lifecycle\";\nimport { noRefCurrentInRender } from \"./ref-rules\";\nimport {\n noSideEffectsInRender,\n noTaskSpawnInRender,\n noYieldInRender,\n} from \"./render-side-effects\";\nimport { rulesOfHooks } from \"./rules-of-hooks\";\nimport {\n noDirectStateMutation,\n rerenderFunctionalSetstate,\n rerenderLazyRefInit,\n rerenderLazyStateInit,\n rerenderStateOnlyInHandlers,\n} from \"./state-performance\";\nimport { unstableContextValue } from \"./unstable-context-value\";\n\nexport const rules: 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 noDirectStateMutation,\n noRefCurrentInRender,\n noCreateContextInRender,\n noNestedComponentDefinition,\n noRandomKey,\n noYieldInRender,\n noTaskSpawnInRender,\n noSideEffectsInRender,\n noCreateRootInRender,\n noPropMutation,\n noArrayIndexAsKey,\n unstableContextValue,\n];\n\nexport const rulesById = new Map(rules.map((rule) => [rule.id, rule]));\n",
44
44
  "import { availableParallelism } from \"node:os\";\nimport { Worker } from \"node:worker_threads\";\nimport type { ReactFileAnalysisInput, ReactFileAnalysisResult } from \"./file-analysis\";\nimport type {\n AnalyzedEffectWorkerModule,\n EffectWorkerIndexInput,\n IndexedEffectWorkerModule,\n} from \"./project-effects\";\nimport type { SourceEffectModuleSummary } from \"./types\";\n\nexport const MIN_PARALLEL_FILES = 16;\nconst MAX_ANALYSIS_WORKERS = 8;\n\nexport interface ReactScanWorkerRequest {\n type: \"react-scan\";\n files: ReactFileAnalysisInput[];\n reportProgress?: boolean;\n}\n\nexport interface ReactScanWorkerResponse {\n type: \"react-scan\";\n results: ReactFileAnalysisResult[];\n}\n\nexport interface EffectIndexWorkerRequest {\n type: \"effect-index\";\n files: EffectWorkerIndexInput[];\n moduleAliases: Map<string, string>;\n}\n\nexport interface EffectIndexWorkerResponse {\n type: \"effect-index\";\n modules: IndexedEffectWorkerModule[];\n}\n\nexport interface EffectAnalyzeWorkerRequest {\n type: \"effect-analyze\";\n moduleSummaries: Map<string, SourceEffectModuleSummary>;\n exportedFunctions: Map<string, string>;\n}\n\nexport interface EffectAnalyzeWorkerResponse {\n type: \"effect-analyze\";\n modules: AnalyzedEffectWorkerModule[];\n}\n\nexport interface ReactScanWorkerProgress {\n type: \"react-scan-progress\";\n file: string;\n}\n\ninterface WorkerErrorResponse {\n type: \"error\";\n message: string;\n stack?: string;\n}\n\nexport type AnalysisWorkerRequest = ReactScanWorkerRequest | EffectIndexWorkerRequest | EffectAnalyzeWorkerRequest;\nexport type AnalysisWorkerResponse =\n | ReactScanWorkerResponse\n | ReactScanWorkerProgress\n | EffectIndexWorkerResponse\n | EffectAnalyzeWorkerResponse\n | WorkerErrorResponse;\n\nfunction workerUrl(): URL {\n const filename = import.meta.url.endsWith(\".ts\") ? \"scan-worker.ts\" : \"scan-worker.js\";\n return new URL(`./${filename}`, import.meta.url);\n}\n\nexport function analysisWorkerCount(fileCount: number): number {\n if (fileCount < MIN_PARALLEL_FILES) return 1;\n return Math.max(1, Math.min(MAX_ANALYSIS_WORKERS, availableParallelism(), Math.ceil(fileCount / 8)));\n}\n\nfunction balancedIndexes(files: Array<{ source: string }>, workerCount: number): number[] {\n const sizes = new Array<number>(workerCount).fill(0);\n const indexes = new Array<number>(files.length);\n const ordered = files.map((file, index) => ({ file, index })).sort((left, right) => right.file.source.length - left.file.source.length);\n\n for (const { file, index } of ordered) {\n let target = 0;\n for (let workerIndex = 1; workerIndex < workerCount; workerIndex += 1) {\n if (sizes[workerIndex] < sizes[target]) target = workerIndex;\n }\n indexes[index] = target;\n sizes[target] += file.source.length;\n }\n\n return indexes;\n}\n\nexport class AnalysisWorkerPool {\n private readonly workers: Worker[];\n private readonly effectOwners = new Map<string, number>();\n\n constructor(workerCount: number) {\n this.workers = Array.from({ length: workerCount }, () => new Worker(workerUrl()));\n }\n\n async indexEffectModules(\n files: EffectWorkerIndexInput[],\n moduleAliases: Map<string, string>,\n onBatchComplete?: (count: number, file?: string) => void,\n ): Promise<IndexedEffectWorkerModule[]> {\n if (files.length === 0) return [];\n const assignments = balancedIndexes(files, this.workers.length);\n const batches = Array.from({ length: this.workers.length }, () => [] as EffectWorkerIndexInput[]);\n for (let index = 0; index < files.length; index += 1) {\n const owner = assignments[index];\n const file = files[index];\n batches[owner].push(file);\n this.effectOwners.set(file.relativePath, owner);\n }\n\n const results = await Promise.all(batches.map(async (batch, index) => {\n if (batch.length === 0) return [];\n const response = await this.send(this.workers[index], {\n type: \"effect-index\",\n files: batch,\n moduleAliases,\n });\n if (response.type !== \"effect-index\") throw new Error(`Unexpected analysis worker response: ${response.type}`);\n onBatchComplete?.(batch.length, batch.at(-1)?.relativePath);\n return response.modules;\n }));\n return results.flat();\n }\n\n async analyzeEffectModules(\n moduleSummaries: Map<string, SourceEffectModuleSummary>,\n exportedFunctions: Map<string, string>,\n onBatchComplete?: (count: number) => void,\n ): Promise<AnalyzedEffectWorkerModule[]> {\n const results = await Promise.all(this.workers.map(async (worker) => {\n const response = await this.send(worker, { type: \"effect-analyze\", moduleSummaries, exportedFunctions });\n if (response.type !== \"effect-analyze\") throw new Error(`Unexpected analysis worker response: ${response.type}`);\n onBatchComplete?.(response.modules.length);\n return response.modules;\n }));\n return results.flat();\n }\n\n async scanReactFiles(\n files: ReactFileAnalysisInput[],\n onBatchComplete?: (count: number, file?: string) => void,\n ): Promise<ReactFileAnalysisResult[]> {\n if (files.length === 0) return [];\n const batches = Array.from({ length: this.workers.length }, () => [] as ReactFileAnalysisInput[]);\n const sizes = new Array<number>(this.workers.length).fill(0);\n const unassigned: ReactFileAnalysisInput[] = [];\n\n for (const file of files) {\n const owner = this.effectOwners.get(file.relativePath);\n if (owner === undefined) {\n unassigned.push(file);\n continue;\n }\n batches[owner].push(file);\n sizes[owner] += file.source.length;\n }\n\n for (const file of [...unassigned].sort((left, right) => right.source.length - left.source.length)) {\n let target = 0;\n for (let index = 1; index < this.workers.length; index += 1) {\n if (sizes[index] < sizes[target]) target = index;\n }\n batches[target].push(file);\n sizes[target] += file.source.length;\n }\n\n const results = await Promise.all(batches.map(async (batch, index) => {\n if (batch.length === 0) return [];\n const response = await this.send(\n this.workers[index],\n { type: \"react-scan\", files: batch, reportProgress: Boolean(onBatchComplete) },\n (progress) => onBatchComplete?.(1, progress.file),\n );\n if (response.type !== \"react-scan\") throw new Error(`Unexpected analysis worker response: ${response.type}`);\n return response.results;\n }));\n return results.flat();\n }\n\n close(): void {\n for (const worker of this.workers) {\n worker.unref();\n void worker.terminate().catch(() => {});\n }\n }\n\n private send(\n worker: Worker,\n request: AnalysisWorkerRequest,\n onProgress?: (progress: ReactScanWorkerProgress) => void,\n ): Promise<AnalysisWorkerResponse> {\n return new Promise((resolve, reject) => {\n const cleanup = (): void => {\n worker.off(\"message\", onMessage);\n worker.off(\"error\", onError);\n worker.off(\"exit\", onExit);\n };\n const onMessage = (response: AnalysisWorkerResponse): void => {\n if (response.type === \"react-scan-progress\") {\n onProgress?.(response);\n return;\n }\n cleanup();\n if (response.type === \"error\") {\n const error = new Error(response.message);\n if (response.stack) error.stack = response.stack;\n reject(error);\n return;\n }\n resolve(response);\n };\n const onError = (error: Error): void => {\n cleanup();\n reject(error);\n };\n const onExit = (code: number): void => {\n if (code === 0) return;\n cleanup();\n reject(new Error(`Analysis worker exited with code ${code}`));\n };\n worker.on(\"message\", onMessage);\n worker.on(\"error\", onError);\n worker.on(\"exit\", onExit);\n worker.postMessage(request);\n });\n }\n}\n",
45
- "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n buildUniqueFeatureAliases,\n moduleKeys,\n normalizeRequireTarget,\n resolveModuleReference,\n type ModuleIdentity,\n} from \"./module-resolution\";\nimport { sourceHasHighFrequencyRobloxEvent } from \"./roblox-semantics\";\nimport type {\n BindingCandidateHookSummary,\n ConditionalHookModeSummary,\n ExternalCallbackFunctionSummary,\n ProjectModel,\n ScanFileInput,\n} from \"./types\";\n\nconst EXTERNAL_UPDATE_SOURCE =\n /(?::|\\.)(?:Connect|Once|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)\\s*\\(|\\b(?:subscribe|observe|listen|watch|onStep|onUpdate|onChange|onChanged)[A-Za-z0-9_]*\\s*\\(|GetPropertyChangedSignal\\s*\\(|GetAttributeChangedSignal\\s*\\(|\\.Changed\\b/i;\nconst SEMANTIC_SNAPSHOT_EXPRESSION =\n /\\b(?:getState|getSnapshot|snapshot|selector|select|table\\s*\\.\\s*(?:clone|freeze|move))\\b|(?:\\.|\\[\\s*[\"'])State(?:\\b|[\"']\\s*\\])/i;\nconst PURE_MIRROR_EXPRESSION_ROOTS = new Set([\n \"math\", \"string\", \"utf8\", \"bit32\", \"UDim\", \"UDim2\", \"Vector2\", \"Vector3\",\n \"Color3\", \"CFrame\", \"Rect\", \"NumberRange\", \"NumberSequence\", \"ColorSequence\",\n \"BrickColor\", \"Font\", \"Enum\", \"tostring\", \"tonumber\", \"type\", \"typeof\",\n \"true\", \"false\", \"nil\",\n]);\nconst CALLBACK_PARAMETER_NAME =\n /^(?:callback|handler|listener|subscriber|observer|effect|fn)$/i;\n\ninterface SourceRecord extends ModuleIdentity {\n source: string;\n}\n\nexport interface ProjectModelModuleAnalysis {\n record: SourceRecord;\n memoized?: \"shallow\" | \"custom\";\n bindingHook?: BindingCandidateHookSummary;\n callbackFunction?: ExternalCallbackFunctionSummary;\n bindingCompatibleProps?: Set<string>;\n staticIterationTables?: Set<string>;\n conditionalHookMode?: ConditionalHookModeSummary;\n declaredMethods: Map<string, Set<string>>;\n}\n\nexport interface ProjectModelModuleCacheEntry {\n hash: string;\n analysis: ProjectModelModuleAnalysis;\n}\n\nexport interface ProjectModelBuildOptions {\n fileHashes?: Readonly<Record<string, string>>;\n moduleCache?: Map<string, ProjectModelModuleCacheEntry>;\n}\n\nfunction exportedFunctionName(source: string): string | null {\n return source.match(/\\breturn\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*$/)?.[1] ?? null;\n}\n\nfunction findFunctionParameters(\n source: string,\n functionName: string,\n): string | null {\n const escaped = functionName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const patterns = [\n new RegExp(\n `\\\\b(?:local\\\\s+)?function\\\\s+${escaped}(?:<[^>]*>)?\\\\s*\\\\(`,\n \"s\",\n ),\n new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*function(?:<[^>]*>)?\\\\s*\\\\(`, \"s\"),\n ];\n for (const pattern of patterns) {\n const match = pattern.exec(source);\n if (!match) continue;\n const open = match.index + match[0].lastIndexOf(\"(\");\n return extractCallArguments(source, open);\n }\n return null;\n}\n\nfunction splitTopLevelParameters(parameters: string): string[] {\n const result: string[] = [];\n let start = 0;\n let round = 0;\n let square = 0;\n let curly = 0;\n let angle = 0;\n let quote: string | null = null;\n let escaped = false;\n\n for (let index = 0; index < parameters.length; index += 1) {\n const char = parameters[index];\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"(\") round += 1;\n else if (char === \")\") round = Math.max(0, round - 1);\n else if (char === \"[\") square += 1;\n else if (char === \"]\") square = Math.max(0, square - 1);\n else if (char === \"{\") curly += 1;\n else if (char === \"}\") curly = Math.max(0, curly - 1);\n else if (char === \"<\") angle += 1;\n else if (char === \">\") angle = Math.max(0, angle - 1);\n else if (\n char === \",\" &&\n round === 0 &&\n square === 0 &&\n curly === 0 &&\n angle === 0\n ) {\n result.push(parameters.slice(start, index).trim());\n start = index + 1;\n }\n }\n result.push(parameters.slice(start).trim());\n return result.filter(Boolean);\n}\n\ninterface DualModeBindingStatePair {\n valueName: string;\n setterName: string;\n bindingModeParameterIndex: number;\n bindingModeParameterName: string;\n bindingWhenTruthy: boolean;\n}\n\nfunction findDualModeBindingStatePair(\n source: string,\n functionName: string,\n): DualModeBindingStatePair | null {\n const parametersText = findFunctionParameters(source, functionName);\n if (parametersText === null) return null;\n const parameterNames = splitTopLevelParameters(parametersText).map(\n (parameter) => parameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? null,\n );\n\n const declarations = [\n ...source.matchAll(\n /^[ \\t]*local[ \\t]+([A-Za-z_][A-Za-z0-9_]*)[ \\t]*,[ \\t]*([A-Za-z_][A-Za-z0-9_]*)[ \\t]*(?:--[^\\n]*)?$/gm,\n ),\n ];\n for (const declaration of declarations) {\n const valueName = declaration[1];\n const setterName = declaration[2];\n const escapedValue = valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const escapedSetter = setterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const bindingAssignment = `${escapedValue}\\\\s*,\\\\s*${escapedSetter}\\\\s*=\\\\s*(?:React\\\\.)?useBinding\\\\s*\\\\(`;\n const stateAssignment = `${escapedValue}\\\\s*,\\\\s*${escapedSetter}\\\\s*=\\\\s*(?:React\\\\.)?useState\\\\s*\\\\(`;\n\n for (const [parameterIndex, parameterName] of parameterNames.entries()) {\n if (!parameterName) continue;\n const escapedParameter = parameterName.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n const patterns = [\n {\n regex: new RegExp(\n `\\\\bif\\\\s+${escapedParameter}\\\\s+then[\\\\s\\\\S]*?${bindingAssignment}[\\\\s\\\\S]*?\\\\belse\\\\b[\\\\s\\\\S]*?${stateAssignment}`,\n ),\n bindingWhenTruthy: true,\n },\n {\n regex: new RegExp(\n `\\\\bif\\\\s+${escapedParameter}\\\\s+then[\\\\s\\\\S]*?${stateAssignment}[\\\\s\\\\S]*?\\\\belse\\\\b[\\\\s\\\\S]*?${bindingAssignment}`,\n ),\n bindingWhenTruthy: false,\n },\n {\n regex: new RegExp(\n `\\\\bif\\\\s+not\\\\s+${escapedParameter}\\\\s+then[\\\\s\\\\S]*?${stateAssignment}[\\\\s\\\\S]*?\\\\belse\\\\b[\\\\s\\\\S]*?${bindingAssignment}`,\n ),\n bindingWhenTruthy: true,\n },\n {\n regex: new RegExp(\n `\\\\bif\\\\s+not\\\\s+${escapedParameter}\\\\s+then[\\\\s\\\\S]*?${bindingAssignment}[\\\\s\\\\S]*?\\\\belse\\\\b[\\\\s\\\\S]*?${stateAssignment}`,\n ),\n bindingWhenTruthy: false,\n },\n ];\n const match = patterns.find((pattern) => pattern.regex.test(source));\n if (!match) continue;\n return {\n valueName,\n setterName,\n bindingModeParameterIndex: parameterIndex,\n bindingModeParameterName: parameterName,\n bindingWhenTruthy: match.bindingWhenTruthy,\n };\n }\n }\n\n return null;\n}\n\nfunction exportedFunctionParameters(\n source: string,\n): { name?: string; parameters: string[] } | null {\n const name = exportedFunctionName(source);\n if (name) {\n const parameters = findFunctionParameters(source, name);\n if (parameters === null) return null;\n return { name, parameters: splitTopLevelParameters(parameters) };\n }\n\n const match = /^\\s*return\\s+function(?:<[^>]*>)?\\s*\\(/m.exec(source);\n if (!match || match.index === undefined) return null;\n const open = match.index + match[0].lastIndexOf(\"(\");\n const parameters = extractCallArguments(source, open);\n if (parameters === null) return null;\n return { parameters: splitTopLevelParameters(parameters) };\n}\n\nfunction parameterName(parameter: string): string | null {\n return parameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? null;\n}\n\nfunction branchContainsHookCall(text: string): boolean {\n return /\\b(?:[A-Za-z_][A-Za-z0-9_]*[.:])?use[A-Z0-9_][A-Za-z0-9_]*\\s*\\(/.test(\n text,\n );\n}\n\nfunction conditionAliasesForParameter(\n source: string,\n parameter: string,\n): string[] {\n const aliases = new Set<string>([parameter]);\n const escaped = parameter.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n const directPatterns = [\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*${escaped}\\\\s*$`,\n \"gm\",\n ),\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*not\\\\s+${escaped}\\\\s*$`,\n \"gm\",\n ),\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*${escaped}\\\\s*(?:==|~=)\\\\s*(?:true|false|nil)\\\\s*$`,\n \"gm\",\n ),\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*(?:true|false|nil)\\\\s*(?:==|~=)\\\\s*${escaped}\\\\s*$`,\n \"gm\",\n ),\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*if\\\\s+${escaped}\\\\s*(?:==|~=)\\\\s*nil\\\\s+then\\\\s+(?:true|false)\\\\s+else\\\\s+${escaped}\\\\s*$`,\n \"gm\",\n ),\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*if\\\\s+${escaped}\\\\s+then\\\\s+(?:true|false)\\\\s+else\\\\s+(?:true|false)\\\\s*$`,\n \"gm\",\n ),\n ];\n\n for (const pattern of directPatterns) {\n for (const match of source.matchAll(pattern)) aliases.add(match[1]);\n }\n return [...aliases];\n}\n\nfunction findConditionalHookMode(\n source: string,\n): ConditionalHookModeSummary | null {\n const exported = exportedFunctionParameters(source);\n if (!exported) return null;\n\n const parameterNames = exported.parameters.map(parameterName);\n const controlledIndexes: number[] = [];\n const controlledNames: string[] = [];\n const conditionVariables: Record<string, number> = {};\n\n for (const [index, name] of parameterNames.entries()) {\n if (!name) continue;\n const aliases = conditionAliasesForParameter(source, name);\n let controlsHook = false;\n\n for (const alias of aliases) {\n const escaped = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const patterns = [\n new RegExp(\n `\\\\bif\\\\s+${escaped}\\\\s+then([\\\\s\\\\S]*?)(?=\\\\belse\\\\b|\\\\bend\\\\b)`,\n \"g\",\n ),\n new RegExp(\n `\\\\bif\\\\s+not\\\\s+${escaped}\\\\s+then([\\\\s\\\\S]*?)(?=\\\\belse\\\\b|\\\\bend\\\\b)`,\n \"g\",\n ),\n new RegExp(\n `\\\\bif\\\\s+${escaped}\\\\s*(?:==|~=)\\\\s*(?:true|false|nil)\\\\s+then([\\\\s\\\\S]*?)(?=\\\\belse\\\\b|\\\\bend\\\\b)`,\n \"g\",\n ),\n new RegExp(\n `\\\\bif\\\\s+(?:true|false|nil)\\\\s*(?:==|~=)\\\\s*${escaped}\\\\s+then([\\\\s\\\\S]*?)(?=\\\\belse\\\\b|\\\\bend\\\\b)`,\n \"g\",\n ),\n ];\n\n for (const pattern of patterns) {\n for (const match of source.matchAll(pattern)) {\n if (!branchContainsHookCall(match[1] ?? \"\")) continue;\n controlsHook = true;\n conditionVariables[alias] = index;\n break;\n }\n if (controlsHook) break;\n }\n }\n\n if (!controlsHook) continue;\n controlledIndexes.push(index);\n controlledNames.push(name);\n }\n\n if (controlledIndexes.length === 0) return null;\n return {\n name: exported.name,\n parameterIndexes: controlledIndexes,\n parameterNames: controlledNames,\n conditionVariables,\n knownCallSites: 0,\n dynamicCallSites: 0,\n };\n}\n\nfunction maskLuauNonCode(source: string): string {\n let result = \"\";\n let index = 0;\n while (index < source.length) {\n const char = source[index];\n const next = source[index + 1] ?? \"\";\n\n if (char === \"-\" && next === \"-\") {\n if (source[index + 2] === \"[\" && source[index + 3] === \"[\") {\n const end = source.indexOf(\"]]\", index + 4);\n const stop = end >= 0 ? end + 2 : source.length;\n const chunk = source.slice(index, stop);\n result += chunk.replace(/[^\\n]/g, \" \");\n index = stop;\n continue;\n }\n const end = source.indexOf(\"\\n\", index + 2);\n const stop = end >= 0 ? end : source.length;\n result += \" \".repeat(stop - index);\n index = stop;\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n const quote = char;\n let end = index + 1;\n while (end < source.length) {\n if (source[end] === \"\\\\\") {\n end += 2;\n continue;\n }\n if (source[end] === quote) {\n end += 1;\n break;\n }\n end += 1;\n }\n result += source.slice(index, end).replace(/[^\\n]/g, \" \");\n index = end;\n continue;\n }\n\n if (char === \"[\" && next === \"[\") {\n const end = source.indexOf(\"]]\", index + 2);\n const stop = end >= 0 ? end + 2 : source.length;\n result += source.slice(index, stop).replace(/[^\\n]/g, \" \");\n index = stop;\n continue;\n }\n\n result += char;\n index += 1;\n }\n return result;\n}\n\nfunction stableLiteralConstants(source: string): Map<string, string> {\n const result = new Map<string, string>();\n for (const match of source.matchAll(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(true|false|nil)\\s*$/gm,\n )) {\n const name = match[1];\n const assignments = [\n ...source.matchAll(\n new RegExp(\n `\\\\b${name.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, \"\\\\\\\\$&\")}\\\\s*=`,\n \"g\",\n ),\n ),\n ];\n if (assignments.length === 1) result.set(name, match[2]);\n }\n return result;\n}\n\nfunction isStableHookModeArgument(\n text: string | undefined,\n constants: Map<string, string>,\n): boolean {\n if (text === undefined) return true;\n let value = text.trim();\n while (value.startsWith(\"(\") && value.endsWith(\")\"))\n value = value.slice(1, -1).trim();\n if (/^(?:true|false|nil)$/.test(value)) return true;\n return constants.has(value);\n}\n\nfunction collectConditionalHookModeCallSites(\n records: SourceRecord[],\n aliases: Map<string, ConditionalHookModeSummary>,\n): void {\n for (const record of records) {\n const imports = new Map<string, ConditionalHookModeSummary>();\n for (const match of record.source.matchAll(\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)/gs,\n )) {\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n aliases,\n );\n if (summary) imports.set(match[1], summary);\n }\n if (imports.size === 0) continue;\n\n const masked = maskLuauNonCode(record.source);\n const constants = stableLiteralConstants(masked);\n for (const [localName, summary] of imports) {\n const escaped = localName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const callPattern = new RegExp(`\\\\b${escaped}\\\\s*\\\\(`, \"g\");\n for (const match of masked.matchAll(callPattern)) {\n if (match.index === undefined) continue;\n const open = masked.indexOf(\"(\", match.index);\n const argumentsText = extractCallArguments(record.source, open);\n if (argumentsText === null) continue;\n const args = splitTopLevelParameters(argumentsText);\n summary.knownCallSites += 1;\n if (\n summary.parameterIndexes.some(\n (index) => !isStableHookModeArgument(args[index], constants),\n )\n ) {\n summary.dynamicCallSites += 1;\n }\n }\n }\n }\n}\n\nfunction findExternalCallbackFunction(\n source: string,\n): ExternalCallbackFunctionSummary | null {\n const name = exportedFunctionName(source);\n if (!name || !EXTERNAL_UPDATE_SOURCE.test(source)) return null;\n const parameters = findFunctionParameters(source, name);\n if (parameters === null) return null;\n\n const callbackParameterIndexes: number[] = [];\n for (const [index, parameter] of splitTopLevelParameters(\n parameters,\n ).entries()) {\n const parameterName = parameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (!parameterName) continue;\n const functionTyped = /->/.test(parameter);\n const semanticallyNamed = CALLBACK_PARAMETER_NAME.test(parameterName);\n const used = new RegExp(\n `\\\\b${parameterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\b`,\n ).test(source);\n if (used && (functionTyped || semanticallyNamed))\n callbackParameterIndexes.push(index);\n }\n\n if (callbackParameterIndexes.length === 0) return null;\n return {\n name,\n callbackParameterIndexes,\n highFrequency: sourceHasHighFrequencyRobloxEvent(source) || sourceHasLikelyContinuousSubscription(source),\n };\n}\n\nfunction sourceHasLikelyContinuousSubscription(source: string): boolean {\n return /(?::|\\.)onStep\\s*\\(/i.test(source);\n}\n\nfunction expressionReferencesName(expression: string, name: string): boolean {\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return new RegExp(`\\\\b${escaped}\\\\b`).test(expression);\n}\n\nfunction isLiteralStateTransitionExpression(expression: string): boolean {\n const text = expression.trim();\n return /^(?:true|false|nil|[-+]?\\d+(?:\\.\\d+)?|[\"'][^\"']*[\"'])$/.test(text);\n}\n\nfunction expressionHasLikelyExternalInput(expression: string): boolean {\n const withoutMembers = expression.replace(/\\.\\s*[A-Za-z_][A-Za-z0-9_]*/g, \"\");\n for (const match of withoutMembers.matchAll(/\\b[A-Za-z_][A-Za-z0-9_]*\\b/g)) {\n if (!PURE_MIRROR_EXPRESSION_ROOTS.has(match[0])) return true;\n }\n return false;\n}\n\nfunction subscriptionMirrorConfidence(\n source: string,\n setterName: string,\n): \"strong\" | \"possible\" | \"none\" {\n const escapedSetter = setterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n // Passing the React setter directly to a persistent subscription is the\n // clearest possible \"external value -> React state\" mirror shape.\n const directSetter = new RegExp(\n `(?::|\\\\.)(Connect|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)\\\\s*\\\\(\\\\s*${escapedSetter}\\\\b`,\n \"i\",\n );\n if (directSetter.test(source)) return \"strong\";\n\n const callbackPattern = new RegExp(\n `(?::|\\\\.)(Connect|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)\\\\s*\\\\(\\\\s*function\\\\s*\\\\(([^)]*)\\\\)[\\\\s\\\\S]{0,2400}?\\\\b${escapedSetter}\\\\s*\\\\(`,\n \"gi\",\n );\n\n let possible = false;\n for (const match of source.matchAll(callbackPattern)) {\n if (match.index === undefined) continue;\n const callbackParameters = splitTopLevelParameters(match[2] ?? \"\")\n .map(parameterName)\n .filter((name): name is string => Boolean(name));\n const setterOffset = match[0].lastIndexOf(setterName);\n if (setterOffset < 0) continue;\n const setterStart = match.index + setterOffset;\n const open = source.indexOf(\"(\", setterStart + setterName.length);\n const argumentsText = extractCallArguments(source, open);\n if (argumentsText === null) continue;\n const setterArgs = splitTopLevelParameters(argumentsText);\n const expression = setterArgs[0]?.trim() ?? \"\";\n if (!expression || /^function\\b/.test(expression) || isLiteralStateTransitionExpression(expression)) continue;\n if (SEMANTIC_SNAPSHOT_EXPRESSION.test(expression)) continue;\n\n if (callbackParameters.some((name) => expressionReferencesName(expression, name))) {\n return \"strong\";\n }\n if (!expressionHasLikelyExternalInput(expression)) continue;\n possible = true;\n }\n\n return possible ? \"possible\" : \"none\";\n}\n\nfunction findBindingCandidateHook(\n source: string,\n): BindingCandidateHookSummary | null {\n const exported = source.match(\n /\\breturn\\s+(use[A-Z0-9_][A-Za-z0-9_]*)\\s*$/,\n )?.[1];\n if (!exported) return null;\n\n const stateMatches = [\n ...source.matchAll(\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*,\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(?:React\\.)?useState\\s*\\(/g,\n ),\n ];\n const directState =\n stateMatches.length === 1\n ? { valueName: stateMatches[0][1], setterName: stateMatches[0][2] }\n : null;\n const dualMode = directState\n ? null\n : findDualModeBindingStatePair(source, exported);\n if (!directState && !dualMode) return null;\n\n const valueName = directState?.valueName ?? dualMode!.valueName;\n const setterName = directState?.setterName ?? dualMode!.setterName;\n const escapedValue = valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const escapedSetter = setterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (!new RegExp(`\\\\breturn\\\\s+${escapedValue}\\\\b`).test(source)) return null;\n const setterCalled = new RegExp(`\\\\b${escapedSetter}\\\\s*\\\\(`).test(source);\n const setterPassedToSubscription = new RegExp(\n `(?::|\\\\.)(?:Connect|Once|Subscribe|Observe|Listen|Watch)\\\\s*\\\\(\\\\s*${escapedSetter}\\\\b`,\n \"i\",\n ).test(source);\n if (!setterCalled && !setterPassedToSubscription) return null;\n\n const highFrequency = sourceHasHighFrequencyRobloxEvent(source) || sourceHasLikelyContinuousSubscription(source);\n const external = highFrequency || EXTERNAL_UPDATE_SOURCE.test(source);\n if (!external) return null;\n\n const literalPropertySignal = source.match(\n /GetPropertyChangedSignal\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/,\n );\n const dynamicPropertySignal = literalPropertySignal\n ? null\n : source.match(\n /GetPropertyChangedSignal\\s*\\(\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*\\)/,\n );\n const literalPropertyName = literalPropertySignal?.[1] ?? null;\n const dynamicPropertyName = dynamicPropertySignal?.[1] ?? null;\n const readsObservedProperty = literalPropertyName\n ? new RegExp(\n `(?:\\\\.\\\\s*${literalPropertyName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\b|\\\\[\\\\s*[\"']${literalPropertyName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}[\"']\\\\s*\\\\])`,\n ).test(source)\n : Boolean(\n dynamicPropertyName &&\n new RegExp(\n `\\\\[\\\\s*${dynamicPropertyName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\s*\\\\]`,\n ).test(source),\n );\n const instanceProperty = Boolean((literalPropertyName || dynamicPropertyName) && readsObservedProperty);\n const mirrorConfidence = instanceProperty\n ? \"strong\"\n : subscriptionMirrorConfidence(source, setterName);\n\n let observedPropertyParameterIndex: number | undefined;\n if (instanceProperty && dynamicPropertyName) {\n const parameters = findFunctionParameters(source, exported);\n if (parameters !== null) {\n const parameterNames = splitTopLevelParameters(parameters).map(\n (parameter) => parameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? \"\",\n );\n const index = parameterNames.indexOf(dynamicPropertyName);\n if (index >= 0) observedPropertyParameterIndex = index;\n }\n }\n\n return {\n name: exported,\n highFrequency,\n external,\n sourceKind: instanceProperty ? \"instance-property\" : \"external-state\",\n mirrorConfidence,\n ...(instanceProperty && literalPropertyName\n ? { observedPropertyName: literalPropertyName }\n : {}),\n ...(observedPropertyParameterIndex !== undefined\n ? { observedPropertyParameterIndex }\n : {}),\n ...(dualMode\n ? {\n bindingModeParameterIndex: dualMode.bindingModeParameterIndex,\n bindingModeParameterName: dualMode.bindingModeParameterName,\n bindingWhenTruthy: dualMode.bindingWhenTruthy,\n }\n : {}),\n };\n}\n\nfunction findDerivedBindingCandidateHook(\n source: string,\n bindingCandidateHooks: Map<string, BindingCandidateHookSummary>,\n): BindingCandidateHookSummary | null {\n const exported = source.match(\n /\\breturn\\s+(use[A-Z0-9_][A-Za-z0-9_]*)\\s*$/,\n )?.[1];\n if (!exported) return null;\n\n const stateMatches = [\n ...source.matchAll(\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*,\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(?:React\\.)?useState\\s*\\(/g,\n ),\n ];\n if (stateMatches.length !== 1) return null;\n const valueName = stateMatches[0][1];\n const setterName = stateMatches[0][2];\n const escapedValue = valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const escapedSetter = setterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (!new RegExp(`\\\\breturn\\\\s+${escapedValue}\\\\b`).test(source)) return null;\n if (!new RegExp(`\\\\b${escapedSetter}\\\\s*\\\\(`).test(source)) return null;\n\n const requirePattern =\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)/gs;\n for (const match of source.matchAll(requirePattern)) {\n const localName = match[1];\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n bindingCandidateHooks,\n );\n if (!summary) continue;\n const escapedLocal = localName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (!new RegExp(`\\\\b${escapedLocal}\\\\s*\\\\(`).test(source)) continue;\n return {\n name: exported,\n highFrequency: summary.highFrequency,\n external: true,\n sourceKind: \"derived-external-state\",\n mirrorConfidence: summary.mirrorConfidence,\n };\n }\n\n return null;\n}\n\nfunction extractCallArguments(source: string, open: number): string | null {\n if (open < 0 || source[open] !== \"(\") return null;\n\n let depth = 0;\n let quote: string | null = null;\n let longStringDepth = 0;\n let escaped = false;\n\n for (let index = open; index < source.length; index += 1) {\n const char = source[index];\n const next = source[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 continue;\n }\n\n if (longStringDepth > 0) {\n if (char === \"]\" && next === \"]\") {\n longStringDepth -= 1;\n index += 1;\n }\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"[\" && next === \"[\") {\n longStringDepth += 1;\n index += 1;\n continue;\n }\n if (char === \"(\") depth += 1;\n else if (char === \")\") {\n depth -= 1;\n if (depth === 0) return source.slice(open + 1, index);\n }\n }\n\n return null;\n}\n\nfunction findMemoCall(source: string): string | null {\n const direct = /\\breturn\\s+(?:React\\.)?memo\\s*\\(/g.exec(source);\n if (direct)\n return extractCallArguments(source, source.indexOf(\"(\", direct.index));\n\n const assigned =\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(?:React\\.)?memo\\s*\\(/g;\n for (\n let match = assigned.exec(source);\n match;\n match = assigned.exec(source)\n ) {\n const name = match[1].replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (!new RegExp(`\\\\breturn\\\\s+${name}\\\\b`).test(source.slice(match.index)))\n continue;\n return extractCallArguments(source, source.indexOf(\"(\", match.index));\n }\n\n return null;\n}\n\nfunction hasTopLevelComma(argumentsText: string): boolean {\n let round = 0;\n let square = 0;\n let curly = 0;\n let quote: string | null = null;\n let escaped = false;\n\n for (let index = 0; index < argumentsText.length; index += 1) {\n const char = argumentsText[index];\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"(\") round += 1;\n else if (char === \")\") round -= 1;\n else if (char === \"[\") square += 1;\n else if (char === \"]\") square -= 1;\n else if (char === \"{\") curly += 1;\n else if (char === \"}\") curly -= 1;\n else if (char === \",\" && round === 0 && square === 0 && curly === 0)\n return true;\n }\n return false;\n}\n\nfunction bindingNameAlternative(name: string): string | null {\n if (!/state/i.test(name)) return null;\n return name.replace(/state/gi, (match) => {\n if (match === match.toUpperCase()) return \"BINDING\";\n if (match[0] === match[0].toUpperCase()) return \"Binding\";\n return \"binding\";\n });\n}\n\nfunction findDeclaredMethods(source: string): Map<string, Set<string>> {\n const methods = new Map<string, Set<string>>();\n const patterns = [\n /\\bfunction\\s+([A-Za-z_][A-Za-z0-9_.]*)\\s*[:.]\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*(?:<[^>]*>)?\\s*\\(/g,\n /\\b([A-Za-z_][A-Za-z0-9_.]*)\\s*[:.]\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*function\\b/g,\n ];\n for (const pattern of patterns) {\n for (const match of source.matchAll(pattern)) {\n const owner = match[1].toLowerCase();\n const names = methods.get(owner) ?? new Set<string>();\n names.add(match[2]);\n methods.set(owner, names);\n }\n }\n return methods;\n}\n\nfunction findBindingApiAlternativesFromMethodMaps(\n methodMaps: Iterable<Map<string, Set<string>>>,\n): Map<string, string> {\n const pairedAlternatives = new Map<string, Set<string>>();\n const unpairedStateNames = new Set<string>();\n\n for (const methods of methodMaps) {\n for (const names of methods.values()) {\n const byLower = new Map(\n [...names].map((name) => [name.toLowerCase(), name]),\n );\n for (const stateName of names) {\n const expected = bindingNameAlternative(stateName);\n if (!expected) continue;\n const bindingName = byLower.get(expected.toLowerCase());\n if (!bindingName) {\n unpairedStateNames.add(stateName.toLowerCase());\n continue;\n }\n const alternatives =\n pairedAlternatives.get(stateName) ?? new Set<string>();\n alternatives.add(bindingName);\n pairedAlternatives.set(stateName, alternatives);\n }\n }\n }\n\n const result = new Map<string, string>();\n for (const [stateName, alternatives] of pairedAlternatives) {\n if (\n alternatives.size === 1 &&\n !unpairedStateNames.has(stateName.toLowerCase())\n ) {\n result.set(stateName, [...alternatives][0]);\n }\n }\n return result;\n}\n\nconst NON_BINDABLE_HOST_FIELDS = new Set([\"ref\", \"key\", \"children\"]);\n\ninterface SourceRange {\n start: number;\n end: number;\n}\n\nfunction matchingDelimiter(\n source: string,\n open: number,\n openChar: string,\n closeChar: string,\n): number | null {\n let depth = 0;\n let quote: string | null = null;\n let escaped = false;\n let lineComment = false;\n let longString = false;\n\n for (let index = open; index < source.length; index += 1) {\n const char = source[index];\n const next = source[index + 1] ?? \"\";\n\n if (lineComment) {\n if (char === \"\\n\") lineComment = false;\n continue;\n }\n if (longString) {\n if (char === \"]\" && next === \"]\") {\n longString = false;\n index += 1;\n }\n continue;\n }\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n continue;\n }\n\n if (char === \"-\" && next === \"-\") {\n if (source[index + 2] === \"[\" && source[index + 3] === \"[\") {\n longString = true;\n index += 3;\n } else {\n lineComment = true;\n index += 1;\n }\n continue;\n }\n if (char === \"[\" && next === \"[\") {\n longString = true;\n index += 1;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n\n if (char === openChar) depth += 1;\n else if (char === closeChar) {\n depth -= 1;\n if (depth === 0) return index;\n }\n }\n\n return null;\n}\n\nfunction topLevelFieldRanges(\n source: string,\n open: number,\n close: number,\n): Array<{ name: string; value: SourceRange }> {\n const fields: Array<{ name: string; value: SourceRange }> = [];\n let start = open + 1;\n let round = 0;\n let square = 0;\n let curly = 0;\n let quote: string | null = null;\n let escaped = false;\n\n const addField = (segmentStart: number, segmentEnd: number) => {\n const segment = source.slice(segmentStart, segmentEnd);\n let equals = -1;\n let r = 0;\n let sq = 0;\n let cu = 0;\n let q: string | null = null;\n let esc = false;\n for (let i = 0; i < segment.length; i += 1) {\n const char = segment[i];\n if (q) {\n if (esc) esc = false;\n else if (char === \"\\\\\") esc = true;\n else if (char === q) q = null;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n q = char;\n continue;\n }\n if (char === \"(\") r += 1;\n else if (char === \")\") r = Math.max(0, r - 1);\n else if (char === \"[\") sq += 1;\n else if (char === \"]\") sq = Math.max(0, sq - 1);\n else if (char === \"{\") cu += 1;\n else if (char === \"}\") cu = Math.max(0, cu - 1);\n else if (char === \"=\" && r === 0 && sq === 0 && cu === 0) {\n equals = i;\n break;\n }\n }\n if (equals < 0) return;\n const key = segment.slice(0, equals).trim();\n const name =\n key.match(/^([A-Za-z_][A-Za-z0-9_]*)$/)?.[1] ??\n key.match(/^\\[\\s*[\"']([^\"']+)[\"']\\s*\\]$/)?.[1] ??\n null;\n if (!name || NON_BINDABLE_HOST_FIELDS.has(name)) return;\n let valueStart = segmentStart + equals + 1;\n while (valueStart < segmentEnd && /\\s/.test(source[valueStart]))\n valueStart += 1;\n fields.push({ name, value: { start: valueStart, end: segmentEnd } });\n };\n\n for (let index = open + 1; index < close; index += 1) {\n const char = source[index];\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"(\") round += 1;\n else if (char === \")\") round = Math.max(0, round - 1);\n else if (char === \"[\") square += 1;\n else if (char === \"]\") square = Math.max(0, square - 1);\n else if (char === \"{\") curly += 1;\n else if (char === \"}\") curly = Math.max(0, curly - 1);\n else if (char === \",\" && round === 0 && square === 0 && curly === 0) {\n addField(start, index);\n start = index + 1;\n }\n }\n addField(start, close);\n return fields;\n}\n\nfunction hostPropValueRanges(source: string): SourceRange[] {\n const ranges: SourceRange[] = [];\n const hostCall =\n /\\b(?:React\\.)?createElement\\s*\\(\\s*(?:\"[^\"]+\"|'[^']+')\\s*,\\s*\\{/g;\n for (const match of source.matchAll(hostCall)) {\n const open = match.index + match[0].lastIndexOf(\"{\");\n const close = matchingDelimiter(source, open, \"{\", \"}\");\n if (close === null) continue;\n for (const field of topLevelFieldRanges(source, open, close))\n ranges.push(field.value);\n }\n return ranges;\n}\n\nfunction exportedComponentImplementationName(source: string): string | null {\n const directMemo = source.match(\n /\\breturn\\s+(?:React\\.)?memo\\s*\\(\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*\\)\\s*$/,\n )?.[1];\n if (directMemo) return directMemo;\n\n const exported = exportedFunctionName(source);\n if (!exported) return null;\n if (findFunctionParameters(source, exported) !== null) return exported;\n\n const escaped = exported.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return (\n source.match(\n new RegExp(\n `\\\\blocal\\\\s+${escaped}\\\\s*=\\\\s*(?:React\\\\.)?memo\\\\s*\\\\(\\\\s*([A-Za-z_][A-Za-z0-9_]*)`,\n ),\n )?.[1] ?? null\n );\n}\n\nfunction findBindingCompatibleComponentProps(\n source: string,\n): Set<string> | null {\n const exported = exportedComponentImplementationName(source);\n if (!exported) return null;\n const parametersText = findFunctionParameters(source, exported);\n if (parametersText === null) return null;\n const firstParameter = splitTopLevelParameters(parametersText)[0] ?? \"\";\n const propsName = firstParameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (!propsName) return null;\n\n const ranges = hostPropValueRanges(source);\n if (ranges.length === 0) return null;\n const escapedProps = propsName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const readPattern = new RegExp(\n `\\\\b${escapedProps}\\\\.([A-Za-z_][A-Za-z0-9_]*)\\\\b|\\\\b${escapedProps}\\\\[\\\\s*[\"']([^\"']+)[\"']\\\\s*\\\\]`,\n \"g\",\n );\n const reads = new Map<string, number[]>();\n for (const match of source.matchAll(readPattern)) {\n const property = match[1] ?? match[2];\n if (!property || match.index === undefined) continue;\n const offsets = reads.get(property) ?? [];\n offsets.push(match.index);\n reads.set(property, offsets);\n }\n\n const compatible = new Set<string>();\n for (const [property, offsets] of reads) {\n if (\n offsets.length > 0 &&\n offsets.every((offset) =>\n ranges.some((range) => {\n if (offset < range.start || offset >= range.end) return false;\n // A prop read captured inside a callback nested in a host-property\n // expression is not directly Binding-compatible. Turning the prop\n // itself into a Binding would require restructuring that callback\n // (usually with map/joinBindings), so keep the cross-component proof\n // conservative instead of treating textual containment as enough.\n return !/\\bfunction\\b/.test(source.slice(range.start, offset));\n }),\n )\n ) {\n compatible.add(property);\n }\n }\n return compatible.size > 0 ? compatible : null;\n}\n\nfunction findStaticIterationTables(source: string): Set<string> | null {\n const match = /^return\\s*\\{/m.exec(source);\n if (!match || match.index === undefined) return null;\n const open = match.index + match[0].lastIndexOf(\"{\");\n const close = matchingDelimiter(source, open, \"{\", \"}\");\n if (close === null) return null;\n\n const result = new Set<string>([\"\"]);\n for (const field of topLevelFieldRanges(source, open, close)) {\n const valueText = source\n .slice(field.value.start, field.value.end)\n .trimStart();\n if (!valueText.startsWith(\"{\")) continue;\n result.add(field.name);\n }\n return result;\n}\n\nexport function buildProjectModel(\n root: string,\n candidates: ScanFileInput[],\n options: ProjectModelBuildOptions = {},\n): ProjectModel {\n const analyses: ProjectModelModuleAnalysis[] = [];\n\n for (const candidate of candidates) {\n if (\n candidate.source === undefined &&\n !fs.existsSync(candidate.absolutePath)\n ) continue;\n\n const relativePath = (candidate.relativePath ?? path.relative(root, candidate.absolutePath))\n .split(path.sep)\n .join(\"/\");\n const hash = options.fileHashes?.[relativePath] ?? \"\";\n const cached = options.moduleCache?.get(relativePath);\n if (cached && hash && cached.hash === hash) {\n analyses.push(cached.analysis);\n continue;\n }\n\n const source = candidate.source ?? fs.readFileSync(candidate.absolutePath, \"utf8\");\n const id = relativePath.toLowerCase();\n const record: SourceRecord = { id, source, keys: moduleKeys(relativePath) };\n const memoArguments = findMemoCall(source);\n const analysis: ProjectModelModuleAnalysis = {\n record,\n memoized: memoArguments === null\n ? undefined\n : hasTopLevelComma(memoArguments) ? \"custom\" : \"shallow\",\n bindingHook: findBindingCandidateHook(source) ?? undefined,\n callbackFunction: findExternalCallbackFunction(source) ?? undefined,\n bindingCompatibleProps: findBindingCompatibleComponentProps(source) ?? undefined,\n staticIterationTables: findStaticIterationTables(source) ?? undefined,\n conditionalHookMode: findConditionalHookMode(source) ?? undefined,\n declaredMethods: findDeclaredMethods(source),\n };\n analyses.push(analysis);\n if (options.moduleCache && hash) options.moduleCache.set(relativePath, { hash, analysis });\n }\n\n const records = analyses.map((analysis) => analysis.record);\n const memoizedByModule = new Map<string, \"shallow\" | \"custom\">();\n const bindingHooksByModule = new Map<string, BindingCandidateHookSummary>();\n const callbackFunctionsByModule = new Map<string, ExternalCallbackFunctionSummary>();\n const bindingCompatibleComponentPropsByModule = new Map<string, Set<string>>();\n const staticIterationTablesByModule = new Map<string, Set<string>>();\n const conditionalHookModesByModule = new Map<string, ConditionalHookModeSummary>();\n\n for (const analysis of analyses) {\n const id = analysis.record.id;\n if (analysis.memoized) memoizedByModule.set(id, analysis.memoized);\n if (analysis.bindingHook) bindingHooksByModule.set(id, { ...analysis.bindingHook });\n if (analysis.callbackFunction) callbackFunctionsByModule.set(id, {\n ...analysis.callbackFunction,\n callbackParameterIndexes: [...analysis.callbackFunction.callbackParameterIndexes],\n });\n if (analysis.bindingCompatibleProps) bindingCompatibleComponentPropsByModule.set(id, new Set(analysis.bindingCompatibleProps));\n if (analysis.staticIterationTables) staticIterationTablesByModule.set(id, new Set(analysis.staticIterationTables));\n if (analysis.conditionalHookMode) conditionalHookModesByModule.set(id, {\n ...analysis.conditionalHookMode,\n parameterIndexes: [...analysis.conditionalHookMode.parameterIndexes],\n parameterNames: [...analysis.conditionalHookMode.parameterNames],\n conditionVariables: { ...analysis.conditionalHookMode.conditionVariables },\n knownCallSites: 0,\n dynamicCallSites: 0,\n });\n }\n\n const conditionalHookModes = buildUniqueFeatureAliases(\n records,\n conditionalHookModesByModule,\n );\n collectConditionalHookModeCallSites(records, conditionalHookModes);\n\n let changed = true;\n while (changed) {\n changed = false;\n const aliases = buildUniqueFeatureAliases(records, bindingHooksByModule);\n for (const record of records) {\n if (bindingHooksByModule.has(record.id)) continue;\n const derived = findDerivedBindingCandidateHook(record.source, aliases);\n if (!derived) continue;\n bindingHooksByModule.set(record.id, derived);\n changed = true;\n }\n }\n\n return {\n memoizedModules: buildUniqueFeatureAliases(records, memoizedByModule),\n bindingCandidateHooks: buildUniqueFeatureAliases(records, bindingHooksByModule),\n externalCallbackModules: buildUniqueFeatureAliases(records, callbackFunctionsByModule),\n bindingApiAlternatives: findBindingApiAlternativesFromMethodMaps(\n analyses.map((analysis) => analysis.declaredMethods),\n ),\n bindingCompatibleComponentProps: buildUniqueFeatureAliases(\n records,\n bindingCompatibleComponentPropsByModule,\n ),\n staticIterationTables: buildUniqueFeatureAliases(\n records,\n staticIterationTablesByModule,\n ),\n conditionalHookModes,\n sourceEffects: new Map(),\n };\n}\n",
45
+ "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n buildUniqueFeatureAliases,\n moduleKeys,\n normalizeRequireTarget,\n resolveModuleReference,\n type ModuleIdentity,\n} from \"./module-resolution\";\nimport { sourceHasHighFrequencyRobloxEvent } from \"./roblox-semantics\";\nimport type {\n BindingCandidateHookSummary,\n ConditionalHookModeSummary,\n ExternalCallbackFunctionSummary,\n ProjectModel,\n ScanFileInput,\n} from \"./types\";\n\nconst EXTERNAL_UPDATE_SOURCE =\n /(?::|\\.)(?:Connect|Once|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)\\s*\\(|\\b(?:subscribe|observe|listen|watch|onStep|onUpdate|onChange|onChanged)[A-Za-z0-9_]*\\s*\\(|GetPropertyChangedSignal\\s*\\(|GetAttributeChangedSignal\\s*\\(|\\.Changed\\b/i;\nconst SEMANTIC_SNAPSHOT_EXPRESSION =\n /\\b(?:getState|getSnapshot|snapshot|selector|select|table\\s*\\.\\s*(?:clone|freeze|move))\\b|(?:\\.|\\[\\s*[\"'])State(?:\\b|[\"']\\s*\\])/i;\nconst PURE_MIRROR_EXPRESSION_ROOTS = new Set([\n \"math\", \"string\", \"utf8\", \"bit32\", \"UDim\", \"UDim2\", \"Vector2\", \"Vector3\",\n \"Color3\", \"CFrame\", \"Rect\", \"NumberRange\", \"NumberSequence\", \"ColorSequence\",\n \"BrickColor\", \"Font\", \"Enum\", \"tostring\", \"tonumber\", \"type\", \"typeof\",\n \"true\", \"false\", \"nil\",\n]);\nconst CALLBACK_PARAMETER_NAME =\n /^(?:callback|handler|listener|subscriber|observer|effect|fn)$/i;\n\ninterface SourceRecord extends ModuleIdentity {\n source: string;\n}\n\nexport interface ProjectModelModuleAnalysis {\n record: SourceRecord;\n memoized?: \"shallow\" | \"custom\";\n bindingHook?: BindingCandidateHookSummary;\n callbackFunction?: ExternalCallbackFunctionSummary;\n bindingCompatibleProps?: Set<string>;\n staticIterationTables?: Set<string>;\n conditionalHookMode?: ConditionalHookModeSummary;\n declaredMethods: Map<string, Set<string>>;\n}\n\nexport interface ProjectModelModuleCacheEntry {\n hash: string;\n analysis: ProjectModelModuleAnalysis;\n}\n\nexport interface ProjectModelBuildOptions {\n fileHashes?: Readonly<Record<string, string>>;\n moduleCache?: Map<string, ProjectModelModuleCacheEntry>;\n}\n\nfunction exportedFunctionName(source: string): string | null {\n return source.match(/\\breturn\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*$/)?.[1] ?? null;\n}\n\nfunction findFunctionParameters(\n source: string,\n functionName: string,\n): string | null {\n const escaped = functionName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const patterns = [\n new RegExp(\n `\\\\b(?:local\\\\s+)?function\\\\s+${escaped}(?:<[^>]*>)?\\\\s*\\\\(`,\n \"s\",\n ),\n new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*function(?:<[^>]*>)?\\\\s*\\\\(`, \"s\"),\n ];\n for (const pattern of patterns) {\n const match = pattern.exec(source);\n if (!match) continue;\n const open = match.index + match[0].lastIndexOf(\"(\");\n return extractCallArguments(source, open);\n }\n return null;\n}\n\nfunction splitTopLevelParameters(parameters: string): string[] {\n const result: string[] = [];\n let start = 0;\n let round = 0;\n let square = 0;\n let curly = 0;\n let angle = 0;\n let quote: string | null = null;\n let escaped = false;\n\n for (let index = 0; index < parameters.length; index += 1) {\n const char = parameters[index];\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"(\") round += 1;\n else if (char === \")\") round = Math.max(0, round - 1);\n else if (char === \"[\") square += 1;\n else if (char === \"]\") square = Math.max(0, square - 1);\n else if (char === \"{\") curly += 1;\n else if (char === \"}\") curly = Math.max(0, curly - 1);\n else if (char === \"<\") angle += 1;\n else if (char === \">\") angle = Math.max(0, angle - 1);\n else if (\n char === \",\" &&\n round === 0 &&\n square === 0 &&\n curly === 0 &&\n angle === 0\n ) {\n result.push(parameters.slice(start, index).trim());\n start = index + 1;\n }\n }\n result.push(parameters.slice(start).trim());\n return result.filter(Boolean);\n}\n\ninterface DualModeBindingStatePair {\n valueName: string;\n setterName: string;\n bindingModeParameterIndex: number;\n bindingModeParameterName: string;\n bindingWhenTruthy: boolean;\n}\n\nfunction findDualModeBindingStatePair(\n source: string,\n functionName: string,\n): DualModeBindingStatePair | null {\n const parametersText = findFunctionParameters(source, functionName);\n if (parametersText === null) return null;\n const parameterNames = splitTopLevelParameters(parametersText).map(\n (parameter) => parameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? null,\n );\n\n const declarations = [\n ...source.matchAll(\n /^[ \\t]*local[ \\t]+([A-Za-z_][A-Za-z0-9_]*)[ \\t]*,[ \\t]*([A-Za-z_][A-Za-z0-9_]*)[ \\t]*(?:--[^\\n]*)?$/gm,\n ),\n ];\n for (const declaration of declarations) {\n const valueName = declaration[1];\n const setterName = declaration[2];\n const escapedValue = valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const escapedSetter = setterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const bindingAssignment = `${escapedValue}\\\\s*,\\\\s*${escapedSetter}\\\\s*=\\\\s*(?:React\\\\.)?useBinding\\\\s*\\\\(`;\n const stateAssignment = `${escapedValue}\\\\s*,\\\\s*${escapedSetter}\\\\s*=\\\\s*(?:React\\\\.)?useState\\\\s*\\\\(`;\n\n for (const [parameterIndex, parameterName] of parameterNames.entries()) {\n if (!parameterName) continue;\n const escapedParameter = parameterName.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n const patterns = [\n {\n regex: new RegExp(\n `\\\\bif\\\\s+${escapedParameter}\\\\s+then[\\\\s\\\\S]*?${bindingAssignment}[\\\\s\\\\S]*?\\\\belse\\\\b[\\\\s\\\\S]*?${stateAssignment}`,\n ),\n bindingWhenTruthy: true,\n },\n {\n regex: new RegExp(\n `\\\\bif\\\\s+${escapedParameter}\\\\s+then[\\\\s\\\\S]*?${stateAssignment}[\\\\s\\\\S]*?\\\\belse\\\\b[\\\\s\\\\S]*?${bindingAssignment}`,\n ),\n bindingWhenTruthy: false,\n },\n {\n regex: new RegExp(\n `\\\\bif\\\\s+not\\\\s+${escapedParameter}\\\\s+then[\\\\s\\\\S]*?${stateAssignment}[\\\\s\\\\S]*?\\\\belse\\\\b[\\\\s\\\\S]*?${bindingAssignment}`,\n ),\n bindingWhenTruthy: true,\n },\n {\n regex: new RegExp(\n `\\\\bif\\\\s+not\\\\s+${escapedParameter}\\\\s+then[\\\\s\\\\S]*?${bindingAssignment}[\\\\s\\\\S]*?\\\\belse\\\\b[\\\\s\\\\S]*?${stateAssignment}`,\n ),\n bindingWhenTruthy: false,\n },\n ];\n const match = patterns.find((pattern) => pattern.regex.test(source));\n if (!match) continue;\n return {\n valueName,\n setterName,\n bindingModeParameterIndex: parameterIndex,\n bindingModeParameterName: parameterName,\n bindingWhenTruthy: match.bindingWhenTruthy,\n };\n }\n }\n\n return null;\n}\n\nfunction exportedFunctionParameters(\n source: string,\n): { name?: string; parameters: string[] } | null {\n const name = exportedFunctionName(source);\n if (name) {\n const parameters = findFunctionParameters(source, name);\n if (parameters === null) return null;\n return { name, parameters: splitTopLevelParameters(parameters) };\n }\n\n const match = /^\\s*return\\s+function(?:<[^>]*>)?\\s*\\(/m.exec(source);\n if (!match || match.index === undefined) return null;\n const open = match.index + match[0].lastIndexOf(\"(\");\n const parameters = extractCallArguments(source, open);\n if (parameters === null) return null;\n return { parameters: splitTopLevelParameters(parameters) };\n}\n\nfunction parameterName(parameter: string): string | null {\n return parameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? null;\n}\n\nfunction branchContainsHookCall(text: string): boolean {\n return /\\b(?:[A-Za-z_][A-Za-z0-9_]*[.:])?use[A-Z0-9_][A-Za-z0-9_]*\\s*\\(/.test(\n text,\n );\n}\n\nconst BUILT_IN_REACT_HOOK_NAMES = new Set([\n \"useState\",\n \"useEffect\",\n \"useLayoutEffect\",\n \"useMemo\",\n \"useCallback\",\n \"useContext\",\n \"useReducer\",\n \"useRef\",\n \"useImperativeHandle\",\n \"useBinding\",\n]);\n\nfunction simpleBranchHookPaths(text: string): string[] | null {\n // Do not use this textual shortcut when nested control flow could make the\n // first `end` belong to an inner block. The AST rule still handles those\n // implementations conservatively.\n if (/\\b(?:if|for|while|repeat|function)\\b/.test(text)) return null;\n return [...text.matchAll(/\\b(React\\.(use[A-Z0-9_][A-Za-z0-9_]*))\\s*\\(/g)]\n .map((match) => match[2]);\n}\n\nfunction simpleIfHasEquivalentBuiltInTopology(\n source: string,\n ifStart: number | undefined,\n): boolean {\n if (ifStart === undefined) return false;\n const statement = source.slice(ifStart).match(\n /^if\\b[\\s\\S]*?\\bthen\\b([\\s\\S]*?)\\belse\\b([\\s\\S]*?)\\bend\\b/,\n );\n if (!statement) return false;\n const left = simpleBranchHookPaths(statement[1] ?? \"\");\n const right = simpleBranchHookPaths(statement[2] ?? \"\");\n if (!left || !right || left.length === 0 || left.length !== right.length)\n return false;\n return left.every(\n (name, index) => name === right[index] && BUILT_IN_REACT_HOOK_NAMES.has(name),\n );\n}\n\nfunction conditionAliasesForParameter(\n source: string,\n parameter: string,\n): Map<string, string> {\n const aliases = new Map<string, string>([[parameter, \"\"]]);\n const escaped = parameter.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n // A mode is often carried in an options table in React-Luau hooks, e.g.\n // `if options.binding then`. Track the property path so callers can be\n // checked against the value of that field rather than the whole table.\n for (const match of source.matchAll(\n new RegExp(`\\\\b${escaped}((?:\\\\.[A-Za-z_][A-Za-z0-9_]*)+)`, \"g\"),\n )) {\n aliases.set(`${parameter}${match[1]}`, match[1].slice(1));\n }\n\n const directPatterns = [\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*(${escaped}(?:\\\\.[A-Za-z_][A-Za-z0-9_]*)*)\\\\s*$`,\n \"gm\",\n ),\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*not\\\\s+(${escaped}(?:\\\\.[A-Za-z_][A-Za-z0-9_]*)*)\\\\s*$`,\n \"gm\",\n ),\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*(${escaped}(?:\\\\.[A-Za-z_][A-Za-z0-9_]*)*)\\\\s*(?:==|~=)\\\\s*(?:true|false|nil)\\\\s*$`,\n \"gm\",\n ),\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*(?:true|false|nil)\\\\s*(?:==|~=)\\\\s*(${escaped}(?:\\\\.[A-Za-z_][A-Za-z0-9_]*)*)\\\\s*$`,\n \"gm\",\n ),\n ];\n\n for (const pattern of directPatterns) {\n for (const match of source.matchAll(pattern)) {\n const sourcePath = match[2];\n const accessPath = sourcePath === parameter\n ? \"\"\n : sourcePath.slice(parameter.length + 1);\n aliases.set(match[1], accessPath);\n }\n }\n\n // Preserve the normalized boolean aliases that the old detector understood.\n for (const match of source.matchAll(\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*if\\\\s+(${escaped}(?:\\\\.[A-Za-z_][A-Za-z0-9_]*)*)\\\\s*(?:==|~=)\\\\s*nil\\\\s+then\\\\s+(?:true|false)\\\\s+else\\\\s+\\\\2\\\\s*$`,\n \"gm\",\n ),\n )) {\n const sourcePath = match[2];\n aliases.set(\n match[1],\n sourcePath === parameter ? \"\" : sourcePath.slice(parameter.length + 1),\n );\n }\n for (const match of source.matchAll(\n new RegExp(\n `^\\\\s*local\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*if\\\\s+(${escaped}(?:\\\\.[A-Za-z_][A-Za-z0-9_]*)*)\\\\s+then\\\\s+(?:true|false)\\\\s+else\\\\s+(?:true|false)\\\\s*$`,\n \"gm\",\n ),\n )) {\n const sourcePath = match[2];\n aliases.set(\n match[1],\n sourcePath === parameter ? \"\" : sourcePath.slice(parameter.length + 1),\n );\n }\n\n return aliases;\n}\n\nfunction findConditionalHookMode(\n source: string,\n): ConditionalHookModeSummary | null {\n const exported = exportedFunctionParameters(source);\n if (!exported) return null;\n if (exported.name && !/^use[A-Z0-9_]/.test(exported.name)) return null;\n\n const parameterNames = exported.parameters.map(parameterName);\n const controlledIndexes: number[] = [];\n const controlledNames: string[] = [];\n const conditionVariables: Record<string, number> = {};\n const conditionAccessPaths: Record<string, string> = {};\n\n for (const [index, name] of parameterNames.entries()) {\n if (!name) continue;\n const aliases = conditionAliasesForParameter(source, name);\n let controlsHook = false;\n\n for (const [alias, accessPath] of aliases) {\n const escaped = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const patterns = [\n new RegExp(\n `\\\\bif\\\\s+${escaped}\\\\s+then([\\\\s\\\\S]*?)(?=\\\\belse\\\\b|\\\\bend\\\\b)`,\n \"g\",\n ),\n new RegExp(\n `\\\\bif\\\\s+not\\\\s+${escaped}\\\\s+then([\\\\s\\\\S]*?)(?=\\\\belse\\\\b|\\\\bend\\\\b)`,\n \"g\",\n ),\n new RegExp(\n `\\\\bif\\\\s+${escaped}\\\\s*(?:==|~=)\\\\s*(?:true|false|nil)\\\\s+then([\\\\s\\\\S]*?)(?=\\\\belse\\\\b|\\\\bend\\\\b)`,\n \"g\",\n ),\n new RegExp(\n `\\\\bif\\\\s+(?:true|false|nil)\\\\s*(?:==|~=)\\\\s*${escaped}\\\\s+then([\\\\s\\\\S]*?)(?=\\\\belse\\\\b|\\\\bend\\\\b)`,\n \"g\",\n ),\n ];\n\n for (const pattern of patterns) {\n for (const match of source.matchAll(pattern)) {\n if (!branchContainsHookCall(match[1] ?? \"\")) continue;\n if (simpleIfHasEquivalentBuiltInTopology(source, match.index)) continue;\n controlsHook = true;\n conditionVariables[alias] = index;\n conditionAccessPaths[alias] = accessPath;\n break;\n }\n if (controlsHook) break;\n }\n }\n\n if (!controlsHook) continue;\n controlledIndexes.push(index);\n controlledNames.push(name);\n }\n\n if (controlledIndexes.length === 0) return null;\n return {\n name: exported.name,\n parameterIndexes: controlledIndexes,\n parameterNames: controlledNames,\n conditionVariables,\n conditionAccessPaths,\n knownCallSites: 0,\n dynamicCallSites: 0,\n };\n}\n\nfunction maskLuauNonCode(source: string): string {\n let result = \"\";\n let index = 0;\n while (index < source.length) {\n const char = source[index];\n const next = source[index + 1] ?? \"\";\n\n if (char === \"-\" && next === \"-\") {\n if (source[index + 2] === \"[\" && source[index + 3] === \"[\") {\n const end = source.indexOf(\"]]\", index + 4);\n const stop = end >= 0 ? end + 2 : source.length;\n const chunk = source.slice(index, stop);\n result += chunk.replace(/[^\\n]/g, \" \");\n index = stop;\n continue;\n }\n const end = source.indexOf(\"\\n\", index + 2);\n const stop = end >= 0 ? end : source.length;\n result += \" \".repeat(stop - index);\n index = stop;\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n const quote = char;\n let end = index + 1;\n while (end < source.length) {\n if (source[end] === \"\\\\\") {\n end += 2;\n continue;\n }\n if (source[end] === quote) {\n end += 1;\n break;\n }\n end += 1;\n }\n result += source.slice(index, end).replace(/[^\\n]/g, \" \");\n index = end;\n continue;\n }\n\n if (char === \"[\" && next === \"[\") {\n const end = source.indexOf(\"]]\", index + 2);\n const stop = end >= 0 ? end + 2 : source.length;\n result += source.slice(index, stop).replace(/[^\\n]/g, \" \");\n index = stop;\n continue;\n }\n\n result += char;\n index += 1;\n }\n return result;\n}\n\nfunction stableLiteralConstants(source: string): Map<string, string> {\n const result = new Map<string, string>();\n for (const match of source.matchAll(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(true|false|nil)\\s*$/gm,\n )) {\n const name = match[1];\n const assignments = [\n ...source.matchAll(\n new RegExp(\n `\\\\b${name.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, \"\\\\\\\\$&\")}\\\\s*=`,\n \"g\",\n ),\n ),\n ];\n if (assignments.length === 1) result.set(name, match[2]);\n }\n return result;\n}\n\nfunction isStableHookModeArgument(\n text: string | undefined,\n constants: Map<string, string>,\n): boolean {\n if (text === undefined) return true;\n let value = text.trim();\n while (value.startsWith(\"(\") && value.endsWith(\")\"))\n value = value.slice(1, -1).trim();\n if (/^(?:true|false|nil)$/.test(value)) return true;\n return constants.has(value);\n}\n\nfunction collectConditionalHookModeCallSites(\n records: SourceRecord[],\n aliases: Map<string, ConditionalHookModeSummary>,\n): void {\n for (const record of records) {\n const imports = new Map<string, ConditionalHookModeSummary>();\n for (const match of record.source.matchAll(\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)/gs,\n )) {\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n aliases,\n );\n if (summary) imports.set(match[1], summary);\n }\n if (imports.size === 0) continue;\n\n const masked = maskLuauNonCode(record.source);\n const constants = stableLiteralConstants(masked);\n for (const [localName, summary] of imports) {\n const escaped = localName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const callPattern = new RegExp(`\\\\b${escaped}\\\\s*\\\\(`, \"g\");\n for (const match of masked.matchAll(callPattern)) {\n if (match.index === undefined) continue;\n const open = masked.indexOf(\"(\", match.index);\n const argumentsText = extractCallArguments(record.source, open);\n if (argumentsText === null) continue;\n const args = splitTopLevelParameters(argumentsText);\n summary.knownCallSites += 1;\n if (\n summary.parameterIndexes.some(\n (index) => !isStableHookModeArgument(args[index], constants),\n )\n ) {\n summary.dynamicCallSites += 1;\n }\n }\n }\n }\n}\n\nfunction findExternalCallbackFunction(\n source: string,\n): ExternalCallbackFunctionSummary | null {\n const name = exportedFunctionName(source);\n if (!name || !EXTERNAL_UPDATE_SOURCE.test(source)) return null;\n const parameters = findFunctionParameters(source, name);\n if (parameters === null) return null;\n\n const callbackParameterIndexes: number[] = [];\n for (const [index, parameter] of splitTopLevelParameters(\n parameters,\n ).entries()) {\n const parameterName = parameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (!parameterName) continue;\n const functionTyped = /->/.test(parameter);\n const semanticallyNamed = CALLBACK_PARAMETER_NAME.test(parameterName);\n const used = new RegExp(\n `\\\\b${parameterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\b`,\n ).test(source);\n if (used && (functionTyped || semanticallyNamed))\n callbackParameterIndexes.push(index);\n }\n\n if (callbackParameterIndexes.length === 0) return null;\n return {\n name,\n callbackParameterIndexes,\n highFrequency: sourceHasHighFrequencyRobloxEvent(source) || sourceHasLikelyContinuousSubscription(source),\n };\n}\n\nfunction sourceHasLikelyContinuousSubscription(source: string): boolean {\n return /(?::|\\.)onStep\\s*\\(/i.test(source);\n}\n\nfunction expressionReferencesName(expression: string, name: string): boolean {\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return new RegExp(`\\\\b${escaped}\\\\b`).test(expression);\n}\n\nfunction isLiteralStateTransitionExpression(expression: string): boolean {\n const text = expression.trim();\n return /^(?:true|false|nil|[-+]?\\d+(?:\\.\\d+)?|[\"'][^\"']*[\"'])$/.test(text);\n}\n\nfunction expressionHasLikelyExternalInput(expression: string): boolean {\n const withoutMembers = expression.replace(/\\.\\s*[A-Za-z_][A-Za-z0-9_]*/g, \"\");\n for (const match of withoutMembers.matchAll(/\\b[A-Za-z_][A-Za-z0-9_]*\\b/g)) {\n if (!PURE_MIRROR_EXPRESSION_ROOTS.has(match[0])) return true;\n }\n return false;\n}\n\nfunction subscriptionMirrorConfidence(\n source: string,\n setterName: string,\n): \"strong\" | \"possible\" | \"none\" {\n const escapedSetter = setterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n // Passing the React setter directly to a persistent subscription is the\n // clearest possible \"external value -> React state\" mirror shape.\n const directSetter = new RegExp(\n `(?::|\\\\.)(Connect|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)\\\\s*\\\\(\\\\s*${escapedSetter}\\\\b`,\n \"i\",\n );\n if (directSetter.test(source)) return \"strong\";\n\n const callbackPattern = new RegExp(\n `(?::|\\\\.)(Connect|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)\\\\s*\\\\(\\\\s*function\\\\s*\\\\(([^)]*)\\\\)[\\\\s\\\\S]{0,2400}?\\\\b${escapedSetter}\\\\s*\\\\(`,\n \"gi\",\n );\n\n let possible = false;\n for (const match of source.matchAll(callbackPattern)) {\n if (match.index === undefined) continue;\n const callbackParameters = splitTopLevelParameters(match[2] ?? \"\")\n .map(parameterName)\n .filter((name): name is string => Boolean(name));\n const setterOffset = match[0].lastIndexOf(setterName);\n if (setterOffset < 0) continue;\n const setterStart = match.index + setterOffset;\n const open = source.indexOf(\"(\", setterStart + setterName.length);\n const argumentsText = extractCallArguments(source, open);\n if (argumentsText === null) continue;\n const setterArgs = splitTopLevelParameters(argumentsText);\n const expression = setterArgs[0]?.trim() ?? \"\";\n if (!expression || /^function\\b/.test(expression) || isLiteralStateTransitionExpression(expression)) continue;\n if (SEMANTIC_SNAPSHOT_EXPRESSION.test(expression)) continue;\n\n if (callbackParameters.some((name) => expressionReferencesName(expression, name))) {\n return \"strong\";\n }\n if (!expressionHasLikelyExternalInput(expression)) continue;\n possible = true;\n }\n\n return possible ? \"possible\" : \"none\";\n}\n\nfunction findBindingCandidateHook(\n source: string,\n): BindingCandidateHookSummary | null {\n const exported = source.match(\n /\\breturn\\s+(use[A-Z0-9_][A-Za-z0-9_]*)\\s*$/,\n )?.[1];\n if (!exported) return null;\n\n const stateMatches = [\n ...source.matchAll(\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*,\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(?:React\\.)?useState\\s*\\(/g,\n ),\n ];\n const directState =\n stateMatches.length === 1\n ? { valueName: stateMatches[0][1], setterName: stateMatches[0][2] }\n : null;\n const dualMode = directState\n ? null\n : findDualModeBindingStatePair(source, exported);\n if (!directState && !dualMode) return null;\n\n const valueName = directState?.valueName ?? dualMode!.valueName;\n const setterName = directState?.setterName ?? dualMode!.setterName;\n const escapedValue = valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const escapedSetter = setterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (!new RegExp(`\\\\breturn\\\\s+${escapedValue}\\\\b`).test(source)) return null;\n const setterCalled = new RegExp(`\\\\b${escapedSetter}\\\\s*\\\\(`).test(source);\n const setterPassedToSubscription = new RegExp(\n `(?::|\\\\.)(?:Connect|Once|Subscribe|Observe|Listen|Watch)\\\\s*\\\\(\\\\s*${escapedSetter}\\\\b`,\n \"i\",\n ).test(source);\n if (!setterCalled && !setterPassedToSubscription) return null;\n\n const highFrequency = sourceHasHighFrequencyRobloxEvent(source) || sourceHasLikelyContinuousSubscription(source);\n const external = highFrequency || EXTERNAL_UPDATE_SOURCE.test(source);\n if (!external) return null;\n\n const literalPropertySignal = source.match(\n /GetPropertyChangedSignal\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/,\n );\n const dynamicPropertySignal = literalPropertySignal\n ? null\n : source.match(\n /GetPropertyChangedSignal\\s*\\(\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*\\)/,\n );\n const literalPropertyName = literalPropertySignal?.[1] ?? null;\n const dynamicPropertyName = dynamicPropertySignal?.[1] ?? null;\n const readsObservedProperty = literalPropertyName\n ? new RegExp(\n `(?:\\\\.\\\\s*${literalPropertyName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\b|\\\\[\\\\s*[\"']${literalPropertyName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}[\"']\\\\s*\\\\])`,\n ).test(source)\n : Boolean(\n dynamicPropertyName &&\n new RegExp(\n `\\\\[\\\\s*${dynamicPropertyName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\s*\\\\]`,\n ).test(source),\n );\n const instanceProperty = Boolean((literalPropertyName || dynamicPropertyName) && readsObservedProperty);\n const mirrorConfidence = instanceProperty\n ? \"strong\"\n : subscriptionMirrorConfidence(source, setterName);\n\n let observedPropertyParameterIndex: number | undefined;\n if (instanceProperty && dynamicPropertyName) {\n const parameters = findFunctionParameters(source, exported);\n if (parameters !== null) {\n const parameterNames = splitTopLevelParameters(parameters).map(\n (parameter) => parameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? \"\",\n );\n const index = parameterNames.indexOf(dynamicPropertyName);\n if (index >= 0) observedPropertyParameterIndex = index;\n }\n }\n\n return {\n name: exported,\n highFrequency,\n external,\n sourceKind: instanceProperty ? \"instance-property\" : \"external-state\",\n mirrorConfidence,\n ...(instanceProperty && literalPropertyName\n ? { observedPropertyName: literalPropertyName }\n : {}),\n ...(observedPropertyParameterIndex !== undefined\n ? { observedPropertyParameterIndex }\n : {}),\n ...(dualMode\n ? {\n bindingModeParameterIndex: dualMode.bindingModeParameterIndex,\n bindingModeParameterName: dualMode.bindingModeParameterName,\n bindingWhenTruthy: dualMode.bindingWhenTruthy,\n }\n : {}),\n };\n}\n\nfunction findDerivedBindingCandidateHook(\n source: string,\n bindingCandidateHooks: Map<string, BindingCandidateHookSummary>,\n): BindingCandidateHookSummary | null {\n const exported = source.match(\n /\\breturn\\s+(use[A-Z0-9_][A-Za-z0-9_]*)\\s*$/,\n )?.[1];\n if (!exported) return null;\n\n const stateMatches = [\n ...source.matchAll(\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*,\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(?:React\\.)?useState\\s*\\(/g,\n ),\n ];\n if (stateMatches.length !== 1) return null;\n const valueName = stateMatches[0][1];\n const setterName = stateMatches[0][2];\n const escapedValue = valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const escapedSetter = setterName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (!new RegExp(`\\\\breturn\\\\s+${escapedValue}\\\\b`).test(source)) return null;\n if (!new RegExp(`\\\\b${escapedSetter}\\\\s*\\\\(`).test(source)) return null;\n\n const requirePattern =\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)/gs;\n for (const match of source.matchAll(requirePattern)) {\n const localName = match[1];\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n bindingCandidateHooks,\n );\n if (!summary) continue;\n const escapedLocal = localName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (!new RegExp(`\\\\b${escapedLocal}\\\\s*\\\\(`).test(source)) continue;\n return {\n name: exported,\n highFrequency: summary.highFrequency,\n external: true,\n sourceKind: \"derived-external-state\",\n mirrorConfidence: summary.mirrorConfidence,\n };\n }\n\n return null;\n}\n\nfunction extractCallArguments(source: string, open: number): string | null {\n if (open < 0 || source[open] !== \"(\") return null;\n\n let depth = 0;\n let quote: string | null = null;\n let longStringDepth = 0;\n let escaped = false;\n\n for (let index = open; index < source.length; index += 1) {\n const char = source[index];\n const next = source[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 continue;\n }\n\n if (longStringDepth > 0) {\n if (char === \"]\" && next === \"]\") {\n longStringDepth -= 1;\n index += 1;\n }\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"[\" && next === \"[\") {\n longStringDepth += 1;\n index += 1;\n continue;\n }\n if (char === \"(\") depth += 1;\n else if (char === \")\") {\n depth -= 1;\n if (depth === 0) return source.slice(open + 1, index);\n }\n }\n\n return null;\n}\n\nfunction findMemoCall(source: string): string | null {\n const direct = /\\breturn\\s+(?:React\\.)?memo\\s*\\(/g.exec(source);\n if (direct)\n return extractCallArguments(source, source.indexOf(\"(\", direct.index));\n\n const assigned =\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(?:React\\.)?memo\\s*\\(/g;\n for (\n let match = assigned.exec(source);\n match;\n match = assigned.exec(source)\n ) {\n const name = match[1].replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (!new RegExp(`\\\\breturn\\\\s+${name}\\\\b`).test(source.slice(match.index)))\n continue;\n return extractCallArguments(source, source.indexOf(\"(\", match.index));\n }\n\n return null;\n}\n\nfunction hasTopLevelComma(argumentsText: string): boolean {\n let round = 0;\n let square = 0;\n let curly = 0;\n let quote: string | null = null;\n let escaped = false;\n\n for (let index = 0; index < argumentsText.length; index += 1) {\n const char = argumentsText[index];\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"(\") round += 1;\n else if (char === \")\") round -= 1;\n else if (char === \"[\") square += 1;\n else if (char === \"]\") square -= 1;\n else if (char === \"{\") curly += 1;\n else if (char === \"}\") curly -= 1;\n else if (char === \",\" && round === 0 && square === 0 && curly === 0)\n return true;\n }\n return false;\n}\n\nfunction bindingNameAlternative(name: string): string | null {\n if (!/state/i.test(name)) return null;\n return name.replace(/state/gi, (match) => {\n if (match === match.toUpperCase()) return \"BINDING\";\n if (match[0] === match[0].toUpperCase()) return \"Binding\";\n return \"binding\";\n });\n}\n\nfunction findDeclaredMethods(source: string): Map<string, Set<string>> {\n const methods = new Map<string, Set<string>>();\n const patterns = [\n /\\bfunction\\s+([A-Za-z_][A-Za-z0-9_.]*)\\s*[:.]\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*(?:<[^>]*>)?\\s*\\(/g,\n /\\b([A-Za-z_][A-Za-z0-9_.]*)\\s*[:.]\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*function\\b/g,\n ];\n for (const pattern of patterns) {\n for (const match of source.matchAll(pattern)) {\n const owner = match[1].toLowerCase();\n const names = methods.get(owner) ?? new Set<string>();\n names.add(match[2]);\n methods.set(owner, names);\n }\n }\n return methods;\n}\n\nfunction findBindingApiAlternativesFromMethodMaps(\n methodMaps: Iterable<Map<string, Set<string>>>,\n): Map<string, string> {\n const pairedAlternatives = new Map<string, Set<string>>();\n const unpairedStateNames = new Set<string>();\n\n for (const methods of methodMaps) {\n for (const names of methods.values()) {\n const byLower = new Map(\n [...names].map((name) => [name.toLowerCase(), name]),\n );\n for (const stateName of names) {\n const expected = bindingNameAlternative(stateName);\n if (!expected) continue;\n const bindingName = byLower.get(expected.toLowerCase());\n if (!bindingName) {\n unpairedStateNames.add(stateName.toLowerCase());\n continue;\n }\n const alternatives =\n pairedAlternatives.get(stateName) ?? new Set<string>();\n alternatives.add(bindingName);\n pairedAlternatives.set(stateName, alternatives);\n }\n }\n }\n\n const result = new Map<string, string>();\n for (const [stateName, alternatives] of pairedAlternatives) {\n if (\n alternatives.size === 1 &&\n !unpairedStateNames.has(stateName.toLowerCase())\n ) {\n result.set(stateName, [...alternatives][0]);\n }\n }\n return result;\n}\n\nconst NON_BINDABLE_HOST_FIELDS = new Set([\"ref\", \"key\", \"children\"]);\n\ninterface SourceRange {\n start: number;\n end: number;\n}\n\nfunction matchingDelimiter(\n source: string,\n open: number,\n openChar: string,\n closeChar: string,\n): number | null {\n let depth = 0;\n let quote: string | null = null;\n let escaped = false;\n let lineComment = false;\n let longString = false;\n\n for (let index = open; index < source.length; index += 1) {\n const char = source[index];\n const next = source[index + 1] ?? \"\";\n\n if (lineComment) {\n if (char === \"\\n\") lineComment = false;\n continue;\n }\n if (longString) {\n if (char === \"]\" && next === \"]\") {\n longString = false;\n index += 1;\n }\n continue;\n }\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n continue;\n }\n\n if (char === \"-\" && next === \"-\") {\n if (source[index + 2] === \"[\" && source[index + 3] === \"[\") {\n longString = true;\n index += 3;\n } else {\n lineComment = true;\n index += 1;\n }\n continue;\n }\n if (char === \"[\" && next === \"[\") {\n longString = true;\n index += 1;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n\n if (char === openChar) depth += 1;\n else if (char === closeChar) {\n depth -= 1;\n if (depth === 0) return index;\n }\n }\n\n return null;\n}\n\nfunction topLevelFieldRanges(\n source: string,\n open: number,\n close: number,\n): Array<{ name: string; value: SourceRange }> {\n const fields: Array<{ name: string; value: SourceRange }> = [];\n let start = open + 1;\n let round = 0;\n let square = 0;\n let curly = 0;\n let quote: string | null = null;\n let escaped = false;\n\n const addField = (segmentStart: number, segmentEnd: number) => {\n const segment = source.slice(segmentStart, segmentEnd);\n let equals = -1;\n let r = 0;\n let sq = 0;\n let cu = 0;\n let q: string | null = null;\n let esc = false;\n for (let i = 0; i < segment.length; i += 1) {\n const char = segment[i];\n if (q) {\n if (esc) esc = false;\n else if (char === \"\\\\\") esc = true;\n else if (char === q) q = null;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n q = char;\n continue;\n }\n if (char === \"(\") r += 1;\n else if (char === \")\") r = Math.max(0, r - 1);\n else if (char === \"[\") sq += 1;\n else if (char === \"]\") sq = Math.max(0, sq - 1);\n else if (char === \"{\") cu += 1;\n else if (char === \"}\") cu = Math.max(0, cu - 1);\n else if (char === \"=\" && r === 0 && sq === 0 && cu === 0) {\n equals = i;\n break;\n }\n }\n if (equals < 0) return;\n const key = segment.slice(0, equals).trim();\n const name =\n key.match(/^([A-Za-z_][A-Za-z0-9_]*)$/)?.[1] ??\n key.match(/^\\[\\s*[\"']([^\"']+)[\"']\\s*\\]$/)?.[1] ??\n null;\n if (!name || NON_BINDABLE_HOST_FIELDS.has(name)) return;\n let valueStart = segmentStart + equals + 1;\n while (valueStart < segmentEnd && /\\s/.test(source[valueStart]))\n valueStart += 1;\n fields.push({ name, value: { start: valueStart, end: segmentEnd } });\n };\n\n for (let index = open + 1; index < close; index += 1) {\n const char = source[index];\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (char === \"(\") round += 1;\n else if (char === \")\") round = Math.max(0, round - 1);\n else if (char === \"[\") square += 1;\n else if (char === \"]\") square = Math.max(0, square - 1);\n else if (char === \"{\") curly += 1;\n else if (char === \"}\") curly = Math.max(0, curly - 1);\n else if (char === \",\" && round === 0 && square === 0 && curly === 0) {\n addField(start, index);\n start = index + 1;\n }\n }\n addField(start, close);\n return fields;\n}\n\nfunction hostPropValueRanges(source: string): SourceRange[] {\n const ranges: SourceRange[] = [];\n const hostCall =\n /\\b(?:React\\.)?createElement\\s*\\(\\s*(?:\"[^\"]+\"|'[^']+')\\s*,\\s*\\{/g;\n for (const match of source.matchAll(hostCall)) {\n const open = match.index + match[0].lastIndexOf(\"{\");\n const close = matchingDelimiter(source, open, \"{\", \"}\");\n if (close === null) continue;\n for (const field of topLevelFieldRanges(source, open, close))\n ranges.push(field.value);\n }\n return ranges;\n}\n\nfunction exportedComponentImplementationName(source: string): string | null {\n const directMemo = source.match(\n /\\breturn\\s+(?:React\\.)?memo\\s*\\(\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*\\)\\s*$/,\n )?.[1];\n if (directMemo) return directMemo;\n\n const exported = exportedFunctionName(source);\n if (!exported) return null;\n if (findFunctionParameters(source, exported) !== null) return exported;\n\n const escaped = exported.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return (\n source.match(\n new RegExp(\n `\\\\blocal\\\\s+${escaped}\\\\s*=\\\\s*(?:React\\\\.)?memo\\\\s*\\\\(\\\\s*([A-Za-z_][A-Za-z0-9_]*)`,\n ),\n )?.[1] ?? null\n );\n}\n\nfunction findBindingCompatibleComponentProps(\n source: string,\n): Set<string> | null {\n const exported = exportedComponentImplementationName(source);\n if (!exported) return null;\n const parametersText = findFunctionParameters(source, exported);\n if (parametersText === null) return null;\n const firstParameter = splitTopLevelParameters(parametersText)[0] ?? \"\";\n const propsName = firstParameter.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n if (!propsName) return null;\n\n const ranges = hostPropValueRanges(source);\n if (ranges.length === 0) return null;\n const escapedProps = propsName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const readPattern = new RegExp(\n `\\\\b${escapedProps}\\\\.([A-Za-z_][A-Za-z0-9_]*)\\\\b|\\\\b${escapedProps}\\\\[\\\\s*[\"']([^\"']+)[\"']\\\\s*\\\\]`,\n \"g\",\n );\n const reads = new Map<string, number[]>();\n for (const match of source.matchAll(readPattern)) {\n const property = match[1] ?? match[2];\n if (!property || match.index === undefined) continue;\n const offsets = reads.get(property) ?? [];\n offsets.push(match.index);\n reads.set(property, offsets);\n }\n\n const compatible = new Set<string>();\n for (const [property, offsets] of reads) {\n if (\n offsets.length > 0 &&\n offsets.every((offset) =>\n ranges.some((range) => {\n if (offset < range.start || offset >= range.end) return false;\n // A prop read captured inside a callback nested in a host-property\n // expression is not directly Binding-compatible. Turning the prop\n // itself into a Binding would require restructuring that callback\n // (usually with map/joinBindings), so keep the cross-component proof\n // conservative instead of treating textual containment as enough.\n return !/\\bfunction\\b/.test(source.slice(range.start, offset));\n }),\n )\n ) {\n compatible.add(property);\n }\n }\n return compatible.size > 0 ? compatible : null;\n}\n\n\nfunction exportedUseFunctionName(source: string): string | null {\n const name = exportedFunctionName(source);\n return name && /^use[A-Z0-9_]/.test(name) ? name : null;\n}\n\nfunction directReactHookUsage(source: string): boolean {\n const namespaces = new Set<string>([\"React\"]);\n const requirePattern = /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)/gs;\n for (const match of source.matchAll(requirePattern)) {\n const target = normalizeRequireTarget(match[2]);\n if (target.split(\".\").includes(\"react\")) namespaces.add(match[1]);\n }\n\n for (const namespace of namespaces) {\n const escaped = namespace.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (new RegExp(`\\\\b${escaped}\\\\.use[A-Z0-9_][A-Za-z0-9_]*\\\\b`).test(source)) return true;\n }\n return false;\n}\n\nfunction calledRequiredModules(source: string): Array<{ localName: string; target: string }> {\n const result: Array<{ localName: string; target: string }> = [];\n const requirePattern = /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)/gs;\n for (const match of source.matchAll(requirePattern)) {\n const localName = match[1];\n const escaped = localName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (!new RegExp(`\\\\b${escaped}\\\\s*\\\\(`).test(source.slice(match.index + match[0].length))) continue;\n result.push({ localName, target: normalizeRequireTarget(match[2]) });\n }\n return result;\n}\n\nfunction findReactHookModules(records: SourceRecord[]): Map<string, boolean> {\n const hookRecords = records.filter((record) => exportedUseFunctionName(record.source));\n const provenReact = new Map<string, boolean>();\n\n for (const record of hookRecords) {\n if (directReactHookUsage(record.source)) provenReact.set(record.id, true);\n }\n\n let changed = true;\n while (changed) {\n changed = false;\n const aliases = buildUniqueFeatureAliases(records, provenReact);\n for (const record of hookRecords) {\n if (provenReact.has(record.id)) continue;\n const callsReactHookModule = calledRequiredModules(record.source).some(({ target }) =>\n resolveModuleReference(target, aliases) === true,\n );\n if (!callsReactHookModule) continue;\n provenReact.set(record.id, true);\n changed = true;\n }\n }\n\n const result = new Map<string, boolean>();\n for (const record of hookRecords) result.set(record.id, provenReact.has(record.id));\n return result;\n}\n\nfunction findStaticIterationTables(source: string): Set<string> | null {\n const match = /^return\\s*\\{/m.exec(source);\n if (!match || match.index === undefined) return null;\n const open = match.index + match[0].lastIndexOf(\"{\");\n const close = matchingDelimiter(source, open, \"{\", \"}\");\n if (close === null) return null;\n\n const result = new Set<string>([\"\"]);\n for (const field of topLevelFieldRanges(source, open, close)) {\n const valueText = source\n .slice(field.value.start, field.value.end)\n .trimStart();\n if (!valueText.startsWith(\"{\")) continue;\n result.add(field.name);\n }\n return result;\n}\n\nexport function buildProjectModel(\n root: string,\n candidates: ScanFileInput[],\n options: ProjectModelBuildOptions = {},\n): ProjectModel {\n const analyses: ProjectModelModuleAnalysis[] = [];\n\n for (const candidate of candidates) {\n if (\n candidate.source === undefined &&\n !fs.existsSync(candidate.absolutePath)\n ) continue;\n\n const relativePath = (candidate.relativePath ?? path.relative(root, candidate.absolutePath))\n .split(path.sep)\n .join(\"/\");\n const hash = options.fileHashes?.[relativePath] ?? \"\";\n const cached = options.moduleCache?.get(relativePath);\n if (cached && hash && cached.hash === hash) {\n analyses.push(cached.analysis);\n continue;\n }\n\n const source = candidate.source ?? fs.readFileSync(candidate.absolutePath, \"utf8\");\n const id = relativePath.toLowerCase();\n const record: SourceRecord = { id, source, keys: moduleKeys(relativePath) };\n const memoArguments = findMemoCall(source);\n const analysis: ProjectModelModuleAnalysis = {\n record,\n memoized: memoArguments === null\n ? undefined\n : hasTopLevelComma(memoArguments) ? \"custom\" : \"shallow\",\n bindingHook: findBindingCandidateHook(source) ?? undefined,\n callbackFunction: findExternalCallbackFunction(source) ?? undefined,\n bindingCompatibleProps: findBindingCompatibleComponentProps(source) ?? undefined,\n staticIterationTables: findStaticIterationTables(source) ?? undefined,\n conditionalHookMode: findConditionalHookMode(source) ?? undefined,\n declaredMethods: findDeclaredMethods(source),\n };\n analyses.push(analysis);\n if (options.moduleCache && hash) options.moduleCache.set(relativePath, { hash, analysis });\n }\n\n const records = analyses.map((analysis) => analysis.record);\n const memoizedByModule = new Map<string, \"shallow\" | \"custom\">();\n const bindingHooksByModule = new Map<string, BindingCandidateHookSummary>();\n const callbackFunctionsByModule = new Map<string, ExternalCallbackFunctionSummary>();\n const bindingCompatibleComponentPropsByModule = new Map<string, Set<string>>();\n const staticIterationTablesByModule = new Map<string, Set<string>>();\n const conditionalHookModesByModule = new Map<string, ConditionalHookModeSummary>();\n\n for (const analysis of analyses) {\n const id = analysis.record.id;\n if (analysis.memoized) memoizedByModule.set(id, analysis.memoized);\n if (analysis.bindingHook) bindingHooksByModule.set(id, { ...analysis.bindingHook });\n if (analysis.callbackFunction) callbackFunctionsByModule.set(id, {\n ...analysis.callbackFunction,\n callbackParameterIndexes: [...analysis.callbackFunction.callbackParameterIndexes],\n });\n if (analysis.bindingCompatibleProps) bindingCompatibleComponentPropsByModule.set(id, new Set(analysis.bindingCompatibleProps));\n if (analysis.staticIterationTables) staticIterationTablesByModule.set(id, new Set(analysis.staticIterationTables));\n if (analysis.conditionalHookMode) conditionalHookModesByModule.set(id, {\n ...analysis.conditionalHookMode,\n parameterIndexes: [...analysis.conditionalHookMode.parameterIndexes],\n parameterNames: [...analysis.conditionalHookMode.parameterNames],\n conditionVariables: { ...analysis.conditionalHookMode.conditionVariables },\n conditionAccessPaths: { ...analysis.conditionalHookMode.conditionAccessPaths },\n knownCallSites: 0,\n dynamicCallSites: 0,\n });\n }\n\n const conditionalHookModes = buildUniqueFeatureAliases(\n records,\n conditionalHookModesByModule,\n );\n const reactHookModules = buildUniqueFeatureAliases(\n records,\n findReactHookModules(records),\n );\n collectConditionalHookModeCallSites(records, conditionalHookModes);\n\n let changed = true;\n while (changed) {\n changed = false;\n const aliases = buildUniqueFeatureAliases(records, bindingHooksByModule);\n for (const record of records) {\n if (bindingHooksByModule.has(record.id)) continue;\n const derived = findDerivedBindingCandidateHook(record.source, aliases);\n if (!derived) continue;\n bindingHooksByModule.set(record.id, derived);\n changed = true;\n }\n }\n\n return {\n memoizedModules: buildUniqueFeatureAliases(records, memoizedByModule),\n bindingCandidateHooks: buildUniqueFeatureAliases(records, bindingHooksByModule),\n externalCallbackModules: buildUniqueFeatureAliases(records, callbackFunctionsByModule),\n bindingApiAlternatives: findBindingApiAlternativesFromMethodMaps(\n analyses.map((analysis) => analysis.declaredMethods),\n ),\n bindingCompatibleComponentProps: buildUniqueFeatureAliases(\n records,\n bindingCompatibleComponentPropsByModule,\n ),\n staticIterationTables: buildUniqueFeatureAliases(\n records,\n staticIterationTablesByModule,\n ),\n conditionalHookModes,\n reactHookModules,\n sourceEffects: new Map(),\n };\n}\n",
46
46
  "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { SyntaxNode, SyntaxTree } from \"./syntax\";\nimport {\n buildUniqueFeatureAliases,\n moduleKeys,\n normalizeRequireTarget,\n resolveModuleReference,\n type ModuleIdentity,\n} from \"./module-resolution\";\nimport { parseLuau } from \"./parser\";\nimport type { AnalysisWorkerPool } from \"./parallel\";\nimport type { ScanFileInput, SourceEffectModuleSummary } from \"./types\";\n\n\nexport interface ProjectEffectParseCacheEntry {\n source: string;\n tree: SyntaxTree;\n}\n\nexport type CachedMutationOrigin =\n | { kind: \"receiver\" }\n | { kind: \"parameter\"; index: number }\n | { kind: \"external\" }\n | { kind: \"local\" };\n\nexport interface CachedMutationCall {\n targetId: string;\n receiverOrigin: CachedMutationOrigin | null;\n argumentOrigins: Array<CachedMutationOrigin | null>;\n}\n\nexport interface CachedSourceEffectFunction {\n id: string;\n moduleId: string;\n localName: string | null;\n memberName: string | null;\n exported: boolean;\n directEffect: boolean;\n mutatesReceiver: boolean;\n mutatedParameterIndexes: number[];\n dependencies: string[];\n mutationCalls: CachedMutationCall[];\n}\n\nexport interface CachedSourceEffectModule {\n hash: string;\n id: string;\n keys: string[];\n importedModuleIds: string[];\n functions: CachedSourceEffectFunction[];\n instanceFactories: string[];\n}\n\nexport interface ProjectSourceEffectsBuildResult {\n effects: Map<string, SourceEffectModuleSummary>;\n cacheModules: Record<string, CachedSourceEffectModule>;\n}\n\nexport interface EffectWorkerIndexInput extends ModuleIdentity {\n relativePath: string;\n source: string;\n}\n\nexport interface IndexedEffectWorkerModule {\n id: string;\n relativePath: string;\n importedModuleIds: string[];\n instanceFactories: string[];\n exportedFunctionId?: string;\n}\n\nexport interface AnalyzedEffectWorkerModule {\n id: string;\n functions: CachedSourceEffectFunction[];\n}\n\nexport type ProjectEffectsProgressPhase =\n | \"parse\"\n | \"index-functions\"\n | \"analyze-calls\"\n | \"assemble-graph\"\n | \"resolve\"\n | \"propagate\"\n | \"summarize\";\n\nexport interface ProjectEffectsProgress {\n phase: ProjectEffectsProgressPhase;\n current: number;\n total: number;\n file?: string;\n}\n\ninterface ParsedRecord extends ModuleIdentity {\n source: string;\n tree: SyntaxTree;\n exportName: string | null;\n imports: Map<string, string>;\n}\n\ninterface MutationCall {\n targetId: string;\n receiverRoot: string | null;\n argumentRoots: Array<string | null>;\n}\n\ninterface FunctionRecord {\n id: string;\n moduleId: string;\n localName: string | null;\n memberName: string | null;\n exported: boolean;\n method: boolean;\n node: SyntaxNode;\n body: SyntaxNode;\n parameters: string[];\n directEffect: boolean;\n mutatesReceiver: boolean;\n mutatedParameterIndexes: Set<number>;\n dependencies: Set<string>;\n mutationCalls: MutationCall[];\n parameterOrigins: Map<string, number>;\n externalRoots: Set<string>;\n ownedRoots: Set<string>;\n localNames: Set<string>;\n}\n\nexport interface EffectWorkerState {\n relativePath: string;\n source: string;\n record: ParsedRecord;\n functions: FunctionRecord[];\n}\n\nfunction normalizeRelative(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction child(node: SyntaxNode, type: string): SyntaxNode | null {\n return node.namedChildren.find((candidate) => candidate.type === type) ?? null;\n}\n\nfunction topLevelReturnName(root: SyntaxNode): string | null {\n for (const node of [...root.namedChildren].reverse()) {\n if (node.type !== \"return_statement\") continue;\n const expressions = child(node, \"expression_list\");\n const value = expressions?.namedChildren[0];\n if (value?.type === \"identifier\") return value.text;\n return null;\n }\n return null;\n}\n\nfunction topLevelImports(root: SyntaxNode, moduleAliases: Map<string, string>): Map<string, string> {\n const imports = new Map<string, string>();\n for (const node of 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 text = expression.text.trim();\n const match = text.match(/^require\\s*\\((.*?)\\)\\s*$/s);\n if (!match) continue;\n const moduleId = resolveModuleReference(normalizeRequireTarget(match[1]), moduleAliases);\n if (moduleId) imports.set(names[index], moduleId);\n }\n }\n return imports;\n}\n\nfunction parameterNames(node: SyntaxNode): string[] {\n const parameters = child(node, \"parameters\");\n if (!parameters) return [];\n const result: string[] = [];\n for (const parameter of parameters.namedChildren) {\n if (parameter.type !== \"parameter\") continue;\n const identifier = parameter.namedChildren.find((candidate) => candidate.type === \"identifier\");\n if (identifier) result.push(identifier.text);\n }\n return result;\n}\n\nfunction declarationParts(node: SyntaxNode): { names: string[]; expressions: SyntaxNode[] } {\n if (node.type !== \"variable_declaration\") return { names: [], expressions: [] };\n const assignment = child(node, \"assignment_statement\");\n const variables = assignment ? child(assignment, \"variable_list\") : child(node, \"variable_list\");\n const expressions = assignment ? child(assignment, \"expression_list\") : null;\n return {\n names: variables?.namedChildren.filter((candidate) => candidate.type === \"identifier\").map((candidate) => candidate.text) ?? [],\n expressions: expressions?.namedChildren ?? [],\n };\n}\n\nfunction assignmentSides(node: SyntaxNode): { left: SyntaxNode[]; right: SyntaxNode[] } {\n if (node.type !== \"assignment_statement\") return { left: [], right: [] };\n return {\n left: child(node, \"variable_list\")?.namedChildren ?? [],\n right: child(node, \"expression_list\")?.namedChildren ?? [],\n };\n}\n\nfunction callPath(node: SyntaxNode): string | null {\n if (node.type !== \"function_call\") return null;\n const name = node.childForFieldName(\"name\") ?? node.namedChildren[0];\n return name ? name.text.replace(/\\s+/g, \"\") : null;\n}\n\nfunction rootIdentifier(node: SyntaxNode | null | undefined): string | null {\n if (!node) return null;\n if (node.type === \"identifier\") return node.text;\n if (\n node.type === \"dot_index_expression\" ||\n node.type === \"bracket_index_expression\" ||\n node.type === \"method_index_expression\"\n ) {\n return rootIdentifier(node.namedChildren[0]);\n }\n const text = node.text.trim();\n return text.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? null;\n}\n\nfunction callArguments(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"function_call\") return [];\n return node.childForFieldName(\"arguments\")?.namedChildren ?? [];\n}\n\nfunction builtinMutatedArgumentIndexes(path: string, argumentCount: number): number[] {\n switch (path.replace(/\\s+/g, \"\")) {\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 ? [0] : [];\n case \"table.move\":\n // table.move writes into the optional destination table, or back into the\n // source table when the destination argument is omitted.\n return argumentCount >= 5 ? [4] : argumentCount > 0 ? [0] : [];\n default:\n return [];\n }\n}\n\nfunction expressionCreatesOwnedValue(node: SyntaxNode, owned: Set<string>): boolean {\n if (node.type === \"table_constructor\" || node.type === \"function_definition\") return true;\n if (node.type !== \"function_call\") return false;\n\n const path = callPath(node)?.replace(/\\s+/g, \"\") ?? \"\";\n if (path === \"table.clone\" || path === \"table.create\" || path === \"table.pack\") return true;\n if (path !== \"setmetatable\" && path !== \"table.freeze\") return false;\n\n const first = callArguments(node)[0];\n if (!first) return false;\n if (first.type === \"table_constructor\") return true;\n const root = rootIdentifier(first);\n return Boolean(root && owned.has(root));\n}\n\nfunction directNodes(body: SyntaxNode): SyntaxNode[] {\n const result: SyntaxNode[] = [];\n const visit = (node: SyntaxNode): void => {\n if (node !== body && (node.type === \"function_definition\" || node.type === \"function_declaration\")) return;\n result.push(node);\n for (const candidate of node.namedChildren) visit(candidate);\n };\n visit(body);\n return result;\n}\n\nfunction topLevelFunctionRecords(record: ParsedRecord): FunctionRecord[] {\n const functions: FunctionRecord[] = [];\n let anonymousExportIndex = 0;\n\n const add = (\n node: SyntaxNode,\n body: SyntaxNode | null,\n localName: string | null,\n memberName: string | null,\n method: boolean,\n exported: boolean,\n ): void => {\n if (!body) return;\n const key = memberName ? `member:${memberName}` : localName ? `local:${localName}` : `export:${anonymousExportIndex++}`;\n functions.push({\n id: `${record.id}::${key}`,\n moduleId: record.id,\n localName,\n memberName,\n exported,\n method,\n node,\n body,\n parameters: parameterNames(node),\n directEffect: false,\n mutatesReceiver: false,\n mutatedParameterIndexes: new Set<number>(),\n dependencies: new Set<string>(),\n mutationCalls: [],\n parameterOrigins: new Map<string, number>(),\n externalRoots: new Set<string>(),\n ownedRoots: new Set<string>(),\n localNames: new Set<string>(),\n });\n };\n\n for (const node of record.tree.rootNode.namedChildren) {\n if (node.type === \"function_declaration\") {\n const nameNode = node.namedChildren.find((candidate) =>\n [\"identifier\", \"dot_index_expression\", \"method_index_expression\"].includes(candidate.type),\n );\n const body = child(node, \"block\");\n const text = nameNode?.text.replace(/\\s+/g, \"\") ?? \"\";\n const methodMatch = text.match(/^([A-Za-z_][A-Za-z0-9_]*)[:.]([A-Za-z_][A-Za-z0-9_]*)$/);\n if (methodMatch && methodMatch[1] === record.exportName) {\n add(node, body, null, methodMatch[2], nameNode?.type === \"method_index_expression\", false);\n } else if (nameNode?.type === \"identifier\") {\n add(node, body, text, null, false, record.exportName === text);\n }\n continue;\n }\n\n if (node.type === \"variable_declaration\") {\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_definition\") continue;\n add(expression, child(expression, \"block\"), names[index], null, false, record.exportName === names[index]);\n }\n continue;\n }\n\n if (node.type === \"assignment_statement\") {\n const { left, right } = assignmentSides(node);\n for (let index = 0; index < left.length; index += 1) {\n const expression = right[index] ?? right[0];\n if (expression?.type !== \"function_definition\") continue;\n const text = left[index].text.replace(/\\s+/g, \"\");\n const memberMatch = text.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\n if (memberMatch && memberMatch[1] === record.exportName) {\n add(expression, child(expression, \"block\"), null, memberMatch[2], text.includes(\":\"), false);\n }\n }\n continue;\n }\n\n if (node.type === \"return_statement\") {\n const expressions = child(node, \"expression_list\");\n const expression = expressions?.namedChildren[0];\n if (expression?.type === \"function_definition\") add(expression, child(expression, \"block\"), null, null, false, true);\n }\n }\n\n return functions;\n}\n\n\nfunction returnedFactoryMember(fn: FunctionRecord, moduleExportName: string | null): boolean {\n if (!fn.memberName || !moduleExportName) return false;\n const header = fn.node.text.slice(0, Math.max(0, fn.body.startIndex - fn.node.startIndex));\n const escaped = moduleExportName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (new RegExp(`:\\\\s*${escaped}\\\\b`).test(header)) return true;\n\n for (const node of directNodes(fn.body)) {\n if (node.type !== \"return_statement\") continue;\n if (new RegExp(`\\\\bsetmetatable\\\\s*\\\\([\\\\s\\\\S]*?\\\\b${escaped}\\\\b`).test(node.text)) return true;\n }\n return false;\n}\n\nfunction moduleLevelInstanceAliases(record: ParsedRecord, summariesByModuleId: Map<string, SourceEffectModuleSummary>): Map<string, string> {\n const result = new Map<string, string>();\n for (const node of record.tree.rootNode.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 path = callPath(expression);\n const match = path?.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\n if (!match) continue;\n const moduleId = record.imports.get(match[1]);\n const summary = moduleId ? summariesByModuleId.get(moduleId) : null;\n if (moduleId && summary?.instanceFactories.has(match[2])) result.set(names[index], moduleId);\n }\n }\n return result;\n}\n\nfunction analyzeFunction(\n fn: FunctionRecord,\n record: ParsedRecord,\n localFunctions: Map<string, string>,\n memberFunctions: Map<string, string>,\n moduleSummaries: Map<string, SourceEffectModuleSummary>,\n moduleInstances: Map<string, string>,\n exportedFunctions: Map<string, string>,\n): void {\n const parameters = new Set(fn.parameters);\n const parameterOrigins = new Map<string, number>(fn.parameters.map((name, index) => [name, index] as const));\n if (fn.method) {\n parameters.add(\"self\");\n parameterOrigins.set(\"self\", -1);\n }\n const locals = new Set<string>();\n const owned = new Set<string>();\n const externalAliases = new Set<string>();\n const refLocals = new Set<string>();\n const instanceAliases = new Map(moduleInstances);\n const nodes = directNodes(fn.body);\n\n for (const node of nodes) {\n if (node.type === \"function_declaration\" && node.id !== fn.node.id) {\n const declared = node.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(declared)) locals.add(declared);\n continue;\n }\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 name = names[index];\n const expression = expressions[index] ?? expressions[0];\n locals.add(name);\n if (!expression) continue;\n const createsOwnedValue = expressionCreatesOwnedValue(expression, owned);\n if (createsOwnedValue) owned.add(name);\n const root = rootIdentifier(expression);\n const parameterOrigin = root ? parameterOrigins.get(root) : undefined;\n if (!createsOwnedValue && root && parameterOrigin !== undefined) {\n // Keep argument/receiver mutation conditional. A caller may pass a fresh\n // render-local value, so it must not become an unconditional effect.\n parameterOrigins.set(name, parameterOrigin);\n } else if (!createsOwnedValue && root && (externalAliases.has(root) || (!locals.has(root) && root !== name))) {\n // Module/global state is externally observable regardless of call-site\n // ownership, so aliases of it remain safe to classify as effects.\n externalAliases.add(name);\n } else if (root && owned.has(root)) {\n owned.add(name);\n }\n\n if (expression.type === \"function_call\") {\n const path = callPath(expression)?.replace(/\\s+/g, \"\") ?? \"\";\n if (path === \"React.useRef\") refLocals.add(name);\n const match = path.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\n if (match) {\n const moduleId = record.imports.get(match[1]);\n const summary = moduleId ? moduleSummaries.get(moduleId) : null;\n if (moduleId && summary?.instanceFactories.has(match[2])) instanceAliases.set(name, moduleId);\n }\n }\n }\n }\n\n fn.parameterOrigins = parameterOrigins;\n fn.externalRoots = externalAliases;\n fn.ownedRoots = owned;\n fn.localNames = locals;\n\n // Luau locals are lexically scoped from their declaration onward, so the\n // source-order pass above is enough to propagate aliases through local\n // declarations. Repeated fixed-point rescans of every function body were\n // redundant and particularly expensive on large modules.\n for (const node of nodes) {\n if (node.type === \"assignment_statement\" && node.parent?.type !== \"variable_declaration\") {\n const { left } = assignmentSides(node);\n for (const target of left) {\n if (target.type === \"identifier\") {\n if (!locals.has(target.text) && !parameters.has(target.text)) fn.directEffect = true;\n continue;\n }\n const root = rootIdentifier(target);\n if (!root) continue;\n if (owned.has(root)) continue;\n if (refLocals.has(root) && target.text.replace(/\\s+/g, \"\") === `${root}.current`) continue;\n const parameterOrigin = parameterOrigins.get(root);\n if (parameterOrigin !== undefined) {\n if (parameterOrigin === -1) fn.mutatesReceiver = true;\n else fn.mutatedParameterIndexes.add(parameterOrigin);\n continue;\n }\n if (externalAliases.has(root) || !locals.has(root)) fn.directEffect = true;\n }\n continue;\n }\n\n if (node.type !== \"function_call\") continue;\n const path = callPath(node);\n if (!path) continue;\n const arguments_ = callArguments(node);\n\n for (const index of builtinMutatedArgumentIndexes(path, arguments_.length)) {\n markMutationThroughRoot(fn, rootIdentifier(arguments_[index]));\n }\n\n const localTarget = !locals.has(path) && !parameters.has(path) ? localFunctions.get(path) : null;\n if (localTarget) {\n fn.dependencies.add(localTarget);\n fn.mutationCalls.push({\n targetId: localTarget,\n receiverRoot: null,\n argumentRoots: arguments_.map((argument) => rootIdentifier(argument)),\n });\n }\n\n const sameMember = path.match(/^([A-Za-z_][A-Za-z0-9_]*)([:.])([A-Za-z_][A-Za-z0-9_]*)$/);\n if (sameMember) {\n const receiver = sameMember[1];\n if (receiver === \"self\" || (receiver === record.exportName && !locals.has(receiver) && !parameters.has(receiver))) {\n const target = memberFunctions.get(sameMember[3]);\n if (target) {\n fn.dependencies.add(target);\n fn.mutationCalls.push({\n targetId: target,\n receiverRoot: sameMember[2] === \":\" ? receiver : null,\n argumentRoots: arguments_.map((argument) => rootIdentifier(argument)),\n });\n }\n }\n }\n\n const importedMember = path.match(/^([A-Za-z_][A-Za-z0-9_]*)([.:])([A-Za-z_][A-Za-z0-9_]*)$/);\n if (importedMember) {\n const root = importedMember[1];\n const moduleId = instanceAliases.get(root)\n ?? (!locals.has(root) && !parameters.has(root) ? record.imports.get(root) : undefined);\n if (moduleId) {\n const target = `${moduleId}::member:${importedMember[3]}`;\n fn.dependencies.add(target);\n fn.mutationCalls.push({\n targetId: target,\n receiverRoot: importedMember[2] === \":\" ? root : null,\n argumentRoots: arguments_.map((argument) => rootIdentifier(argument)),\n });\n }\n } else if (!locals.has(path) && !parameters.has(path)) {\n const moduleId = record.imports.get(path);\n const target = moduleId ? exportedFunctions.get(moduleId) : null;\n if (target) {\n fn.dependencies.add(target);\n fn.mutationCalls.push({\n targetId: target,\n receiverRoot: null,\n argumentRoots: arguments_.map((argument) => rootIdentifier(argument)),\n });\n }\n }\n }\n}\n\nfunction markMutationThroughRoot(fn: FunctionRecord, root: string | null): boolean {\n if (!root) return false;\n const parameterOrigin = fn.parameterOrigins.get(root);\n if (parameterOrigin !== undefined) {\n if (parameterOrigin === -1) {\n if (fn.mutatesReceiver) return false;\n fn.mutatesReceiver = true;\n return true;\n }\n if (fn.mutatedParameterIndexes.has(parameterOrigin)) return false;\n fn.mutatedParameterIndexes.add(parameterOrigin);\n return true;\n }\n\n if (fn.ownedRoots.has(root)) return false;\n if (fn.externalRoots.has(root) || !fn.localNames.has(root)) {\n if (fn.directEffect) return false;\n fn.directEffect = true;\n return true;\n }\n if (fn.localNames.has(root)) return false;\n return false;\n}\n\nfunction propagateLocalMutationEffects(functions: FunctionRecord[]): void {\n const byId = new Map(functions.map((fn) => [fn.id, fn] as const));\n let changed = true;\n while (changed) {\n changed = false;\n for (const fn of functions) {\n for (const call of fn.mutationCalls) {\n const target = byId.get(call.targetId);\n if (!target) continue;\n if (target.mutatesReceiver && markMutationThroughRoot(fn, call.receiverRoot)) changed = true;\n for (const index of target.mutatedParameterIndexes) {\n if (markMutationThroughRoot(fn, call.argumentRoots[index] ?? null)) changed = true;\n }\n }\n }\n }\n}\n\nfunction mutationOriginForRoot(fn: FunctionRecord, root: string | null): CachedMutationOrigin | null {\n if (!root) return null;\n const parameterOrigin = fn.parameterOrigins.get(root);\n if (parameterOrigin === -1) return { kind: \"receiver\" };\n if (parameterOrigin !== undefined) return { kind: \"parameter\", index: parameterOrigin };\n if (fn.ownedRoots.has(root) || fn.localNames.has(root)) return { kind: \"local\" };\n if (fn.externalRoots.has(root) || !fn.localNames.has(root)) return { kind: \"external\" };\n return null;\n}\n\nfunction cachedMutationCalls(fn: FunctionRecord): CachedMutationCall[] {\n return fn.mutationCalls.map((call) => ({\n targetId: call.targetId,\n receiverOrigin: mutationOriginForRoot(fn, call.receiverRoot),\n argumentOrigins: call.argumentRoots.map((root) => mutationOriginForRoot(fn, root)),\n }));\n}\n\nfunction applyCachedMutationOrigin(fn: CachedSourceEffectFunction, origin: CachedMutationOrigin | null): boolean {\n if (!origin || origin.kind === \"local\") return false;\n if (origin.kind === \"external\") {\n if (fn.directEffect) return false;\n fn.directEffect = true;\n return true;\n }\n if (origin.kind === \"receiver\") {\n if (fn.mutatesReceiver) return false;\n fn.mutatesReceiver = true;\n return true;\n }\n if (fn.mutatedParameterIndexes.includes(origin.index)) return false;\n fn.mutatedParameterIndexes.push(origin.index);\n fn.mutatedParameterIndexes.sort((a, b) => a - b);\n return true;\n}\n\nfunction propagateMutationEffects(functions: CachedSourceEffectFunction[]): void {\n const byId = new Map(functions.map((fn) => [fn.id, fn] as const));\n let changed = true;\n while (changed) {\n changed = false;\n for (const fn of functions) {\n for (const call of fn.mutationCalls) {\n const target = byId.get(call.targetId);\n if (!target) continue;\n if (target.mutatesReceiver && applyCachedMutationOrigin(fn, call.receiverOrigin)) changed = true;\n for (const index of target.mutatedParameterIndexes) {\n if (applyCachedMutationOrigin(fn, call.argumentOrigins[index] ?? null)) changed = true;\n }\n }\n }\n }\n}\n\nexport async function indexEffectModuleForWorker(\n input: EffectWorkerIndexInput,\n moduleAliases: Map<string, string>,\n): Promise<{ indexed: IndexedEffectWorkerModule; state: EffectWorkerState; tree: SyntaxTree }> {\n const tree = await parseLuau(input.source);\n const imports = topLevelImports(tree.rootNode, moduleAliases);\n\n const record: ParsedRecord = {\n id: input.id,\n keys: input.keys,\n source: input.source,\n tree,\n exportName: topLevelReturnName(tree.rootNode),\n imports,\n };\n const functions = topLevelFunctionRecords(record);\n const instanceFactories: string[] = [];\n for (const fn of functions) {\n if (fn.memberName && returnedFactoryMember(fn, record.exportName)) instanceFactories.push(fn.memberName);\n }\n const exportedFunctionId = functions.find((fn) => fn.exported && !fn.memberName)?.id;\n\n return {\n indexed: {\n id: input.id,\n relativePath: input.relativePath,\n importedModuleIds: [...new Set(imports.values())].sort(),\n instanceFactories: instanceFactories.sort(),\n exportedFunctionId,\n },\n state: { relativePath: input.relativePath, source: input.source, record, functions },\n tree,\n };\n}\n\nexport function analyzeEffectModuleForWorker(\n state: EffectWorkerState,\n moduleSummaries: Map<string, SourceEffectModuleSummary>,\n exportedFunctions: Map<string, string>,\n): AnalyzedEffectWorkerModule {\n const localFunctions = new Map<string, string>();\n const memberFunctions = new Map<string, string>();\n for (const fn of state.functions) {\n if (fn.localName) localFunctions.set(fn.localName, fn.id);\n if (fn.memberName) memberFunctions.set(fn.memberName, fn.id);\n }\n const moduleInstances = moduleLevelInstanceAliases(state.record, moduleSummaries);\n for (const fn of state.functions) {\n analyzeFunction(fn, state.record, localFunctions, memberFunctions, moduleSummaries, moduleInstances, exportedFunctions);\n }\n propagateLocalMutationEffects(state.functions);\n return {\n id: state.record.id,\n functions: state.functions.map((fn) => ({\n id: fn.id,\n moduleId: fn.moduleId,\n localName: fn.localName,\n memberName: fn.memberName,\n exported: fn.exported,\n directEffect: fn.directEffect,\n mutatesReceiver: fn.mutatesReceiver,\n mutatedParameterIndexes: [...fn.mutatedParameterIndexes].sort((a, b) => a - b),\n dependencies: [...fn.dependencies].sort(),\n mutationCalls: cachedMutationCalls(fn),\n })),\n };\n}\n\nexport async function buildProjectSourceEffects(\n root: string,\n candidates: ScanFileInput[],\n parseCache?: Map<string, ProjectEffectParseCacheEntry>,\n onProgress?: (progress: ProjectEffectsProgress) => void,\n fileHashes: Readonly<Record<string, string>> = {},\n cachedModules: Readonly<Record<string, CachedSourceEffectModule>> = {},\n workerPool?: AnalysisWorkerPool,\n): Promise<ProjectSourceEffectsBuildResult> {\n interface CandidateIdentity extends ModuleIdentity {\n relativePath: string;\n candidate: ScanFileInput;\n hash: string;\n }\n\n const identities: CandidateIdentity[] = [];\n for (const candidate of candidates) {\n const relativePath = normalizeRelative(candidate.relativePath ?? path.relative(root, candidate.absolutePath));\n const id = relativePath.toLowerCase();\n identities.push({\n id,\n keys: moduleKeys(relativePath),\n relativePath,\n candidate,\n hash: fileHashes[relativePath] ?? \"\",\n });\n }\n\n const moduleIdFeatures = new Map(identities.map((record) => [record.id, record.id] as const));\n const moduleAliases = buildUniqueFeatureAliases(identities, moduleIdFeatures);\n const currentIds = new Set(identities.map((identity) => identity.id));\n const cachedIds = new Set(Object.values(cachedModules).map((module) => module.id));\n const sameFileSet = currentIds.size === cachedIds.size && [...currentIds].every((id) => cachedIds.has(id));\n\n const dirtyIds = new Set<string>();\n if (!sameFileSet) {\n for (const identity of identities) dirtyIds.add(identity.id);\n } else {\n for (const identity of identities) {\n const cached = cachedModules[identity.relativePath];\n if (!cached || cached.hash !== identity.hash) dirtyIds.add(identity.id);\n }\n\n // A changed module can alter whether one of its members is an instance\n // factory. Re-analyze direct importers so instance-method dependencies are\n // refreshed, while all other unchanged modules keep their cached graph.\n if (dirtyIds.size > 0) {\n for (const module of Object.values(cachedModules)) {\n if (module.importedModuleIds.some((moduleId) => dirtyIds.has(moduleId))) dirtyIds.add(module.id);\n }\n }\n }\n\n const cachedFunctionStates = new Map<string, CachedSourceEffectFunction[]>();\n const analyzedFunctionStatesByModule = new Map<string, CachedSourceEffectFunction[]>();\n const importedModuleIdsByModule = new Map<string, string[]>();\n const summariesByModuleId = new Map<string, SourceEffectModuleSummary>();\n const exportedFunctions = new Map<string, string>();\n\n if (workerPool && dirtyIds.size >= 16) {\n const workerInputs: EffectWorkerIndexInput[] = [];\n for (const identity of identities) {\n if (!dirtyIds.has(identity.id)) continue;\n const { candidate } = identity;\n if (candidate.source === undefined && !fs.existsSync(candidate.absolutePath)) continue;\n workerInputs.push({\n id: identity.id,\n keys: identity.keys,\n relativePath: identity.relativePath,\n source: candidate.source ?? fs.readFileSync(candidate.absolutePath, \"utf8\"),\n });\n }\n\n let parsedCount = identities.length - workerInputs.length;\n onProgress?.({ phase: \"parse\", current: parsedCount, total: candidates.length });\n const indexedModules = await workerPool.indexEffectModules(workerInputs, moduleAliases, (count, file) => {\n parsedCount += count;\n onProgress?.({ phase: \"parse\", current: Math.min(parsedCount, candidates.length), total: candidates.length, file });\n });\n onProgress?.({ phase: \"parse\", current: candidates.length, total: candidates.length });\n\n const indexedById = new Map(indexedModules.map((module) => [module.id, module] as const));\n const functionIndexTotal = Math.max(1, identities.length * 2);\n onProgress?.({ phase: \"index-functions\", current: 0, total: functionIndexTotal });\n\n for (let identityIndex = 0; identityIndex < identities.length; identityIndex += 1) {\n const identity = identities[identityIndex];\n const indexed = indexedById.get(identity.id);\n if (indexed) {\n importedModuleIdsByModule.set(identity.id, indexed.importedModuleIds);\n summariesByModuleId.set(identity.id, {\n effectfulMembers: new Set<string>(),\n effectfulExport: false,\n mutatingMembers: new Set<string>(),\n mutatingExportParameters: new Set<number>(),\n mutatingMemberParameters: new Map<string, Set<number>>(),\n localMutatingParameters: new Map<string, Set<number>>(),\n instanceFactories: new Set(indexed.instanceFactories),\n });\n if (indexed.exportedFunctionId) exportedFunctions.set(identity.id, indexed.exportedFunctionId);\n } else {\n const cached = cachedModules[identity.relativePath];\n const functions = cached?.functions ?? [];\n cachedFunctionStates.set(identity.id, functions);\n importedModuleIdsByModule.set(identity.id, cached?.importedModuleIds ?? []);\n summariesByModuleId.set(identity.id, {\n effectfulMembers: new Set<string>(),\n effectfulExport: false,\n mutatingMembers: new Set<string>(),\n mutatingExportParameters: new Set<number>(),\n mutatingMemberParameters: new Map<string, Set<number>>(),\n localMutatingParameters: new Map<string, Set<number>>(),\n instanceFactories: new Set(cached?.instanceFactories ?? []),\n });\n const exported = functions.find((fn) => fn.exported && !fn.memberName);\n if (exported) exportedFunctions.set(identity.id, exported.id);\n }\n if ((identityIndex & 63) === 63 || identityIndex + 1 === identities.length) {\n onProgress?.({ phase: \"index-functions\", current: Math.min(functionIndexTotal, identityIndex + 1), total: functionIndexTotal });\n }\n }\n onProgress?.({ phase: \"index-functions\", current: functionIndexTotal, total: functionIndexTotal });\n\n const callAnalysisTotal = Math.max(1, indexedModules.length);\n let analyzedCount = 0;\n onProgress?.({ phase: \"analyze-calls\", current: 0, total: callAnalysisTotal });\n const analyzedModules = await workerPool.analyzeEffectModules(summariesByModuleId, exportedFunctions, (count) => {\n analyzedCount += count;\n onProgress?.({ phase: \"analyze-calls\", current: Math.min(analyzedCount, callAnalysisTotal), total: callAnalysisTotal });\n });\n for (const module of analyzedModules) analyzedFunctionStatesByModule.set(module.id, module.functions);\n onProgress?.({ phase: \"analyze-calls\", current: callAnalysisTotal, total: callAnalysisTotal });\n } else {\n const rawRecords = new Map<string, ParsedRecord>();\n onProgress?.({ phase: \"parse\", current: 0, total: candidates.length });\n for (let candidateIndex = 0; candidateIndex < identities.length; candidateIndex += 1) {\n const identity = identities[candidateIndex];\n const { candidate, relativePath } = identity;\n try {\n if (!dirtyIds.has(identity.id)) continue;\n if (candidate.source === undefined && !fs.existsSync(candidate.absolutePath)) continue;\n const source = candidate.source ?? fs.readFileSync(candidate.absolutePath, \"utf8\");\n const tree = await parseLuau(source);\n parseCache?.set(relativePath, { source, tree });\n const imports = topLevelImports(tree.rootNode, moduleAliases);\n rawRecords.set(identity.id, {\n id: identity.id,\n keys: identity.keys,\n source,\n tree,\n exportName: topLevelReturnName(tree.rootNode),\n imports,\n });\n } catch {\n // Parse diagnostics are handled by the normal scanner. An unparseable module\n // simply cannot contribute source-derived effect information.\n } finally {\n onProgress?.({ phase: \"parse\", current: candidateIndex + 1, total: candidates.length, file: relativePath });\n }\n }\n\n const functionIndexTotal = Math.max(1, identities.length * 2);\n onProgress?.({ phase: \"index-functions\", current: 0, total: functionIndexTotal });\n const functionsByModule = new Map<string, FunctionRecord[]>();\n\n for (const identity of identities) {\n const record = rawRecords.get(identity.id);\n if (record) {\n const functions = topLevelFunctionRecords(record);\n functionsByModule.set(identity.id, functions);\n importedModuleIdsByModule.set(identity.id, [...new Set(record.imports.values())].sort());\n const summary: SourceEffectModuleSummary = {\n effectfulMembers: new Set<string>(),\n effectfulExport: false,\n mutatingMembers: new Set<string>(),\n mutatingExportParameters: new Set<number>(),\n mutatingMemberParameters: new Map<string, Set<number>>(),\n localMutatingParameters: new Map<string, Set<number>>(),\n instanceFactories: new Set<string>(),\n };\n for (const fn of functions) {\n if (fn.memberName && returnedFactoryMember(fn, record.exportName)) summary.instanceFactories.add(fn.memberName);\n }\n summariesByModuleId.set(identity.id, summary);\n } else {\n const cached = cachedModules[identity.relativePath];\n cachedFunctionStates.set(identity.id, cached?.functions ?? []);\n importedModuleIdsByModule.set(identity.id, cached?.importedModuleIds ?? []);\n summariesByModuleId.set(identity.id, {\n effectfulMembers: new Set<string>(),\n effectfulExport: false,\n mutatingMembers: new Set<string>(),\n mutatingExportParameters: new Set<number>(),\n mutatingMemberParameters: new Map<string, Set<number>>(),\n localMutatingParameters: new Map<string, Set<number>>(),\n instanceFactories: new Set(cached?.instanceFactories ?? []),\n });\n }\n const indexedCount = summariesByModuleId.size;\n if ((indexedCount & 63) === 0 || indexedCount === identities.length) {\n onProgress?.({ phase: \"index-functions\", current: indexedCount, total: functionIndexTotal });\n }\n }\n\n for (let identityIndex = 0; identityIndex < identities.length; identityIndex += 1) {\n const identity = identities[identityIndex];\n const parsedFunctions = functionsByModule.get(identity.id);\n if (parsedFunctions) {\n const exported = parsedFunctions.find((fn) => fn.exported && !fn.memberName);\n if (exported) exportedFunctions.set(identity.id, exported.id);\n } else {\n const exported = (cachedFunctionStates.get(identity.id) ?? []).find((fn) => fn.exported && !fn.memberName);\n if (exported) exportedFunctions.set(identity.id, exported.id);\n }\n if ((identityIndex & 63) === 63 || identityIndex + 1 === identities.length) {\n onProgress?.({ phase: \"index-functions\", current: identities.length + identityIndex + 1, total: functionIndexTotal });\n }\n }\n\n const callAnalysisTotal = Math.max(1, rawRecords.size);\n onProgress?.({ phase: \"analyze-calls\", current: 0, total: callAnalysisTotal });\n let analyzedModuleCount = 0;\n for (const [moduleId, record] of rawRecords) {\n const localFunctions = new Map<string, string>();\n const memberFunctions = new Map<string, string>();\n const functions = functionsByModule.get(moduleId) ?? [];\n for (const fn of functions) {\n if (fn.localName) localFunctions.set(fn.localName, fn.id);\n if (fn.memberName) memberFunctions.set(fn.memberName, fn.id);\n }\n const moduleInstances = moduleLevelInstanceAliases(record, summariesByModuleId);\n for (const fn of functions) {\n analyzeFunction(fn, record, localFunctions, memberFunctions, summariesByModuleId, moduleInstances, exportedFunctions);\n }\n propagateLocalMutationEffects(functions);\n analyzedFunctionStatesByModule.set(moduleId, functions.map((fn) => ({\n id: fn.id,\n moduleId: fn.moduleId,\n localName: fn.localName,\n memberName: fn.memberName,\n exported: fn.exported,\n directEffect: fn.directEffect,\n mutatesReceiver: fn.mutatesReceiver,\n mutatedParameterIndexes: [...fn.mutatedParameterIndexes].sort((a, b) => a - b),\n dependencies: [...fn.dependencies].sort(),\n mutationCalls: cachedMutationCalls(fn),\n })));\n analyzedModuleCount += 1;\n if ((analyzedModuleCount & 31) === 0 || analyzedModuleCount === rawRecords.size) {\n onProgress?.({ phase: \"analyze-calls\", current: analyzedModuleCount, total: callAnalysisTotal });\n }\n }\n }\n\n const graphAssemblyTotal = Math.max(1, identities.length);\n onProgress?.({ phase: \"assemble-graph\", current: 0, total: graphAssemblyTotal });\n const functionStates = new Map<string, CachedSourceEffectFunction>();\n const cacheModulesResult: Record<string, CachedSourceEffectModule> = {};\n let assembledCount = 0;\n for (const identity of identities) {\n const states: CachedSourceEffectFunction[] = (analyzedFunctionStatesByModule.get(identity.id) ?? cachedFunctionStates.get(identity.id) ?? [])\n .map((fn) => ({\n ...fn,\n mutatesReceiver: fn.mutatesReceiver ?? false,\n mutatedParameterIndexes: [...(fn.mutatedParameterIndexes ?? [])],\n dependencies: [...fn.dependencies],\n mutationCalls: [...(fn.mutationCalls ?? [])],\n }));\n for (const fn of states) functionStates.set(fn.id, fn);\n const summary = summariesByModuleId.get(identity.id)!;\n cacheModulesResult[identity.relativePath] = {\n hash: identity.hash,\n id: identity.id,\n keys: identity.keys,\n importedModuleIds: importedModuleIdsByModule.get(identity.id) ?? [],\n functions: states,\n instanceFactories: [...summary.instanceFactories].sort(),\n };\n assembledCount += 1;\n if ((assembledCount & 63) === 0 || assembledCount === identities.length) {\n onProgress?.({ phase: \"assemble-graph\", current: assembledCount, total: graphAssemblyTotal });\n }\n }\n\n // Parameter/receiver mutation is conditional on what each caller passes.\n // Resolve that information across the complete project graph before seeding\n // unconditional side effects, so wrappers preserve precise parameter effects\n // instead of becoming globally impure.\n propagateMutationEffects([...functionStates.values()]);\n\n // Build a reverse dependency graph once, then propagate effectfulness only\n // through callers that can actually become affected. This avoids repeatedly\n // rescanning every function until a fixed point is reached.\n const reverseDependencies = new Map<string, string[]>();\n const functions = [...functionStates.values()];\n onProgress?.({ phase: \"resolve\", current: 0, total: functions.length });\n for (let index = 0; index < functions.length; index += 1) {\n const fn = functions[index];\n for (const dependency of fn.dependencies) {\n if (!functionStates.has(dependency)) continue;\n const dependents = reverseDependencies.get(dependency);\n if (dependents) dependents.push(fn.id);\n else reverseDependencies.set(dependency, [fn.id]);\n }\n if ((index & 127) === 127 || index + 1 === functions.length) {\n onProgress?.({ phase: \"resolve\", current: index + 1, total: functions.length });\n }\n }\n\n const effectful = new Set<string>();\n const queue: string[] = [];\n for (const fn of functions) {\n if (!fn.directEffect) continue;\n effectful.add(fn.id);\n queue.push(fn.id);\n }\n\n onProgress?.({ phase: \"propagate\", current: 0, total: Math.max(1, functions.length) });\n let queueIndex = 0;\n while (queueIndex < queue.length) {\n const effectfulId = queue[queueIndex++];\n for (const dependent of reverseDependencies.get(effectfulId) ?? []) {\n if (effectful.has(dependent)) continue;\n effectful.add(dependent);\n queue.push(dependent);\n }\n if ((queueIndex & 63) === 0 || queueIndex === queue.length) {\n onProgress?.({ phase: \"propagate\", current: Math.min(queueIndex, Math.max(1, functions.length)), total: Math.max(1, functions.length) });\n }\n }\n // The work queue may visit only the effectful subset of the graph. Explicitly\n // mark the phase complete once the queue is exhausted instead of leaving a\n // partially filled progress bar behind.\n onProgress?.({ phase: \"propagate\", current: Math.max(1, functions.length), total: Math.max(1, functions.length) });\n\n const summarizeTotal = Math.max(1, functions.length + 1);\n onProgress?.({ phase: \"summarize\", current: 0, total: summarizeTotal });\n for (const summary of summariesByModuleId.values()) {\n summary.effectfulMembers.clear();\n summary.effectfulExport = false;\n summary.mutatingMembers.clear();\n summary.mutatingExportParameters.clear();\n summary.mutatingMemberParameters.clear();\n summary.localMutatingParameters.clear();\n }\n for (let index = 0; index < functions.length; index += 1) {\n const fn = functions[index];\n const summary = summariesByModuleId.get(fn.moduleId);\n if (summary && fn.memberName && fn.mutatesReceiver) summary.mutatingMembers.add(fn.memberName);\n if (summary && fn.mutatedParameterIndexes.length > 0) {\n if (fn.exported && !fn.memberName) {\n for (const parameterIndex of fn.mutatedParameterIndexes) summary.mutatingExportParameters.add(parameterIndex);\n }\n if (fn.memberName) {\n summary.mutatingMemberParameters.set(fn.memberName, new Set(fn.mutatedParameterIndexes));\n }\n if (fn.localName) {\n summary.localMutatingParameters.set(fn.localName, new Set(fn.mutatedParameterIndexes));\n }\n }\n if (summary && effectful.has(fn.id)) {\n if (fn.memberName) summary.effectfulMembers.add(fn.memberName);\n if (fn.exported) summary.effectfulExport = true;\n }\n if ((index & 127) === 127 || index + 1 === functions.length) {\n onProgress?.({ phase: \"summarize\", current: index + 1, total: summarizeTotal });\n }\n }\n\n // Alias construction can still be noticeable on large projects, so reserve\n // the final progress unit until it is genuinely complete.\n const effects = buildUniqueFeatureAliases(identities, summariesByModuleId);\n onProgress?.({ phase: \"summarize\", current: summarizeTotal, total: summarizeTotal });\n\n return {\n effects,\n cacheModules: cacheModulesResult,\n };\n}\n\n",
47
47
  "import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport packageJson from \"../package.json\";\nimport { cacheBaseDirectory } from \"./cache\";\n\nexport const UPDATE_CHECK_INTERVAL_MS = 2 * 60 * 60 * 1000;\nconst UPDATE_REQUEST_TIMEOUT_MS = 5_000;\nconst UPDATE_CACHE_FILENAME = \"update-check.json\";\nconst CHANGELOG_URL = \"https://raw.githubusercontent.com/ColRealPro/react-luau-doctor/refs/heads/main/CHANGELOG.md\";\n\ninterface UpdateCache {\n checkedAt: number;\n latest?: string;\n}\n\ninterface ParsedVersion {\n major: number;\n minor: number;\n patch: number;\n prerelease: string[];\n}\n\nexport interface UpdateNotice {\n current: string;\n latest: string;\n}\n\nexport interface ChangelogRelease {\n version: string;\n notes: string;\n}\n\nfunction updateCacheFilename(): string {\n return path.join(cacheBaseDirectory(), UPDATE_CACHE_FILENAME);\n}\n\nfunction readUpdateCache(): UpdateCache | null {\n try {\n const parsed = JSON.parse(fs.readFileSync(updateCacheFilename(), \"utf8\")) as Partial<UpdateCache>;\n if (typeof parsed.checkedAt !== \"number\" || !Number.isFinite(parsed.checkedAt)) return null;\n if (parsed.latest !== undefined && typeof parsed.latest !== \"string\") return null;\n return {\n checkedAt: parsed.checkedAt,\n latest: parsed.latest,\n };\n } catch {\n return null;\n }\n}\n\nfunction writeUpdateCache(cache: UpdateCache): void {\n try {\n const filename = updateCacheFilename();\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n fs.writeFileSync(filename, `${JSON.stringify(cache)}\\n`);\n } catch {\n // Update checks are advisory and should never make the analyzer fail.\n }\n}\n\nfunction parseVersion(value: string): ParsedVersion | null {\n const match = /^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?(?:\\+[0-9A-Za-z.-]+)?$/.exec(value.trim());\n if (!match) return null;\n return {\n major: Number(match[1]),\n minor: Number(match[2]),\n patch: Number(match[3]),\n prerelease: match[4]?.split(\".\") ?? [],\n };\n}\n\nfunction comparePrerelease(left: string[], right: string[]): number {\n if (left.length === 0 || right.length === 0) {\n if (left.length === right.length) return 0;\n return left.length === 0 ? 1 : -1;\n }\n\n const count = Math.max(left.length, right.length);\n for (let index = 0; index < count; index += 1) {\n const leftPart = left[index];\n const rightPart = right[index];\n if (leftPart === undefined) return -1;\n if (rightPart === undefined) return 1;\n if (leftPart === rightPart) continue;\n\n const leftNumber = /^\\d+$/.test(leftPart) ? Number(leftPart) : null;\n const rightNumber = /^\\d+$/.test(rightPart) ? Number(rightPart) : null;\n if (leftNumber !== null && rightNumber !== null) return leftNumber < rightNumber ? -1 : 1;\n if (leftNumber !== null) return -1;\n if (rightNumber !== null) return 1;\n return leftPart < rightPart ? -1 : 1;\n }\n return 0;\n}\n\nexport function compareVersions(left: string, right: string): number | null {\n const a = parseVersion(left);\n const b = parseVersion(right);\n if (!a || !b) return null;\n for (const key of [\"major\", \"minor\", \"patch\"] as const) {\n if (a[key] !== b[key]) return a[key] < b[key] ? -1 : 1;\n }\n return comparePrerelease(a.prerelease, b.prerelease);\n}\n\nfunction updateRegistryUrl(): string {\n const registry = process.env.REACT_LUAU_DOCTOR_UPDATE_REGISTRY\n ?? process.env.npm_config_registry\n ?? process.env.NPM_CONFIG_REGISTRY\n ?? \"https://registry.npmjs.org/\";\n const base = registry.endsWith(\"/\") ? registry : `${registry}/`;\n return new URL(`${encodeURIComponent(packageJson.name)}/latest`, base).toString();\n}\n\nfunction changelogUrl(): string {\n return process.env.REACT_LUAU_DOCTOR_CHANGELOG_URL ?? CHANGELOG_URL;\n}\n\nasync function fetchLatestVersion(): Promise<string> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), UPDATE_REQUEST_TIMEOUT_MS);\n timer.unref?.();\n try {\n const response = await fetch(updateRegistryUrl(), {\n headers: { accept: \"application/json\" },\n signal: controller.signal,\n });\n if (!response.ok) throw new Error(`npm registry returned HTTP ${response.status}`);\n const body = await response.json() as { version?: unknown };\n if (typeof body.version !== \"string\" || compareVersions(body.version, body.version) === null) {\n throw new Error(\"npm registry returned an invalid package version\");\n }\n return body.version;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport function changelogReleasesBetween(markdown: string, currentVersion: string, latestVersion: string): ChangelogRelease[] {\n const releases: ChangelogRelease[] = [];\n let active: { version: string; lines: string[] } | null = null;\n\n const flush = () => {\n if (!active) return;\n const afterCurrent = compareVersions(active.version, currentVersion);\n const atOrBeforeLatest = compareVersions(active.version, latestVersion);\n if (afterCurrent !== null && atOrBeforeLatest !== null && afterCurrent > 0 && atOrBeforeLatest <= 0) {\n releases.push({ version: active.version, notes: active.lines.join(\"\\n\").trim() });\n }\n active = null;\n };\n\n for (const line of markdown.split(/\\r?\\n/)) {\n if (/^##\\s+/.test(line.trim())) {\n flush();\n const match = /^##\\s+\\[?v?(\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?)\\]?(?:\\s+-.*)?\\s*$/.exec(line.trim());\n if (match) active = { version: match[1], lines: [] };\n continue;\n }\n active?.lines.push(line);\n }\n flush();\n\n releases.sort((left, right) => compareVersions(right.version, left.version) ?? 0);\n return releases;\n}\n\nexport async function fetchChangelogReleases(currentVersion: string, latestVersion: string): Promise<ChangelogRelease[]> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), UPDATE_REQUEST_TIMEOUT_MS);\n timer.unref?.();\n try {\n const response = await fetch(changelogUrl(), {\n headers: { accept: \"text/markdown, text/plain;q=0.9, */*;q=0.1\" },\n signal: controller.signal,\n });\n if (!response.ok) throw new Error(`changelog returned HTTP ${response.status}`);\n return changelogReleasesBetween(await response.text(), currentVersion, latestVersion);\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport function updateCacheIsStale(now = Date.now()): boolean {\n const cache = readUpdateCache();\n return !cache || now - cache.checkedAt >= UPDATE_CHECK_INTERVAL_MS;\n}\n\nexport async function refreshUpdateCache(options: { silent?: boolean; now?: number } = {}): Promise<string | null> {\n const now = options.now ?? Date.now();\n try {\n const latest = await fetchLatestVersion();\n writeUpdateCache({ checkedAt: now, latest });\n return latest;\n } catch (error) {\n const previous = readUpdateCache();\n writeUpdateCache({ checkedAt: now, latest: previous?.latest });\n if (options.silent) return null;\n throw error;\n }\n}\n\nexport function startBackgroundUpdateRefresh(): void {\n if (!updateCacheIsStale()) return;\n const script = process.argv[1];\n if (!script) return;\n try {\n const child = spawn(process.execPath, [script, \"__update-cache\"], {\n detached: true,\n stdio: \"ignore\",\n windowsHide: true,\n env: process.env,\n });\n child.unref();\n } catch {\n // A failed advisory update check should never affect a scan.\n }\n}\n\nexport function getCachedUpdateNotice(currentVersion: string): UpdateNotice | null {\n const cache = readUpdateCache();\n if (!cache?.latest) return null;\n const comparison = compareVersions(cache.latest, currentVersion);\n if (comparison === null || comparison <= 0) return null;\n return { current: currentVersion, latest: cache.latest };\n}\n\nexport async function checkForUpdatesNow(currentVersion: string): Promise<{ latest: string; updateAvailable: boolean }> {\n const latest = await refreshUpdateCache();\n if (!latest) throw new Error(\"Could not check npm for updates\");\n const comparison = compareVersions(latest, currentVersion);\n if (comparison === null) throw new Error(`Could not compare installed version ${currentVersion} with ${latest}`);\n return { latest, updateAvailable: comparison > 0 };\n}\n",
48
48
  "import { spawnSync } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\nimport packageJson from \"../package.json\";\n\nexport interface UpdateInstallCommand {\n manager: \"bun\" | \"npm\";\n command: string;\n args: string[];\n display: string;\n}\n\nfunction normalizedPath(filename: string): string {\n return filename.replaceAll(\"\\\\\", \"/\");\n}\n\nexport function updateInstallCommandForPath(filename: string): UpdateInstallCommand | null {\n const normalized = normalizedPath(filename);\n const spec = `${packageJson.name}@latest`;\n\n if (normalized.includes(\"/.bun/install/global/node_modules/\")) {\n return {\n manager: \"bun\",\n command: \"bun\",\n args: [\"add\", \"-g\", spec],\n display: `bun add -g ${spec}`,\n };\n }\n\n if (normalized.includes(\"/.bun/install/cache/\") || normalized.includes(\"/.npm/_npx/\")) return null;\n\n if (normalized.includes(\"/node_modules/\")) {\n return {\n manager: \"npm\",\n command: \"npm\",\n args: [\"install\", \"-g\", spec],\n display: `npm install -g ${spec}`,\n };\n }\n\n return null;\n}\n\nexport function currentUpdateInstallCommand(): UpdateInstallCommand | null {\n return updateInstallCommandForPath(fileURLToPath(import.meta.url));\n}\n\nexport function installLatestVersion(command: UpdateInstallCommand): void {\n const result = spawnSync(command.command, command.args, {\n stdio: \"inherit\",\n windowsHide: true,\n });\n if (result.error) throw result.error;\n if (result.status !== 0) throw new Error(`${command.display} exited with code ${result.status ?? \"unknown\"}`);\n}\n",
49
49
  "import type { FixPreview } from \"./types\";\n\nconst examples: Record<string, FixPreview> = {\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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 \"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 return example ? { ...example, kind: example.kind ?? \"pattern\" } : undefined;\n}\n",
50
50
  "import type { ScanProgress } from \"./types\";\n\nconst ANSI = {\n reset: \"\\u001b[0m\",\n dim: \"\\u001b[2m\",\n magenta: \"\\u001b[35m\",\n green: \"\\u001b[32m\",\n};\n\nfunction paint(value: string, code: string): string {\n return `${code}${value}${ANSI.reset}`;\n}\n\nfunction visibleLength(value: string): number {\n return value.replace(/\\u001b\\[[0-9;]*m/g, \"\").length;\n}\n\nfunction truncateMiddle(value: string, width: number): string {\n if (width <= 0) return \"\";\n if (value.length <= width) return value;\n if (width <= 3) return value.slice(0, width);\n const left = Math.ceil((width - 1) / 2);\n const right = Math.floor((width - 1) / 2);\n return `${value.slice(0, left)}…${value.slice(value.length - right)}`;\n}\n\nexport function formatScanProgress(progress: ScanProgress, terminalWidth = 120, colorized = false): string {\n const total = Math.max(0, progress.total);\n const current = Math.max(0, Math.min(progress.current, total || progress.current));\n const ratio = total === 0 ? 1 : current / total;\n const percent = Math.round(ratio * 100);\n const counter = `${current}/${total}`;\n const prefix = `${progress.label ?? `Scanning${progress.phase ? ` ${progress.phase}` : \"\"}`} `;\n const suffix = `${percent.toString().padStart(3)}% ${counter}`;\n const fileBudget = Math.max(0, terminalWidth - prefix.length - suffix.length - 38);\n const file = progress.file && fileBudget >= 8 ? ` ${truncateMiddle(progress.file, fileBudget)}` : \"\";\n const barWidth = Math.max(12, Math.min(28, terminalWidth - prefix.length - suffix.length - file.length - 8));\n const filled = Math.max(0, Math.min(barWidth, Math.round(ratio * barWidth)));\n const active = \"█\".repeat(filled);\n const remaining = \"░\".repeat(barWidth - filled);\n const coloredActive = active ? paint(active, progress.partial ? ANSI.magenta : current >= total ? ANSI.green : ANSI.magenta) : \"\";\n const coloredRemaining = remaining ? paint(remaining, ANSI.dim) : \"\";\n const bar = colorized ? `${coloredActive}${coloredRemaining}` : `${active}${remaining}`;\n const line = `${prefix}[${bar}] ${suffix}${file}`;\n return visibleLength(line) <= terminalWidth ? line : `${prefix}[${bar}] ${suffix}`;\n}\n\ninterface ProgressStream {\n isTTY?: boolean;\n columns?: number;\n write(value: string): unknown;\n}\n\nexport interface ProgressRenderer {\n update(progress: ScanProgress): void;\n clear(): void;\n}\n\nexport function createProgressRenderer(options: {\n stream?: ProgressStream;\n enabled?: boolean;\n colorized?: boolean;\n throttleMs?: number;\n} = {}): ProgressRenderer {\n const stream = options.stream ?? process.stdout;\n const enabled = options.enabled ?? Boolean(stream.isTTY && !process.env.CI);\n const colorized = options.colorized ?? false;\n const throttleMs = options.throttleMs ?? 40;\n let lastWriteAt = 0;\n let lastProgress: ScanProgress | null = null;\n let visible = false;\n\n function render(progress: ScanProgress, force = false): void {\n if (!enabled) return;\n lastProgress = progress;\n const now = performance.now();\n if (!force && progress.current < progress.total && now - lastWriteAt < throttleMs) return;\n lastWriteAt = now;\n const line = formatScanProgress(progress, stream.columns || 120, colorized);\n stream.write(`\\r\\u001b[2K${line}`);\n visible = true;\n }\n\n return {\n update(progress) {\n const phaseChanged = lastProgress?.phase !== progress.phase || lastProgress?.label !== progress.label;\n render(progress, phaseChanged || progress.current >= progress.total || Boolean(progress.partial));\n },\n clear() {\n if (!enabled || !visible) return;\n stream.write(\"\\r\\u001b[2K\");\n visible = false;\n },\n };\n}\n"
51
51
  ],
52
- "mappings": "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",
53
- "debugId": "569DB065E837196F64756E2164756E21",
52
+ "mappings": "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",
53
+ "debugId": "C71A438CE8D868EF64756E2164756E21",
54
54
  "names": []
55
55
  }